curl --request GET \
--url https://api.platform.dakota.xyz/transactions/{transaction_id} \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.platform.dakota.xyz/transactions/{transaction_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/transactions/{transaction_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/transactions/{transaction_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"resource_type": "one_off",
"customer_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"crypto_address": "0x1234567890abcdef1234567890abcdef12345678",
"send_amount": "1.24",
"status": "pending",
"amount": "1.24",
"source_network_id": "ethereum-mainnet",
"source_asset": "USDC",
"destination_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"destination_asset": "USD",
"developer_fee_bps": 50,
"receipt": {
"imad": "string",
"omad": "string",
"input": {
"amount": "string",
"asset": "string",
"network": "string"
},
"subtotal": {
"amount": "string",
"asset": "string",
"network": "string"
},
"converted": {
"amount": "string",
"asset": "string",
"network": "string"
},
"output": {
"amount": "string",
"asset": "string",
"network": "string"
},
"exchange_rate": "string",
"external_fee": {
"amount": "string",
"asset": "string",
"network": "string"
},
"dakota_fee": {
"amount": "string",
"asset": "string",
"network": "string"
},
"client_fee": {
"amount": "string",
"asset": "string",
"network": "string"
},
"developer_fee": {
"amount": "string",
"asset": "string",
"network": "string"
},
"gas_fee": {
"amount": "string",
"asset": "string",
"network": "string"
},
"payment_reference": "Invoice payment for services"
},
"crypto_details": {
"source_crypto_address": "string",
"source_network_id": "ethereum-mainnet",
"destination_crypto_address": "string",
"destination_network_id": "ethereum-mainnet",
"deposit_transaction_hash": "string",
"transaction_hash": "string"
},
"created_at": 1234567890,
"updated_at": 1234567890,
"completed_at": 1234567890,
"destination_payment_rail": "ach",
"payment_reference": "string",
"destination_bank_name": "Chase Bank",
"destination_account_holder_name": "Acme Corporation",
"destination_account_number_last_four": "6789",
"destination_routing_number": "021000021",
"destination_iban": "GB82WEST12345698765432",
"destination_bic": "BARCGB22XXX"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#invalid-request",
"title": "Invalid request",
"status": 400,
"detail": "Invalid request",
"instance": "https://api.platform.dakota.xyz/transactions/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#authentication-error",
"title": "Unauthorized",
"status": 401,
"detail": "Unauthorized",
"instance": "https://api.platform.dakota.xyz/transactions/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Forbidden",
"status": 403,
"detail": "Forbidden",
"instance": "https://api.platform.dakota.xyz/transactions/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Not found",
"status": 404,
"detail": "Not found",
"instance": "https://api.platform.dakota.xyz/transactions/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#internal-error",
"title": "Unexpected error",
"status": 500,
"detail": "Unexpected error",
"instance": "https://api.platform.dakota.xyz/transactions/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}Get a transaction
Retrieves a single transaction by transaction_id, including lifecycle status and provider metadata when available.
curl --request GET \
--url https://api.platform.dakota.xyz/transactions/{transaction_id} \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.platform.dakota.xyz/transactions/{transaction_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.platform.dakota.xyz/transactions/{transaction_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.platform.dakota.xyz/transactions/{transaction_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}{
"id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"resource_type": "one_off",
"customer_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"crypto_address": "0x1234567890abcdef1234567890abcdef12345678",
"send_amount": "1.24",
"status": "pending",
"amount": "1.24",
"source_network_id": "ethereum-mainnet",
"source_asset": "USDC",
"destination_id": "1NFHrqBHb3cTfLVkFSGmHZqdDPi",
"destination_asset": "USD",
"developer_fee_bps": 50,
"receipt": {
"imad": "string",
"omad": "string",
"input": {
"amount": "string",
"asset": "string",
"network": "string"
},
"subtotal": {
"amount": "string",
"asset": "string",
"network": "string"
},
"converted": {
"amount": "string",
"asset": "string",
"network": "string"
},
"output": {
"amount": "string",
"asset": "string",
"network": "string"
},
"exchange_rate": "string",
"external_fee": {
"amount": "string",
"asset": "string",
"network": "string"
},
"dakota_fee": {
"amount": "string",
"asset": "string",
"network": "string"
},
"client_fee": {
"amount": "string",
"asset": "string",
"network": "string"
},
"developer_fee": {
"amount": "string",
"asset": "string",
"network": "string"
},
"gas_fee": {
"amount": "string",
"asset": "string",
"network": "string"
},
"payment_reference": "Invoice payment for services"
},
"crypto_details": {
"source_crypto_address": "string",
"source_network_id": "ethereum-mainnet",
"destination_crypto_address": "string",
"destination_network_id": "ethereum-mainnet",
"deposit_transaction_hash": "string",
"transaction_hash": "string"
},
"created_at": 1234567890,
"updated_at": 1234567890,
"completed_at": 1234567890,
"destination_payment_rail": "ach",
"payment_reference": "string",
"destination_bank_name": "Chase Bank",
"destination_account_holder_name": "Acme Corporation",
"destination_account_number_last_four": "6789",
"destination_routing_number": "021000021",
"destination_iban": "GB82WEST12345698765432",
"destination_bic": "BARCGB22XXX"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#invalid-request",
"title": "Invalid request",
"status": 400,
"detail": "Invalid request",
"instance": "https://api.platform.dakota.xyz/transactions/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#authentication-error",
"title": "Unauthorized",
"status": 401,
"detail": "Unauthorized",
"instance": "https://api.platform.dakota.xyz/transactions/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#forbidden",
"title": "Forbidden",
"status": 403,
"detail": "Forbidden",
"instance": "https://api.platform.dakota.xyz/transactions/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#not-found",
"title": "Not found",
"status": 404,
"detail": "Not found",
"instance": "https://api.platform.dakota.xyz/transactions/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}{
"type": "https://docs.dakota.xyz/api-reference/errors#internal-error",
"title": "Unexpected error",
"status": 500,
"detail": "Unexpected error",
"instance": "https://api.platform.dakota.xyz/transactions/example-id",
"request_id": "req_01hzy6y7v8w9x0y1z2a3b4c5d6"
}Authorizations
Path Parameters
Unique identifier of the transaction. 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"
Response
Transaction details.
- Option 1
- Option 2
- Option 3
- Option 4
A one-off transaction response. Used for single-use offramp (crypto-to-fiat) and swap (crypto-to-crypto) transfers; the destination type determines which.
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"
Discriminator field. Always "one_off" for one-off transactions.
one_off, wallet, auto_account "one_off"
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"
Temporary address where funds should be sent
"0x1234567890abcdef1234567890abcdef12345678"
Status of a one-off transaction.
failed means the payment stopped and Dakota is not retrying it. A
payout Dakota can still retry stays processing, including while
Dakota resolves a problem with it, until it is completed, or
cancelled or reversed if Dakota stops it. Do not refund your
customer or re-send the payment while it is processing. A failed
payout moves again only if Dakota operations recover it by hand (for
example an on-chain transfer that reverted); it is then reported as
processing and later completed. One-off transactions that reported
failed before this behaviour shipped may also move on if Dakota
retried them.
An international (SWIFT) wire that the receiving bank returns passes
through pending_return and returned, and ends as reversed once the
returned funds are refunded to the source wallet. reversed therefore
also describes a returned SWIFT payout, not only an ACH originator
reversal. SWIFT returns are not refunded automatically: the payout
stays at returned until the refund is made.
A payout the bank returned carries a failure_code on returned and
on the later reversed: the code mapped from the bank's return code
when there is one (for example recipient_account_number_invalid),
otherwise payment_returned, with return_reason holding Dakota's
message for it. reversal_reason stays empty. A reversed payout with
a failure_code but no reversal_reason is therefore a bank return
that was refunded, not an ACH originator reversal. Payouts returned
before this behaviour shipped may carry no failure_code.
A deduction the bank or an intermediary takes from the returned funds
is normally borne by the customer. net_recovered_amount is set once
the refund is sized, and only when the customer bore a deduction; it
is the face amount less that deduction. On pending_return and
returned it is absent whatever came back, so its absence there says
nothing about the amount. On a reversed payout that was a bank
return, its absence means the customer was refunded in full: either
nothing was withheld, or Dakota absorbed the deduction because the
refund was made before the bank reported what it returned.
pending, processing, completed, failed, cancelled, reversed, pending_return, returned, pending_reversal "pending"
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"
Source crypto asset symbol
"USDC"
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"
ISO 4217 symbol representing a fiat asset.
3^[A-Z]{3}$"USD"
Developer fee for this transaction in basis points (1 bp = 0.01%), as set by developer_fee_bps on the request. 0 when no developer fee was set. One-off transactions created before this field was introduced also report 0, whatever fee they were created with.
50
Unix timestamp when the transaction was created
1234567890
Unix timestamp when the transaction was last updated
1234567890
How the FX rate and fee on this transaction were priced. Absent when the transaction has no FX pricing, including every transaction created before it was introduced. Transaction and receipt endpoints omit it when there is none. In events (webhooks, GET /events and webhook history) a transaction.auto.updated or transaction.one_off.updated event carries fx_pricing set to null when the provider withdrew a previously quoted price and nothing replaced it; discard any quoted pricing you hold. The null may also appear when the provider repeats a withdrawal. A final pricing is never withdrawn.
Show child attributes
Show child attributes
Version 1 foreign outgoing amount_state unknown, with exact known source amount/currency and destination currency. Not a quote.
Version 1 verified outgoing native amounts and bank payout evidence. Absent means settlement amount is unknown.
Exact amount of source_asset to send to crypto_address so that
the payout, after the developer fee (developer_fee_bps or
developer_fee_fixed), is the amount on the request. Send this
value rather than adding the fee yourself: a bps fee is rounded
up, so a total you round yourself can pay out a cent less.
Present only when the request set amount and the payout is one
to one with the deposit: the same asset on both sides, or two US
dollar assets other than USDT (such as USDC paid out as USD).
Absent otherwise, because the payout is then priced when the
funds arrive (USDT at the market rate, other currencies through
FX). Also absent on a USD payout when amount has digits below a
cent, which a USD payout cannot carry. With developer_fee_fixed,
the deposit must also be a US dollar stablecoin other than USDT.
"1.24"
Amount to send to crypto_address. Always equal to send_amount, and present only when it is. This is not the amount on the request, which is the destination amount you expect; the requested amount is not returned here (transaction.one_off.* webhooks carry it as destination_amount).
"1.24"
Fixed developer fee for this transaction, in units of the asset deposited, as set by developer_fee_fixed on the request. Absent when no fixed fee was set.
"10.00"
Dakota's explanation of why the transaction failed, present if status is failed. Descriptive text for display; use failure_code for logic.
Stable, machine-readable reason a transaction failed, was returned, or
was reversed. Pair it with the human-readable failure_reason,
return_reason or reversal_reason, which carry Dakota's message for
this code. Switch on failure_code, not on the message text, which may
be reworded.
failure_code is not a status: read status for the outcome. A
returned payout keeps its code on returned and on the later
reversed (the refund to the source wallet); payouts returned before
this behaviour shipped may carry none. payment_returned is the
code for a return whose bank reason does not map to a more specific
value, including a return that carried no bank code at all. A payout
that completes after a return (for example a resent wire) or after a
rejected ACH reversal has no failure_code.
The set of values is open: Dakota may add codes without a new API
version, so treat any value you do not recognize like processing_error.
processing_error is the general code for anything not listed; contact
support with the transaction ID.
recipient_account_not_found, recipient_account_number_invalid, recipient_account_blocked, recipient_account_type_unsupported, recipient_refused, recipient_name_mismatch, recipient_details_missing, recipient_address_invalid, recipient_bank_routing_invalid, recipient_bank_bic_invalid, limit_exceeded, payment_reversed_duplicate, payment_reversed_wrong_recipient, payment_reversed_wrong_amount, payment_returned, processing_error "recipient_account_not_found"
Detailed receipt information for a transaction
Show child attributes
Show child attributes
Blockchain-specific details for crypto transactions
Show child attributes
Show child attributes
Originating sender details for onramp/offramp/swap transactions. Populated when source-side metadata is available (e.g., from inbound wire/ACH source data).
Show child attributes
Show child attributes
Unix timestamp when the transaction was completed
1234567890
The payment rail that was selected for this transaction
ach, fedwire, swift, us_bank_account, fednow "ach"
Payment reference message for bank transfers (e.g. wire message, SWIFT remittance information, or SEPA reference)
Your own label for this one-off transaction in your system, used to look it up with the external_id filter on GET /transactions. Not unique: Dakota does not reject a duplicate, and several one-off transactions can share one value. Omitted when none was set.
"avenia-ticket-8841"
Name of the destination bank
"Chase Bank"
Name of the account holder at the destination bank
"Acme Corporation"
Last four digits of the destination account number
"6789"
ABA routing number for US bank accounts
"021000021"
IBAN for international bank accounts
"GB82WEST12345698765432"
BIC/SWIFT code for international transfers
"BARCGB22XXX"
Return code (e.g., R01) when the transaction was returned by the receiving bank. NACHA/Fedwire codes for US bank rails; international (SWIFT) wire returns carry no NACHA code and may return a reduced amount after intermediary fees. A return can arrive with no code; failure_code is still set (to payment_returned). Cleared if the transaction later completes.
"R01"
Dakota's explanation of why the payment was returned. Descriptive text for display; use failure_code for logic.
"The recipient account could not be found."
Unix timestamp when the return was initiated.
1234567890
Unix timestamp deadline for return processing.
1234567890
Decimal amount recovered when a returned payout came back short and the customer bore the deduction, denominated in the transaction's own currency (the same basis as its face amount), so face amount minus this value is what the customer went without. Present only in that case; it never means zero. It is set once the refund to the source wallet has been sized. It is absent on pending_return and returned whatever came back, can first appear on pending_reversal, and stays on reversed. After the refund is sized, absence means the customer was refunded the face amount in full, because the whole amount came back, Dakota absorbed the bank's deduction (a refund made before the bank reported what it returned), or the rail reports no net figure (ACH never does). Cleared, like the other return fields, if the payout later completes (for example a returned wire that was resent and delivered).
"24955"
ACH reversal reason when the originator reverses the transaction (e.g., duplicate, receiver_incorrect). Not set for an international (SWIFT) wire that the receiving bank returned: that payout ends as reversed once the funds are refunded to the source wallet, reversal_reason stays empty, and failure_code (the mapped bank code, or payment_returned) says it was returned. net_recovered_amount carries the face amount less the bank's deduction when the customer bore one, and return_code the bank's code when it sent one. Cleared if the transaction later completes (the bank rejected the reversal).
"duplicate"
Unix timestamp when the reversal was initiated. Cleared if the transaction later completes (the bank rejected the reversal).
1234567890
Display name of the customer associated with this transaction.
"Acme Corp"
Was this page helpful?

