Skip to Content

Jobs

Observe or cancel image, Action, and video jobs and download completed video output.

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

Operations

OperationPurposeScopes
GET /jobs/{jobId}Read or finalize an image, Action, or video jobjob:manage
DELETE /jobs/{jobId}Cancel an image, Action, or video jobjob:manage
GET /jobs/{jobId}/outputDownload completed video outputjob:manage

GET /jobs/{jobId}

Read or finalize an image, Action, or video job

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

Parameters

ParameterInTypeRequiredNotes
jobIdpathstringYesPattern ^(?:job:)?[0-9a-fA-F-]{36}$.

Responses

StatusPayloadMeaning
200ImageJob | VideoJobAn image, Action, or video job state or finalized result. Image and Action results follow the documented Run retention policy. Video records are retained for 30 days and expose a protected download URL after completion.
202ImageJob | VideoJobAn image, Action, or video job state or finalized result. Image and Action results follow the documented Run retention policy. Video records are retained for 30 days and expose a protected download URL after completion.
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—
(VideoJob).idstringYesPattern ^job:.
(VideoJob).rawIdstring (uuid)Yes—
(VideoJob).kind“video”Yes—
(VideoJob).operation“generate”Yes—
(VideoJob).pollUrlstringYesPattern ^/api/canvas-agent/v1/jobs/.
(VideoJob).statusstringYesOne of queued, running, succeeded, failed, canceled.
(VideoJob).modelobjectYes—
(VideoJob).model.idstringYes—
(VideoJob).model.namestringYes—
(VideoJob).progressnumberYesmin 0, max 100.
(VideoJob).estimatedSecondsintegerYesmin 1.
(VideoJob).providerRunIdstringNo—
(VideoJob).failureVideoJobFailureNo—
(VideoJob).failure.codestringYesOne of video_generation_failed, canceled.
(VideoJob).failure.messagestringYes—
(VideoJob).failure.retryablebooleanYes—
(VideoJob).videoobjectNo—
(VideoJob).video.downloadUrlstringYesPattern ^/api/canvas-agent/v1/jobs/.+/output$.
(VideoJob).replayedbooleanNo—
(VideoJob).createdAtstring (date-time)Yes—
(VideoJob).updatedAtstring (date-time)Yes—

Example

curl "https://app.gavana.ai/api/canvas-agent/v1/jobs/job:0f9c1a2b-3d4e-4f50-8a61-7b2c3d4e5f60" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN"

DELETE /jobs/{jobId}

Cancel an image, Action, or video job

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

Parameters

ParameterInTypeRequiredNotes
jobIdpathstringYesPattern ^(?:job:)?[0-9a-fA-F-]{36}$.

Responses

StatusPayloadMeaning
200ImageJob | VideoJobAn image, Action, or video job state or finalized result. Image and Action results follow the documented Run retention policy. Video records are retained for 30 days and expose a protected download URL after completion.
202ImageJob | VideoJobAn image, Action, or video job state or finalized result. Image and Action results follow the documented Run retention policy. Video records are retained for 30 days and expose a protected download URL after completion.
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—
(VideoJob).idstringYesPattern ^job:.
(VideoJob).rawIdstring (uuid)Yes—
(VideoJob).kind“video”Yes—
(VideoJob).operation“generate”Yes—
(VideoJob).pollUrlstringYesPattern ^/api/canvas-agent/v1/jobs/.
(VideoJob).statusstringYesOne of queued, running, succeeded, failed, canceled.
(VideoJob).modelobjectYes—
(VideoJob).model.idstringYes—
(VideoJob).model.namestringYes—
(VideoJob).progressnumberYesmin 0, max 100.
(VideoJob).estimatedSecondsintegerYesmin 1.
(VideoJob).providerRunIdstringNo—
(VideoJob).failureVideoJobFailureNo—
(VideoJob).failure.codestringYesOne of video_generation_failed, canceled.
(VideoJob).failure.messagestringYes—
(VideoJob).failure.retryablebooleanYes—
(VideoJob).videoobjectNo—
(VideoJob).video.downloadUrlstringYesPattern ^/api/canvas-agent/v1/jobs/.+/output$.
(VideoJob).replayedbooleanNo—
(VideoJob).createdAtstring (date-time)Yes—
(VideoJob).updatedAtstring (date-time)Yes—

Example

curl -X DELETE "https://app.gavana.ai/api/canvas-agent/v1/jobs/job:0f9c1a2b-3d4e-4f50-8a61-7b2c3d4e5f60" \ -H "Authorization: Bearer $GAVANA_AGENT_TOKEN"

GET /jobs/{jobId}/output

Download completed video output

  • Operation id: downloadVideoJobOutput
  • Scopes: Requires job:manage.
  • CLI equivalent: gavana video download

Parameters

ParameterInTypeRequiredNotes
jobIdpathstringYesPattern ^(?:job:)?[0-9a-fA-F-]{36}$.

Responses

StatusPayloadMeaning
200video/mp4The generated video stream. The concrete Content-Type is the provider result, such as video/mp4 or video/webm.
defaultErrorResponseA stable machine-readable error. The response always includes X-Request-ID.

Example

curl "https://app.gavana.ai/api/canvas-agent/v1/jobs/job:0f9c1a2b-3d4e-4f50-8a61-7b2c3d4e5f60/output" \ -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