---
title: "Ask a support question"
method: POST
path: "/v1/support/runs"
tags: ["Support Assistant"]
---

# Ask a support question

`POST /v1/support/runs`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/support/runs`
- Auth: HTTP bearer

Asks the Zernio Support Assistant a question about your workspace. Each question
starts a run that answers asynchronously: this returns 202 with a `runId`, and the
answer arrives through the `support.run.completed` and `support.run.failed` webhooks.
`GET /v1/support/runs/{runId}` is the fallback. Pass `threadId` to continue an earlier
conversation, and `context` to point the assistant at a post, account, profile or a failed request (its `X-Request-Id`).
When the assistant finds a problem on Zernio's side it opens a support ticket with
the team (see `supportTicket` on the run) and the run ends as `needs_human`.

**Pricing.** You pay per question, once it finishes. The exact amount charged is the
run's `costUsd`.

| Question | You pay |
| --- | --- |
| Typical question | $0.10 to $0.50 |
| Most one question can cost | Its `maxCostUsd`: $0.50 to $3, $3 by default |
| Handed to the Zernio team (`needs_human`) | Charged like an answered question |
| Failed or expired | $0 |
| All questions in a UTC month | At most $100 per account |

Near its `maxCostUsd` a run stops investigating and answers with what it found so far,
so it never charges more than the cap; with nothing to answer yet it fails and costs
nothing. Charges appear as "Support API" on your invoice.

Requires an unrestricted API key, usage-based billing and a card on file. Limits per
account: 3 active runs and $100 of runs per UTC month. Send an Idempotency-Key header
to make retries safe.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `message` string, required: The question. Leading and trailing whitespace is trimmed.
  - `threadId` string: Continue this thread. The thread must have a run started by your team, and no run in progress.
  - `context` object: Ids the assistant should look at. postId, accountId and profileId must belong to your workspace (404 otherwise).
    - `postId` string
    - `accountId` string
    - `profileId` string
    - `requestId` string: The X-Request-Id of a call you want explained. The assistant reads that request's logged record. Not checked up front.
  - `maxCostUsd` number: Cost cap for this run, in USD. The run stops at the cap and bills at most this amount.

## Response `202`

Run accepted

- object
  - `runId` string, required
  - `threadId` string, required
  - `status` 'queued', required
  - `pollAfterSeconds` integer, required: Seconds to wait before the first poll.

## Other responses

- `400`: Invalid request
- `401`: Missing or invalid API key. `code` is `missing_credentials` when no Authorization header was sent and `invalid_credentials` when the key is unknown, revoked or expired.
- `402`: A card is required (code `payment_method_required`) or the last payment failed (code `payment_required`). Add or update the card in Billing.
- `403`: Code `insufficient_permissions`: the credential is not an unrestricted API key, or the user is read-only, restricted or profile-scoped.
- `404`: Code `support_thread_not_found` (`threadId`), `post_not_found`, `account_not_found` or `profile_not_found` (`context.*`).
- `409`: Code `support_run_in_progress`: the thread already has a run queued or running, so poll it first. Code `billing_setup_incomplete`: no billing customer to attach a card to, contact support. Also returned while a request with the same Idempotency-Key is still processing.
- `422`: Code `usage_billing_required`: the Support Assistant needs a usage-based plan. Also returned when an Idempotency-Key is reused with a different request.
- `429`: Code `support_active_runs_limit`: 3 runs are already active, retry when one finishes. Code `support_monthly_cap_exceeded`: this run could take the account past $100 for the UTC month; `Retry-After` runs until the next month starts, which can be weeks.
- `503`: An upstream service or database is temporarily unavailable. Retry after the indicated delay. A timed-out write may have completed upstream; check its outcome before resubmitting.

## Changes

- **2026-10-13** `27c96850cc66`: 4 info
  - api operation id `createSupportRun` removed and replaced with `askSupportQuestion`
  - api tag `Support Assistant` added
  - api tag `Support Runs` removed
  - added the new optional request property `context/requestId`
- **2026-10-10** `8f72ad19d26b`: 1 info
  - added the non-success response with the status `503`
- **2026-10-08** `9010c1de973d`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/support/runs/post.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/4e74db179e73?raw)
