curl --request GET \
--url https://api.apsio.io/v1/projects/{projectId}/issues/{issueId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"issue": {
"id": "3f9a0c2e7d1b4a6c8e0f1a2b3c4d5e6f",
"kind": "crash",
"app_id": "<string>",
"type": "<string>",
"message": "<string>",
"occurrences": 123,
"users": 123,
"sessions": 123,
"first_seen": "2026-10-04T10:15:00.431000000Z",
"last_seen": "2026-10-04T10:15:00.431000000Z",
"releases": [
"<string>"
],
"symbolicated": true,
"grouping": {
"version": 123,
"reason": "in_app_frames"
}
},
"latest": {
"occurrence_id": "<string>",
"ts": "2026-10-04T10:15:00.431000000Z",
"session_id": "<string>",
"installation_id": "<string>",
"release": "<string>",
"build": "<string>",
"os_name": "<string>",
"os_version": "<string>",
"device_model": "<string>",
"type": "<string>",
"message": "<string>",
"symbolicated": true,
"grouping": {
"version": 123,
"reason": "in_app_frames"
},
"missing_debug_ids": [
"<string>"
],
"frames": [
{
"function": "<string>",
"file": "<string>",
"line": 123,
"image": "<string>",
"address": "0x100a2c3d4",
"in_app": true
}
],
"raw_frames": [
{
"index": 123,
"image": "<string>",
"address": "<string>",
"offset": 123,
"raw": "<string>"
}
],
"images": [
{}
]
},
"breadcrumbs": [
{
"ts": "2026-10-04T10:15:00.431000000Z",
"category": "<string>",
"message": "<string>",
"attributes": {}
}
],
"releases": [
{
"app_id": "<string>",
"release": "<string>",
"occurrences": 123,
"users": 123,
"first_seen": "2026-10-04T10:15:00.431000000Z",
"last_seen": "2026-10-04T10:15:00.431000000Z"
}
],
"devices": [
{
"device_model": "<string>",
"os_name": "<string>",
"os_version": "<string>",
"occurrences": 123,
"users": 123
}
]
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}Get an issue
An issue with its latest occurrence (symbolicated stack, raw stack and binary images), the breadcrumbs before it in the same session, and the releases and devices it affects, over the time range (default: the last 90 days).
curl --request GET \
--url https://api.apsio.io/v1/projects/{projectId}/issues/{issueId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apsio.io/v1/projects/{projectId}/issues/{issueId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"issue": {
"id": "3f9a0c2e7d1b4a6c8e0f1a2b3c4d5e6f",
"kind": "crash",
"app_id": "<string>",
"type": "<string>",
"message": "<string>",
"occurrences": 123,
"users": 123,
"sessions": 123,
"first_seen": "2026-10-04T10:15:00.431000000Z",
"last_seen": "2026-10-04T10:15:00.431000000Z",
"releases": [
"<string>"
],
"symbolicated": true,
"grouping": {
"version": 123,
"reason": "in_app_frames"
}
},
"latest": {
"occurrence_id": "<string>",
"ts": "2026-10-04T10:15:00.431000000Z",
"session_id": "<string>",
"installation_id": "<string>",
"release": "<string>",
"build": "<string>",
"os_name": "<string>",
"os_version": "<string>",
"device_model": "<string>",
"type": "<string>",
"message": "<string>",
"symbolicated": true,
"grouping": {
"version": 123,
"reason": "in_app_frames"
},
"missing_debug_ids": [
"<string>"
],
"frames": [
{
"function": "<string>",
"file": "<string>",
"line": 123,
"image": "<string>",
"address": "0x100a2c3d4",
"in_app": true
}
],
"raw_frames": [
{
"index": 123,
"image": "<string>",
"address": "<string>",
"offset": 123,
"raw": "<string>"
}
],
"images": [
{}
]
},
"breadcrumbs": [
{
"ts": "2026-10-04T10:15:00.431000000Z",
"category": "<string>",
"message": "<string>",
"attributes": {}
}
],
"releases": [
{
"app_id": "<string>",
"release": "<string>",
"occurrences": 123,
"users": 123,
"first_seen": "2026-10-04T10:15:00.431000000Z",
"last_seen": "2026-10-04T10:15:00.431000000Z"
}
],
"devices": [
{
"device_model": "<string>",
"os_name": "<string>",
"os_version": "<string>",
"occurrences": 123,
"users": 123
}
]
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}{
"error": {
"code": "invalid_request",
"message": "<string>"
}
}Authorizations
A project token (apsio_pt_v0...), which reads exactly one project, or an OAuth access token issued for the API, which reads what its user can. Access tokens issued for Apsio's MCP server are accepted only from the MCP server itself.
Path Parameters
^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"0192f3a4-0000-7000-8000-00000000a101"
The issue fingerprint.
^[A-Za-z0-9._:-]{1,128}$"3f9a0c2e7d1b4a6c8e0f1a2b3c4d5e6f"
Query Parameters
Start of the time range, inclusive (RFC 3339). Defaults to the range end minus the default length.
"2026-10-01T00:00:00Z"
End of the time range, exclusive (RFC 3339). Defaults to now.
"2026-10-08T00:00:00Z"
Response
The issue.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Up to 100 breadcrumbs of the latest occurrence's session at or before it, oldest first.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes