A purchase, end to end
- Authorization happens at the terminal. Nothing moves yet; the amount is held.
- Clearing happens when the merchant captures the sale, sometimes for a different amount. That is when funds leave the wallet. Dakota batches recoveries per wallet rather than moving funds once per purchase.
Holds and available balance
Cards spend one token on one network: Dakota’s RD token on Base, or USDC where RD is not yet supported. Only that token on that network counts toward the card balance. A deposit of another token, or of the same token on another network, does not fund cards, and purchases decline withinsufficient_funds. In sandbox, cards spend testnet RD on Base Sepolia.
A hold reduces what every card on the wallet, and every ordinary send from it, can spend. That is what makes several cards on one wallet safe.
GET /wallets/{wallet_id}/balances returns the four figures in a card object:
- The figures never overstate what the wallet can spend:
totalis rounded down,heldandoutstandingare rounded up. cardis present while the wallet’s enablement isactive,detach_requested, ordetached, because a detached wallet can still owe an outstanding amount. It is absent, nevernull, when there is no enablement or it is stillattaching. It is also absent when the live read fails or is slow; treat that as “try again later”, not as an error. The other balances fields are the same either way.
Outcomes
- Declined purchases hold nothing and move nothing. They are recorded as a card transaction with
status: declinedand adecline_reason, and never change after that. - Refunds are a new card transaction on the same card, with
status: returned. The original purchase stayscleared, and the refund is not linked to it.refund_statereports whether the money has reached the wallet: see Refunds. - Force posts are clearings with no prior authorization. Networks allow them and they cannot be declined.
When a wallet comes up short
A hold reserves the money before a purchase is approved, so almost every transaction is covered. Two cases can still leave a gap: a force post, and a clearing larger than its hold, such as a cross-border fee. Dakota has already paid the network by then, so the gap becomes the wallet’soutstanding amount. Dakota recovers it as the wallet is funded again. The wallet balance is never shown as negative.
Reading transactions
Every stage arrives as a webhook: see Card transactions. To backfill or reconcile, useGET /card_transactions, filtered by customer_id, card_id, or cardholder_id, and GET /card_transactions/{card_transaction_id}.
