verify
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 |
GET /v1/shared-verifications/{token}
Section titled “GET /v1/shared-verifications/{token}”Operation ID: getSharedVerification
Read the minimal projection authorized by an unexpired share capability.
Authentication: none (anonymous).
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
token |
path | string | yes | Pattern: ^[^\s/]+$. Max length 128. |
Responses
Section titled “Responses”| Status | Description | Body |
|---|---|---|
| 200 | Successful Response | application/json SharedVerificationResponse |
| 404 | Not Found | application/json ErrorResponse |
| 422 | Validation Error | application/json HTTPValidationError |
200 response fields
Section titled “200 response fields”| 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).
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
verification_id |
path | string | yes | Pattern: ^vfy_[a-z2-7]{16}$. |
Responses
Section titled “Responses”| 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 |
200 response fields
Section titled “200 response fields”| 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).
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
verification_id |
path | string | yes | Pattern: ^vfy_[a-z2-7]{16}$. |
Request body
Section titled “Request body”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. |
Responses
Section titled “Responses”| 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 |
202 response fields
Section titled “202 response fields”| 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).
Parameters
Section titled “Parameters”| 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. |
Responses
Section titled “Responses”| 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 |
200 response fields
Section titled “200 response fields”| 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).
Parameters
Section titled “Parameters”| 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. |
Request body
Section titled “Request body”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. |
Responses
Section titled “Responses”| 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 |
201 response fields
Section titled “201 response fields”| 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. |
GET /v1/verification-reports/{report_id}
Section titled “GET /v1/verification-reports/{report_id}”Operation ID: getVerificationReport
Download one tenant-owned immutable evidence-derived report.
Authentication: Authorization: Bearer <API key or console session> (Authentication).
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
report_id |
path | string | yes | Pattern: ^vrpt_[a-z2-7]{16}$. |
Responses
Section titled “Responses”| 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 |
200 response fields
Section titled “200 response fields”| 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).
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
share_id |
path | string | yes | Pattern: ^vshr_[a-z2-7]{16}$. |
Request body
Section titled “Request body”application/json: CloseShareRequest (required)
| Field | Type | Required | Description |
|---|---|---|---|
state |
enum | yes | One of: revoked, unpublished. |
Responses
Section titled “Responses”| 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 |
200 response fields
Section titled “200 response fields”| Field | Type | Required | Description |
|---|---|---|---|
share_id |
string | yes | |
state |
enum | yes | One of: revoked, unpublished. |
POST /v1/verifications
Section titled “POST /v1/verifications”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).
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
Idempotency-Key |
header | string | yes | Pattern: ^[!-~]+$. Max length 200. |
Request body
Section titled “Request body”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}$. |
Responses
Section titled “Responses”| 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 |
202 response fields
Section titled “202 response fields”| 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}$. |
GET /v1/verifications/{verification_id}
Section titled “GET /v1/verifications/{verification_id}”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).
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
verification_id |
path | string | yes | Pattern: ^vjob_[a-z2-7]{16}$. |
Responses
Section titled “Responses”| 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 |
200 response fields
Section titled “200 response fields”| 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}$. |
