Skip to content

verify

llms.txtAsk agent

Stored-object verification, recovery, reports, and revocable sharing.

Method Path Operation ID
GET /v1/shared-verifications/{token} getSharedVerification
GET /v1/verification-evidence/{verification_id} getVerificationEvidence
POST /v1/verification-evidence/{verification_id}/reports createVerificationReport
GET /v1/verification-evidence/{verification_id}/shares listVerificationShares
POST /v1/verification-evidence/{verification_id}/shares createVerificationShare
GET /v1/verification-reports/{report_id} getVerificationReport
POST /v1/verification-shares/{share_id}/close closeVerificationShare
POST /v1/verifications createVerification
GET /v1/verifications/{verification_id} getVerification

Operation ID: getSharedVerification

Read the minimal projection authorized by an unexpired share capability.

Authentication: none (anonymous).

Name In Type Required Description
token path string yes Pattern: ^[^\s/]+$. Max length 128.
Status Description Body
200 Successful Response application/json SharedVerificationResponse
404 Not Found application/json ErrorResponse
422 Validation Error application/json HTTPValidationError
Field Type Required Description
creator CreatorDisclosureResponse or null no Tenant brand and, at most, the creator’s display name. A share link is unauthenticated, so this never carries an email address or the manifest reference. Resolved live on every read so an erasure takes effect immediately.
result object yes
schema_version string yes
verification_id string yes

GET /v1/verification-evidence/{verification_id}

Section titled “GET /v1/verification-evidence/{verification_id}”

Operation ID: getVerificationEvidence

Read complete privacy-safe evidence while keeping vjob and vfy identity distinct.

Read ready immutable vfy_ evidence. A vfy_ returned by a completed Sign job is immediately readable here; use /v1/verifications/{verification_id} only for vjob_ polling.

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

Name In Type Required Description
verification_id path string yes Pattern: ^vfy_[a-z2-7]{16}$.
Status Description Body
200 Successful Response application/json VerificationEvidenceResponse
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 or null yes
created_at string yes
creator CreatorDisclosureResponse or null no Creator attribution for the verified bytes, resolved live and never frozen. A sibling of result, not a member of it: who made a file is not a validation outcome. Absent when no attribution resolves; present with a non-disclosed disclosure_state when one resolves but cannot be disclosed. assurance_level is always self_asserted in v1 and Original Pictures has not verified the address.
evidence_id string yes Ready immutable verification evidence; never an asynchronous job ID. Pattern: ^vfy_[a-z2-7]{16}$.
object_sha256 string yes Pattern: ^[0-9a-f]{64}$.
overall string yes
policy_version string or null yes
publication_id string or null yes
receipt_id string or null yes
report_eligible boolean yes
result object yes
share_eligible boolean yes
signing_job_id string or null yes
storage_version_sha256 string yes Pattern: ^[0-9a-f]{64}$.
subject_id string yes Immutable asset object/version whose exact bytes were evaluated. Pattern: ^aob_[a-z2-7]{16}$.
subject_type string yes
trust_list_version string or null yes
validated_at string yes
validation_path string or null yes
verification_job_id string or null yes

POST /v1/verification-evidence/{verification_id}/reports

Section titled “POST /v1/verification-evidence/{verification_id}/reports”

Operation ID: createVerificationReport

Generate a deterministic evidence-derived machine or human report.

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

Name In Type Required Description
verification_id path string yes Pattern: ^vfy_[a-z2-7]{16}$.

application/json: CreateReportRequest (required)

Field Type Required Description
format ReportFormat yes One of: machine_json, human_pdf.
include_creator boolean no Opt in to disclosing creator attribution in the rendered report, bounded by the tenant’s console_disclosure policy. Off by default so the ordinary artifact carries no personal data. A report is immutable once rendered, so a report created with disclosure is purged rather than rewritten if the creator is later erased. Default false.
Status Description Body
202 Successful Response application/json ReportResponse
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 or null no
content_sha256 string or null no
content_type string or null no
format string yes
payload object or null no
report_id string yes
state string yes

GET /v1/verification-evidence/{verification_id}/shares

Section titled “GET /v1/verification-evidence/{verification_id}/shares”

Operation ID: listVerificationShares

List share lifecycle metadata without bearer capabilities or secret URLs.

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

Name In Type Required Description
verification_id path string yes Pattern: ^vfy_[a-z2-7]{16}$.
cursor query string or null no
limit query integer no Minimum 1. Maximum 100. Default 50.
Status Description Body
200 Successful Response application/json VerificationSharePageResponse
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
items array of VerificationShareMetadataResponse yes
next_cursor string or null yes

POST /v1/verification-evidence/{verification_id}/shares

Section titled “POST /v1/verification-evidence/{verification_id}/shares”

Operation ID: createVerificationShare

Issue one expiring revocable capability for a minimal verification projection.

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

Name In Type Required Description
verification_id path string yes Pattern: ^vfy_[a-z2-7]{16}$.
Idempotency-Key header string yes Pattern: ^[!-~]+$. Max length 200.

application/json: CreateShareRequest (required)

Field Type Required Description
expires_at string or null no
include_attribution boolean no Opt in to publishing creator attribution on this share. The share carries the tenant brand and at most the creator’s display name, bounded by the tenant’s share_disclosure policy, and never an email address. Disclosure is resolved on every read rather than frozen into the share. Default false.
Status Description Body
201 Successful Response application/json CreateShareResponse
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
share_id string yes
token string or null yes One-time bearer capability, present only on the first successful acceptance. An idempotent replay returns the same share_id with token omitted.

Operation ID: getVerificationReport

Download one tenant-owned immutable evidence-derived report.

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

Name In Type Required Description
report_id path string yes Pattern: ^vrpt_[a-z2-7]{16}$.
Status Description Body
200 Successful Response application/json ReportContentResponse
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
content_base64 string yes
content_sha256 string yes
content_type string yes

POST /v1/verification-shares/{share_id}/close

Section titled “POST /v1/verification-shares/{share_id}/close”

Operation ID: closeVerificationShare

Revoke or unpublish a verification share capability.

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

Name In Type Required Description
share_id path string yes Pattern: ^vshr_[a-z2-7]{16}$.

application/json: CloseShareRequest (required)

Field Type Required Description
state enum yes One of: revoked, unpublished.
Status Description Body
200 Successful Response application/json CloseShareResponse
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
share_id string yes
state enum yes One of: revoked, unpublished.

Operation ID: createVerification

Accept an immutable stored object for asynchronous public validation.

Accepts one immutable stored object for asynchronous verification. The 202 response is a status snapshot; poll the returned verification_id rather than holding the request open. For a sidecar container signed by another product, also name the uploaded .c2pa manifest store in manifest_object_id.

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

Name In Type Required Description
Idempotency-Key header string yes Pattern: ^[!-~]+$. Max length 200.

application/json: CreateVerificationRequest (required)

Field Type Required Description
manifest_object_id string or null no Optional. For a sidecar container another product signed: the immutable object identifier of the C2PA manifest store (.c2pa) you uploaded as application/c2pa beside the asset. Omit it to verify an asset whose manifest is inside the file, or a pair this service signed. A manifest published only at a remote reference is supported by fetching it and uploading it here; Verify never fetches a remote manifest itself.
object_id string yes Immutable asset object identifier (asset_object_id), not the parent asset_id. Pattern: ^aob_[a-z2-7]{16}$.
Status Description Body
202 Successful Response application/json VerificationResponse
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
completed_at string or null no Present only for terminal completed or failed states.
created_at string yes
evidence_id string or null no Immutable verification evidence identifier, present and readable only when state is completed. This is not a polling-job identifier.
failure_reason ReasonCode or null no Present only when state is failed.
result object or null no Present only when state is completed. A result status of recovery_only is a bounded soft-binding recovery and must not be treated as direct cryptographic C2PA validity; it is reported only when no manifest could be read. When a manifest was read, its finding (for example untrusted) is the status and any recovery match is supplementary. Results with schema_version op.public-verify-result.v2 may also carry manifest (a bounded summary of what the active manifest declares) and recovery.signals.
state VerifyState yes Lifecycle snapshot: accepted and running are non-terminal; completed and failed are terminal. Poll GET /v1/verifications/{verification_id} for transitions. One of: accepted, running, completed, failed.
verification_id string yes Asynchronous public Verify job/status identifier; poll this resource. Pattern: ^vjob_[a-z2-7]{16}$.

Operation ID: getVerification

Read durable direct-validation and subordinate recovery status.

Read an asynchronous verification snapshot. Poll no more often than every 2 seconds with bounded exponential backoff. A client-side timeout does not cancel the durable verification; resume later with the same verification_id.

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

Name In Type Required Description
verification_id path string yes Pattern: ^vjob_[a-z2-7]{16}$.
Status Description Body
200 Successful Response application/json VerificationResponse
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
completed_at string or null no Present only for terminal completed or failed states.
created_at string yes
evidence_id string or null no Immutable verification evidence identifier, present and readable only when state is completed. This is not a polling-job identifier.
failure_reason ReasonCode or null no Present only when state is failed.
result object or null no Present only when state is completed. A result status of recovery_only is a bounded soft-binding recovery and must not be treated as direct cryptographic C2PA validity; it is reported only when no manifest could be read. When a manifest was read, its finding (for example untrusted) is the status and any recovery match is supplementary. Results with schema_version op.public-verify-result.v2 may also carry manifest (a bounded summary of what the active manifest declares) and recovery.signals.
state VerifyState yes Lifecycle snapshot: accepted and running are non-terminal; completed and failed are terminal. Poll GET /v1/verifications/{verification_id} for transitions. One of: accepted, running, completed, failed.
verification_id string yes Asynchronous public Verify job/status identifier; poll this resource. Pattern: ^vjob_[a-z2-7]{16}$.