active before you can issue them a card. One customer can have many cardholders, each with their own cards and limits.
The customer’s Cards capability must be available first. Until then, creation returns 403 cards-tos-not-accepted. See Activating customers.
Create a cardholder
POST /customers/{customer_id}/cardholders takes one of three request shapes. The shape you send depends on the customer type, and on whether the person is already on the customer’s onboarding application.
phone is in E.164 format. external_id is optional on every shape: it is your own lookup key.
Send the cardholder’s own mobile number and email address. The phone number is how the cardholder is verified at online checkouts that ask for 3-D Secure, so a shared or placeholder number makes those purchases fail. Adding the card to Apple Pay or Google Pay can also send a code to the phone or the email.
From a person already on the application
For a business customer, reuse the people Dakota already verified during onboarding instead of collecting their details again:cardholder_idis set when the person already has a cardholder. A declined cardholder still counts. Delete it before you enroll the person again.missing_for_cardslists what to collect before you create the cardholder. It always includesphone, and includesemailwhen none is on file.
status: "pending".
When creation is refused
Two people cannot share one email address.
Lifecycle
Wait forcardholder.updated with status: "active" before you issue a card. Most cardholders become active within seconds.
Review requests are not live yet. When a reviewer needs something,
GET /cardholders/{cardholder_id}/application will list it, and you will answer with POST /cardholders/{cardholder_id}/application/information. The request goes to you, never to the cardholder. Until the review pipeline is on, the list is always empty and a submission returns 501.Update a cardholder
PATCH /cardholders/{cardholder_id} changes first_name, last_name, email, or phone. Fields you leave out are unchanged.
Delete a cardholder
- Close each of the cardholder’s cards. Dakota refuses the delete while any of their cards is not closed, including frozen ones.
DELETE /cardholders/{cardholder_id}.
cardholder.updated reports status: "closed", and the cardholder is no longer returned by the API. Purchases already made on their cards still clear or reverse, and their card_transaction events keep arriving. You can enroll the same person again afterwards.
Find a cardholder
GET /customers/{customer_id}/cardholders accepts an external_id filter. The match is exact and case-sensitive, and it can return more than one cardholder, because external_id is not unique.
