Skip to content

Issues

An issue is something wrong with a check on one or more platforms. While it is open, the check reads failed there. Fixing it sends the check back for a retest — never straight to a pass.

Raise an issue

POST/api/v1/issuesKey role tester or above

Raise 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.
prioritystring
Live apps only: urgent, high, medium or low.
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 answers 400.
reporterobject
The person outside your team who reported it: name (required) and email. 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": "ada@example.com"
    }
  }'
Response · 201
{
  "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": "ada@example.com"
    },
    "via": "api",
    "edited_by": null,
    "edited_at": null,
    "fixed_by": null,
    "fixed_at": null,
    "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_platforms also says.
statusstring
open or fixed.
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 — name and, if given, email.
viastring | null
Where it was raised. api for issues raised here.
section_idstring | null
Live apps: the section an issue with no check belongs to, if any. check is null for such an issue.
prioritystring | null
Live apps: urgent, high, medium or low.
assigneesstring[]
Live apps: the names of the people on it.
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.
attachmentsobject[]
Screenshots and recordings attached in the app, by name and kind. Open the issue in qarunbook to view them.

List issues

GET/api/v1/issuesKey role viewer or above

Newest 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.
statusstring
open (default), fixed or all.
sortstring
raised_at (default) or fixed_at — most recently fixed first, for watching fixes land. Fixed issues only: it implies status=fixed, and any other status answers 400.
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"
Response · 200
{
  "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": "ada@example.com"
      },
      "via": "api",
      "edited_by": null,
      "edited_at": null,
      "fixed_by": null,
      "fixed_at": null,
      "attachments": []
    }
  ],
  "next_cursor": null
}

Get an issue

GET/api/v1/issues/:idKey role viewer or above
curl "https://qarunbook.com/api/v1/issues/mfr8w1c4d2e" \
  -H "Authorization: Bearer $QARUNBOOK_KEY"
Response · 200
{
  "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": "ada@example.com"
    },
    "via": "api",
    "edited_by": null,
    "edited_at": null,
    "fixed_by": null,
    "fixed_at": null,
    "attachments": []
  }
}

Update an issue

PATCH/api/v1/issues/:idKey role tester or above

Reword 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"]
  }'
Response · 200
{
  "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": "ada@example.com"
    },
    "via": "api",
    "edited_by": "Zendesk via API",
    "edited_at": "2026-09-27T16:20:05.113Z",
    "fixed_by": null,
    "fixed_at": null,
    "attachments": []
  }
}

Mark fixed or reopen

POST/api/v1/issues/:id/fixKey role admin

Mark 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"
Response · 200
{
  "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": "ada@example.com"
    },
    "via": "api",
    "edited_by": null,
    "edited_at": null,
    "fixed_by": "Release bot via API",
    "fixed_at": "2026-09-28T08:00:12.904Z",
    "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.

Something unclear or missing? Write to hello@qarunbook.com.