Skip to main content
Requirements are outstanding actions that must be resolved before a capability becomes active. They appear as a map on the customer object, keyed by field name, with each entry describing the status and which capabilities it affects. For most customers with straightforward identity verification, requirements resolve automatically in under 60 seconds with no action needed. This page covers the cases where something is outstanding.

Requirements map

requirements is a map<string, Requirement> keyed by field name. The key itself is the requirement type:

Requirement statuses

Requirements in due, rejected, or overdue states need action. Requirements in pending are being processed asynchronously.

Requirement keys and resolution

All field-based requirements resolve by submitting the corresponding field via POST /v2/customers/{customerId}. The only non-field key is tos.
Requirement keys use canonical field names (e.g., addressSubdivision, addressPostalCode), which map to the address shape in the request body (state, postCode). A requirement keyed addressSubdivision is resolved by submitting individual.address.state.

The resolution loop

A typical requirements-resolution pattern:

Special cases

Terms of Service

When a tos requirement is present, the requirement entry includes a url with the current Terms of Service link:
  1. Read the url from requirements.tos and render the Terms of Service to the customer. This is required; do not skip.
  2. Submit the acceptance:

Rejected requirements

A requirement with status: rejected means the submitted value failed verification. Collect the field again from the customer and resubmit via POST /v2/customers/{customerId}.

What you cannot resolve

Some inactive capability states are driven by compliance decisions that cannot be unlocked via the API:
  • Sanctions matches
  • Adverse media
  • Manual compliance holds
Never expose compliance-specific reasons to end-users. Show a generic message such as “We’re unable to complete this request. Please contact support.” Coinbase handles these compliance decisions so you don’t have to make or surface them in your product.

Monitoring via webhooks

Subscribe to customer.capability.status_changed to be notified when requirements are resolved and capabilities transition. This avoids polling the customer endpoint in your integration.
Webhook event names are provisional and subject to change until the webhooks documentation ships.