Menu QaldyDocs

API reference

The Qaldy control plane REST API. How to sign in, what an error looks like, what is limited, and every route, generated from the code that serves it.

The API is the same one the console, the qaldy command line and the MCP server use. Everything here is generated from the live route table and its zod schemas when this site is built: 252 routes, grouped by what they are for, in the list on All routes. The same document as OpenAPI 3 is at openapi.json, and the running API serves it at https://cloud-api.qaldy.com/openapi.json.

Base address

text
https://cloud-api.qaldy.com

Every path starts with /v1. The API is for the Qaldy console, tokens and your own code. It does not accept requests from web pages on other origins except the console's, and public OAuth and metadata routes.

Who is calling

A route is called by one of three kinds of caller. Each route's page says which.

CallerHow it proves itselfWhere it works
A signed-in personThe console's session cookie (an HTTP-only SameSite=Lax cookie), plus an Origin header that is the console's own on anything that changes stateEvery route
A personal access token or an MCP sign-inAuthorization: Bearer qat_… (personal) or qao_… (MCP sign-in)Only the routes marked with a token scope. Everything else answers 403 console_only
A project keyAuthorization: Bearer qk_pub_… or qk_sec_…Only the backend data API of one backend project

A token works in the one workspace it was made in and never exceeds what its person may do there. A scope is read or write. A route a token cannot call is refused until it is deliberately listed; the list is generated from the code and shown on every route. See Tokens, CI and scripts to make one.

Authorization is per route

Signing in is not enough: every route checks the caller's rights on the thing it touches, and answers 404 (not 403) for something the caller cannot see, so an id does not confirm that something exists. The Who line on a route says which right it needs: workspace member, builder, admin or owner, or can_view, can_run, can_edit, can_share on an app. Mutations write an audit row in the same transaction.

Errors

Every error has the same shape:

json
{
  "error": {
    "code": "app_not_found",
    "message": "We could not find that app.",
    "hint": "Check the link and try again.",
    "requestId": "req_5f0c…"
  }
}

code is stable and meant for programs. message says what happened and why; hint says what to do next. requestId is also the x-request-id response header: quote it when you ask us about a failure. Common codes:

StatusCodeMeaning
400invalid_requestThe body or query did not match what the route expects; the message names the field
401unauthorizedNot signed in, or the token is missing, expired or revoked
403forbidden, console_only, admin_only, admin_approval_required, approval_needs_console, insufficient_scopeSigned in, but not allowed. The code says why
404app_not_found, workspace_not_found, connection_not_found and othersNot found, or not visible to you
409stale_version, manifest_changed, last_owner and othersThe request is fine but the state moved
413too_largeThe body is over the limit
429rate_limitedToo many requests; Retry-After says how long

Limits

  • Bodies are limited to 1 MiB, except site uploads (a zip of up to 50 MB, see Sites).
  • Requests are rate-limited per signed-in person, or per address when not signed in, with heavier routes costing more. A refusal is 429 with a Retry-After header in seconds. Some routes have their own tighter limits, stated on their page (invite emails, test sends, login attempts).
  • Lists page with a cursor: the response has the next one, and limit is capped per route.
  • Live data comes over Server-Sent Events: GET /v1/workspaces/{ws}/events for runs, builds and refusals as they happen (qaldy logs --follow uses it), and an app's log stream. They are not in the OpenAPI document; the console and the CLI show how to read them.

Try a call

With a read token:

sh
curl -s https://cloud-api.qaldy.com/v1/tokens/self -H "Authorization: Bearer $QALDY_TOKEN"
curl -s "https://cloud-api.qaldy.com/v1/workspaces/$WS/runs?limit=5" -H "Authorization: Bearer $QALDY_TOKEN"

The first answers who the token acts as: the workspace (with the id to use in the second call), the person, the role and the scopes.

The routes

The app manifest, which build and versions carry, is described on App manifest.

Type to search. Up and down to choose, Enter to open, Esc to close.