This page covers flows that branch off the core walkthrough in Common Flows. Read that page first — it introduces Customer, Recipient, Destination, and Account. Everything here assumes those are already in place. On this page:Documentation Index
Fetch the complete documentation index at: https://docs.dakota.xyz/llms.txt
Use this file to discover all available pages before exploring further.
One-off Offramp (Single USD Payout)
Use a one-off offramp when you need a single USD payout — a vendor invoice, a customer refund, a scheduled disbursement — and want to embed a human-readable reference on the bank wire. One-offs generate a single-use crypto deposit address that’s discarded after the transaction completes. What one-off offramps give you over a reusable offramp account:-
payment_reference— text carried into the bank wire. Per-rail constraints:- ACH — up to 18 chars. Letters, digits, and spaces only (no hyphens or punctuation).
- Wire — up to 140 chars. No character restrictions.
- SEPA — 6 to 140 chars. Letters, digits, spaces, and
& - . /. - SWIFT — up to 140 chars. Letters, digits, spaces, and
, ..
-
destination_payment_rail— override the rail per transaction (e.g. forcefedwireinstead of the destination’s defaultach). -
developer_fee_bps— per-transaction developer fee override.
Create the One-off Transaction
Prerequisite: a bank Destination (destination_type: "fiat_us") already attached to a Recipient for this Customer — see Add a Bank Destination.
send_amount to crypto_address. The address is single-use and discarded after the transaction completes. Dakota converts the stablecoin and wires USD to the bank Destination with INV 2024 042 included as the payment reference. Subscribe to transaction.one_off.created and transaction.one_off.updated to track status.
Simulate the Deposit (Sandbox)
Sandbox skips the on-chain send — trigger the full transaction lifecycle by simulating a crypto deposit to thecrypto_address returned above. Pass that address as wallet_address:
transaction.one_off.created (status pending), three transaction.one_off.updated as the transaction moves through the internal funds_received → funds_swept → outbound_staged states (all three emitted with status processing), and a final transaction.one_off.updated with status completed. The whole sequence runs in roughly 60 seconds. One-offs are single-use, so each temporary_address accepts exactly one simulated deposit — subsequent calls with a new simulation_id against the same address are no-ops.
Two sandbox artifacts to be aware of. First, crypto_details.source_network_id in the webhooks is always base-sepolia because the mock Privy payload hardcodes Base Sepolia regardless of the one-off’s source_network_id. Second, deposit_tx_hash is synthetic rather than a real on-chain hash. Event shape, status transitions, and receipt breakdown all match production exactly.
One-off Swap (Single Cross-Chain Swap)
Use a one-off swap when the target network varies per swap (a reusable swap account pinsdestination_network_id) or you want to apply a different developer_fee_bps on this specific swap. payment_reference and destination_payment_rail are offramp-only and do not apply to swaps.
Create the One-off Swap
Prerequisite: a crypto Destination on the target network/asset already attached to a Recipient — see Add a Crypto Destination.send_amount to crypto_address. Dakota converts and delivers the destination asset on the target network. Same transaction.one_off.* webhooks as one-off offramp.
Simulate the Deposit (Sandbox)
Use the same simulate call as the one-off offramp flow — pass the swap’scrypto_address as wallet_address. The event sequence and sandbox artifacts (hardcoded base-sepolia in crypto_details.source_network_id, synthetic deposit_tx_hash) are identical.