Skip to Content

Recipes

Discover, fork, and explicitly run approved or private Recipe workflows.

Base URL: https://app.gavana.ai/api/canvas-agent/v1 · Authentication: HTTP bearer, token format cba_<token-id>.<secret>

Operations

OperationPurposeScopes
POST /canvases/{canvasId}/workflowsCreate a private reusable workflow without running itcanvas:read, canvas:write
GET /recipesSearch approved Recipescanvas:read
GET /recipes/{recipeId}Get an approved Recipecanvas:read
POST /recipes/{recipeId}/forkFork a Recipe into a canvas without running itcanvas:read, canvas:write
POST /recipes/{recipeId}/runsRun a Recipe explicitlycanvas:read, canvas:write, asset:read, image:generate

POST /canvases/{canvasId}/workflows

Create a private reusable workflow without running it

Creates the workflow graph, a private Recipe draft, and a compact runnable Recipe instance. Inputs marked useAsDefault reuse their saved source on later runs, so callers only need to provide changing inputs. This operation does not start generation or consume provider credits.

  • Operation id: createCanvasWorkflow
  • Scopes: Requires canvas:read + canvas:write.

Parameters

ParameterInTypeRequiredNotes
canvasIdpathstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
ownerUidquerystringNoIdentifies the owner of a shared canvas or asset. Owner-qualified handles let the CLI supply it automatically. Pattern ^[A-Za-z0-9_-]{1,180}$.

Request body (application/json, required)

FieldTypeRequiredNotes
namestringYesmin length 1, max length 160.
descriptionstringNomax length 1200.
categorystringNoOne of Brand & Visual Design, Product Visualization, Marketing & Ads, Content Package. Default "Product Visualization".
tagsarray of stringNomax items 12.
inputsarray of CanvasWorkflowInputYesmin items 1, max items 16.
inputs[].keystringYesPattern ^[A-Za-z0-9_-]{1,80}$.
inputs[].labelstringYesmin length 1, max length 80.
inputs[].descriptionstringNomax length 200.
inputs[].typestringYesOne of image, text, sticky.
inputs[].sourceNodeIdstringNoPattern ^(?:node:)?[A-Za-z0-9_-]{1,180}$.
inputs[].valuestringNomax length 8000.
inputs[].useAsDefaultbooleanYesWhen true, preserve this durable source or text value as the input used when a later run omits the port.
outputsarray of CanvasWorkflowOutputYesmin items 1, max items 8.
outputs[].keystringYesPattern ^[A-Za-z0-9_-]{1,80}$.
outputs[].labelstringYesmin length 1, max length 80.
outputs[].descriptionstringNomax length 200.
outputs[].typestringYesOne of image, text.
outputs[].promptstringYesmin length 1, max length 8000.
outputs[].inputKeysarray of stringYesmin items 1, max items 16.
outputs[].modelstringNomax length 650.
outputs[].sizestringNomax length 80.
outputs[].qualitystringNomax length 80.
idempotencyKeystringYesmin length 8, max length 200.
xnumberNomin -100000, max 100000.
ynumberNomin -100000, max 100000.

Responses

StatusPayloadMeaning
200CanvasWorkflowMutationResponseA private reusable workflow creation or idempotent replay result.
201CanvasWorkflowMutationResponseA private reusable workflow creation or idempotent replay result.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
canvasCanvasYes—
canvas.idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.canvasTypestringNoOne of agent.
canvas.handlestringYesPattern ^canvas:[A-Za-z0-9_-]+:[A-Za-z0-9_-]+$.
canvas.ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.titlestringYesmax length 160.
canvas.createdAtstring (date-time)Yes—
canvas.updatedAtstring (date-time)Yes—
canvas.revisionstringYesmin length 1.
canvas.nodesarray of CanvasNodeYes—
canvas.nodes[].idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.nodes[].handlestringYesPattern ^node:.
canvas.nodes[].typestringYesOne of image, video, text, sticky.
canvas.nodes[].titlestringYes—
canvas.nodes[].positionPositionYes—
canvas.nodes[].position.xnumberYesmin -10000000, max 10000000.
canvas.nodes[].position.ynumberYesmin -10000000, max 10000000.
canvas.nodes[].widthnumberYes—
canvas.nodes[].heightnumberYes—
canvas.nodes[].metadataobjectNo—
canvas.nodes[].assetstringNoPattern ^asset:.
canvas.connectionsarray of CanvasConnectionYes—
canvas.connections[].idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.connections[].handlestringYesPattern ^connection:.
canvas.connections[].fromNodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.connections[].toNodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.connections[].fromstringYesPattern ^node:.
canvas.connections[].tostringYesPattern ^node:.
replayedbooleanNo—
resolvedIdsobjectNo—
changedNodeIdsarray of stringNo—
deletedNodeIdsarray of stringNo—
changedConnectionIdsarray of stringNo—
deletedConnectionIdsarray of stringNo—
workflowCanvasWorkflowResponseYes—
workflow.idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
workflow.handlestringYesPattern ^recipe:.
workflow.versionstringYes—
workflow.namestringYes—
workflow.recipeNodeIdstringNoHandle of the visible Recipe definition card. Present only when that card exists on the canvas; omitted while the Recipe UI is disabled. Pattern ^node:.
workflow.workflowNodeIdstringYesPattern ^node:.
workflow.inputsarray of CanvasWorkflowInputResponseYes—
workflow.inputs[].keystringYesPattern ^[A-Za-z0-9_-]{1,80}$.
workflow.inputs[].portNodeIdstringYesPattern ^node:.
workflow.inputs[].nodeIdstringYesPattern ^node:.
workflow.inputs[].labelstringYes—
workflow.inputs[].useAsDefaultbooleanYes—
workflow.outputsarray of CanvasWorkflowOutputResponseYes—
workflow.outputs[].keystringYesPattern ^[A-Za-z0-9_-]{1,80}$.
workflow.outputs[].portNodeIdstringYesPattern ^node:.
workflow.outputs[].templateNodeIdstringYesPattern ^node:.
workflow.outputs[].labelstringYes—

Example

curl -X POST "https://app.gavana.ai/api/canvas-agent/v1/canvases/canvas:8f2c1d40-9a77-4c2e-9c11-2b0a5f6d7e31/workflows" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "<name>", "idempotencyKey": "2026-08-04-first-attempt", "inputs": [ {} ], "outputs": [ {} ] }'

GET /recipes

Search approved Recipes

  • Operation id: searchRecipes
  • Scopes: Requires canvas:read.
  • CLI equivalent: gavana recipe search

Parameters

ParameterInTypeRequiredNotes
qquerystringNoFree-text Recipe Library search. max length 500.
limitqueryintegerNoMaximum number of items in this page. min 1, max 100.
cursorquerystringNoOpaque continuation cursor from page.nextCursor. Reuse it with the same list filters. max length 8192.

Responses

StatusPayloadMeaning
200objectApproved Recipe Library search results.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
recipesarray of RecipeYes—
recipes[].idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
recipes[].handlestringYesPattern ^recipe:.
recipes[].versionstringYes—
recipes[].namestringYes—
recipes[].summarystringNo—
recipes[].descriptionstringNo—
recipes[].tagsarray of stringNo—
recipes[].inputsarray of RecipePortYes—
recipes[].inputs[].nodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
recipes[].inputs[].keystringNoOptional stable caller-facing key for a high-level workflow input or output. Pattern ^[A-Za-z0-9_-]{1,80}$.
recipes[].inputs[].labelstringYes—
recipes[].inputs[].descriptionstringYes—
recipes[].inputs[].useAsPresetbooleanYes—
recipes[].inputs[].nodeTypestringYesOne of image, text, sticky.
recipes[].outputsarray of RecipePortYes—
recipes[].outputs[].nodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
recipes[].outputs[].keystringNoOptional stable caller-facing key for a high-level workflow input or output. Pattern ^[A-Za-z0-9_-]{1,80}$.
recipes[].outputs[].labelstringYes—
recipes[].outputs[].descriptionstringYes—
recipes[].outputs[].useAsPresetbooleanYes—
recipes[].outputs[].nodeTypestringYesOne of image, text, sticky.
pageCursorPageYes—
page.limitintegerYesmin 1, max 200.
page.hasMorebooleanYes—
page.nextCursorstring | nullYesmax length 8192.

Example

curl "https://app.gavana.ai/api/canvas-agent/v1/recipes" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN"

GET /recipes/{recipeId}

Get an approved Recipe

  • Operation id: getRecipe
  • Scopes: Requires canvas:read.
  • CLI equivalent: gavana recipe get

Parameters

ParameterInTypeRequiredNotes
recipeIdpathstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
versionquerystringNoOptional immutable Recipe version. max length 80.

Responses

StatusPayloadMeaning
200objectAn approved Recipe Library workflow.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
recipeRecipeYes—
recipe.idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
recipe.handlestringYesPattern ^recipe:.
recipe.versionstringYes—
recipe.namestringYes—
recipe.summarystringNo—
recipe.descriptionstringNo—
recipe.tagsarray of stringNo—
recipe.inputsarray of RecipePortYes—
recipe.inputs[].nodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
recipe.inputs[].keystringNoOptional stable caller-facing key for a high-level workflow input or output. Pattern ^[A-Za-z0-9_-]{1,80}$.
recipe.inputs[].labelstringYes—
recipe.inputs[].descriptionstringYes—
recipe.inputs[].useAsPresetbooleanYes—
recipe.inputs[].nodeTypestringYesOne of image, text, sticky.
recipe.outputsarray of RecipePortYes—
recipe.outputs[].nodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
recipe.outputs[].keystringNoOptional stable caller-facing key for a high-level workflow input or output. Pattern ^[A-Za-z0-9_-]{1,80}$.
recipe.outputs[].labelstringYes—
recipe.outputs[].descriptionstringYes—
recipe.outputs[].useAsPresetbooleanYes—
recipe.outputs[].nodeTypestringYesOne of image, text, sticky.

Example

curl "https://app.gavana.ai/api/canvas-agent/v1/recipes/recipe:social-creative-angles" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN"

POST /recipes/{recipeId}/fork

Fork a Recipe into a canvas without running it

  • Operation id: forkRecipe
  • Scopes: Requires canvas:read + canvas:write.
  • CLI equivalent: gavana recipe fork

Parameters

ParameterInTypeRequiredNotes
recipeIdpathstringYesPattern ^[A-Za-z0-9_-]{1,180}$.

Request body (application/json, required)

FieldTypeRequiredNotes
canvasIdstringYesA plain canvas id.
ownerUidstringNoPattern ^[A-Za-z0-9_-]{1,180}$.
versionstringNomax length 80.
baseRevisionstringYesmin length 1, max length 200.
idempotencyKeystringYesmin length 8, max length 200.
xnumberNomin -100000, max 100000.
ynumberNomin -100000, max 100000.

Responses

StatusPayloadMeaning
200MutationResponseA revision-safe canvas mutation result.
201MutationResponseA revision-safe canvas mutation result.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
canvasCanvasYes—
canvas.idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.canvasTypestringNoOne of agent.
canvas.handlestringYesPattern ^canvas:[A-Za-z0-9_-]+:[A-Za-z0-9_-]+$.
canvas.ownerUidstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.titlestringYesmax length 160.
canvas.createdAtstring (date-time)Yes—
canvas.updatedAtstring (date-time)Yes—
canvas.revisionstringYesmin length 1.
canvas.nodesarray of CanvasNodeYes—
canvas.nodes[].idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.nodes[].handlestringYesPattern ^node:.
canvas.nodes[].typestringYesOne of image, video, text, sticky.
canvas.nodes[].titlestringYes—
canvas.nodes[].positionPositionYes—
canvas.nodes[].position.xnumberYesmin -10000000, max 10000000.
canvas.nodes[].position.ynumberYesmin -10000000, max 10000000.
canvas.nodes[].widthnumberYes—
canvas.nodes[].heightnumberYes—
canvas.nodes[].metadataobjectNo—
canvas.nodes[].assetstringNoPattern ^asset:.
canvas.connectionsarray of CanvasConnectionYes—
canvas.connections[].idstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.connections[].handlestringYesPattern ^connection:.
canvas.connections[].fromNodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.connections[].toNodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvas.connections[].fromstringYesPattern ^node:.
canvas.connections[].tostringYesPattern ^node:.
replayedbooleanNo—
resolvedIdsobjectNo—
changedNodeIdsarray of stringNo—
deletedNodeIdsarray of stringNo—
changedConnectionIdsarray of stringNo—
deletedConnectionIdsarray of stringNo—

Example

curl -X POST "https://app.gavana.ai/api/canvas-agent/v1/recipes/recipe:social-creative-angles/fork" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "canvasId": "canvas:8f2c1d40-9a77-4c2e-9c11-2b0a5f6d7e31", "baseRevision": "12", "idempotencyKey": "2026-08-04-first-attempt" }'

POST /recipes/{recipeId}/runs

Run a Recipe explicitly

Creates or reuses a private Recipe instance, binds typed inputs, materializes declared output nodes, and queues sequential text or image work. Forking a Recipe never calls this operation automatically.

  • Operation id: startRecipeRun
  • Scopes: Requires canvas:read + canvas:write + asset:read + image:generate.
  • CLI equivalent: gavana recipe run

Parameters

ParameterInTypeRequiredNotes
recipeIdpathstringYesPattern ^[A-Za-z0-9_-]{1,180}$.

Request body (application/json, required)

FieldTypeRequiredNotes
canvasIdstringYesStable canvas:<id> or canvas:<ownerUid>:<id> destination. min length 1, max length 560.
baseRevisionstringYesmin length 1, max length 200.
idempotencyKeystringYesmin length 8, max length 200.
versionstringNomax length 80.
instanceNodeIdstringNoOptional private Recipe instance already present and connected on the destination canvas. Pattern ^(?:node:)?[A-Za-z0-9_-]{1,180}$.
inputsobjectNoTyped values keyed by the declared input node id or normalized label. Values may be node:, asset:, or plain text.
modelstringNoOptional model handle or provider model override for image outputs. max length 650.
sizestringNoOptional size override for image outputs. max length 80.
qualitystringNoOptional quality override for image outputs. max length 80.
webhookImageJobWebhookInputNo—
webhook.urlstring (uri)YesA public HTTPS callback endpoint. Private, loopback, local-network, credential-bearing, and fragment-bearing URLs are rejected. max length 2048. Pattern ^https://.
webhook.secretstringYesA caller-owned HMAC secret encrypted at rest and never returned by the API. min length 32, max length 512.

Responses

StatusPayloadMeaning
202RecipeRunA durable Recipe Run with typed input bindings and declared output state.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

202 response body

FieldTypeRequiredNotes
idstringYesPattern ^recipe-.
rawIdstringYesPattern ^recipe-.
handlestringYesPattern ^run:recipe-.
runstringYesPattern ^run:recipe-.
statusstringYesOne of queued, running, succeeded, failed, canceled.
recipeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
recipeHandlestringYesPattern ^recipe:.
recipeVersionstringYes—
recipeInstanceNodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
recipeInstanceNodeHandlestringYesPattern ^node:.
canvasIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
canvasHandlestringYesPattern ^canvas:.
canvasUrlstring (uri)No—
inputsarray of RecipeRunInputBindingYes—
inputs[].keystringYes—
inputs[].labelstringYes—
inputs[].typestringYesOne of image, text, sticky.
inputs[].nodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
inputs[].nodeHandlestringYesPattern ^node:.
inputs[].sourceHandlestringNoPattern ^(?:node|asset):.
inputs[].summarystringYes—
outputsarray of RecipeRunOutputYes—
outputs[].keystringYes—
outputs[].labelstringYes—
outputs[].typestringYesOne of image, text, sticky.
outputs[].statusstringYesOne of pending, running, succeeded, failed, canceled.
outputs[].nodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
outputs[].nodeHandlestringYesPattern ^node:.
outputs[].jobIdstring (uuid)No—
outputs[].runHandlestringNoPattern ^run:.
outputs[].assetIdstringNoPattern ^asset:.
outputs[].valuestringNomax length 24000.
outputs[].startedAtstring (date-time)No—
outputs[].completedAtstring (date-time)No—
outputs[].failureRecipeRunFailureNo—
outputs[].failure.codestringYesOne of recipe_input_invalid, recipe_step_failed, recipe_output_missing, recipe_run_canceled, delegation_revoked.
outputs[].failure.messagestringYes—
outputs[].failure.retryablebooleanYes—
outputs[].failure.outputKeystringNo—
targetsarray of stringYes—
currentStepstringYes—
nextStepstringNo—
estimatedSecondsintegerYesmin 1.
durationMsintegerNomin 0.
timingImageJobTimingYes—
timing.createdAtstring (date-time)No—
timing.queuedAtstring (date-time)No—
timing.startedAtstring (date-time)No—
timing.completedAtstring (date-time)No—
timing.queueDurationMsintegerNomin 0.
timing.executionDurationMsintegerNomin 0.
timing.totalDurationMsintegerNomin 0.
failureRecipeRunFailureNo—
failure.codestringYesOne of recipe_input_invalid, recipe_step_failed, recipe_output_missing, recipe_run_canceled, delegation_revoked.
failure.messagestringYes—
failure.retryablebooleanYes—
failure.outputKeystringNo—
webhookImageJobWebhookDeliveryNoDurable delivery state. Gavana makes four total attempts. Retryable network failures and 408, 425, 429, or 5xx responses back off for 10 seconds, 60 seconds, then 5 minutes; redirects and other 4xx responses stop delivery.
webhook.idstringYesPattern ^webhook:.
webhook.statusstringYesOne of pending, delivering, delivered, failed.
webhook.attemptsintegerYesmin 0.
webhook.nextAttemptAtstring (date-time)No—
webhook.lastAttemptAtstring (date-time)No—
webhook.deliveredAtstring (date-time)No—
webhook.lastStatusintegerNomin 100, max 599.
webhook.errorCodestringNoOne of invalid_destination, delivery_failed, redirect_not_allowed, endpoint_rejected, secret_unavailable, finalization_unavailable, finalization_auth_unavailable, finalization_auth_expired, finalization_failed.
replayedbooleanNo—
pollUrlstringYesPattern ^/api/canvas-agent/v1/runs/.
createdAtstring (date-time)Yes—
updatedAtstring (date-time)Yes—
startedAtstring (date-time)No—
completedAtstring (date-time)No—
canceledAtstring (date-time)No—
completionReviewCanvasCompletionReviewNo—
completionReview.statusstringYesOne of ready, needs-review, blocked.
completionReview.doneClaimAllowedbooleanYesFalse while agent-owned spatial or lineage findings remain, or a generated output is pending, failed, or non-durable.
completionReview.instructionstringYes—
completionReview.outputsCanvasCompletionOutputsYesGenerated-output count and durable, pending, and failed breakdown.
completionReview.outputs.countintegerYesmin 0.
completionReview.outputs.durableCountintegerYesmin 0.
completionReview.outputs.pendingCountintegerYesmin 0.
completionReview.outputs.failedCountintegerYesmin 0.
completionReview.outputs.handlesarray of stringYes—
completionReview.overlapCanvasCompletionFindingAreaYes—
completionReview.overlap.statusstringYesOne of clear, needs-review, blocked.
completionReview.overlap.findingCodesarray of stringYes—
completionReview.overlap.nodeHandlesarray of stringYes—
completionReview.overlap.connectionHandlesarray of stringYes—
completionReview.containmentCanvasCompletionFindingAreaYes—
completionReview.containment.statusstringYesOne of clear, needs-review, blocked.
completionReview.containment.findingCodesarray of stringYes—
completionReview.containment.nodeHandlesarray of stringYes—
completionReview.containment.connectionHandlesarray of stringYes—
completionReview.referenceLineageCanvasCompletionFindingAreaYes—
completionReview.referenceLineage.statusstringYesOne of clear, needs-review, blocked.
completionReview.referenceLineage.findingCodesarray of stringYes—
completionReview.referenceLineage.nodeHandlesarray of stringYes—
completionReview.referenceLineage.connectionHandlesarray of stringYes—
completionReview.productFidelityCanvasProductFidelityReviewYesA conservative review signal, not an authoritative visual inspection.
completionReview.productFidelity.statusstringYesOne of not-applicable, needs-review, passed.
completionReview.productFidelity.reviewedOutputCountintegerYesmin 0.
completionReview.productFidelity.needsReviewOutputHandlesarray of stringYes—
completionReview.productFidelity.evidenceMissingOutputHandlesarray of stringYes—
completionReview.productFidelity.reasonsarray of objectNo—
completionReview.productFidelity.reasons[].nodeHandlestringYesPattern ^node:.
completionReview.productFidelity.reasons[].reasonstringYes—
completionReview.deliveryCanvasCompletionDeliveryYesGenerated-output delivery evidence. A blocked state prevents a Done claim.
completionReview.delivery.statusstringYesOne of clear, blocked.
completionReview.delivery.reasonsarray of stringNo—
completionReview.delivery.pendingOutputHandlesarray of stringYes—
completionReview.delivery.failedOutputHandlesarray of stringYes—
completionReview.delivery.nonDurableOutputHandlesarray of stringYes—
completionReview.blockingFindingCodesarray of stringYes—
completionReview.advisoryFindingCodesarray of stringYes—

Callbacks

  • recipeRunTerminal → {$request.body#/webhook/url}: Receive a signed terminal Recipe Run event. Gavana signs ${timestamp}.${rawBody} with HMAC-SHA256 and the caller-owned secret. Return any 2xx response to acknowledge delivery. Delivery uses four total attempts. Retryable network failures and 408, 425, 429, or 5xx responses back off for 10 seconds, 60 seconds, then 5 minutes; redirects and other 4xx responses stop delivery. Private-network destinations are blocked.

Example

curl -X POST "https://app.gavana.ai/api/canvas-agent/v1/recipes/recipe:social-creative-angles/runs" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "canvasId": "canvas:8f2c1d40-9a77-4c2e-9c11-2b0a5f6d7e31", "baseRevision": "12", "idempotencyKey": "2026-08-04-first-attempt" }'

Errors

Every failure uses the shared error envelope described in Errors and X-Request-ID. The response always carries X-Request-ID; share that value with support instead of the request payload.

Last updated on