Raise an issue
/api/v1/issuesKey role tester or aboveRaise an issue against a check. This is what a support integration does when a customer reports a bug: the check fails on the platforms you name, in front of everyone working the release, until the fix is in and confirmed.
Body
appstringrequired- App id or name.
checkstringrequired- The check's ref (
AUTH-01), its id, or its exact title. Optional on an app in live (bug-tracking) mode, where an issue can sit on a section or on nothing. sectionstring- Section id, ref or title. With a check: needed only when a title matches checks in more than one section — otherwise the answer is
409 ambiguous_check. Without one, on a live app: the section the issue belongs to. prioritystringurgent,high,mediumorlow. Any app, testing or live.textstringrequired- What went wrong, up to 4,000 characters. Include the exact error text when there is one.
platformsstring[]- Platform codes affected, e.g.
["WL", "IOS"]. Leave out for every platform. An unknown code answers400. reporterobject- The person outside your team who reported it:
name(required) andemail. Stored with the issue; the runbook shows Ada Lovelace via API.
curl -X POST "https://qarunbook.com/api/v1/issues" \
-H "Authorization: Bearer $QARUNBOOK_KEY" \
-H "Content-Type: application/json" \
-d '{
"app": "Checkout",
"check": "AUTH-01",
"text": "The Sign in button does nothing on Safari 18. No error, no network request.",
"platforms": ["WL"],
"reporter": {
"name": "Ada Lovelace",
"email": "[email protected]"
}
}'{
"data": {
"id": "mfr8w1c4d2e",
"app": {
"id": "mfq3k2p9x1a",
"name": "Checkout"
},
"check": {
"id": "mfq3k2qa7bc",
"ref": "AUTH-01",
"title": "Sign in with email and password"
},
"text": "The Sign in button does nothing on Safari 18. No error, no network request.",
"platforms": ["WL"],
"all_platforms": false,
"status": "open",
"raised_by": "Ada Lovelace via API",
"raised_at": "2026-09-27T16:02:11.482Z",
"reporter": {
"name": "Ada Lovelace",
"email": "[email protected]"
},
"via": "api",
"edited_by": null,
"edited_at": null,
"fixed_by": null,
"fixed_at": null,
"fixed_on": [],
"still_open_on": [],
"attachments": []
}
}Issue fields
idstring- The issue's id.
checkobject- The check it is raised against —
id,ref,title. platformsstring[]- The platforms it affects. Empty means every platform, which
all_platformsalso says. statusstringopenorfixed.fixed_onobject[]- Platforms fixed one at a time, when the app is built from several GitHub repositories: each
platform,fixed_by,fixed_atand thepull_request(number,url,repo). Empty for an issue fixed in one go. still_open_onstring[]- While an issue is fixed on some platforms and not others, the ones still open.
statusstaysopenuntil they are fixed too. raised_bystring- The name the runbook shows. For an issue raised through the API,
<reporter> via API, or the key's name. reporterobject | null- The external reporter sent when it was raised —
nameand, if given,email. viastring | null- Where it was raised.
apifor issues raised here,slackfor ones raised from Slack,teamsfor ones raised from Microsoft Teams,sentryfor ones raised from a Sentry error,webhookfor ones sent to an app's incoming webhook. webhookobject | null- For an issue from the incoming webhook: the tool it came from (
source), that tool'sexternal_id, and alinkback to it. section_idstring | null- Live apps: the section an issue with no check belongs to, if any.
checkisnullfor such an issue. prioritystring | nullurgent,high,mediumorlow, in either mode;nullwhen nobody set one.assigneesstring[]- The names of the people on it, in either mode. They are assigned in the app.
confirmed_fixed_bystring | null- Live apps: who checked the fix and confirmed it holds — the retest for an issue with no check.
confirmed_fixed_atstring | null- When they did.
sentryobject | null- For an issue raised from Sentry, the Sentry issue —
short_idandurl. See Turn Sentry errors into bugs. attachmentsobject[]- Screenshots and recordings attached in the app, by
nameandkind. Open the issue in qarunbook to view them.
List issues
/api/v1/issuesKey role viewer or aboveNewest first. Paged — see Pagination.
Query parameters
appstring- App id or name. Leave out for every app this key can reach.
checkstring- Only issues on this check — its id, or its ref together with
app. statusstringopen(default),fixedorall.sortstringraised_at(default) orfixed_at— most recently fixed first, for watching fixes land. Fixed issues only: it impliesstatus=fixed, and any other status answers400.limitinteger- 1–200, default 50.
cursorstring- From the previous page's
next_cursor.
curl "https://qarunbook.com/api/v1/issues?app=Checkout&status=open" \
-H "Authorization: Bearer $QARUNBOOK_KEY"{
"data": [
{
"id": "mfr8w1c4d2e",
"app": {
"id": "mfq3k2p9x1a",
"name": "Checkout"
},
"check": {
"id": "mfq3k2qa7bc",
"ref": "AUTH-01",
"title": "Sign in with email and password"
},
"text": "The Sign in button does nothing on Safari 18. No error, no network request.",
"platforms": ["WL"],
"all_platforms": false,
"status": "open",
"raised_by": "Ada Lovelace via API",
"raised_at": "2026-09-27T16:02:11.482Z",
"reporter": {
"name": "Ada Lovelace",
"email": "[email protected]"
},
"via": "api",
"edited_by": null,
"edited_at": null,
"fixed_by": null,
"fixed_at": null,
"fixed_on": [],
"still_open_on": [],
"attachments": []
}
],
"next_cursor": null
}Get an issue
/api/v1/issues/:idKey role viewer or abovecurl "https://qarunbook.com/api/v1/issues/mfr8w1c4d2e" \
-H "Authorization: Bearer $QARUNBOOK_KEY"{
"data": {
"id": "mfr8w1c4d2e",
"app": {
"id": "mfq3k2p9x1a",
"name": "Checkout"
},
"check": {
"id": "mfq3k2qa7bc",
"ref": "AUTH-01",
"title": "Sign in with email and password"
},
"text": "The Sign in button does nothing on Safari 18. No error, no network request.",
"platforms": ["WL"],
"all_platforms": false,
"status": "open",
"raised_by": "Ada Lovelace via API",
"raised_at": "2026-09-27T16:02:11.482Z",
"reporter": {
"name": "Ada Lovelace",
"email": "[email protected]"
},
"via": "api",
"edited_by": null,
"edited_at": null,
"fixed_by": null,
"fixed_at": null,
"fixed_on": [],
"still_open_on": [],
"attachments": []
}
}Update an issue
/api/v1/issues/:idKey role tester or aboveReword an issue, or change the platforms it affects. The original reporter stays on it; the key is recorded as the editor, and the wording it replaced is kept in the issue's history in the app.
Body — at least one
textstring- The new wording.
platformsstring[]- Replaces the list. Send
[]for every platform.
curl -X PATCH "https://qarunbook.com/api/v1/issues/mfr8w1c4d2e" \
-H "Authorization: Bearer $QARUNBOOK_KEY" \
-H "Content-Type: application/json" \
-d '{
"platforms": ["WL", "WM"]
}'{
"data": {
"id": "mfr8w1c4d2e",
"app": {
"id": "mfq3k2p9x1a",
"name": "Checkout"
},
"check": {
"id": "mfq3k2qa7bc",
"ref": "AUTH-01",
"title": "Sign in with email and password"
},
"text": "The Sign in button does nothing on Safari 18. No error, no network request.",
"platforms": ["WL", "WM"],
"all_platforms": false,
"status": "open",
"raised_by": "Ada Lovelace via API",
"raised_at": "2026-09-27T16:02:11.482Z",
"reporter": {
"name": "Ada Lovelace",
"email": "[email protected]"
},
"via": "api",
"edited_by": "Zendesk via API",
"edited_at": "2026-09-27T16:20:05.113Z",
"fixed_by": null,
"fixed_at": null,
"fixed_on": [],
"still_open_on": [],
"attachments": []
}
}Mark fixed or reopen
/api/v1/issues/:id/fixKey role adminMark an issue fixed — with no body, or { "fixed": true }. Send { "fixed": false } to reopen it, which fails the check again on the platforms it affects.
curl -X POST "https://qarunbook.com/api/v1/issues/mfr8w1c4d2e/fix" \
-H "Authorization: Bearer $QARUNBOOK_KEY"{
"data": {
"id": "mfr8w1c4d2e",
"app": {
"id": "mfq3k2p9x1a",
"name": "Checkout"
},
"check": {
"id": "mfq3k2qa7bc",
"ref": "AUTH-01",
"title": "Sign in with email and password"
},
"text": "The Sign in button does nothing on Safari 18. No error, no network request.",
"platforms": ["WL"],
"all_platforms": false,
"status": "fixed",
"raised_by": "Ada Lovelace via API",
"raised_at": "2026-09-27T16:02:11.482Z",
"reporter": {
"name": "Ada Lovelace",
"email": "[email protected]"
},
"via": "api",
"edited_by": null,
"edited_at": null,
"fixed_by": "Release bot via API",
"fixed_at": "2026-09-28T08:00:12.904Z",
"fixed_on": [],
"still_open_on": [],
"attachments": []
}
}Fixed is not passed
The platforms it affected now read retest. They go back to passed only when somebody — a tester, or your CI through Results — records a result after the fix.