curl --request PATCH \
--url https://api.platform.dakota.xyz/accounts/{account_id} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"account_type": "onramp",
"developer_fee_bps": 50
}
'const options = {
method: 'PATCH',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({account_type: 'onramp', developer_fee_bps: 50})
};
fetch('https://api.platform.dakota.xyz/accounts/{account_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/accounts/{account_id}"
payload = {
"account_type": "onramp",
"developer_fee_bps": 50
}
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/accounts/{account_id}"
payload := strings.NewReader("{\n \"account_type\": \"onramp\",\n \"developer_fee_bps\": 50\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"account_type": "onramp",
"bank_account": {
"id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"capabilities": [
"ach",
"fedwire"
],
"aba_routing_number": "021000021",
"aba_wire_routing_number": "021000021",
"account_number": "123456789",
"account_type": "checking",
"bic": "DEUTDEFFXXX",
"iban": "DE89370400440532013000",
"account_holder_name": "John Doe",
"account_holder_address": {
"street1": "123 Main St",
"street2": "Apt 4B",
"street3": "Building C",
"city": "San Francisco",
"region": "CA",
"postal_code": "94105",
"country": "US"
},
"account_holder_phone": "1234567890",
"bank_name": "Bank of America",
"bank_address": {
"street1": "123 Main St",
"street2": "Apt 4B",
"street3": "Building C",
"city": "San Francisco",
"region": "CA",
"postal_code": "94105",
"country": "US"
},
"bank_phone": "+12345678900"
},
"destination": {
"destination_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"destination_type": "crypto",
"name": "My Ethereum Wallet",
"crypto_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"family": "evm",
"network_id": "ethereum-mainnet"
},
"source_crypto_address": "0x1234",
"source_family": "evm",
"source_network_id": "ethereum-mainnet",
"source_asset": "USDC",
"destination_asset": "USDC",
"rail": "ach",
"destination_rail": "ach",
"developer_fee_bps": 50
}Update an account
Partially update an onramp, offramp, or swap account.
Only the developer fee (developer_fee_bps or
developer_fee_fixed) can be updated on an existing account. Setting
one replaces the other. The updated fee applies to future transactions
only; existing transactions are unaffected. Routing is immutable after
creation:
crypto_destination_id, destination_network_id, destination_asset,
and fiat_destination_id cannot be changed.
To change the destination asset, network, or address, create a new account with the desired routing. For onramp accounts, the new account returns new virtual account (VA) details; the existing VA details cannot be retained for the new routing. Creating a new crypto destination alone does not change routing on an existing account.
An account’s capabilities and rail are fixed when the account is
created and cannot be changed through this endpoint. To use a
different capability or rail, create a new account.
curl --request PATCH \
--url https://api.platform.dakota.xyz/accounts/{account_id} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--header 'x-idempotency-key: <x-idempotency-key>' \
--data '
{
"account_type": "onramp",
"developer_fee_bps": 50
}
'const options = {
method: 'PATCH',
headers: {
'x-idempotency-key': '<x-idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({account_type: 'onramp', developer_fee_bps: 50})
};
fetch('https://api.platform.dakota.xyz/accounts/{account_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/accounts/{account_id}"
payload = {
"account_type": "onramp",
"developer_fee_bps": 50
}
headers = {
"x-idempotency-key": "<x-idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/accounts/{account_id}"
payload := strings.NewReader("{\n \"account_type\": \"onramp\",\n \"developer_fee_bps\": 50\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("x-idempotency-key", "<x-idempotency-key>")
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"account_type": "onramp",
"bank_account": {
"id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"capabilities": [
"ach",
"fedwire"
],
"aba_routing_number": "021000021",
"aba_wire_routing_number": "021000021",
"account_number": "123456789",
"account_type": "checking",
"bic": "DEUTDEFFXXX",
"iban": "DE89370400440532013000",
"account_holder_name": "John Doe",
"account_holder_address": {
"street1": "123 Main St",
"street2": "Apt 4B",
"street3": "Building C",
"city": "San Francisco",
"region": "CA",
"postal_code": "94105",
"country": "US"
},
"account_holder_phone": "1234567890",
"bank_name": "Bank of America",
"bank_address": {
"street1": "123 Main St",
"street2": "Apt 4B",
"street3": "Building C",
"city": "San Francisco",
"region": "CA",
"postal_code": "94105",
"country": "US"
},
"bank_phone": "+12345678900"
},
"destination": {
"destination_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"destination_type": "crypto",
"name": "My Ethereum Wallet",
"crypto_address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"family": "evm",
"network_id": "ethereum-mainnet"
},
"source_crypto_address": "0x1234",
"source_family": "evm",
"source_network_id": "ethereum-mainnet",
"source_asset": "USDC",
"destination_asset": "USDC",
"rail": "ach",
"destination_rail": "ach",
"developer_fee_bps": 50
}Authorizations
Headers
Unique key (UUID) to ensure request idempotency on POST, PUT and PATCH requests.
A key is scoped to your client, the HTTP method and the path, and is remembered for 24 hours after a
successful (below 400) response. Repeating the same request (same JSON body, whatever the key order or
whitespace) with the same key within that window returns the original response with
X-Idempotent-Replayed: true instead of executing the request again. Using the same key on the same
endpoint with a different body returns 422 with problem type idempotency-key-reused; the request is
not executed. Error responses (4xx and 5xx) are not remembered, so a request refused for a fixable reason
can be corrected and retried under the same key. Request bodies that are not JSON (for example file
uploads) are not compared.
Path Parameters
KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
Body
Unified account update request for onramp/offramp/swap.
Only the developer fee (developer_fee_bps or
developer_fee_fixed) can be updated on an existing account. Setting
one replaces the other. Routing fields (crypto_destination_id, destination_network_id,
destination_asset, and fiat_destination_id) are immutable after
creation. To change the destination asset, network, or address,
create a new account. A new onramp account returns new virtual account
(VA) details. Creating a new crypto destination alone does not update
an existing account's routing or preserve its VA details for new routing.
capabilities and rail cannot be changed through this request;
create a new account to change them.
developer_fee_bps applies to future transactions only; existing
transactions are unaffected.
Unified account family for account resources.
onramp, offramp, swap "onramp"
KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
Identifier for a blockchain network
ethereum-mainnet, ethereum-sepolia, ethereum-goerli, ethereum-holesky, solana-mainnet, solana-devnet, solana-testnet, base-mainnet, base-sepolia, arbitrum-mainnet, arbitrum-sepolia, optimism-mainnet, optimism-sepolia, polygon-mainnet, polygon-amoy 1 - 30"ethereum-mainnet"
Asset to receive at the destination.
"USDC"
Developer fee (client revenue share) in basis points. When set,
updates the fee applied to FUTURE transactions on this account;
existing transactions are unaffected. Setting it replaces an
existing developer_fee_fixed. The developer fee is the only
updatable field; routing fields remain immutable.
0 <= x <= 1000050
Fixed developer fee charged on every deposit to this account, in
units of the asset deposited (for example 10.00 USDC on a USDC
deposit, 10.00 USD on a USD bank deposit, 10.00 EUR on a EUR bank
deposit). A decimal string such as "10.00", with at most 2 decimal
places. Must be greater than 0. Cannot be combined with
developer_fee_bps: send one or the other. Setting it on update
replaces an existing developer_fee_bps.
"10.00"
Your own label for this account in your system, used to look it up with the external_id filter on GET /accounts. Not unique: Dakota does not reject a duplicate, and several accounts can share one value. Omit to leave the current value unchanged; it cannot be cleared.
255^[^\x00-\x1f]*$"acct-0042"
Response
Account updated successfully.
Unified account response for onramp/offramp/swap.
KSUID is a 27-character globally unique ID that combines a timestamp with a random component. Used for all entity identifiers in the Dakota platform.
27^[0-9A-Za-z]{27}$"1NFHrqBHb3cTfLVkFSGmHZqdDPi"
Unified account family for account resources.
onramp, offramp, swap "onramp"
Developer fee charged on each deposit to this account, in basis points (1 bp = 0.01%). 0 when the account charges no developer fee.
50
Your own label for this account in your system, used to look it up with the external_id filter on GET /accounts. Not unique: Dakota does not reject a duplicate, and several accounts can share one value. Omitted when none was set.
"acct-0042"
Unified schema for bank accounts.
Show child attributes
Show child attributes
Response for a crypto destination.
- Crypto Destination Response
- Crypto Destination Response
- Crypto Destination Response
- US Fiat Destination Response
- IBAN Fiat Destination Response
Show child attributes
Show child attributes
Source crypto address for offramp/swap accounts.
"0x1234"
Blockchain family for the crypto account.
evm, solana "evm"
Identifier for a blockchain network
ethereum-mainnet, ethereum-sepolia, ethereum-goerli, ethereum-holesky, solana-mainnet, solana-devnet, solana-testnet, base-mainnet, base-sepolia, arbitrum-mainnet, arbitrum-sepolia, optimism-mainnet, optimism-sepolia, polygon-mainnet, polygon-amoy 1 - 30"ethereum-mainnet"
Asset sent into the account.
"USDC"
Asset received at the destination.
"USDC"
Type of payment rail capability supported. For onramp accounts, us_bank_account indicates the account accepts ACH, Wire (Fedwire), and FedNow deposits interchangeably. fednow is the FedNow instant US-domestic USD rail for payouts and deposits — $500k per-transaction cap on payouts; a payout destination whose bank cannot receive FedNow is rejected at account creation with problem type https://docs.dakota.xyz/api-reference/errors#fednow-destination-unreachable — route that destination over ach instead. swift is the international USD wire rail: gated on the customer's international_wire capability, USD only, payouts target fiat_iban destinations, and deposit instructions carry the BIC and the beneficiary address. Intermediary banks may deduct fees en route, so the amount received can be lower than the amount sent. sepa is not currently offered.
ach, fedwire, swift, us_bank_account, fednow "ach"
Type of payment rail capability supported. For onramp accounts, us_bank_account indicates the account accepts ACH, Wire (Fedwire), and FedNow deposits interchangeably. fednow is the FedNow instant US-domestic USD rail for payouts and deposits — $500k per-transaction cap on payouts; a payout destination whose bank cannot receive FedNow is rejected at account creation with problem type https://docs.dakota.xyz/api-reference/errors#fednow-destination-unreachable — route that destination over ach instead. swift is the international USD wire rail: gated on the customer's international_wire capability, USD only, payouts target fiat_iban destinations, and deposit instructions carry the BIC and the beneficiary address. Intermediary banks may deduct fees en route, so the amount received can be lower than the amount sent. sepa is not currently offered.
ach, fedwire, swift, us_bank_account, fednow "ach"
Fixed developer fee charged on every deposit to this account, in units of the asset deposited. Absent when the account charges developer_fee_bps instead.
"10.00"
Smallest deposit that will be processed, in units of the asset deposited: developer_fee_fixed + 0.01. Smaller deposits are not converted. Returned for fixed-fee accounts only.
"10.01"
Was this page helpful?

