Skip to content

assets

llms.txtAsk agent

Tenant-scoped publication, download, receipt, and webhook evidence.

Method Path Operation ID
GET /v1/assets/{asset_id} getAsset
POST /v1/assets/{asset_id}/download createAssetDownload
POST /v1/assets/{asset_id}/preview createAssetPreview
GET /v1/assets/{asset_id}/preview/{capability} redeemAssetPreview
GET /v1/receipts/{receipt_id} getSigningReceipt
POST /v1/webhook-events/{event_id}/replay replayWebhookEvent

Operation ID: getAsset

Read tenant-scoped asset state and validated publication metadata.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Name In Type Required Description
asset_id path string yes Pattern: ^ast_[a-z2-7]{16}$.
Status Description Body
200 Successful Response application/json AssetResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
404 Not Found application/json ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
422 A verified email is unavailable for account provisioning. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
Field Type Required Description
asset_id string yes
created_at string yes
kind string yes
media_type string or null yes
publication PublicationResponse or null yes
status string yes

Operation ID: createAssetDownload

Create a short-lived GET capability for the exact validated S3 version.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Name In Type Required Description
asset_id path string yes Pattern: ^ast_[a-z2-7]{16}$.
Status Description Body
200 Successful Response application/json DownloadResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
404 Not Found application/json ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
422 A verified email is unavailable for account provisioning. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
Field Type Required Description
byte_length integer yes Immutable byte length of the exact published object. This field is always present on a successful authenticated download response.
expires_at string yes
filename string yes The name to save the asset under: the asset id plus the container’s own extension, so a signed audio/mp4 arrives as .m4a rather than .mp4. Added 2026-09-22 because the contract already described this value without exposing it – sidecar_manifest.filename is documented as ‘the asset’s own download filename plus .c2pa’, and that filename was computed and then dropped.
headers object yes
media_type enum yes One of: application/epub+zip, application/onnx, application/oxps, application/pdf, application/vnd.oasis.opendocument.text, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/x-jax, application/x-keras, application/x-mlnet, application/x-mxnet, application/x-npy, application/x-openvino-ir+xml, application/x-openvino-weights, application/x-pickle, application/x-protobuf, application/x-pytorch, application/x-tensorflow, application/x-tensorflow-savedmodel, application/x-zip-based, application/xhtml+xml, application/xml, audio/MPA, audio/aac, audio/flac, audio/mp4, audio/mpeg, audio/wav, audio/x-riff-based, font/otf, image/avif, image/gif, image/heic, image/heic-sequence, image/heif, image/heif-sequence, image/jpeg, image/jxl, image/png, image/svg+xml, image/tiff, image/webp, image/x-adobe-dng, image/x-riff-based, image/x-tiff-based, text/html, text/plain, text/xml, video/mp4, video/quicktime, video/x-bmff-based, video/x-msvideo, video/x-riff-based.
method const “GET” yes
sha256 string yes Lowercase SHA-256 of the exact published bytes. This field is always present on a successful authenticated download response. Pattern: ^[0-9a-f]{64}$.
sidecar_manifest SidecarManifestResponse or null no Present when the asset’s manifest travels beside it rather than inside it (the sidecar lane; the formats are listed by GET /v1/capabilities). Absent for every embedded format.
storage_version_sha256 string yes
url string yes

Operation ID: createAssetPreview

Create a short-lived GET capability for the asset’s governed preview derivative.

Mint one short-lived delivery for this asset’s preview derivative. A POST rather than a GET because it mints a new credential-bearing delivery every time; nothing about it is cacheable, and treating it as a read would invite exactly the caching a short-lived URL exists to avoid.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Name In Type Required Description
asset_id path string yes Pattern: ^ast_[a-z2-7]{16}$.
Status Description Body
200 Successful Response application/json PreviewResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
404 Not Found application/json ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
422 A verified email is unavailable for account provisioning. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
Field Type Required Description
byte_length integer yes
expires_at string yes
headers object yes
height integer yes
media_type const “image/jpeg” yes
method const “GET” yes
sha256 string yes Pattern: ^[0-9a-f]{64}$.
url string yes
width integer yes

GET /v1/assets/{asset_id}/preview/{capability}

Section titled “GET /v1/assets/{asset_id}/preview/{capability}”

Operation ID: redeemAssetPreview

Redeem one preview-only URL capability after fresh governance and version checks.

Redeem one bearer locator after re-authorizing every governed fact.

Authentication: none (anonymous).

Name In Type Required Description
asset_id path string yes Pattern: ^ast_[a-z2-7]{16}$.
capability path string yes Pattern: ^[A-Za-z0-9_-]+$. Max length 1024.
Status Description Body
200 Exact preview derivative bytes. image/jpeg any
404 The capability is malformed, expired, withdrawn, tenant-mismatched, or no longer names the exact preview derivative. Every case returns the same typed response. application/json ErrorResponse

Operation ID: getSigningReceipt

Read the privacy-safe immutable receipt for one validated publication.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Name In Type Required Description
receipt_id path string yes Pattern: ^rct_[a-z2-7]{16}$.
Status Description Body
200 Successful Response application/json ReceiptResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
404 Not Found application/json ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
422 A verified email is unavailable for account provisioning. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
Field Type Required Description
asset_id string yes
created_at string yes
evidence LegacySigningReceiptEvidenceResponse or SigningReceiptEvidenceResponse or SidecarSigningReceiptEvidenceResponse or RecoveredSigningReceiptEvidenceResponse or BindingReceiptEvidenceResponse yes
job_id string yes
receipt_id string yes

Operation ID: replayWebhookEvent

Authorize idempotent redelivery of one tenant-owned immutable webhook event.

Authentication: Authorization: Bearer <API key or console session> (Authentication).

Name In Type Required Description
event_id path string yes Pattern: ^whevt_[a-z2-7]{16}$.
Idempotency-Key header string yes Pattern: ^[!-~]+$. Max length 200.
Status Description Body
200 Successful Response application/json WebhookReplayResponse
401 The bearer credential is missing, malformed, expired, revoked, or otherwise invalid. Clerk sessions and scoped API keys fail identically and the body never reveals which credential was presented or whether it exists. application/json HttpErrorResponse
403 The provider deleted this identity, or the account is deactivated. A valid session cannot authorize a tombstoned identity back into use; an API key must also grant the scope required by the operation, and an operation is not classified by the route/scope policy and is denied by default. An API key restricted to client networks is refused from any other network with the API_KEY_IP_NOT_ALLOWED envelope. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
404 Not Found application/json ErrorResponse
409 Just-in-time provisioning conflicted: the verified email belongs to another provisioned account. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
422 A verified email is unavailable for account provisioning. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
429 The API key’s own request rate limit was exceeded (API_KEY_RATE_LIMITED). Only keys configured with a rate limit can receive this. Retryable after Retry-After seconds; the refused request consumed no capacity. application/json ErrorResponse
503 Credential verification is unavailable: Clerk session verification is not configured, no API-key pepper is enrolled, or bounded API-key verification is temporarily overloaded. Retryable. This operation may also return its reason-coded domain envelope with this status. application/json HttpErrorResponse or ErrorResponse
Field Type Required Description
delivery_count integer yes
event_id string yes