Menu QaldyDocs

Runs

The run list, one run, the plain-words explanation of a failure and the gate’s trace of what a run was allowed to do. 14 routes, from the API’s own OpenAPI document.

14 routes. Every path starts at https://cloud-api.qaldy.com. Sign-in, tokens, errors and limits are on the overview.

Routes

MethodPathWhat it does
GET/​v1/​dead-letters/​{id}One dead letter, with the input it kept (for people who may edit the app)
POST/​v1/​dead-letters/​{id}/​discardSet a dead letter aside: it is kept for a week as a record, then removed
POST/​v1/​dead-letters/​{id}/​replayReplay a dead letter as a new run, with its input as kept or an edited one
GET/​v1/​runs/​{id}One run with its step timeline
GET/​v1/​runs/​{id}/​askWhat a run did, why, and what changed since the last good run (rules; free)
POST/​v1/​runs/​{id}/​askAsk about this run: a model writes the answer when the workspace has a key for one
POST/​v1/​runs/​{id}/​changePlan the change a refused run suggests (let the app reach the host the gate refused): the diff, nothing built
GET/​v1/​runs/​{id}/​explainExplain & fix: what happened, why, and the next step
POST/​v1/​runs/​{id}/​replayReplay a failed run as a new run, optionally with an edited input
GET/​v1/​runs/​{id}/​traceWhat the platform recorded around a run: gate decisions and its last log lines
GET/​v1/​workspaces/​{ws}/​dead-lettersFailed runs and refused webhook calls kept for replay (apps you can open)
POST/​v1/​workspaces/​{ws}/​dead-letters/​bulkReplay or discard up to 50 open dead letters as they were kept
GET/​v1/​workspaces/​{ws}/​queue-healthWork in flight, how long the oldest has waited and what finished (apps you can open)
GET/​v1/​workspaces/​{ws}/​runsRuns, newest first (only apps you can view)

Reference

GET /v1/dead-letters/{id}

One dead letter, with the input it kept (for people who may edit the app).

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the read scope.
  • Who: can_view on the app, else 404
ParameterInTypeRequiredNotes
idpathstringyes1 to 128 characters

Response 200

FieldTypeRequiredNotes
idstringyesat least 1 characters
kind"run" · "delivery"yes
state"open" · "replayed" · "discarded"yes
appIdstringyesat least 1 characters
appNamestringyesat least 1 characters
roadIdstring or nullyes
roadNamestring or nullyes
trigger"schedule" · "webhook" · "form" · "manual" · "event"yes
reasonstringyesat least 1 characters
messagestringyesat least 1 characters
runIdstring or nullyes
deliveryIdstring or nullyes
versionobject or nullyes
version.idstringyesat least 1 characters
version.numberinteger or nullyesat least 1
version.isCurrentbooleanyes
attemptintegeryesat least 1
hasPayloadbooleanyes
payloadBytesintegeryesat least 0
previewstring or nullyes
createdAtstring (date-time)yes
settledAtstring (date-time) or nullyes
settledByNamestring or nullyes
replayRunIdstring or nullyes
canManagebooleanyes
payloadany or null

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

POST /v1/dead-letters/{id}/discard

Set a dead letter aside: it is kept for a week as a record, then removed.

  • Authentication: the console’s session cookie.
  • Token: not available. This route is for a signed-in person in the console (403 console_only for a token).
  • Who: can_edit
ParameterInTypeRequiredNotes
idpathstringyes1 to 128 characters

Request body (application/json)

An empty object: {}.

Response 200

FieldTypeRequiredNotes
idstringyesat least 1 characters
kind"run" · "delivery"yes
state"open" · "replayed" · "discarded"yes
appIdstringyesat least 1 characters
appNamestringyesat least 1 characters
roadIdstring or nullyes
roadNamestring or nullyes
trigger"schedule" · "webhook" · "form" · "manual" · "event"yes
reasonstringyesat least 1 characters
messagestringyesat least 1 characters
runIdstring or nullyes
deliveryIdstring or nullyes
versionobject or nullyes
version.idstringyesat least 1 characters
version.numberinteger or nullyesat least 1
version.isCurrentbooleanyes
attemptintegeryesat least 1
hasPayloadbooleanyes
payloadBytesintegeryesat least 0
previewstring or nullyes
createdAtstring (date-time)yes
settledAtstring (date-time) or nullyes
settledByNamestring or nullyes
replayRunIdstring or nullyes
canManagebooleanyes

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

POST /v1/dead-letters/{id}/replay

Replay a dead letter as a new run, with its input as kept or an edited one.

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the write scope.
  • Who: can_edit
ParameterInTypeRequiredNotes
idpathstringyes1 to 128 characters

Request body (application/json)

FieldTypeRequiredNotes
payloadany or null
version"current" · "original"default "current"

Response 200

FieldTypeRequiredNotes
runIdstringyesat least 1 characters
deadLetterIdstring or nullyes
versionobjectyes
version.idstringyesat least 1 characters
version.numberinteger or nullyesat least 1
version.isCurrentbooleanyes
editedbooleanyes
heldbooleandefault false

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

GET /v1/runs/{id}

One run with its step timeline.

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the read scope.
  • Who: can_view on the app
ParameterInTypeRequiredNotes
idpathstringyes1 to 128 characters

Response 200

FieldTypeRequiredNotes
idstringyesat least 1 characters
workspaceIdstringyesat least 1 characters
appIdstringyesat least 1 characters
appNamestringyesat least 1 characters
roadIdstring or nullyes
roadNamestring or nullyes
trigger"schedule" · "webhook" · "form" · "manual" · "event"yes
status"queued" · "running" · "waiting_approval" · "succeeded" · "failed" · "blocked"yes
startedAtstring (date-time)yes
finishedAtstring (date-time) or nullyes
durationMsinteger or nullyesat least 0
minutesSavednumberyesat least 0
errorCodestring or nullyes
errorMessagestring or nullyes
versionobject or null
version.idstringyesat least 1 characters
version.numberinteger or nullyesat least 1
version.isCurrentbooleanyes
replayOfstring or null
stepsobject[]yes
steps[].indexintegeryesat least 0
steps[].labelstringyesat least 1 characters
steps[].atobject or nullyes
steps[].status"pending" · "running" · "ok" · "waiting" · "failed" · "blocked" · "skipped"yes
steps[].startedAtstring (date-time) or nullyes
steps[].durationMsinteger or nullyesat least 0
steps[].detailstring or nullyes
explanationobject or nullyes
explanation.whatstringyesat least 1 characters
explanation.whystringyesat least 1 characters

…and 4 more fields. The full schema is in openapi.json.

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

GET /v1/runs/{id}/ask

What a run did, why, and what changed since the last good run (rules; free).

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the read scope.
  • Who: can_view on the app; tokens: yes, read scope
ParameterInTypeRequiredNotes
idpathstringyes1 to 128 characters
localequery"en" · "ru" · "kk"

Response 200

FieldTypeRequiredNotes
runIdstringyesat least 1 characters
appIdstringyesat least 1 characters
appNamestringyesat least 1 characters
generatedAtstring (date-time)yes
locale"en" · "ru" · "kk"yes
source"rules" · "workspace_model" · "platform_model"yes
modelstring or nullyes
cachedbooleanyes
status"queued" · "running" · "waiting_approval" · "succeeded" · "failed" · "blocked"yes
failureClass"egress_denied" · "secret_missing" · "auth_rejected" · "quota" · "ai_budget" · "ai_setup" · "timeout" · "connector_rate_limited" · … or nullyes
confidence"high" · "medium" · "low"yes
headlinestringyes1 to 600 characters
whystringyes1 to 1200 characters
nextstringyes1 to 1200 characters
answerstring or nullyesup to 2400 characters
evidencestring[]yesup to 12 items
whatChangedobjectyes
whatChanged.lastGoodobject or nullyes
whatChanged.versionChangedboolean or nullyes
whatChanged.codeChangedboolean or nullyes
whatChanged.linesstring[]yesup to 12 items
fixobject or nullyes
fix.kind"reconnect" · "allow_egress" · "retry" · "edit_app" · "rollback" · "models" · "capacity"yes
fix.connectorId"shop" · "stripe" · "gmail" · "telegram" · "sheets" · "slack" · "kaspi" · "1c" · …
fix.domainstring1 to 253 characters
fix.versionIdstringat least 1 characters
fix.versionNumberintegerat least 1
suggestionobject or nullyes
suggestion.kind"allow_egress"yes
suggestion.domainstringyes1 to 253 characters

…and 6 more fields. The full schema is in openapi.json.

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

POST /v1/runs/{id}/ask

Ask about this run: a model writes the answer when the workspace has a key for one.

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the read scope.
  • Who: can_view; a model answer needs can_edit; tokens: yes, read scope
ParameterInTypeRequiredNotes
idpathstringyes1 to 128 characters

Request body (application/json)

FieldTypeRequiredNotes
questionstring2 to 500 characters
locale"en" · "ru" · "kk"
rulesOnlyboolean

Response 200

FieldTypeRequiredNotes
runIdstringyesat least 1 characters
appIdstringyesat least 1 characters
appNamestringyesat least 1 characters
generatedAtstring (date-time)yes
locale"en" · "ru" · "kk"yes
source"rules" · "workspace_model" · "platform_model"yes
modelstring or nullyes
cachedbooleanyes
status"queued" · "running" · "waiting_approval" · "succeeded" · "failed" · "blocked"yes
failureClass"egress_denied" · "secret_missing" · "auth_rejected" · "quota" · "ai_budget" · "ai_setup" · "timeout" · "connector_rate_limited" · … or nullyes
confidence"high" · "medium" · "low"yes
headlinestringyes1 to 600 characters
whystringyes1 to 1200 characters
nextstringyes1 to 1200 characters
answerstring or nullyesup to 2400 characters
evidencestring[]yesup to 12 items
whatChangedobjectyes
whatChanged.lastGoodobject or nullyes
whatChanged.versionChangedboolean or nullyes
whatChanged.codeChangedboolean or nullyes
whatChanged.linesstring[]yesup to 12 items
fixobject or nullyes
fix.kind"reconnect" · "allow_egress" · "retry" · "edit_app" · "rollback" · "models" · "capacity"yes
fix.connectorId"shop" · "stripe" · "gmail" · "telegram" · "sheets" · "slack" · "kaspi" · "1c" · …
fix.domainstring1 to 253 characters
fix.versionIdstringat least 1 characters
fix.versionNumberintegerat least 1
suggestionobject or nullyes
suggestion.kind"allow_egress"yes
suggestion.domainstringyes1 to 253 characters

…and 6 more fields. The full schema is in openapi.json.

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

POST /v1/runs/{id}/change

Plan the change a refused run suggests (let the app reach the host the gate refused): the diff, nothing built.

  • Authentication: the console’s session cookie.
  • Token: not available. This route is for a signed-in person in the console (403 console_only for a token).
  • Who: can_edit and a builder; console only (tokens: no)
ParameterInTypeRequiredNotes
idpathstringyes1 to 128 characters

Request body (application/json)

An empty object: {}.

Response 200

FieldTypeRequiredNotes
changeIdstringyesat least 1 characters
appIdstringyesat least 1 characters
appNamestringyesat least 1 characters
baseVersionIdstringyesat least 1 characters
instructionstringyes
summarystringyes1 to 300 characters
manifestobjectyes
manifest.namestringyes2 to 60 characters
manifest.descriptionstringyes4 to 280 characters
manifest.archetype"kiosk" · "tower" · "warehouse" · "workshop" · "bank" · "townhall" · "clocktower" · "printhouse" · …yes
manifest.category"interface" · "data" · "messaging" · "money" · "ai" · "time" · "people" · "growth"yes
manifest.permissionsobjectyes
manifest.triggersobject[]yes
manifest.sharingobjectyes
manifest.roiobjectyes
diffobjectyes
diff.gainsobject[]yes
diff.lossesobject[]yes
diff.triggersAddedobject[]yes
diff.triggersRemovedobject[]yes
diff.detailsobject[]yes
stepsstring[]yes
rebuildsCodebooleanyes
builder"claude" · "offline"yes
modelstring or nullyes
templateIdstring or nullyes
notesstring[]yesup to 8 items
adminApprovalobjectyes
adminApproval.requiredbooleanyes
adminApproval.connectorsstring[]yes

…and 2 more fields. The full schema is in openapi.json.

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

GET /v1/runs/{id}/explain

Explain & fix: what happened, why, and the next step.

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the read scope.
  • Who: can_view on the app
ParameterInTypeRequiredNotes
idpathstringyes1 to 128 characters

Response 200

FieldTypeRequiredNotes
whatstringyesat least 1 characters
whystringyesat least 1 characters
nextstringyesat least 1 characters
fixobject or nullyes
fix.kind"reconnect" · "allow-domain" · "retry" · "edit-app"yes
fix.labelstringyesat least 1 characters
fix.connectorId"shop" · "stripe" · "gmail" · "telegram" · "sheets" · "slack" · "kaspi" · "1c" · …
fix.domainstring
nothingLostbooleanyes

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

POST /v1/runs/{id}/replay

Replay a failed run as a new run, optionally with an edited input.

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the write scope.
  • Who: can_edit on the app; over a token, version: original is refused with approval_needs_console when that version may do more than the app does now
ParameterInTypeRequiredNotes
idpathstringyes1 to 128 characters

Request body (application/json)

FieldTypeRequiredNotes
payloadany or null
version"current" · "original"default "current"

Response 200

FieldTypeRequiredNotes
runIdstringyesat least 1 characters
deadLetterIdstring or nullyes
versionobjectyes
version.idstringyesat least 1 characters
version.numberinteger or nullyesat least 1
version.isCurrentbooleanyes
editedbooleanyes
heldbooleandefault false

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

GET /v1/runs/{id}/trace

What the platform recorded around a run: gate decisions and its last log lines.

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the read scope.
  • Who: can_view on the app
ParameterInTypeRequiredNotes
idpathstringyes1 to 128 characters
limitqueryinteger1 to 50. default 20

Response 200

FieldTypeRequiredNotes
runIdstringyesat least 1 characters
appIdstringyesat least 1 characters
gateobject[]yes
gate[].atstring (date-time)yes
gate[].kind"egress.allowed" · "egress.blocked" · "connector.called" · "flow.blocked" · "flow.allowed"yes
gate[].domainstringyesat least 1 characters
gate[].methodstringyesat least 1 characters
gate[].statusintegeryesat least 0
gate[].reasonstring or nullyes
gate[].connectorstring or nullyes
gate[].actionstring or nullyes
gate[].labelsstring[]up to 8 items
logobject[]yes
log[].atstring (date-time)yes
log[].level"info" · "warn" · "error"yes
log[].source"run" · "step" · "gate"yes
log[].textstringyes
logSource"platform"yes

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

GET /v1/workspaces/{ws}/dead-letters

Failed runs and refused webhook calls kept for replay (apps you can open).

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the read scope.
  • Who: member (filtered to can_view)
ParameterInTypeRequiredNotes
wspathstringyes1 to 128 characters
statequery"open" · "replayed" · "discarded" · "all"default "open"
appIdquerystring1 to 128 characters
automationIdquerystring1 to 128 characters
runIdquerystring1 to 128 characters
kindquery"run" · "delivery"
limitqueryinteger1 to 100. default 50
cursorquerystringup to 200 characters

Response 200

FieldTypeRequiredNotes
itemsobject[]yes
items[].idstringyesat least 1 characters
items[].kind"run" · "delivery"yes
items[].state"open" · "replayed" · "discarded"yes
items[].appIdstringyesat least 1 characters
items[].appNamestringyesat least 1 characters
items[].roadIdstring or nullyes
items[].roadNamestring or nullyes
items[].trigger"schedule" · "webhook" · "form" · "manual" · "event"yes
items[].reasonstringyesat least 1 characters
items[].messagestringyesat least 1 characters
items[].runIdstring or nullyes
items[].deliveryIdstring or nullyes
items[].versionobject or nullyes
items[].attemptintegeryesat least 1
items[].hasPayloadbooleanyes
items[].payloadBytesintegeryesat least 0
items[].previewstring or nullyes
items[].createdAtstring (date-time)yes
items[].settledAtstring (date-time) or nullyes
items[].settledByNamestring or nullyes
items[].replayRunIdstring or nullyes
items[].canManagebooleanyes
nextCursorstring or nullyes
countsobjectyes
counts.openintegeryesat least 0
counts.replayedintegeryesat least 0
counts.discardedintegeryesat least 0

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

POST /v1/workspaces/{ws}/dead-letters/bulk

Replay or discard up to 50 open dead letters as they were kept.

  • Authentication: the console’s session cookie.
  • Token: not available. This route is for a signed-in person in the console (403 console_only for a token).
  • Who: member; can_edit per app
ParameterInTypeRequiredNotes
wspathstringyes1 to 128 characters

Request body (application/json)

FieldTypeRequiredNotes
action"replay" · "discard"yes
idsstring[]yesup to 50 items
version"current" · "original"default "current"

Response 200

FieldTypeRequiredNotes
action"replay" · "discard"yes
resultsobject[]yes
doneintegeryesat least 0
failedintegeryesat least 0

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

GET /v1/workspaces/{ws}/queue-health

Work in flight, how long the oldest has waited and what finished (apps you can open).

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the read scope.
  • Who: member (filtered to can_view)
ParameterInTypeRequiredNotes
wspathstringyes1 to 128 characters
appIdquerystring1 to 128 characters

Response 200

FieldTypeRequiredNotes
asOfstring (date-time)yes
totalsobjectyes
totals.waitingintegeryesat least 0
totals.runningintegeryesat least 0
totals.awaitingApprovalintegeryesat least 0
totals.heldintegerat least 0. default 0
totals.oldestSecondsinteger or nullyesat least 0
totals.startedLastHourintegeryesat least 0
totals.finishedLastHourintegeryesat least 0
totals.failedLastHourintegeryesat least 0
totals.medianWaitSecondsnumber or nullyesat least 0
totals.deadLettersintegeryesat least 0
totals.state"clear" · "busy" · "slow" · "stuck"yes
hoursobject[]yes
hours[].atstring (date-time)yes
hours[].startedintegeryesat least 0
hours[].finishedintegeryesat least 0
hours[].failedintegeryesat least 0
hours[].peakintegeryesat least 0
hours[].medianWaitSecondsnumber or nullyesat least 0
roadsobject[]yes
roads[].waitingintegeryesat least 0
roads[].runningintegeryesat least 0
roads[].awaitingApprovalintegeryesat least 0
roads[].heldintegerat least 0. default 0
roads[].oldestSecondsinteger or nullyesat least 0
roads[].startedLastHourintegeryesat least 0
roads[].finishedLastHourintegeryesat least 0
roads[].failedLastHourintegeryesat least 0
roads[].medianWaitSecondsnumber or nullyesat least 0

…and 7 more fields. The full schema is in openapi.json.

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

GET /v1/workspaces/{ws}/runs

Runs, newest first (only apps you can view).

  • Authentication: the console’s session cookie.
  • Token: a personal access token or an MCP sign-in with the read scope.
  • Who: member (filtered to can_view)
ParameterInTypeRequiredNotes
wspathstringyes1 to 128 characters
statusquery"queued" · "running" · "waiting_approval" · "succeeded" · "failed" · "blocked"[]
appIdquerystringat least 1 characters
triggerquery"schedule" · "webhook" · "form" · "manual" · "event"
limitqueryinteger1 to 200. default 50
cursorquerystringup to 200 characters

Response 200

FieldTypeRequiredNotes
itemsobject[]yes
items[].idstringyesat least 1 characters
items[].workspaceIdstringyesat least 1 characters
items[].appIdstringyesat least 1 characters
items[].appNamestringyesat least 1 characters
items[].roadIdstring or nullyes
items[].roadNamestring or nullyes
items[].trigger"schedule" · "webhook" · "form" · "manual" · "event"yes
items[].status"queued" · "running" · "waiting_approval" · "succeeded" · "failed" · "blocked"yes
items[].startedAtstring (date-time)yes
items[].finishedAtstring (date-time) or nullyes
items[].durationMsinteger or nullyesat least 0
items[].minutesSavednumberyesat least 0
items[].errorCodestring or nullyes
items[].errorMessagestring or nullyes
items[].versionobject or null
items[].replayOfstring or null
nextCursorstring or nullyes

Errors: 400, 401, 403, 404, 409, 429 (the error format is on the overview).

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