What you get back
When you retrieve a customer, the response ties together identity, capabilities, and requirements in one place. There is no top-level customerstatus; read the capabilities and requirements maps together to understand where someone is in onboarding.
Write surface vs. read surface
The fields you submit are not all echoed back. On create and update you can submit the full set of identity fields, but a customer read response only returns contact-identity fields onindividual:
Sensitive identity information (SSN, date of birth, address, and the due-diligence fields) is accepted for verification but never returned by the API.
Some fields you submit are write-only at the top level too. Terms of Service acceptances, tax attestations, and the end-user IP address are accepted on create and update but are not echoed back on the customer object. Terms of Service progress is instead reflected through the
tos requirement (it disappears once the required versions are accepted); see Terms of Service.
Working with customers
Typical integration flow:- Create a customer when someone starts onboarding. Set
typetoindividual, request the capabilities they need, and submit whatever identity information you already have. - Update the customer as they complete steps: additional identity fields, Terms of Service acceptances, tax attestations, or newly requested capabilities.
- Retrieve the customer (or listen for webhooks) to check capability status and outstanding requirements before initiating an operation.
- List customers when you need an admin or support view across your user base.
- Delete a customer when the relationship ends.
Create, update, and delete support an optional
Idempotency-Key header so a retried request is applied at most once. Updates use PUT with partial bodies; omit a field to leave it unchanged.pending with their outstanding requirements listed under requirements. Verification is asynchronous, so a capability can stay pending briefly after all requirements are submitted.
Identity information you collect
Submit identity fields underindividual on create or update. Not every field is required for every customer; which fields matter depends on the capabilities you request. Submit only what the live requirements map (and your integration needs) call for.
Address
countryCode and citizenship must be US. See the Overview for current product scope.tradeCrypto.
End-user IP address
Include your end-user’s IP address (not your server’s) on create and update requests viacompliance.requesterIpAddress. Coinbase uses it as a per-request compliance signal. This value is write-only and is never returned in responses.
Terms of Service
Before capabilities can activate, your customer must agree to Coinbase’s Terms of Service. This is a legal agreement step: you link to the document in your product, the customer reads and accepts it, and you tell Coinbase that acceptance occurred. When acceptance is still needed, the customer object includes a Terms of Service requirement. That requirement tells you which document versions the customer has not yet accepted and gives you links you can embed or open in your UI (including translated versions where available). Typical flow:- Check requirements. If Terms of Service is outstanding, see which versions still need acceptance and which URLs to show.
- Present and capture. Display each required document to your customer and record that they agreed (including when and in which language).
- Submit acceptance. Send those records to Coinbase on update. Once every required version is covered, the requirement clears and capabilities that depended on it can move forward through verification.
Tax attestations
Some capabilities require the customer to certify tax information before they activate, for example IRS Form W-9 for US individuals. Coinbase uses these attestations for tax reporting and withholding compliance. When ataxAttestation requirement is outstanding, the customer’s requirements.taxAttestation.taxForms[] lists each form the customer must complete (for example, us_w9 for W-9).
- Read
requirements.taxAttestation.taxForms[]and collect the certification for each form from your customer. - Submit one attestation entry per required form on update.
Customer lifecycle
There is no top-level customerstatus. A customer is a container of capabilities, and each capability moves through its own lifecycle independently, driven by the requirements it depends on. To understand a customer’s state, read the capabilities and requirements maps together.
Capability status
Each entry in thecapabilities map has a status:
Requirement status
While a capability ispending, the requirements gating it appear in the requirements map, each with its own status:
When a requirement is satisfied it disappears from the map. A capability becomes
active once all of its requirements are gone.
How they move together
A requested capability startspending with its requirements listed. From there, verification produces one of three outcomes:
inactive is blocked by a compliance decision and cannot be recovered through the API. No requirement resubmission will clear it. Do not surface compliance-specific reasons to your end-users; Coinbase makes and manages those determinations on your behalf. See Requirements for what you can and cannot resolve, and Testing in sandbox to exercise each outcome with magic values.
Next steps
Capabilities
All capabilities, statuses, and how to check them before an operation
Requirements
Resolve outstanding requirements, Terms of Service, and tax attestations