Skip to main content
A statement answers one question about one account and one asset: what did it hold, what moved, and what does it hold now. One line is one transaction, so the statement you read and the transactions you already reconcile against are the same list.
Test this flow in sandbox. Simulate a deposit and a payout on the same account, wait for the day to close, then read the statement. See deposit simulation and withdrawals.
A crypto wallet holds several assets, so its statement names the one you want:
A wallet lives on one chain, so the statement takes only the asset. An asset that is not on that chain returns 400 UNSUPPORTED_ASSET.

The period

from and to are UTC days, and both are included. A line belongs to the period when its completedAt falls in it, starting at from 00:00:00.000Z and ending the instant to ends, which is the next day’s 00:00:00.000Z. A transaction that completes at that exact instant belongs to the next period. This is the same range GET /v2/transactions applies to completedAfter and completedBefore, on the same field. So a transaction that completes in a month is on that month’s statement and in that month’s list: none is counted twice and none falls between two months. The list covers every account you hold, so a statement is the part of it that moved this account and this asset:
Three rules, each a 400 VALIDATION_ERROR:
  • to must be a day that has ended. Today is refused because it has not ended.
  • from must be to or earlier.
  • The period holds at most 92 days.

Reading a line

A line is one transaction that moved money into or out of the account and completed in the period. A transaction that is still pending, or that failed or was cancelled, has no line. A payment the receiving bank returns keeps its original line on the day it left, and the refund is its own line on the day the money came back, so a statement you have already downloaded never changes. A payment between two accounts you hold is one debit on the payer and one credit on the payee, never a credit on both. A fee that Conduit invoices to you monthly is not on the line. Only a fee charged to the account for that transaction appears, and it appears on the transaction’s own line rather than as a line of its own. A conversion moves two assets, so it appears on the statement of each one: a negative line on the asset it sold, a positive line on the asset it bought. The fee sits on the line of the asset it was charged in.

What reconciles

openingBalance is what the account held when the period began, and closingBalance what it held when the period ended. Each balanceAfter is the balance before the line plus that line’s net, so the last line of the last page always equals closingBalance. totals reports the period in three figures: fees is there so you can see the charge separately. It is already inside every line’s net, so never add it to debits and never subtract it from credits — a fee taken out of a deposit sits inside a credit, not a debit. The three totals are positive amounts, while a line’s fee and net are signed, so the lines’ fees sum to -totals.fees. The balance a statement reports counts a movement when its transaction completes. It can differ from the available balance on the account resource, which also reflects money still arriving and money reserved for a payout that has not completed yet.

Paging a long period

One request answers one page of lines. Follow meta.nextCursor until it is null:
A cursor belongs to the request that returned it. Send it back with the same account, asset and period, or the call returns 400 INVALID_CURSOR. openingBalance, closingBalance, totals and period cover the whole period on every page, not only the page you are holding. balanceAfter continues across pages, so the running balance is correct wherever a page begins. Collect every page before you check that the credits and debits tie out.
A month of one busy account is a few pages. Ask for the month you want, not the year. The period holds at most 92 days, and a statement is easiest to reconcile one month at a time.