Wallet

View as Markdown

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_credit lapses. 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.

The wallet object
{
  ,
  ,
  ,
  ,
  ,
  
}

Get your wallet balance

GET/v2/wallet

Credentials
An API key with the wallet:read scope (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 case details.fix_url links 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 the Retry-After header, then retry; details has limit, window_seconds, reset_at and retry_after_seconds.

Errors use the error object.

GET/v2/wallet
curl "https://public-api.dapi.digital/v2/wallet" \
  -H "x-api-key: $DAPI_API_KEY"
Response
{
  "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

    credit added money for you, debit took 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. A debit when 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_reason says which kind, and description explains it in words.
    Possible valuesorder_paymentstock_purchasetop_upearningsrefundwithdrawaladjustment
  • adjustment_reasonstring or null

    Why the adjustment happened, when category is adjustment; null for every other category.

    Possible valuessupport_creditsupport_debitshipping_discountwarehousing_chargereplacement_order_charge
  • paid_withTransactionPaidWith

    wallet when the money moved through your balance, card when a card was charged directly (no-profit orders paid at checkout). Filter on wallet to reconcile with the balance.

    Possible valueswalletcard
  • statusTransactionStatus

    pending only for withdrawals requested and not paid out yet; everything else is completed.

    Possible valuespendingcompleted
  • amountobject

    Amount moved, VAT included. Always positive. On a top_up this is what your card was charged; your balance grows by the net amount (amount minus vat.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.

The transaction object
null

List transactions

GET/v2/transactions

Credentials
An API key with the wallet:read scope (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.

    Range at least 0.
  • amount_maxinteger or null

    Only amounts of at most this many cents.

    Range at least 0.
  • 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
    Defaults to "-created_at".
  • limitinteger

    How many results per page, from 1 to 100.

    Range 1 to 100. Defaults to 20.
  • cursorstring

    Where to continue from: the next_cursor of 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.errors lists each problem (validation_failed), or an expand[] 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 case details.fix_url links 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 the Retry-After header, then retry; details has limit, window_seconds, reset_at and retry_after_seconds.

Errors use the error object.

GET/v2/transactions
curl "https://public-api.dapi.digital/v2/transactions" \
  -H "x-api-key: $DAPI_API_KEY"
Response
{
  "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/v2/transactions/summary

Credentials
An API key with the wallet:read scope (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.errors lists each problem (validation_failed), or an expand[] 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 case details.fix_url links 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 the Retry-After header, then retry; details has limit, window_seconds, reset_at and retry_after_seconds.

Errors use the error object.

GET/v2/transactions/summary
curl "https://public-api.dapi.digital/v2/transactions/summary" \
  -H "x-api-key: $DAPI_API_KEY"
Response
{
  "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"
      }
    }
  ]
}