{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-guides/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Daily Reconciliation","description":"Official developer documentation for ConnectPSP's PIX payment gateway API.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"daily-reconciliation","__idx":0},"children":["Daily Reconciliation"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide shows how to close a day against ConnectPSP: prove that what you started with, plus what"," ","moved, equals what you ended with."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"opening balance  +  cash-in  −  cash-out  =  closing balance\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Four endpoints do all the work:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Endpoint"},"children":["Endpoint"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Role"},"children":["Role"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /account/balance?date="]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Opening and closing balance"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-in/summary"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Deposits that settled"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-out/summary"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Payments that settled"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-in"]}," · ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-out"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Line-by-line detail when a figure does not match"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"1-get-both-ends-of-the-day","__idx":1},"children":["1. Get both ends of the day"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["?date=D"]}," returns the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["closing"]}," balance of day ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["D"]},". So the opening balance of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["D"]}," is simply the"," ","closing balance of the day before."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"# Opening balance of 2026-08-01\ncurl \"https://api.homologacao.connectpsp.com/account/balance?date=2026-07-31\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"ApplicationToken: $APP_TOKEN\"\n\n# Closing balance of 2026-08-01\ncurl \"https://api.homologacao.connectpsp.com/account/balance?date=2026-08-01\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"ApplicationToken: $APP_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This reads the banking ledger, not the bank's live API, so it keeps answering even when a partner"," ","bank is unreachable."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Two limits worth knowing:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["History starts at ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["2026-04-01"]},". Earlier dates return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422"]}," with code ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BALANCE_DATE_OUT_OF_RANGE"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["If the ledger has a gap for one of your accounts on that date, you get ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["422"]}," with code"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BALANCE_HISTORY_UNAVAILABLE"]}," instead of a number. This is deliberate — a stale balance presented"," ","as a closing balance is worse than no answer."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Omit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["date"]}," entirely to get the live balance right now."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"2-get-the-movement","__idx":2},"children":["2. Get the movement"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl \"https://api.homologacao.connectpsp.com/cash-in/summary?from=2026-08-01&to=2026-08-01\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"ApplicationToken: $APP_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n  \"from\": \"2026-08-01T00:00:00-03:00\",\n  \"to\": \"2026-08-01T23:59:59-03:00\",\n  \"currency\": \"BRL\",\n  \"totals\": {\n    \"paid\":     { \"count\": 1284, \"amount\": 192450.75 },\n    \"pending\":  { \"count\": 96,   \"amount\": 14320.00 },\n    \"refunded\": { \"count\": 2,    \"amount\": 300.00 }\n  },\n  \"settlement\": [\n    { \"ispb\": \"12345678\", \"bank\": \"SETTLEMENT PARTNER A\", \"count\": 1103, \"amount\": 165230.75 },\n    { \"ispb\": \"87654321\", \"bank\": \"SETTLEMENT PARTNER B\", \"count\": 181,  \"amount\": 27220.00 }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Only ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paid"]}," moves money."]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["pending"]}," is what has not settled; it belongs to no balance yet."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["settlement"]}," array counts ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["paid transactions only"]},", which is what lets you reconcile bank by"," ","bank against the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["banks[]"]}," array of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /account/balance"]},"."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Do the same for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/cash-out/summary"]},". There the keys are the Cash-Out statuses in lowercase, so what"," ","settled is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["completed"]},". Then:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"closing = opening + cashIn.totals.paid.amount − cashOut.totals.completed.amount\n        − cashIn.totals.refunded.amount + cashOut.totals.refunded.amount\n"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"3-when-a-figure-does-not-match-list-it","__idx":3},"children":["3. When a figure does not match, list it"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The listing endpoints walk the same period transaction by transaction."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"bash","header":{"controls":{"copy":{}}},"source":"curl \"https://api.homologacao.connectpsp.com/cash-in?from=2026-08-01&to=2026-08-01&limit=200\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"ApplicationToken: $APP_TOKEN\"\n","lang":"bash"},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"walking-the-pages","__idx":4},"children":["Walking the pages"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Pagination is ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["cursor-based"]},". Each response carries a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["nextCursor"]},"; send it back to get the next"," ","page. When the response arrives ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["without"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["nextCursor"]},", the period is exhausted."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"async function fetchAll(resource, from, to) {\n  const items = [];\n  let cursor = null;\n\n  do {\n    const url = new URL(`https://api.homologacao.connectpsp.com/${resource}`);\n    url.searchParams.set('from', from);\n    url.searchParams.set('to', to);\n    url.searchParams.set('limit', '200');\n    if (cursor) url.searchParams.set('cursor', cursor);\n\n    const res = await fetch(url, {\n      headers: {\n        Authorization: `Bearer ${TOKEN}`,\n        ApplicationToken: APP_TOKEN,\n      },\n    });\n\n    if (!res.ok) throw new Error(`${resource} failed: ${res.status}`);\n\n    const page = await res.json();\n    items.push(...page.items);\n    cursor = page.nextCursor ?? null;   // absent means we are done\n  } while (cursor);\n\n  return items;\n}\n","lang":"javascript"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Three rules for the walk:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Keep ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["from"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["to"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["limit"]}," ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["identical"]}," on every page. Only ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cursor"]}," changes."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Treat ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["nextCursor"]}," as opaque. Do not parse it, do not build one — the format may change."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Stop when ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["nextCursor"]}," is absent. Do not stop on a short page."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"why-there-is-no-total","__idx":5},"children":["Why there is no ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["total"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Returning a total would mean counting the entire period on every request, which is the exact cost"," ","that cursor pagination exists to avoid. Because the cursor seeks straight to its position, page 900"," ","costs the same as page 1 — but only if nobody asks for the count."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you need a count, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-in/summary"]}," gives it for the whole period in one call."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"reading-a-transaction","__idx":6},"children":["Reading a transaction"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every item in the list is the same object you get from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-in/{id}"]}," or"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-out/{id}"]},". Two fields matter most for reconciliation:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["endToEndId"]}]}," — the BACEN/SPI settlement ID. This is the common key between your records and"," ","ours, and between both of us and the bank."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["settlement"]}]}," — the ConnectPSP-side bank and account that settled the transaction:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"\"settlement\": {\n  \"ispb\": \"12345678\",\n  \"bank\": \"SETTLEMENT PARTNER A\",\n  \"branch\": \"0001\",\n  \"account\": \"123456\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Do not confuse it with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payer.bankData"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["payee.bankData"]},", which describe the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["counterparty"]},"."," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["settlement"]}," is our side — it is what maps a transaction onto a line of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /account/balance"]},"."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"timezone","__idx":7},"children":["Timezone"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["from"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["to"]}," are read in ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["America/Sao_Paulo (UTC-3)"]}," unless you send an explicit offset. A"," ","plain date covers that whole calendar day locally:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"You send"},"children":["You send"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"It means"},"children":["It means"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["from=2026-08-01"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2026-08-01T00:00:00-03:00"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["to=2026-08-01"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2026-08-01T23:59:59.999-03:00"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["from=2026-08-01T09:00:00"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2026-08-01T09:00:00-03:00"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["from=2026-08-01T12:00:00Z"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["2026-08-01T09:00:00-03:00"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Every timestamp in a response comes back the same way — ISO 8601 with a fixed ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["-03:00"]}," offset."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The period filters on when the transaction was ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["created"]},", not when it settled. A charge created at"," ","23:58 and paid at 00:03 belongs to the first day."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"errors","__idx":8},"children":["Errors"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All errors follow ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://datatracker.ietf.org/doc/html/rfc7807"},"children":["RFC 7807"]},", with a machine-readable"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["code"]},"."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Code"},"children":["Code"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Status"},"children":["Status"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Cause"},"children":["Cause"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LIST_FROM_INVALID"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["from"]}," missing or not a valid date"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LIST_TO_INVALID"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["to"]}," missing or not a valid date"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LIST_RANGE_INVALID"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["to"]}," is not after ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["from"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LIST_FROM_BEFORE_CUTOFF"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Statement only — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["from"]}," is earlier than the first available statement date (the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["detail"]}," states it)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LIST_LIMIT_INVALID"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["limit"]}," outside 1–1000"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LIST_CURSOR_INVALID"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["cursor"]}," was altered or truncated"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BALANCE_DATE_OUT_OF_RANGE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Date in the future, or before 2026-04-01"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BALANCE_HISTORY_UNAVAILABLE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["422"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Ledger gap for an account on that date"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BALANCE_PROVIDER_UNAVAILABLE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["503"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Live balance only — the bank did not answer. Retry"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"suggested-daily-routine","__idx":9},"children":["Suggested daily routine"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /account/balance?date=D-1"]}," → opening."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-in/summary"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-out/summary"]}," for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["D"]}," → movement."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /account/balance?date=D"]}," → closing."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Check the identity, per bank, using ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["settlement[]"]}," against ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["banks[]"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Only if a bank does not close, walk ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-in"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /cash-out"]}," for that day and compare"," ","by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["endToEndId"]},"."]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Steps 1 to 4 are four requests, regardless of your volume. Step 5 is the expensive one, and you only"," ","pay for it when something is actually wrong."]}]},"headings":[{"value":"Daily Reconciliation","id":"daily-reconciliation","depth":1},{"value":"1. Get both ends of the day","id":"1-get-both-ends-of-the-day","depth":2},{"value":"2. Get the movement","id":"2-get-the-movement","depth":2},{"value":"3. When a figure does not match, list it","id":"3-when-a-figure-does-not-match-list-it","depth":2},{"value":"Walking the pages","id":"walking-the-pages","depth":3},{"value":"Why there is no total","id":"why-there-is-no-total","depth":3},{"value":"Reading a transaction","id":"reading-a-transaction","depth":2},{"value":"Timezone","id":"timezone","depth":2},{"value":"Errors","id":"errors","depth":2},{"value":"Suggested daily routine","id":"suggested-daily-routine","depth":2}],"frontmatter":{"seo":{"title":"Daily Reconciliation"}},"lastModified":"2026-10-05T16:29:38.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/reconciliation","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}