A credential offer is one wallet handoff. It references a credential definition and includes the claims for the credential you want to issue.
Every offer must reference a definition that already exists for the project behind your secret key. If neither the supplied credentialDefinitionId nor vct resolves, the API returns 404 credential_definition_not_found. See troubleshooting and the idempotent ensure helper in Issue with Next.js.

Create an offer by definition ID

POST /v1/openid4vc/issuance/offer

Create an offer by VCT

Use vct when you want Authbound to resolve the configured definition. POST /v1/openid4vc/issuance/offer

Return the wallet URI

Issuance status

offer_created, ready_to_issue, and token_issued are intermediate states. credential_issued means the issuer completed issuance. canceled, expired, and failed end the attempt without successful issuance. These server states alone do not prove a later wallet presentation succeeded. Revocation is separate: inspect credentialStatus and revokedAt. Revoking an issued credential does not change its issuance status from credential_issued.

Check status

GET /v1/openid4vc/issuance/{issuanceId}

Cancel an offer

POST /v1/openid4vc/issuance/{issuanceId}/cancel

Metadata field rule

Offer metadata only accepts string values (Record<string, string>). Stringify numbers, booleans, or nested objects before sending:
Sending non-string values returns 400 validation_error. Definition metadata accepts arbitrary JSON values, so this rule is offer-specific.

List issuance sessions

Use page.data for history and reconciliation. New wallet handoff data comes from createOffer.