Skip to Content

Runs

Read, resume, or cancel Recipe, image, and Action execution through one shared resource.

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

Operations

OperationPurposeScopes
GET /runs/{runId}Read or advance a shared Runjob:manage
DELETE /runs/{runId}Cancel a shared Runjob:manage

GET /runs/{runId}

Read or advance a shared Run

Returns Recipe, image, or Action Run state. Reading a completed image child also finalizes its durable asset and canvas node.

  • Operation id: getRun
  • Scopes: Requires job:manage.
  • CLI equivalent: gavana run get

Parameters

ParameterInTypeRequiredNotes
runIdpathstringYesPattern ^(?:run:)?[A-Za-z0-9_-]{1,180}$.

Responses

StatusPayloadMeaning
200RunA shared Recipe, image, or Action Run.
202RunA shared Recipe, image, or Action Run.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
(ImageJob).idstringYesPattern ^job:.
(ImageJob).runstringYesPattern ^run:.
(ImageJob).kindstringYesOne of image, action.
(ImageJob).pollUrlstringYesPattern ^/api/canvas-agent/v1/runs/.
(ImageJob).rawIdstring (uuid)No—
(ImageJob).statusstringYesCurrent temporary job state. Successful results retain the observation record for 24 hours before the first successful server finalization and 15 minutes after it; an authenticated Run GET or pre-callback worker finalization both count. Failed and canceled records keep the normal 24-hour window. Expired tombstones remain seven days. One of preparing, queued, running, finalizing, canceling, succeeded, failed, canceled, expired.
(ImageJob).estimatedSecondsintegerNoTypical provider runtime for the selected model. This is guidance, not a deadline. min 1.
(ImageJob).durationMsintegerNoTotal observed duration once the job is terminal. min 0.
(ImageJob).timingImageJobTimingNo—
(ImageJob).timing.createdAtstring (date-time)No—
(ImageJob).timing.queuedAtstring (date-time)No—
(ImageJob).timing.startedAtstring (date-time)No—
(ImageJob).timing.completedAtstring (date-time)No—
(ImageJob).timing.queueDurationMsintegerNomin 0.
(ImageJob).timing.executionDurationMsintegerNomin 0.
(ImageJob).timing.totalDurationMsintegerNomin 0.
(ImageJob).failureImageJobFailureNo—
(ImageJob).failure.codestringYesOne of provider_authentication_failed, provider_timeout, provider_rate_limited, provider_rejected, provider_unavailable, runtime_failed, action_input_invalid, result_expired.
(ImageJob).failure.messagestringYes—
(ImageJob).failure.retryablebooleanYes—
(ImageJob).failure.providerStatusintegerNomin 400, max 599.
(ImageJob).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.
(ImageJob).webhook.idstringYesPattern ^webhook:.
(ImageJob).webhook.statusstringYesOne of pending, delivering, delivered, failed.
(ImageJob).webhook.attemptsintegerYesmin 0.
(ImageJob).webhook.nextAttemptAtstring (date-time)No—
(ImageJob).webhook.lastAttemptAtstring (date-time)No—
(ImageJob).webhook.deliveredAtstring (date-time)No—
(ImageJob).webhook.lastStatusintegerNomin 100, max 599.
(ImageJob).webhook.errorCodestringNoOne of invalid_destination, delivery_failed, redirect_not_allowed, endpoint_rejected, secret_unavailable, finalization_unavailable, finalization_auth_unavailable, finalization_auth_expired, finalization_failed.
(ImageJob).replayedbooleanNo—
(ImageJob).operationstringNoOne of generate, edit, variations, action.
(ImageJob).actionIdstringNoPattern ^action:.
(ImageJob).actionVersionstringNo—
(ImageJob).canvasIdstringNoPattern ^canvas:.
(ImageJob).canvasRevisionstringNo—
(ImageJob).canvasUrlstring (uri)No—
(ImageJob).canceledAtstring (date-time)No—
(ImageJob).cancelReasonstringNoOne of stale_preparing, user_requested, setup_failed.
(ImageJob).targetsarray of stringNo—
(ImageJob).referencesarray of stringNo—
(ImageJob).referenceInputsarray of ImageReferenceInputNoExact reference handles and optional semantic roles used by the provider request.
(ImageJob).referenceInputs[].handlestringYesPattern ^(?:node:[A-Za-z0-9_-]{1,180}|asset:(?:[A-Za-z0-9_-]{1,180}:)?[A-Za-z0-9_-]{1,180})$.
(ImageJob).referenceInputs[].rolestringNoOne of identity, construction, texture, fit, style.
(ImageJob).imagesarray of ImageJobResultImageNo—
(ImageJob).images[].assetIdstringYesPattern ^asset:.
(ImageJob).images[].nodeIdstringYesPattern ^node:.
(ImageJob).images[].mediaTypestringNoPattern ^image/.
(ImageJob).images[].widthintegerNomin 1.
(ImageJob).images[].heightintegerNomin 1.
(ImageJob).images[].bytesintegerNomin 1.
(ImageJob).images[].previewUrlstring (uri)Yes—
(ImageJob).images[].markdownstringNo—
(ImageJob).completionReviewCanvasCompletionReviewNo—
(ImageJob).completionReview.statusstringYesOne of ready, needs-review, blocked.
(ImageJob).completionReview.doneClaimAllowedbooleanYesFalse while agent-owned spatial or lineage findings remain, or a generated output is pending, failed, or non-durable.
(ImageJob).completionReview.instructionstringYes—
(ImageJob).completionReview.outputsCanvasCompletionOutputsYesGenerated-output count and durable, pending, and failed breakdown.
(ImageJob).completionReview.outputs.countintegerYesmin 0.
(ImageJob).completionReview.outputs.durableCountintegerYesmin 0.
(ImageJob).completionReview.outputs.pendingCountintegerYesmin 0.
(ImageJob).completionReview.outputs.failedCountintegerYesmin 0.
(ImageJob).completionReview.outputs.handlesarray of stringYes—
(ImageJob).completionReview.overlapCanvasCompletionFindingAreaYes—
(ImageJob).completionReview.overlap.statusstringYesOne of clear, needs-review, blocked.
(ImageJob).completionReview.overlap.findingCodesarray of stringYes—
(ImageJob).completionReview.overlap.nodeHandlesarray of stringYes—
(ImageJob).completionReview.overlap.connectionHandlesarray of stringYes—
(ImageJob).completionReview.containmentCanvasCompletionFindingAreaYes—
(ImageJob).completionReview.containment.statusstringYesOne of clear, needs-review, blocked.
(ImageJob).completionReview.containment.findingCodesarray of stringYes—
(ImageJob).completionReview.containment.nodeHandlesarray of stringYes—
(ImageJob).completionReview.containment.connectionHandlesarray of stringYes—
(ImageJob).completionReview.referenceLineageCanvasCompletionFindingAreaYes—
(ImageJob).completionReview.referenceLineage.statusstringYesOne of clear, needs-review, blocked.
(ImageJob).completionReview.referenceLineage.findingCodesarray of stringYes—
(ImageJob).completionReview.referenceLineage.nodeHandlesarray of stringYes—
(ImageJob).completionReview.referenceLineage.connectionHandlesarray of stringYes—
(ImageJob).completionReview.productFidelityCanvasProductFidelityReviewYesA conservative review signal, not an authoritative visual inspection.
(ImageJob).completionReview.productFidelity.statusstringYesOne of not-applicable, needs-review, passed.
(ImageJob).completionReview.productFidelity.reviewedOutputCountintegerYesmin 0.
(ImageJob).completionReview.productFidelity.needsReviewOutputHandlesarray of stringYes—
(ImageJob).completionReview.productFidelity.evidenceMissingOutputHandlesarray of stringYes—
(ImageJob).completionReview.productFidelity.reasonsarray of objectNo—
(ImageJob).completionReview.productFidelity.reasons[].nodeHandlestringYesPattern ^node:.
(ImageJob).completionReview.productFidelity.reasons[].reasonstringYes—
(ImageJob).completionReview.deliveryCanvasCompletionDeliveryYesGenerated-output delivery evidence. A blocked state prevents a Done claim.
(ImageJob).completionReview.delivery.statusstringYesOne of clear, blocked.
(ImageJob).completionReview.delivery.reasonsarray of stringNo—
(ImageJob).completionReview.delivery.pendingOutputHandlesarray of stringYes—
(ImageJob).completionReview.delivery.failedOutputHandlesarray of stringYes—
(ImageJob).completionReview.delivery.nonDurableOutputHandlesarray of stringYes—
(ImageJob).completionReview.blockingFindingCodesarray of stringYes—
(ImageJob).completionReview.advisoryFindingCodesarray of stringYes—
(RecipeRun).schemaVersion1Yes—
(RecipeRun).idstringYesPattern ^recipe-.
(RecipeRun).rawIdstringYesPattern ^recipe-.
(RecipeRun).handlestringYesPattern ^run:recipe-.
(RecipeRun).runstringYesPattern ^run:recipe-.
(RecipeRun).kind“recipe”Yes—
(RecipeRun).operation“recipe”Yes—
(RecipeRun).statusstringYesOne of queued, running, succeeded, failed, canceled.
(RecipeRun).recipeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(RecipeRun).recipeHandlestringYesPattern ^recipe:.
(RecipeRun).recipeVersionstringYes—
(RecipeRun).recipeInstanceNodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(RecipeRun).recipeInstanceNodeHandlestringYesPattern ^node:.
(RecipeRun).canvasIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(RecipeRun).canvasHandlestringYesPattern ^canvas:.
(RecipeRun).canvasUrlstring (uri)No—
(RecipeRun).inputsarray of RecipeRunInputBindingYes—
(RecipeRun).inputs[].keystringYes—
(RecipeRun).inputs[].labelstringYes—
(RecipeRun).inputs[].typestringYesOne of image, text, sticky.
(RecipeRun).inputs[].nodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(RecipeRun).inputs[].nodeHandlestringYesPattern ^node:.
(RecipeRun).inputs[].sourceHandlestringNoPattern ^(?:node|asset):.
(RecipeRun).inputs[].summarystringYes—
(RecipeRun).outputsarray of RecipeRunOutputYes—
(RecipeRun).outputs[].keystringYes—
(RecipeRun).outputs[].labelstringYes—
(RecipeRun).outputs[].typestringYesOne of image, text, sticky.
(RecipeRun).outputs[].statusstringYesOne of pending, running, succeeded, failed, canceled.
(RecipeRun).outputs[].nodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(RecipeRun).outputs[].nodeHandlestringYesPattern ^node:.
(RecipeRun).outputs[].jobIdstring (uuid)No—
(RecipeRun).outputs[].runHandlestringNoPattern ^run:.
(RecipeRun).outputs[].assetIdstringNoPattern ^asset:.
(RecipeRun).outputs[].valuestringNomax length 24000.
(RecipeRun).outputs[].startedAtstring (date-time)No—
(RecipeRun).outputs[].completedAtstring (date-time)No—
(RecipeRun).outputs[].failureRecipeRunFailureNo—
(RecipeRun).outputs[].failure.codestringYesOne of recipe_input_invalid, recipe_step_failed, recipe_output_missing, recipe_run_canceled, delegation_revoked.
(RecipeRun).outputs[].failure.messagestringYes—
(RecipeRun).outputs[].failure.retryablebooleanYes—
(RecipeRun).outputs[].failure.outputKeystringNo—
(RecipeRun).targetsarray of stringYes—
(RecipeRun).currentStepstringYes—
(RecipeRun).nextStepstringNo—
(RecipeRun).estimatedSecondsintegerYesmin 1.
(RecipeRun).durationMsintegerNomin 0.
(RecipeRun).timingImageJobTimingYes—
(RecipeRun).timing.createdAtstring (date-time)No—
(RecipeRun).timing.queuedAtstring (date-time)No—
(RecipeRun).timing.startedAtstring (date-time)No—
(RecipeRun).timing.completedAtstring (date-time)No—
(RecipeRun).timing.queueDurationMsintegerNomin 0.
(RecipeRun).timing.executionDurationMsintegerNomin 0.
(RecipeRun).timing.totalDurationMsintegerNomin 0.
(RecipeRun).failureRecipeRunFailureNo—
(RecipeRun).failure.codestringYesOne of recipe_input_invalid, recipe_step_failed, recipe_output_missing, recipe_run_canceled, delegation_revoked.
(RecipeRun).failure.messagestringYes—
(RecipeRun).failure.retryablebooleanYes—
(RecipeRun).failure.outputKeystringNo—
(RecipeRun).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.
(RecipeRun).webhook.idstringYesPattern ^webhook:.
(RecipeRun).webhook.statusstringYesOne of pending, delivering, delivered, failed.
(RecipeRun).webhook.attemptsintegerYesmin 0.
(RecipeRun).webhook.nextAttemptAtstring (date-time)No—
(RecipeRun).webhook.lastAttemptAtstring (date-time)No—
(RecipeRun).webhook.deliveredAtstring (date-time)No—
(RecipeRun).webhook.lastStatusintegerNomin 100, max 599.
(RecipeRun).webhook.errorCodestringNoOne of invalid_destination, delivery_failed, redirect_not_allowed, endpoint_rejected, secret_unavailable, finalization_unavailable, finalization_auth_unavailable, finalization_auth_expired, finalization_failed.
(RecipeRun).replayedbooleanNo—
(RecipeRun).pollUrlstringYesPattern ^/api/canvas-agent/v1/runs/.
(RecipeRun).createdAtstring (date-time)Yes—
(RecipeRun).updatedAtstring (date-time)Yes—
(RecipeRun).startedAtstring (date-time)No—
(RecipeRun).completedAtstring (date-time)No—
(RecipeRun).canceledAtstring (date-time)No—
(RecipeRun).completionReviewCanvasCompletionReviewNo—
(RecipeRun).completionReview.statusstringYesOne of ready, needs-review, blocked.
(RecipeRun).completionReview.doneClaimAllowedbooleanYesFalse while agent-owned spatial or lineage findings remain, or a generated output is pending, failed, or non-durable.
(RecipeRun).completionReview.instructionstringYes—
(RecipeRun).completionReview.outputsCanvasCompletionOutputsYesGenerated-output count and durable, pending, and failed breakdown.
(RecipeRun).completionReview.outputs.countintegerYesmin 0.
(RecipeRun).completionReview.outputs.durableCountintegerYesmin 0.
(RecipeRun).completionReview.outputs.pendingCountintegerYesmin 0.
(RecipeRun).completionReview.outputs.failedCountintegerYesmin 0.
(RecipeRun).completionReview.outputs.handlesarray of stringYes—
(RecipeRun).completionReview.overlapCanvasCompletionFindingAreaYes—
(RecipeRun).completionReview.overlap.statusstringYesOne of clear, needs-review, blocked.
(RecipeRun).completionReview.overlap.findingCodesarray of stringYes—
(RecipeRun).completionReview.overlap.nodeHandlesarray of stringYes—
(RecipeRun).completionReview.overlap.connectionHandlesarray of stringYes—
(RecipeRun).completionReview.containmentCanvasCompletionFindingAreaYes—
(RecipeRun).completionReview.containment.statusstringYesOne of clear, needs-review, blocked.
(RecipeRun).completionReview.containment.findingCodesarray of stringYes—
(RecipeRun).completionReview.containment.nodeHandlesarray of stringYes—
(RecipeRun).completionReview.containment.connectionHandlesarray of stringYes—
(RecipeRun).completionReview.referenceLineageCanvasCompletionFindingAreaYes—
(RecipeRun).completionReview.referenceLineage.statusstringYesOne of clear, needs-review, blocked.
(RecipeRun).completionReview.referenceLineage.findingCodesarray of stringYes—
(RecipeRun).completionReview.referenceLineage.nodeHandlesarray of stringYes—
(RecipeRun).completionReview.referenceLineage.connectionHandlesarray of stringYes—
(RecipeRun).completionReview.productFidelityCanvasProductFidelityReviewYesA conservative review signal, not an authoritative visual inspection.
(RecipeRun).completionReview.productFidelity.statusstringYesOne of not-applicable, needs-review, passed.
(RecipeRun).completionReview.productFidelity.reviewedOutputCountintegerYesmin 0.
(RecipeRun).completionReview.productFidelity.needsReviewOutputHandlesarray of stringYes—
(RecipeRun).completionReview.productFidelity.evidenceMissingOutputHandlesarray of stringYes—
(RecipeRun).completionReview.productFidelity.reasonsarray of objectNo—
(RecipeRun).completionReview.productFidelity.reasons[].nodeHandlestringYesPattern ^node:.
(RecipeRun).completionReview.productFidelity.reasons[].reasonstringYes—
(RecipeRun).completionReview.deliveryCanvasCompletionDeliveryYesGenerated-output delivery evidence. A blocked state prevents a Done claim.
(RecipeRun).completionReview.delivery.statusstringYesOne of clear, blocked.
(RecipeRun).completionReview.delivery.reasonsarray of stringNo—
(RecipeRun).completionReview.delivery.pendingOutputHandlesarray of stringYes—
(RecipeRun).completionReview.delivery.failedOutputHandlesarray of stringYes—
(RecipeRun).completionReview.delivery.nonDurableOutputHandlesarray of stringYes—
(RecipeRun).completionReview.blockingFindingCodesarray of stringYes—
(RecipeRun).completionReview.advisoryFindingCodesarray of stringYes—

Example

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

DELETE /runs/{runId}

Cancel a shared Run

  • Operation id: cancelRun
  • Scopes: Requires job:manage.
  • CLI equivalent: gavana run cancel

Parameters

ParameterInTypeRequiredNotes
runIdpathstringYesPattern ^(?:run:)?[A-Za-z0-9_-]{1,180}$.

Responses

StatusPayloadMeaning
200RunA shared Recipe, image, or Action Run.
202RunA shared Recipe, image, or Action Run.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

200 response body

FieldTypeRequiredNotes
(ImageJob).idstringYesPattern ^job:.
(ImageJob).runstringYesPattern ^run:.
(ImageJob).kindstringYesOne of image, action.
(ImageJob).pollUrlstringYesPattern ^/api/canvas-agent/v1/runs/.
(ImageJob).rawIdstring (uuid)No—
(ImageJob).statusstringYesCurrent temporary job state. Successful results retain the observation record for 24 hours before the first successful server finalization and 15 minutes after it; an authenticated Run GET or pre-callback worker finalization both count. Failed and canceled records keep the normal 24-hour window. Expired tombstones remain seven days. One of preparing, queued, running, finalizing, canceling, succeeded, failed, canceled, expired.
(ImageJob).estimatedSecondsintegerNoTypical provider runtime for the selected model. This is guidance, not a deadline. min 1.
(ImageJob).durationMsintegerNoTotal observed duration once the job is terminal. min 0.
(ImageJob).timingImageJobTimingNo—
(ImageJob).timing.createdAtstring (date-time)No—
(ImageJob).timing.queuedAtstring (date-time)No—
(ImageJob).timing.startedAtstring (date-time)No—
(ImageJob).timing.completedAtstring (date-time)No—
(ImageJob).timing.queueDurationMsintegerNomin 0.
(ImageJob).timing.executionDurationMsintegerNomin 0.
(ImageJob).timing.totalDurationMsintegerNomin 0.
(ImageJob).failureImageJobFailureNo—
(ImageJob).failure.codestringYesOne of provider_authentication_failed, provider_timeout, provider_rate_limited, provider_rejected, provider_unavailable, runtime_failed, action_input_invalid, result_expired.
(ImageJob).failure.messagestringYes—
(ImageJob).failure.retryablebooleanYes—
(ImageJob).failure.providerStatusintegerNomin 400, max 599.
(ImageJob).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.
(ImageJob).webhook.idstringYesPattern ^webhook:.
(ImageJob).webhook.statusstringYesOne of pending, delivering, delivered, failed.
(ImageJob).webhook.attemptsintegerYesmin 0.
(ImageJob).webhook.nextAttemptAtstring (date-time)No—
(ImageJob).webhook.lastAttemptAtstring (date-time)No—
(ImageJob).webhook.deliveredAtstring (date-time)No—
(ImageJob).webhook.lastStatusintegerNomin 100, max 599.
(ImageJob).webhook.errorCodestringNoOne of invalid_destination, delivery_failed, redirect_not_allowed, endpoint_rejected, secret_unavailable, finalization_unavailable, finalization_auth_unavailable, finalization_auth_expired, finalization_failed.
(ImageJob).replayedbooleanNo—
(ImageJob).operationstringNoOne of generate, edit, variations, action.
(ImageJob).actionIdstringNoPattern ^action:.
(ImageJob).actionVersionstringNo—
(ImageJob).canvasIdstringNoPattern ^canvas:.
(ImageJob).canvasRevisionstringNo—
(ImageJob).canvasUrlstring (uri)No—
(ImageJob).canceledAtstring (date-time)No—
(ImageJob).cancelReasonstringNoOne of stale_preparing, user_requested, setup_failed.
(ImageJob).targetsarray of stringNo—
(ImageJob).referencesarray of stringNo—
(ImageJob).referenceInputsarray of ImageReferenceInputNoExact reference handles and optional semantic roles used by the provider request.
(ImageJob).referenceInputs[].handlestringYesPattern ^(?:node:[A-Za-z0-9_-]{1,180}|asset:(?:[A-Za-z0-9_-]{1,180}:)?[A-Za-z0-9_-]{1,180})$.
(ImageJob).referenceInputs[].rolestringNoOne of identity, construction, texture, fit, style.
(ImageJob).imagesarray of ImageJobResultImageNo—
(ImageJob).images[].assetIdstringYesPattern ^asset:.
(ImageJob).images[].nodeIdstringYesPattern ^node:.
(ImageJob).images[].mediaTypestringNoPattern ^image/.
(ImageJob).images[].widthintegerNomin 1.
(ImageJob).images[].heightintegerNomin 1.
(ImageJob).images[].bytesintegerNomin 1.
(ImageJob).images[].previewUrlstring (uri)Yes—
(ImageJob).images[].markdownstringNo—
(ImageJob).completionReviewCanvasCompletionReviewNo—
(ImageJob).completionReview.statusstringYesOne of ready, needs-review, blocked.
(ImageJob).completionReview.doneClaimAllowedbooleanYesFalse while agent-owned spatial or lineage findings remain, or a generated output is pending, failed, or non-durable.
(ImageJob).completionReview.instructionstringYes—
(ImageJob).completionReview.outputsCanvasCompletionOutputsYesGenerated-output count and durable, pending, and failed breakdown.
(ImageJob).completionReview.outputs.countintegerYesmin 0.
(ImageJob).completionReview.outputs.durableCountintegerYesmin 0.
(ImageJob).completionReview.outputs.pendingCountintegerYesmin 0.
(ImageJob).completionReview.outputs.failedCountintegerYesmin 0.
(ImageJob).completionReview.outputs.handlesarray of stringYes—
(ImageJob).completionReview.overlapCanvasCompletionFindingAreaYes—
(ImageJob).completionReview.overlap.statusstringYesOne of clear, needs-review, blocked.
(ImageJob).completionReview.overlap.findingCodesarray of stringYes—
(ImageJob).completionReview.overlap.nodeHandlesarray of stringYes—
(ImageJob).completionReview.overlap.connectionHandlesarray of stringYes—
(ImageJob).completionReview.containmentCanvasCompletionFindingAreaYes—
(ImageJob).completionReview.containment.statusstringYesOne of clear, needs-review, blocked.
(ImageJob).completionReview.containment.findingCodesarray of stringYes—
(ImageJob).completionReview.containment.nodeHandlesarray of stringYes—
(ImageJob).completionReview.containment.connectionHandlesarray of stringYes—
(ImageJob).completionReview.referenceLineageCanvasCompletionFindingAreaYes—
(ImageJob).completionReview.referenceLineage.statusstringYesOne of clear, needs-review, blocked.
(ImageJob).completionReview.referenceLineage.findingCodesarray of stringYes—
(ImageJob).completionReview.referenceLineage.nodeHandlesarray of stringYes—
(ImageJob).completionReview.referenceLineage.connectionHandlesarray of stringYes—
(ImageJob).completionReview.productFidelityCanvasProductFidelityReviewYesA conservative review signal, not an authoritative visual inspection.
(ImageJob).completionReview.productFidelity.statusstringYesOne of not-applicable, needs-review, passed.
(ImageJob).completionReview.productFidelity.reviewedOutputCountintegerYesmin 0.
(ImageJob).completionReview.productFidelity.needsReviewOutputHandlesarray of stringYes—
(ImageJob).completionReview.productFidelity.evidenceMissingOutputHandlesarray of stringYes—
(ImageJob).completionReview.productFidelity.reasonsarray of objectNo—
(ImageJob).completionReview.productFidelity.reasons[].nodeHandlestringYesPattern ^node:.
(ImageJob).completionReview.productFidelity.reasons[].reasonstringYes—
(ImageJob).completionReview.deliveryCanvasCompletionDeliveryYesGenerated-output delivery evidence. A blocked state prevents a Done claim.
(ImageJob).completionReview.delivery.statusstringYesOne of clear, blocked.
(ImageJob).completionReview.delivery.reasonsarray of stringNo—
(ImageJob).completionReview.delivery.pendingOutputHandlesarray of stringYes—
(ImageJob).completionReview.delivery.failedOutputHandlesarray of stringYes—
(ImageJob).completionReview.delivery.nonDurableOutputHandlesarray of stringYes—
(ImageJob).completionReview.blockingFindingCodesarray of stringYes—
(ImageJob).completionReview.advisoryFindingCodesarray of stringYes—
(RecipeRun).schemaVersion1Yes—
(RecipeRun).idstringYesPattern ^recipe-.
(RecipeRun).rawIdstringYesPattern ^recipe-.
(RecipeRun).handlestringYesPattern ^run:recipe-.
(RecipeRun).runstringYesPattern ^run:recipe-.
(RecipeRun).kind“recipe”Yes—
(RecipeRun).operation“recipe”Yes—
(RecipeRun).statusstringYesOne of queued, running, succeeded, failed, canceled.
(RecipeRun).recipeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(RecipeRun).recipeHandlestringYesPattern ^recipe:.
(RecipeRun).recipeVersionstringYes—
(RecipeRun).recipeInstanceNodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(RecipeRun).recipeInstanceNodeHandlestringYesPattern ^node:.
(RecipeRun).canvasIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(RecipeRun).canvasHandlestringYesPattern ^canvas:.
(RecipeRun).canvasUrlstring (uri)No—
(RecipeRun).inputsarray of RecipeRunInputBindingYes—
(RecipeRun).inputs[].keystringYes—
(RecipeRun).inputs[].labelstringYes—
(RecipeRun).inputs[].typestringYesOne of image, text, sticky.
(RecipeRun).inputs[].nodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(RecipeRun).inputs[].nodeHandlestringYesPattern ^node:.
(RecipeRun).inputs[].sourceHandlestringNoPattern ^(?:node|asset):.
(RecipeRun).inputs[].summarystringYes—
(RecipeRun).outputsarray of RecipeRunOutputYes—
(RecipeRun).outputs[].keystringYes—
(RecipeRun).outputs[].labelstringYes—
(RecipeRun).outputs[].typestringYesOne of image, text, sticky.
(RecipeRun).outputs[].statusstringYesOne of pending, running, succeeded, failed, canceled.
(RecipeRun).outputs[].nodeIdstringYesPattern ^[A-Za-z0-9_-]{1,180}$.
(RecipeRun).outputs[].nodeHandlestringYesPattern ^node:.
(RecipeRun).outputs[].jobIdstring (uuid)No—
(RecipeRun).outputs[].runHandlestringNoPattern ^run:.
(RecipeRun).outputs[].assetIdstringNoPattern ^asset:.
(RecipeRun).outputs[].valuestringNomax length 24000.
(RecipeRun).outputs[].startedAtstring (date-time)No—
(RecipeRun).outputs[].completedAtstring (date-time)No—
(RecipeRun).outputs[].failureRecipeRunFailureNo—
(RecipeRun).outputs[].failure.codestringYesOne of recipe_input_invalid, recipe_step_failed, recipe_output_missing, recipe_run_canceled, delegation_revoked.
(RecipeRun).outputs[].failure.messagestringYes—
(RecipeRun).outputs[].failure.retryablebooleanYes—
(RecipeRun).outputs[].failure.outputKeystringNo—
(RecipeRun).targetsarray of stringYes—
(RecipeRun).currentStepstringYes—
(RecipeRun).nextStepstringNo—
(RecipeRun).estimatedSecondsintegerYesmin 1.
(RecipeRun).durationMsintegerNomin 0.
(RecipeRun).timingImageJobTimingYes—
(RecipeRun).timing.createdAtstring (date-time)No—
(RecipeRun).timing.queuedAtstring (date-time)No—
(RecipeRun).timing.startedAtstring (date-time)No—
(RecipeRun).timing.completedAtstring (date-time)No—
(RecipeRun).timing.queueDurationMsintegerNomin 0.
(RecipeRun).timing.executionDurationMsintegerNomin 0.
(RecipeRun).timing.totalDurationMsintegerNomin 0.
(RecipeRun).failureRecipeRunFailureNo—
(RecipeRun).failure.codestringYesOne of recipe_input_invalid, recipe_step_failed, recipe_output_missing, recipe_run_canceled, delegation_revoked.
(RecipeRun).failure.messagestringYes—
(RecipeRun).failure.retryablebooleanYes—
(RecipeRun).failure.outputKeystringNo—
(RecipeRun).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.
(RecipeRun).webhook.idstringYesPattern ^webhook:.
(RecipeRun).webhook.statusstringYesOne of pending, delivering, delivered, failed.
(RecipeRun).webhook.attemptsintegerYesmin 0.
(RecipeRun).webhook.nextAttemptAtstring (date-time)No—
(RecipeRun).webhook.lastAttemptAtstring (date-time)No—
(RecipeRun).webhook.deliveredAtstring (date-time)No—
(RecipeRun).webhook.lastStatusintegerNomin 100, max 599.
(RecipeRun).webhook.errorCodestringNoOne of invalid_destination, delivery_failed, redirect_not_allowed, endpoint_rejected, secret_unavailable, finalization_unavailable, finalization_auth_unavailable, finalization_auth_expired, finalization_failed.
(RecipeRun).replayedbooleanNo—
(RecipeRun).pollUrlstringYesPattern ^/api/canvas-agent/v1/runs/.
(RecipeRun).createdAtstring (date-time)Yes—
(RecipeRun).updatedAtstring (date-time)Yes—
(RecipeRun).startedAtstring (date-time)No—
(RecipeRun).completedAtstring (date-time)No—
(RecipeRun).canceledAtstring (date-time)No—
(RecipeRun).completionReviewCanvasCompletionReviewNo—
(RecipeRun).completionReview.statusstringYesOne of ready, needs-review, blocked.
(RecipeRun).completionReview.doneClaimAllowedbooleanYesFalse while agent-owned spatial or lineage findings remain, or a generated output is pending, failed, or non-durable.
(RecipeRun).completionReview.instructionstringYes—
(RecipeRun).completionReview.outputsCanvasCompletionOutputsYesGenerated-output count and durable, pending, and failed breakdown.
(RecipeRun).completionReview.outputs.countintegerYesmin 0.
(RecipeRun).completionReview.outputs.durableCountintegerYesmin 0.
(RecipeRun).completionReview.outputs.pendingCountintegerYesmin 0.
(RecipeRun).completionReview.outputs.failedCountintegerYesmin 0.
(RecipeRun).completionReview.outputs.handlesarray of stringYes—
(RecipeRun).completionReview.overlapCanvasCompletionFindingAreaYes—
(RecipeRun).completionReview.overlap.statusstringYesOne of clear, needs-review, blocked.
(RecipeRun).completionReview.overlap.findingCodesarray of stringYes—
(RecipeRun).completionReview.overlap.nodeHandlesarray of stringYes—
(RecipeRun).completionReview.overlap.connectionHandlesarray of stringYes—
(RecipeRun).completionReview.containmentCanvasCompletionFindingAreaYes—
(RecipeRun).completionReview.containment.statusstringYesOne of clear, needs-review, blocked.
(RecipeRun).completionReview.containment.findingCodesarray of stringYes—
(RecipeRun).completionReview.containment.nodeHandlesarray of stringYes—
(RecipeRun).completionReview.containment.connectionHandlesarray of stringYes—
(RecipeRun).completionReview.referenceLineageCanvasCompletionFindingAreaYes—
(RecipeRun).completionReview.referenceLineage.statusstringYesOne of clear, needs-review, blocked.
(RecipeRun).completionReview.referenceLineage.findingCodesarray of stringYes—
(RecipeRun).completionReview.referenceLineage.nodeHandlesarray of stringYes—
(RecipeRun).completionReview.referenceLineage.connectionHandlesarray of stringYes—
(RecipeRun).completionReview.productFidelityCanvasProductFidelityReviewYesA conservative review signal, not an authoritative visual inspection.
(RecipeRun).completionReview.productFidelity.statusstringYesOne of not-applicable, needs-review, passed.
(RecipeRun).completionReview.productFidelity.reviewedOutputCountintegerYesmin 0.
(RecipeRun).completionReview.productFidelity.needsReviewOutputHandlesarray of stringYes—
(RecipeRun).completionReview.productFidelity.evidenceMissingOutputHandlesarray of stringYes—
(RecipeRun).completionReview.productFidelity.reasonsarray of objectNo—
(RecipeRun).completionReview.productFidelity.reasons[].nodeHandlestringYesPattern ^node:.
(RecipeRun).completionReview.productFidelity.reasons[].reasonstringYes—
(RecipeRun).completionReview.deliveryCanvasCompletionDeliveryYesGenerated-output delivery evidence. A blocked state prevents a Done claim.
(RecipeRun).completionReview.delivery.statusstringYesOne of clear, blocked.
(RecipeRun).completionReview.delivery.reasonsarray of stringNo—
(RecipeRun).completionReview.delivery.pendingOutputHandlesarray of stringYes—
(RecipeRun).completionReview.delivery.failedOutputHandlesarray of stringYes—
(RecipeRun).completionReview.delivery.nonDurableOutputHandlesarray of stringYes—
(RecipeRun).completionReview.blockingFindingCodesarray of stringYes—
(RecipeRun).completionReview.advisoryFindingCodesarray of stringYes—

Example

curl -X DELETE "https://app.gavana.ai/api/canvas-agent/v1/runs/run:4c7a9e12" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN"

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