Skip to content

Sections & checks

A check is one thing to try — its steps, what should happen, and where it stands on each platform. Sections group them; their ref is the prefix every check in them is numbered by.

List sections

GET/api/v1/apps/:id/sectionsKey role viewer or above

An app's sections in runbook order, each with its own coverage.

curl "https://qarunbook.com/api/v1/apps/mfq3k2p9x1a/sections" \
  -H "Authorization: Bearer $QARUNBOOK_KEY"
Response · 200
{
  "data": [
    {
      "id": "mfq3k2q01aa",
      "ref": "AUTH",
      "title": "Sign in and accounts",
      "checks": 9,
      "summary": {
        "passed": 28,
        "failed": 2,
        "needs_retest": 1,
        "untested": 5,
        "not_applicable": 0,
        "percent_complete": 83
      }
    }
  ]
}

List checks

GET/api/v1/apps/:id/checksKey role viewer or above

Checks in runbook order — section by section — with each platform's status. Paged; see Pagination.

Query parameters

sectionstring
Only this section — its id, ref (AUTH) or title.
statusstring
all (default), failing — failed on any platform, passed — passed somewhere and failed nowhere, retest — a fix is waiting to be confirmed, untested — not yet tried somewhere.
limitinteger
1–200, default 50.
cursorstring
From the previous page's next_cursor.
curl "https://qarunbook.com/api/v1/apps/mfq3k2p9x1a/checks?status=failing" \
  -H "Authorization: Bearer $QARUNBOOK_KEY"
Response · 200
{
  "data": [
    {
      "id": "mfq3k2qa7bc",
      "ref": "AUTH-01",
      "title": "Sign in with email and password",
      "section": {
        "id": "mfq3k2q01aa",
        "ref": "AUTH",
        "title": "Sign in and accounts"
      },
      "status": {
        "WL": "failed",
        "WM": "passed",
        "AND": "passed",
        "IOS": "retest"
      },
      "open_issues": 1
    }
  ],
  "next_cursor": null
}

Get a check

GET/api/v1/checks/:idKey role viewer or above

One check in full: its wording, the result on each platform and who recorded it, and every issue raised against it, newest first.

Scripts usually hold a ref rather than an id. Pass app and the path is read as a ref within that app — /checks/AUTH-01?app=Checkout.

Path and query

idstringrequired
The check's id — or, with app, its ref.
appstring
App id or name. Makes id a ref.
refstring
A ref, when you would rather keep the path fixed: /checks/lookup?app=Checkout&ref=AUTH-01.
curl "https://qarunbook.com/api/v1/checks/AUTH-01?app=Checkout" \
  -H "Authorization: Bearer $QARUNBOOK_KEY"
Response · 200
{
  "data": {
    "id": "mfq3k2qa7bc",
    "ref": "AUTH-01",
    "title": "Sign in with email and password",
    "section": {
      "id": "mfq3k2q01aa",
      "ref": "AUTH",
      "title": "Sign in and accounts"
    },
    "status": {
      "WL": "failed",
      "WM": "passed",
      "AND": "passed",
      "IOS": "retest"
    },
    "open_issues": 1,
    "app": {
      "id": "mfq3k2p9x1a",
      "name": "Checkout"
    },
    "preconditions": "A verified account exists.",
    "steps": "1. Open the sign-in page\n2. Enter the email and password\n3. Press Sign in",
    "expected": "Lands on the dashboard, signed in, within two seconds.",
    "not_applicable_on": [],
    "results": {
      "WL": {
        "status": "failed",
        "recorded_by": "Joy",
        "recorded_at": "2026-09-26T09:12:40.000Z"
      },
      "WM": {
        "status": "passed",
        "recorded_by": "Joy",
        "recorded_at": "2026-09-26T09:14:02.000Z"
      },
      "AND": {
        "status": "passed",
        "recorded_by": "Destiny",
        "recorded_at": "2026-09-25T15:40:11.000Z"
      },
      "IOS": {
        "status": "retest",
        "recorded_by": "Destiny",
        "recorded_at": "2026-09-24T11:03:55.000Z"
      }
    },
    "issues": [
      {
        "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": []
      }
    ]
  }
}

results.*.status is what the grid shows, so an open issue reads failed even over a recorded pass. The pass is kept underneath and comes back once the issue is fixed and the check tested again.

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