Wallet
Your balance and money history. Integrators also manage cards, top-ups and withdrawals here.
This page covers the wallet object and the transaction object.
The wallet object
Your 3DAPI balance. Top-ups, withdrawals and wallet settings are managed in the dashboard.
Attributes
- objectstring
Names the type of this object. Always
wallet. - balanceobject
What you can spend: manual, imported and API orders and stock purchases are paid from it.
- sample_creditobject
Credit for sample orders: an order you pay from the wallet and ship to your own country (your billing or sign-up country). Spent only when the order asks for it (
use_sample_credit), before the balance; cannot be withdrawn, and expires. Integrators get $15 once, when their account is approved, valid for 30 days. - sample_credit_expires_attimestamp or null
When the soonest-expiring part of
sample_creditlapses. Null when there is none. - pending_withdrawalsobject
Withdrawals you requested that are not paid out yet. Already taken off
balance. - updated_attimestamp
When the balance last changed.
{
"object": "wallet",
"balance": {
"amount": 24310,
"currency": "usd"
},
"sample_credit": {
"amount": 2000,
"currency": "usd"
},
"sample_credit_expires_at": "2026-11-13T08:02:11Z",
"pending_withdrawals": {
"amount": 0,
"currency": "usd"
},
"updated_at": "2026-10-14T08:02:11Z"
}Get your wallet balance
GET/
- Credentials
- An API key with the
wallet:readscope (full access includes every scope). A signed-in dashboard session works too. - For
- Designers and Integrators
- Operation id
get_wallet
Returns your balance, sample credit and pending withdrawals. Check it before creating orders that are paid from the wallet. For designers and integrators.
Returns200 OK
The wallet. Returns the wallet object.
Responses
- 200
The wallet.
- 401
Credentials are missing (
missing_credentials), the API key is unknown or inactive (invalid_api_key), the session expired (invalid_session), or both a key and a session were sent (ambiguous_credentials). - 403
The credentials are valid but not allowed to do this: a scope is missing (
missing_scope), the endpoint is for another kind of account (actor_not_allowed) or another kind of credential (credential_not_allowed), the account may no longer use the API (account_blacklisted), or the account must change something first, in which casedetails.fix_urllinks to the dashboard page that fixes it. - 429
Too many requests (
rate_limited): the limit is 500 per minute per API key (or signed-in user). Wait for the number of seconds in theRetry-Afterheader, then retry;detailshaslimit,window_seconds,reset_atandretry_after_seconds.
Errors use the error object.
curl "https://public-api.dapi.digital/v2/wallet" \
-H "x-api-key: $DAPI_API_KEY"{
"object": "wallet",
"balance": {
"amount": 24310,
"currency": "usd"
},
"sample_credit": {
"amount": 2000,
"currency": "usd"
},
"sample_credit_expires_at": "2026-11-13T08:02:11Z",
"pending_withdrawals": {
"amount": 0,
"currency": "usd"
},
"updated_at": "2026-10-14T08:02:11Z"
}The transaction object
One movement of your money for orders, stock or the wallet.
Attributes
- idstring
Unique identifier of the transaction, prefixed with
txn_. Treat it as an opaque string: store it and compare it, never parse it. - objectstring
Names the type of this object. Always
transaction. - directionTransactionDirection
creditadded money for you,debittook it. Amounts are always positive; this gives the sign.Possible valuescreditdebit - categoryTransactionCategory
What the money was for:
order_payment: you paid for a manual, imported or API order, from the wallet or by card.stock_purchase: you bought stock batches, including automatic reorders.top_up: you added money to the wallet by card, manually, automatically or to cover a shortfall.earnings: your earnings from a completed storefront order or, for integrators, a completed checkout order. Adebitwhen the order's sales did not cover manufacturing, the platform fee and the card fee: the difference is charged to your wallet at completion.refund: an order refund returned to your wallet.withdrawal: money you withdrew from the wallet.adjustment: a credit or debit that is not one of the above.adjustment_reasonsays which kind, anddescriptionexplains it in words.
Possible valuesorder_paymentstock_purchasetop_upearningsrefundwithdrawaladjustment - adjustment_reasonstring or null
Why the adjustment happened, when
categoryisadjustment; null for every other category.Possible valuessupport_creditsupport_debitshipping_discountwarehousing_chargereplacement_order_charge - paid_withTransactionPaidWith
walletwhen the money moved through your balance,cardwhen a card was charged directly (no-profit orders paid at checkout). Filter onwalletto reconcile with the balance.Possible valueswalletcard - statusTransactionStatus
pendingonly for withdrawals requested and not paid out yet; everything else iscompleted.Possible valuespendingcompleted - amountobject
Amount moved, VAT included. Always positive. On a
top_upthis is what your card was charged; your balance grows by the net amount (amountminusvat.amount), so top-up amounts do not add up to your balance. - vatobject or null
VAT included in
amount, when any was charged. - descriptionstring or null
What happened, ready to show to a person.
- ordersarray of OrderReference
The orders this transaction paid for or came from.
- invoice_urlstring or null
Invoice or receipt for card charges and top-ups, when one exists.
- created_attimestamp
Point in time, ISO 8601 in UTC.
nullList transactions
GET/
- Credentials
- An API key with the
wallet:readscope (full access includes every scope). A signed-in dashboard session works too. - For
- Designers and Integrators
- Operation id
list_transactions
Lists every movement of your money for orders, stock and the wallet, newest first: wallet payments and top-ups, card-paid orders, earnings, refunds and withdrawals. Plan subscription charges are not included. For designers and integrators.
Query parameters
- directionstring
Only credits or only debits.
Possible valuescreditdebit - categoryarray of TransactionCategory
Only these categories. Repeat for several, for example
category=order_payment&category=stock_purchase.Possible valuesorder_paymentstock_purchasetop_upearningsrefundwithdrawaladjustment - paid_withstring
Only wallet movements or only card charges.
Possible valueswalletcard - statusstring
Only pending or only completed transactions.
Possible valuespendingcompleted - created_aftertimestamp
Only transactions after this time. When neither created_after nor created_before is given, defaults to 30 days before the request. Any explicit range is honoured as given, with no maximum length.
- created_beforetimestamp
Only transactions before this time. Giving it on its own turns off the 30 day default, so there is no lower bound.
- amount_mininteger or null
Only amounts of at least this many cents.
- amount_maxinteger or null
Only amounts of at most this many cents.
- orderstring
Only transactions for this order: an
ord_id or an order number. - searchstring
Matches the description and order numbers.
- sortstring
Order of results. A leading
-means descending.Possible values-created_atcreated_at-amountamount - limitinteger
How many results per page, from 1 to 100.
- cursorstring
Where to continue from: the
next_cursorof the previous page. Omit for the first page.
Returns200 OK
A page of transactions.
Responses
- 200
A page of transactions.
- 400
The request is invalid.
details.errorslists each problem (validation_failed), or anexpand[]path is unknown (invalid_expand). - 401
Credentials are missing (
missing_credentials), the API key is unknown or inactive (invalid_api_key), the session expired (invalid_session), or both a key and a session were sent (ambiguous_credentials). - 403
The credentials are valid but not allowed to do this: a scope is missing (
missing_scope), the endpoint is for another kind of account (actor_not_allowed) or another kind of credential (credential_not_allowed), the account may no longer use the API (account_blacklisted), or the account must change something first, in which casedetails.fix_urllinks to the dashboard page that fixes it. - 429
Too many requests (
rate_limited): the limit is 500 per minute per API key (or signed-in user). Wait for the number of seconds in theRetry-Afterheader, then retry;detailshaslimit,window_seconds,reset_atandretry_after_seconds.
Errors use the error object.
curl "https://public-api.dapi.digital/v2/transactions" \
-H "x-api-key: $DAPI_API_KEY"{
"object": "list",
"data": [
{
"id": "txn_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "transaction",
"direction": "debit",
"category": "order_payment",
"adjustment_reason": null,
"paid_with": "wallet",
"status": "completed",
"amount": {
"amount": 5299,
"currency": "usd"
},
"vat": null,
"description": "ShipStation order SSG2M9S9",
"orders": [
{
"id": "ord_bfP0GSqKoZFrD72H5Os0rc7HV9XP6eQJu",
"object": "order",
"name": "SSG2M9S9"
}
],
"invoice_url": null,
"created_at": "2026-10-12T14:03:55Z"
}
],
"has_more": false,
"next_cursor": null
}Summarize transactions
GET/
- Credentials
- An API key with the
wallet:readscope (full access includes every scope). A signed-in dashboard session works too. - For
- Designers and Integrators
- Operation id
get_transaction_summary
Totals your completed transactions over a period, per category and direction. Use it for monthly reporting instead of paging through every transaction. For designers and integrators.
Query parameters
- created_aftertimestamp
Only transactions after this time. When neither created_after nor created_before is given, defaults to 30 days before the request. Any explicit range is honoured as given, with no maximum length.
- created_beforetimestamp
Only transactions before this time. Giving it on its own turns off the 30 day default, so there is no lower bound.
- paid_withstring
Only wallet movements or only card charges.
Possible valueswalletcard
Returns200 OK
The totals.
Responses
- 200
The totals.
- 400
The request is invalid.
details.errorslists each problem (validation_failed), or anexpand[]path is unknown (invalid_expand). - 401
Credentials are missing (
missing_credentials), the API key is unknown or inactive (invalid_api_key), the session expired (invalid_session), or both a key and a session were sent (ambiguous_credentials). - 403
The credentials are valid but not allowed to do this: a scope is missing (
missing_scope), the endpoint is for another kind of account (actor_not_allowed) or another kind of credential (credential_not_allowed), the account may no longer use the API (account_blacklisted), or the account must change something first, in which casedetails.fix_urllinks to the dashboard page that fixes it. - 429
Too many requests (
rate_limited): the limit is 500 per minute per API key (or signed-in user). Wait for the number of seconds in theRetry-Afterheader, then retry;detailshaslimit,window_seconds,reset_atandretry_after_seconds.
Errors use the error object.
curl "https://public-api.dapi.digital/v2/transactions/summary" \
-H "x-api-key: $DAPI_API_KEY"{
"object": "transaction_summary",
"created_after": "2026-09-01T00:00:00Z",
"created_before": "2026-10-01T00:00:00Z",
"credits": {
"amount": 50000,
"currency": "usd"
},
"debits": {
"amount": 41230,
"currency": "usd"
},
"net": {
"amount": 8770,
"currency": "usd"
},
"by_category": [
{
"category": "top_up",
"direction": "credit",
"count": 2,
"total": {
"amount": 50000,
"currency": "usd"
}
},
{
"category": "order_payment",
"direction": "debit",
"count": 31,
"total": {
"amount": 29230,
"currency": "usd"
}
},
{
"category": "stock_purchase",
"direction": "debit",
"count": 2,
"total": {
"amount": 12000,
"currency": "usd"
}
}
]
}