Skip to main content
Cards is available in sandbox only while we finish development. Dakota enables Cards per account. The Cards endpoints are in the API reference, marked Sandbox only. Endpoints, fields, and flows can still change before release.
Dakota wallets are non-custodial, and card settlement moves money out of the wallet each time a purchase clears. So before a wallet can fund any card, the customer signs a card-settlement enablement for it. They sign once per wallet, not per card or per purchase. Cards work with EVM wallets only.

What the grant allows

The wallet keeps working normally. Enablement does not lock it or make Dakota a signer on the customer’s own payments.

Enable a wallet

1. Have the customer sign the intent. The intent contains only three fields, so you can build it straight away:
The customer signs it like any other endorsed request, with the same keys, including passkeys. Do not include a settlement destination: Dakota supplies it, and an intent that contains settlement_destination is refused with 400. 2. Submit it with POST /wallets/{wallet_id}/card_enablement:
The response has state: "attaching". 3. Wait for wallet.card_enablement.completed. The enablement is then active, and you can issue cards against the wallet. The webhook payload records what the customer signed: the intent hash, the signing key, and the settlement destination. Keep it as your acceptance record. GET /wallets/{wallet_id}/card_enablement returns the same state.

States

When enablement is refused

Dakota checks these before it records anything, so a refused call leaves nothing behind.

Retrying a failed attempt

Replaying the call on an active enablement does nothing. While it is attaching, how you retry depends on what went wrong: