AppTransactions, account Activity and Home “Recent transactions”. Newest first. account_id matches the debited or credited account and,
for internal moves, either side. Type tabs: All, Payouts, Collections, Transfers. “Needs attention” counts come from status=failed / status=processing
with include=total_count. “Export CSV”: send Accept: text/csv with the same filters (up to 10,000 rows; use statements for more).
Optional client correlation id, up to 128 characters. It is not echoed: the response's X-Request-Id is always
our own req_… id. We log your value with the request as client_request_id, so support can find a request by
either id. A longer value is refused with 400 parameter_invalid.
Cursor for the reverse direction: returns the items newer than this one. The page is still sorted newest first;
has_more and next_cursor then continue in the same (newer) direction, so pass next_cursor as before to
keep paging towards the newest items. Don't send with after.
Cursor for the next page in the same direction: pass it as after if this page was read with after (or no cursor), as before if it was read with before. Null when has_more is false.
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"PanoFlow","description":"Developer documentation for the PanoFlow API: business accounts, NIP payouts, collections, payroll, webhooks and AI agents over MCP for Nigerian businesses.","colors":{"primary":"#3F4DD4","light":"#A3AEFF","dark":"#3F4DD4"},"logo":{"light":"https://mintcdn.com/panoflow/rkIjB8OWIncVCLey/logo/light.svg?fit=max\u0026auto=format\u0026n=rkIjB8OWIncVCLey\u0026q=85\u0026s=90a8e82b5135ae0b8b004499569230a7","dark":"https://mintcdn.com/panoflow/rkIjB8OWIncVCLey/logo/dark.svg?fit=max\u0026auto=format\u0026n=rkIjB8OWIncVCLey\u0026q=85\u0026s=0f5228a4dbc048dde0a23695f43216af"},"favicon":"https://mintcdn.com/panoflow/rkIjB8OWIncVCLey/favicon.svg?fit=max\u0026auto=format\u0026n=rkIjB8OWIncVCLey\u0026q=85\u0026s=9fdb84fbed5f080944320790f64641b2","api":{"playground":{"display":"interactive"},"examples":{"languages":["bash","javascript","python"]},"mdx":{"auth":{"method":"bearer"},"server":"https://api.panoflow.io/v1"}},"appearance":{"default":"system"},"background":{"color":{"light":"#FFFFFF","dark":"#0A0C1A"}},"navbar":{"primary":{"type":"button","label":"Open the app","href":"https://app.panoflow.io"}},"fonts":{"family":"Inter"},"icons":{"library":"lucide"},"variables":{"contractsVersion":"v0.4.3"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"panoflow","hasAudioNarration":false,"actualSubdomain":"panoflow","customDomains":["docs.panoflow.io"],"gitSource":{"type":"artifacts","owner":"prod","repo":"e0885ce4cadc39d8f91d9b21","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6aed237e942e4547e05d45e6"},"entitlements":{},"buildId":"6af0c0838e5be496317616c0","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"API reference","count":126},{"language":"default","tag":"Payments","count":29},{"language":"default","tag":"Payroll","count":29},{"language":"default","tag":"Collections","count":27},{"language":"default","tag":"Accounts \u0026 transactions","count":18},{"language":"default","tag":"Webhooks \u0026 events","count":17},{"language":"default","tag":"Guides","count":13},{"language":"default","tag":"Webhooks","count":13},{"language":"default","tag":"Invoices","count":10},{"language":"default","tag":"Pay runs","count":10}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@media (min-width: 1024px){#navbar div:has(>[data-component-part=\"version-select-trigger\"]){position:absolute;right:3rem;bottom:-3rem;height:3rem;display:flex;align-items:center;z-index:1}}"}],"page":{"pagePath":"api-reference/transactions/list-transactions","slug":"/api-reference/transactions/list-transactions","pageMetadata":{"title":"List transactions","description":"AppTransactions, account Activity and Home \"Recent transactions\". Newest first. `account_id` matches the debited or credited account and,\nfor internal moves, either side. Type tabs: All, Payouts, Collections, Transfers. \"Needs attention\" counts come from `status=failed` / `status=processing`\nwith `include=total_count`. \"Export CSV\": send `Accept: text/csv` with the same filters (up to 10,000 rows; use statements for more).\n\n**Error codes:** `invalid_api_key`, `parameter_invalid`, `rate_limited`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /transactions","href":"/api-reference/transactions/list-transactions","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"AppTransactions, account Activity and Home “Recent transactions”. Newest first. \", _jsx(_components.code, {\n children: \"account_id\"\n }), \" matches the debited or credited account and,\\nfor internal moves, either side. Type tabs: All, Payouts, Collections, Transfers. “Needs attention” counts come from \", _jsx(_components.code, {\n children: \"status=failed\"\n }), \" / \", _jsx(_components.code, {\n children: \"status=processing\"\n }), \"\\nwith \", _jsx(_components.code, {\n children: \"include=total_count\"\n }), \". “Export CSV”: send \", _jsx(_components.code, {\n children: \"Accept: text/csv\"\n }), \" with the same filters (up to 10,000 rows; use statements for more).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Error codes:\"\n }), \" \", _jsx(_components.code, {\n children: \"invalid_api_key\"\n }), \", \", _jsx(_components.code, {\n children: \"parameter_invalid\"\n }), \", \", _jsx(_components.code, {\n children: \"rate_limited\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"List transactions","description":"AppTransactions, account Activity and Home \"Recent transactions\". Newest first. `account_id` matches the debited or credited account and,\nfor internal moves, either side. Type tabs: All, Payouts, Collections, Transfers. \"Needs attention\" counts come from `status=failed` / `status=processing`\nwith `include=total_count`. \"Export CSV\": send `Accept: text/csv` with the same filters (up to 10,000 rows; use statements for more).\n\n**Error codes:** `invalid_api_key`, `parameter_invalid`, `rate_limited`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /transactions","href":"/api-reference/transactions/list-transactions","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"listTransactions","x-audience":"public","tags":["Transactions"],"summary":"List transactions","description":"AppTransactions, account Activity and Home \"Recent transactions\". Newest first. `account_id` matches the debited or credited account and,\nfor internal moves, either side. Type tabs: All, Payouts, Collections, Transfers. \"Needs attention\" counts come from `status=failed` / `status=processing`\nwith `include=total_count`. \"Export CSV\": send `Accept: text/csv` with the same filters (up to 10,000 rows; use statements for more).\n\n**Error codes:** `invalid_api_key`, `parameter_invalid`, `rate_limited`.","x-required-scope":"accounts:read","parameters":["b200aca1-d5c6-490f-a396-b3be7144c910","c5dacb40-9223-4852-8f31-d696b2b43e42","02d95e7f-5598-4656-8488-17dc60ca06c4","47e462eb-1109-4334-bdb9-aebf9a16ed6a","8604cf69-37df-4e2d-a048-18efbbf67e1c","90fac6ba-fa98-4b0e-b251-71b22b575564","0b4ea311-5e39-42b4-ad18-15793f877700","63588401-b90a-41e3-9516-0b910c6cc8c0","9845588d-31a8-4c8d-8af6-cae9ef4355db","ad641162-6665-49b4-b022-231a55c3a4f8","6207d6ae-2f00-4475-b1cb-4f6e8b42a063","dc002b4d-9294-43b5-b4fc-a488afd4dc79","2f26dfac-6c4f-414e-a154-9a06dbd23375","81606f15-4c96-4a97-9c56-81774ed0dd8e","26e21227-55e2-439e-8499-15a3b4012df3","ad2db584-89f1-4db8-bff6-74f66732a6a8","ed5a971d-41cf-4977-9407-cead87fbce42"],"responses":{"200":"31736d79-3554-42b0-a3e2-f3089ee1647c","400":"9685aa0d-1a54-4077-a67d-d752a3755c9b","401":"f777d3bf-0fe1-494b-ae2b-5b8c82216476","403":"6acb0ec1-84c3-4002-bcc0-4b257e3b58f9","429":"e4e0f126-c457-4240-9592-bb6523a0ae8b","500":"dbb9efbf-5149-4015-b253-bc655862d289"},"security":["e2510fd5-506e-4738-9bc2-ff6c620156d3","47554ecb-c340-4512-9a24-d1a7f2679039"],"method":"get","type":"path","servers":["cf259c20-e7c1-48a9-9f97-74f4b4326eb6","6e3d7379-d61e-45cf-97a8-a7d6fcb274b1"],"path":"/transactions","baseUrlOptions":["https://api.panoflow.io/v1","https://api-dev-9d8b.up.railway.app/v1"],"title":"List transactions","codeSamples":[],"requestExampleLanguages":["bash","javascript","python"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"b200aca1-d5c6-490f-a396-b3be7144c910":{"name":"X-Request-Id","in":"header","required":false,"description":"Optional client correlation id, up to 128 characters. It is not echoed: the response's `X-Request-Id` is always\nour own `req_…` id. We log your value with the request as `client_request_id`, so support can find a request by\neither id. A longer value is refused with 400 `parameter_invalid`.\n","schema":{"type":"string","maxLength":128,"isRequired":false,"description":"Optional client correlation id, up to 128 characters. It is not echoed: the response's `X-Request-Id` is always\nour own `req_…` id. We log your value with the request as `client_request_id`, so support can find a request by\neither id. A longer value is refused with 400 `parameter_invalid`.\n","uniqueKey":"","typeLabel":"string"}},"c5dacb40-9223-4852-8f31-d696b2b43e42":{"name":"limit","in":"query","description":"Page size, 1–100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25,"description":"Page size, 1–100.","uniqueKey":"","typeLabel":"integer"}},"02d95e7f-5598-4656-8488-17dc60ca06c4":{"name":"after","in":"query","description":"Cursor from the previous page's `next_cursor`. Returns older items. Don't send with `before`.","schema":{"type":"string","description":"Cursor from the previous page's `next_cursor`. Returns older items. Don't send with `before`.","uniqueKey":"","typeLabel":"string"}},"47e462eb-1109-4334-bdb9-aebf9a16ed6a":{"name":"before","in":"query","description":"Cursor for the reverse direction: returns the items newer than this one. The page is still sorted newest first;\n`has_more` and `next_cursor` then continue in the same (newer) direction, so pass `next_cursor` as `before` to\nkeep paging towards the newest items. Don't send with `after`.\n","schema":{"type":"string","description":"Cursor for the reverse direction: returns the items newer than this one. The page is still sorted newest first;\n`has_more` and `next_cursor` then continue in the same (newer) direction, so pass `next_cursor` as `before` to\nkeep paging towards the newest items. Don't send with `after`.\n","uniqueKey":"","typeLabel":"string"}},"8604cf69-37df-4e2d-a048-18efbbf67e1c":{"name":"account_id","in":"query","required":false,"description":"Comma-separated account ids.","schema":{"type":"array","items":{"type":"string","uniqueKey":"items.[INDEX]","typeLabel":"string"},"isRequired":false,"description":"Comma-separated account ids.","uniqueKey":"","typeLabel":"string[]"},"style":"form","explode":false,"example":["acc_01JCNND0RKATSR2MYBK8VQ3468"]},"90fac6ba-fa98-4b0e-b251-71b22b575564":{"name":"type","in":"query","required":false,"description":"Comma-separated transaction types.","schema":{"type":"array","items":{"type":"string","uniqueKey":"items.[INDEX]","typeLabel":"string"},"isRequired":false,"description":"Comma-separated transaction types.","uniqueKey":"","typeLabel":"string[]"},"style":"form","explode":false,"example":["payout","collection"]},"0b4ea311-5e39-42b4-ad18-15793f877700":{"name":"status","in":"query","required":false,"description":"Comma-separated statuses.","schema":{"type":"array","items":{"type":"string","uniqueKey":"items.[INDEX]","typeLabel":"string"},"isRequired":false,"description":"Comma-separated statuses.","uniqueKey":"","typeLabel":"string[]"},"style":"form","explode":false,"example":["failed","processing"]},"63588401-b90a-41e3-9516-0b910c6cc8c0":{"name":"direction","in":"query","required":false,"description":"Money in, out or between own accounts.","schema":{"type":"string","enum":["in","out","internal"],"isRequired":false,"description":"Money in, out or between own accounts.","uniqueKey":"","typeLabel":"enum\u003cstring>"},"example":"in"},"9845588d-31a8-4c8d-8af6-cae9ef4355db":{"name":"created_gte","in":"query","description":"Only items created at or after this time.","schema":{"type":"string","format":"date-time","description":"Only items created at or after this time.","uniqueKey":"","typeLabel":"string\u003cdate-time>"}},"ad641162-6665-49b4-b022-231a55c3a4f8":{"name":"created_lte","in":"query","description":"Only items created at or before this time.","schema":{"type":"string","format":"date-time","description":"Only items created at or before this time.","uniqueKey":"","typeLabel":"string\u003cdate-time>"}},"6207d6ae-2f00-4475-b1cb-4f6e8b42a063":{"name":"amount_gte","in":"query","required":false,"description":"Minimum amount in minor units.","schema":{"type":"integer","format":"int64","minimum":0,"isRequired":false,"description":"Minimum amount in minor units.","uniqueKey":"","typeLabel":"integer\u003cint64>"},"example":10000000},"dc002b4d-9294-43b5-b4fc-a488afd4dc79":{"name":"amount_lte","in":"query","required":false,"description":"Maximum amount in minor units.","schema":{"type":"integer","format":"int64","minimum":0,"isRequired":false,"description":"Maximum amount in minor units.","uniqueKey":"","typeLabel":"integer\u003cint64>"},"example":500000000},"2f26dfac-6c4f-414e-a154-9a06dbd23375":{"name":"category","in":"query","required":false,"description":"Exact category.","schema":{"type":"string","maxLength":40,"isRequired":false,"description":"Exact category.","uniqueKey":"","typeLabel":"string"},"example":"Fuel"},"81606f15-4c96-4a97-9c56-81774ed0dd8e":{"name":"source_id","in":"query","required":false,"description":"Transactions of one source object (a batch, pay run, invoice, ...).","schema":{"type":"string","isRequired":false,"description":"Transactions of one source object (a batch, pay run, invoice, ...).","uniqueKey":"","typeLabel":"string"},"example":"run_01JC3F01BK3VK5ZHFXVTX5XQW5"},"26e21227-55e2-439e-8499-15a3b4012df3":{"name":"livemode","in":"query","required":false,"description":"Sandbox (`false`) or live (`true`) data. Defaults to the session's mode.","schema":{"type":"boolean","isRequired":false,"description":"Sandbox (`false`) or live (`true`) data. Defaults to the session's mode.","uniqueKey":"","typeLabel":"boolean"},"example":true},"ad2db584-89f1-4db8-bff6-74f66732a6a8":{"name":"q","in":"query","description":"Free-text search.","schema":{"type":"string","maxLength":200,"description":"Free-text search.","uniqueKey":"","typeLabel":"string"}},"ed5a971d-41cf-4977-9407-cead87fbce42":{"name":"include","in":"query","description":"Set to `total_count` to add `total_count` to the list response.","schema":{"type":"string","enum":["total_count"],"description":"Set to `total_count` to add `total_count` to the list response.","uniqueKey":"","typeLabel":"enum\u003cstring>"}}},"responses":{"31736d79-3554-42b0-a3e2-f3089ee1647c":{"description":"OK.","headers":{"X-Request-Id":{"description":"Our request id (`req_…`), on every response. Always ours, never the client's `X-Request-Id`. Quote it to support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute for this key, token or session.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","description":"Transactions.","required":["object","data","has_more"],"properties":{"object":{"type":"string","const":"list","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"data":{"type":"array","items":{"type":"object","description":"One movement on the business's accounts, as customers see it (Transactions, account Activity). Read-only view of payments, collections and other account movements. Carries the ISO 8583 outcome of the underlying movement: `09` while pending_approval/scheduled/processing, `01` while a status query is unresolved, `00` when completed, the bank's NIP code (or ours) when failed or rejected.","required":["id","object","created_at","updated_at","type","status","direction","amount","account_id","account_display_name","counterparty","description","reference","source","events","attachment_document_ids","livemode","response_code","response_message"],"properties":{"response_code":{"type":"string","pattern":"^[0-9A-Z]{2}$","description":"Two-character ISO 8583 response code, using the NIBSS NIP meanings (CONVENTIONS §7a). `00` is success.\nCarried on every error (mapped from `error.code`, see errors.yaml `x-codes`) and on every money-movement\nobject (the bank's final code, or our own while it is in flight). Clients must tolerate codes added later.\n","enum":["00","01","03","05","06","07","08","09","12","13","14","15","16","17","21","25","26","30","34","35","51","57","58","61","63","65","68","91","92","94","96","97"],"x-codes":{"12":"Invalid transaction","13":"Invalid amount","14":"Invalid batch number","15":"Invalid session or record id","16":"Unknown bank code","17":"Invalid channel","21":"No action taken","25":"Unable to locate record","26":"Duplicate record","30":"Format error","34":"Suspected fraud","35":"Contact sending bank","51":"No sufficient funds","57":"Transaction not permitted to sender","58":"Transaction not permitted on channel","61":"Transfer limit exceeded","63":"Security violation","65":"Exceeds withdrawal frequency","68":"Response received too late","91":"Beneficiary bank not available","92":"Routing error","94":"Duplicate transaction","96":"System malfunction","97":"Timeout waiting for response from destination","00":"Approved or completed successfully","01":"Status unknown, please wait for settlement report","03":"Invalid sender","05":"Do not honour","06":"Dormant account","07":"Invalid account","08":"Account name mismatch","09":"Request processing in progress"},"isRequired":true,"uniqueKey":"data.items.[INDEX].response_code","typeLabel":"enum\u003cstring>"},"response_message":{"type":"string","description":"Standard meaning of the code (the `x-codes` text), not customer copy. Customer-safe wording is in `status_reason` / `error.message`.","examples":["Approved or completed successfully"],"isRequired":true,"uniqueKey":"data.items.[INDEX].response_message","typeLabel":"string"},"id":{"type":"string","pattern":"^txn_[0-9A-HJKMNP-TV-Z]{26}$","description":"Transaction id.","isRequired":true,"uniqueKey":"data.items.[INDEX].id","typeLabel":"string"},"object":{"type":"string","description":"Always `transaction`.","const":"transaction","isRequired":true,"uniqueKey":"data.items.[INDEX].object","typeLabel":"string"},"created_at":{"type":"string","format":"date-time","description":"When it was created.","examples":["2026-10-27T08:41:00Z"],"isRequired":true,"uniqueKey":"data.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"When it was created.","examples":["2026-10-27T08:41:00Z"],"isRequired":true,"uniqueKey":"data.items.[INDEX].updated_at","typeLabel":"string\u003cdate-time>"},"type":{"type":"string","enum":["payout","collection","transfer","fee","reversal","conversion","card"],"description":"`payout`: money out to another bank (single or part of a batch, pay run or agent payment).","x-phase-values":{"conversion":"after-launch","card":"after-launch"},"isRequired":true,"uniqueKey":"data.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"status":{"type":"string","description":"Lifecycle (CONVENTIONS §8). UI labels: completed → \"Settled\", processing → \"Processing\", pending_approval → \"Pending approval\".","enum":["draft","pending_approval","scheduled","processing","completed","failed","rejected","canceled","reversed"],"isRequired":true,"uniqueKey":"data.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"direction":{"type":"string","enum":["in","out","internal"],"description":"`in`: money into `account_id`. `out`: money out of `account_id`. `internal`: from `account_id` to `counterparty.account_id`, both the business's own.","isRequired":true,"uniqueKey":"data.items.[INDEX].direction","typeLabel":"enum\u003cstring>"},"amount":{"type":"object","description":"Always positive; sign comes from `direction` and the account viewed. A failed payout shows its original amount; its money is back (\"Failed, money returned\").","required":["amount","currency"],"properties":{"amount":{"type":"integer","format":"int64","description":"Amount in minor units. ₦450,000.00 is 45000000.","examples":[45000000],"isRequired":true,"uniqueKey":"data.items.[INDEX].amount.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"string","description":"ISO 4217. Only NGN is live at launch; others return 422 `currency_not_enabled`.","enum":["NGN","USD","GBP","EUR","GHS","KES"],"isRequired":true,"uniqueKey":"data.items.[INDEX].amount.currency","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].amount","typeLabel":"object"},"account_id":{"type":"string","pattern":"^acc_[0-9A-HJKMNP-TV-Z]{26}$","description":"Account debited (`out`, `internal`) or credited (`in`).","isRequired":true,"uniqueKey":"data.items.[INDEX].account_id","typeLabel":"string"},"account_display_name":{"type":"string","description":"\"Naira · Main\".","isRequired":true,"uniqueKey":"data.items.[INDEX].account_display_name","typeLabel":"string"},"counterparty":{"type":"object","description":"The other side of a transaction.","required":["type","name"],"properties":{"type":{"type":"string","enum":["bank_account","own_account","batch","pay_run","fx","panoflow"],"description":"What is on the other side.","isRequired":true,"uniqueKey":"data.items.[INDEX].counterparty.type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","description":"Display name (\"Kano Freight Services\", \"October salaries · 11 people\").","isRequired":true,"uniqueKey":"data.items.[INDEX].counterparty.name","typeLabel":"string"},"bank_account":{"oneOf":[{"type":"object","description":"For `bank_account`: the other bank account, with the name from name enquiry.","required":["account_number","bank_code"],"properties":{"account_number":{"type":"string","description":"10-digit Nigerian NUBAN account number.","pattern":"^\\d{10}$","examples":["8012457739"],"isRequired":true,"uniqueKey":"data.items.[INDEX].counterparty.bank_account.oneOf.0.account_number","typeLabel":"string"},"bank_code":{"type":"string","description":"The bank's NIBSS NIP institution code (CBN bank code).","examples":["058"],"isRequired":true,"uniqueKey":"data.items.[INDEX].counterparty.bank_account.oneOf.0.bank_code","typeLabel":"string"},"bank_name":{"type":"string","description":"Display name of the bank.","examples":["GTBank"],"uniqueKey":"data.items.[INDEX].counterparty.bank_account.oneOf.0.bank_name","typeLabel":"string"},"account_name":{"type":"string","description":"Name on the account as returned by name enquiry.","uniqueKey":"data.items.[INDEX].counterparty.bank_account.oneOf.0.account_name","typeLabel":"string"}},"uniqueKey":"data.items.[INDEX].counterparty.bank_account.oneOf.0","typeLabel":"object"},{"type":"null","description":"For `bank_account`: the other bank account, with the name from name enquiry.","uniqueKey":"data.items.[INDEX].counterparty.bank_account.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].counterparty.bank_account","typeLabel":"object | null"},"account_id":{"oneOf":[{"type":"string","description":"For `own_account`: the other PanoFlow account.","pattern":"^acc_[0-9A-HJKMNP-TV-Z]{26}$","uniqueKey":"data.items.[INDEX].counterparty.account_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"For `own_account`: the other PanoFlow account.","pattern":"^acc_[0-9A-HJKMNP-TV-Z]{26}$","uniqueKey":"data.items.[INDEX].counterparty.account_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].counterparty.account_id","typeLabel":"string | null"},"recipient_id":{"oneOf":[{"type":"string","description":"Saved recipient, if any.","pattern":"^rcp_[0-9A-HJKMNP-TV-Z]{26}$","uniqueKey":"data.items.[INDEX].counterparty.recipient_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Saved recipient, if any.","pattern":"^rcp_[0-9A-HJKMNP-TV-Z]{26}$","uniqueKey":"data.items.[INDEX].counterparty.recipient_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].counterparty.recipient_id","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].counterparty","typeLabel":"object"},"description":{"type":"string","description":"Main line in lists, e.g. \"Kano Freight Services\" or \"Naira · Main to Naira · Payroll\".","isRequired":true,"uniqueKey":"data.items.[INDEX].description","typeLabel":"string"},"reference":{"oneOf":[{"type":"string","description":"Second line and \"Narration\": invoice number, payment reference or note sent with the payment, e.g. \"INV-0142\", \"Diesel supply\".","isRequired":true,"uniqueKey":"data.items.[INDEX].reference.oneOf.0","typeLabel":"string"},{"type":"null","description":"Second line and \"Narration\": invoice number, payment reference or note sent with the payment, e.g. \"INV-0142\", \"Diesel supply\".","isRequired":true,"uniqueKey":"data.items.[INDEX].reference.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].reference","typeLabel":"string | null"},"source":{"type":"object","description":"Where the transaction came from.","required":["type","id"],"properties":{"type":{"type":"string","enum":["transfer","batch","pay_run","inbound_credit","invoice","payment_link","static_virtual_account","agent_payment","fee","adjustment","conversion","card"],"description":"The domain object that produced the transaction.","isRequired":true,"uniqueKey":"data.items.[INDEX].source.type","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"Its id (`trf_…`, `bat_…`, `run_…`, `icr_…`, `ivc_…`, `lnk_…`, `sva_…`, `adj_…`, …). Fetch it from its own API for full detail.","isRequired":true,"uniqueKey":"data.items.[INDEX].source.id","typeLabel":"string"}},"isRequired":true,"uniqueKey":"data.items.[INDEX].source","typeLabel":"object"},"attachment_document_ids":{"type":"array","items":{"type":"string","description":"A `doc_…` with purpose `transaction_attachment`.","pattern":"^doc_[0-9A-HJKMNP-TV-Z]{26}$","uniqueKey":"data.items.[INDEX].attachment_document_ids.items.[INDEX]","typeLabel":"string"},"description":"\"Receipt or invoice\" files attached.","isRequired":true,"uniqueKey":"data.items.[INDEX].attachment_document_ids","typeLabel":"string[]"},"events":{"type":"array","items":{"type":"object","description":"One step of \"PROGRESS\" in the transaction drawer.","required":["type","description","at"],"properties":{"type":{"type":"string","enum":["created","approved","sent","received","matched","completed","failed","returned","reversed"],"description":"Step in the progress timeline.","isRequired":true,"uniqueKey":"data.items.[INDEX].events.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"description":{"type":"string","description":"Safe to show, e.g. \"Sent to the receiving bank\", \"Recorded against INV-0142\", \"Rejected, money returned\".","isRequired":true,"uniqueKey":"data.items.[INDEX].events.items.[INDEX].description","typeLabel":"string"},"at":{"type":"string","format":"date-time","description":"When it was created.","examples":["2026-10-27T08:41:00Z"],"isRequired":true,"uniqueKey":"data.items.[INDEX].events.items.[INDEX].at","typeLabel":"string\u003cdate-time>"},"actor":{"oneOf":[{"type":"object","description":"Who did it, when a person did.","required":["type","id","name"],"properties":{"type":{"type":"string","enum":["user","staff","agent","api_key","system"],"description":"Kind of actor.","isRequired":true,"uniqueKey":"data.items.[INDEX].events.items.[INDEX].actor.oneOf.0.type","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"The actor's id (`usr_…`, `stf_…`, `agt_…`, `key_…`, or `system`).","isRequired":true,"uniqueKey":"data.items.[INDEX].events.items.[INDEX].actor.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","description":"Display name, e.g. \"Adaeze Okafor\" or \"Procurement agent\".","isRequired":true,"uniqueKey":"data.items.[INDEX].events.items.[INDEX].actor.oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.items.[INDEX].events.items.[INDEX].actor.oneOf.0","typeLabel":"object"},{"type":"null","description":"Who did it, when a person did.","uniqueKey":"data.items.[INDEX].events.items.[INDEX].actor.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].events.items.[INDEX].actor","typeLabel":"object | null"}},"uniqueKey":"data.items.[INDEX].events.items.[INDEX]","typeLabel":"object"},"description":"Progress timeline, oldest first.","isRequired":true,"uniqueKey":"data.items.[INDEX].events","typeLabel":"object[]"},"livemode":{"type":"boolean","description":"False for sandbox (TEST) transactions.","isRequired":true,"uniqueKey":"data.items.[INDEX].livemode","typeLabel":"boolean"},"fee":{"oneOf":[{"type":"object","description":"Fee charged on top, if any.","required":["amount","currency"],"properties":{"amount":{"type":"integer","format":"int64","description":"Amount in minor units. ₦450,000.00 is 45000000.","examples":[45000000],"isRequired":true,"uniqueKey":"data.items.[INDEX].fee.oneOf.0.amount","typeLabel":"integer\u003cint64>"},"currency":{"type":"string","description":"ISO 4217. Only NGN is live at launch; others return 422 `currency_not_enabled`.","enum":["NGN","USD","GBP","EUR","GHS","KES"],"isRequired":true,"uniqueKey":"data.items.[INDEX].fee.oneOf.0.currency","typeLabel":"enum\u003cstring>"}},"uniqueKey":"data.items.[INDEX].fee.oneOf.0","typeLabel":"object"},{"type":"null","description":"Fee charged on top, if any.","uniqueKey":"data.items.[INDEX].fee.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].fee","typeLabel":"object | null"},"initiated_by":{"oneOf":[{"type":"object","description":"\"Created by\".","required":["type","id","name"],"properties":{"type":{"type":"string","enum":["user","staff","agent","api_key","system"],"description":"Kind of actor.","isRequired":true,"uniqueKey":"data.items.[INDEX].initiated_by.oneOf.0.type","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"The actor's id (`usr_…`, `stf_…`, `agt_…`, `key_…`, or `system`).","isRequired":true,"uniqueKey":"data.items.[INDEX].initiated_by.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","description":"Display name, e.g. \"Adaeze Okafor\" or \"Procurement agent\".","isRequired":true,"uniqueKey":"data.items.[INDEX].initiated_by.oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.items.[INDEX].initiated_by.oneOf.0","typeLabel":"object"},{"type":"null","description":"\"Created by\".","uniqueKey":"data.items.[INDEX].initiated_by.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].initiated_by","typeLabel":"object | null"},"approved_by":{"oneOf":[{"type":"object","description":"Second approver, when the payment needed one.","required":["type","id","name"],"properties":{"type":{"type":"string","enum":["user","staff","agent","api_key","system"],"description":"Kind of actor.","isRequired":true,"uniqueKey":"data.items.[INDEX].approved_by.oneOf.0.type","typeLabel":"enum\u003cstring>"},"id":{"type":"string","description":"The actor's id (`usr_…`, `stf_…`, `agt_…`, `key_…`, or `system`).","isRequired":true,"uniqueKey":"data.items.[INDEX].approved_by.oneOf.0.id","typeLabel":"string"},"name":{"type":"string","description":"Display name, e.g. \"Adaeze Okafor\" or \"Procurement agent\".","isRequired":true,"uniqueKey":"data.items.[INDEX].approved_by.oneOf.0.name","typeLabel":"string"}},"uniqueKey":"data.items.[INDEX].approved_by.oneOf.0","typeLabel":"object"},{"type":"null","description":"Second approver, when the payment needed one.","uniqueKey":"data.items.[INDEX].approved_by.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].approved_by","typeLabel":"object | null"},"category":{"oneOf":[{"type":"string","description":"Spending or income category, e.g. \"Fuel\", \"Sales\".","maxLength":40,"uniqueKey":"data.items.[INDEX].category.oneOf.0","typeLabel":"string"},{"type":"null","description":"Spending or income category, e.g. \"Fuel\", \"Sales\".","maxLength":40,"uniqueKey":"data.items.[INDEX].category.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].category","typeLabel":"string | null"},"note":{"oneOf":[{"type":"string","description":"\"Note\" added by the team.","maxLength":500,"uniqueKey":"data.items.[INDEX].note.oneOf.0","typeLabel":"string"},{"type":"null","description":"\"Note\" added by the team.","maxLength":500,"uniqueKey":"data.items.[INDEX].note.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].note","typeLabel":"string | null"},"failure":{"oneOf":[{"type":"object","description":"Why it failed, safe to show. Null unless `failed`.","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable failure code, e.g. `account_name_mismatch`, `receiving_bank_rejected`.","isRequired":true,"uniqueKey":"data.items.[INDEX].failure.oneOf.0.code","typeLabel":"string"},"message":{"type":"string","description":"\"The receiving bank rejected the payment: account number and name don't match. The money is back in Naira · Main.\"","isRequired":true,"uniqueKey":"data.items.[INDEX].failure.oneOf.0.message","typeLabel":"string"}},"uniqueKey":"data.items.[INDEX].failure.oneOf.0","typeLabel":"object"},{"type":"null","description":"Why it failed, safe to show. Null unless `failed`.","uniqueKey":"data.items.[INDEX].failure.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].failure","typeLabel":"object | null"},"nip_session_id":{"oneOf":[{"type":"string","description":"NIP session id (30 digits) for NIP transfers.","pattern":"^\\d{30}$","uniqueKey":"data.items.[INDEX].nip_session_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"NIP session id (30 digits) for NIP transfers.","pattern":"^\\d{30}$","uniqueKey":"data.items.[INDEX].nip_session_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].nip_session_id","typeLabel":"string | null"},"completed_at":{"oneOf":[{"type":"string","description":"When it settled.","format":"date-time","uniqueKey":"data.items.[INDEX].completed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"When it settled.","format":"date-time","uniqueKey":"data.items.[INDEX].completed_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].completed_at","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"data.items.[INDEX]","typeLabel":"object"},"description":"Items, newest first.","isRequired":true,"uniqueKey":"data","typeLabel":"object[]"},"has_more":{"type":"boolean","description":"True when another page exists.","isRequired":true,"uniqueKey":"has_more","typeLabel":"boolean"},"next_cursor":{"oneOf":[{"type":"string","description":"Cursor for the next page in the same direction: pass it as `after` if this page was read with `after` (or no cursor), as `before` if it was read with `before`. Null when `has_more` is false.","uniqueKey":"next_cursor.oneOf.0","typeLabel":"string"},{"type":"null","description":"Cursor for the next page in the same direction: pass it as `after` if this page was read with `after` (or no cursor), as `before` if it was read with `before`. Null when `has_more` is false.","uniqueKey":"next_cursor.oneOf.1","typeLabel":"null"}],"uniqueKey":"next_cursor","typeLabel":"string | null"},"total_count":{"type":"integer","description":"Only when `include=total_count` was sent.","uniqueKey":"total_count","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"examples":{"example":{"title":"example","value":{"object":"list","data":[{"response_code":"09","response_message":"Request processing in progress","id":"txn_01JCKFR5NXF5E32DSDWR52C6X9","object":"transaction","created_at":"2026-10-28T08:00:00Z","updated_at":"2026-10-28T08:31:00Z","type":"payout","status":"processing","direction":"out","amount":{"amount":229745000,"currency":"NGN"},"fee":null,"account_id":"acc_01JCQF1Y99G6K6NSAK9M83PSW5","account_display_name":"Naira · Payroll","counterparty":{"type":"pay_run","name":"October salaries · 11 people","bank_account":null,"account_id":null,"recipient_id":null},"description":"October salaries · 11 people","reference":"Bulk payout","source":{"type":"pay_run","id":"run_01JC3F01BK3VK5ZHFXVTX5XQW5"},"initiated_by":{"type":"user","id":"usr_01JCC3128TMRXGSNHYMZYCF4FZ","name":"Adaeze Okafor"},"approved_by":{"type":"user","id":"usr_01JCCYD6WPX04EWRQ599Q9700T","name":"Tolu Martins"},"category":"Salaries","note":null,"attachment_document_ids":[],"failure":null,"events":[{"type":"created","description":"Created by Adaeze Okafor","at":"2026-10-28T08:00:00Z","actor":{"type":"user","id":"usr_01JCC3128TMRXGSNHYMZYCF4FZ","name":"Adaeze Okafor"}},{"type":"approved","description":"Approved by Tolu Martins","at":"2026-10-28T08:20:00Z","actor":{"type":"user","id":"usr_01JCCYD6WPX04EWRQ599Q9700T","name":"Tolu Martins"}},{"type":"sent","description":"Sent to the receiving banks","at":"2026-10-28T08:31:00Z","actor":null}],"nip_session_id":null,"completed_at":null,"livemode":true},{"response_code":"00","response_message":"Approved or completed successfully","id":"txn_01JC31CVY7B6Y8XTZW3AEMMED3","object":"transaction","created_at":"2026-10-27T08:41:00Z","updated_at":"2026-10-27T08:41:00Z","type":"collection","status":"completed","direction":"in","amount":{"amount":125000000,"currency":"NGN"},"fee":null,"account_id":"acc_01JCNND0RKATSR2MYBK8VQ3468","account_display_name":"Naira · Main","counterparty":{"type":"bank_account","name":"Kano Freight Services","bank_account":{"account_number":"0123984471","bank_code":"058","bank_name":"GTBank","account_name":"KANO FREIGHT SERVICES LTD"},"account_id":null,"recipient_id":null},"description":"Kano Freight Services","reference":"INV-0142","source":{"type":"invoice","id":"ivc_01JCFK328EG017P1145YK913EH"},"initiated_by":null,"approved_by":null,"category":"Sales","note":null,"attachment_document_ids":[],"failure":null,"events":[{"type":"received","description":"Received","at":"2026-10-27T08:41:00Z","actor":null},{"type":"matched","description":"Recorded against INV-0142","at":"2026-10-27T08:41:00Z","actor":null},{"type":"completed","description":"Settled","at":"2026-10-27T08:41:00Z","actor":null}],"nip_session_id":"000013261027094100123984471881","completed_at":"2026-10-27T08:41:00Z","livemode":true},{"response_code":"00","response_message":"Approved or completed successfully","id":"txn_01JC99Y651CH732QS0JYGWR759","object":"transaction","created_at":"2026-10-27T07:15:00Z","updated_at":"2026-10-27T07:15:00Z","type":"transfer","status":"completed","direction":"internal","amount":{"amount":240000000,"currency":"NGN"},"fee":null,"account_id":"acc_01JCNND0RKATSR2MYBK8VQ3468","account_display_name":"Naira · Main","counterparty":{"type":"own_account","name":"Naira · Payroll","bank_account":null,"account_id":"acc_01JCQF1Y99G6K6NSAK9M83PSW5","recipient_id":null},"description":"Naira · Main to Naira · Payroll","reference":"Own accounts","source":{"type":"transfer","id":"trf_01JC71GSH285W3WGDCD827WR1H"},"initiated_by":{"type":"user","id":"usr_01JCC3128TMRXGSNHYMZYCF4FZ","name":"Adaeze Okafor"},"approved_by":null,"category":null,"note":null,"attachment_document_ids":[],"failure":null,"events":[{"type":"created","description":"Created by Adaeze Okafor","at":"2026-10-27T07:15:00Z","actor":{"type":"user","id":"usr_01JCC3128TMRXGSNHYMZYCF4FZ","name":"Adaeze Okafor"}},{"type":"completed","description":"Settled","at":"2026-10-27T07:15:00Z","actor":null}],"nip_session_id":null,"completed_at":"2026-10-27T07:15:00Z","livemode":true},{"response_code":"00","response_message":"Approved or completed successfully","id":"txn_01JCHS5CC3TEEQV903RVCV0YEW","object":"transaction","created_at":"2026-10-25T15:48:00Z","updated_at":"2026-10-25T15:48:40Z","type":"payout","status":"completed","direction":"out","amount":{"amount":60000000,"currency":"NGN"},"fee":{"amount":5375,"currency":"NGN"},"account_id":"acc_01JCNND0RKATSR2MYBK8VQ3468","account_display_name":"Naira · Main","counterparty":{"type":"bank_account","name":"Total Energies","bank_account":{"account_number":"1013377920","bank_code":"057","bank_name":"Zenith Bank","account_name":"TOTAL ENERGIES MARKETING NIG PLC"},"account_id":null,"recipient_id":null},"description":"Total Energies","reference":"Diesel supply","source":{"type":"transfer","id":"trf_01JCDCEKM598BSNK9886DFRC60"},"initiated_by":{"type":"user","id":"usr_01JCQ5P8YZWNBVQ8HSK8N67DHE","name":"Tunde Bakare"},"approved_by":null,"category":"Fuel","note":null,"attachment_document_ids":[],"failure":null,"events":[{"type":"created","description":"Created by Tunde Bakare","at":"2026-10-25T15:48:00Z","actor":{"type":"user","id":"usr_01JCQ5P8YZWNBVQ8HSK8N67DHE","name":"Tunde Bakare"}},{"type":"sent","description":"Sent to the receiving bank","at":"2026-10-25T15:48:10Z","actor":null},{"type":"completed","description":"Settled","at":"2026-10-25T15:48:40Z","actor":null}],"nip_session_id":"000013261025164810101337792042","completed_at":"2026-10-25T15:48:40Z","livemode":true},{"response_code":"07","response_message":"Invalid account","id":"txn_01JCN79G430A3WHT69SZ7MJBBG","object":"transaction","created_at":"2026-10-25T09:02:00Z","updated_at":"2026-10-25T09:41:00Z","type":"payout","status":"failed","direction":"out","amount":{"amount":15000000,"currency":"NGN"},"fee":null,"account_id":"acc_01JCNND0RKATSR2MYBK8VQ3468","account_display_name":"Naira · Main","counterparty":{"type":"bank_account","name":"Chidi Eze","bank_account":{"account_number":"3089912245","bank_code":"011","bank_name":"First Bank","account_name":"EZE CHIDI JOHN"},"account_id":null,"recipient_id":null},"description":"Chidi Eze","reference":"Lagos dispatch","source":{"type":"transfer","id":"trf_01JCG8D76RRAG1B7KPS05S5KR2"},"initiated_by":{"type":"user","id":"usr_01JC85CBTESY1N92X9NGAQ954H","name":"Ngozi Uche"},"approved_by":null,"category":"Contractors","note":null,"attachment_document_ids":[],"failure":{"code":"account_name_mismatch","message":"The receiving bank rejected the payment: account number and name don't match. The money is back in Naira · Main."},"events":[{"type":"created","description":"Created by Ngozi Uche","at":"2026-10-25T09:02:00Z","actor":{"type":"user","id":"usr_01JC85CBTESY1N92X9NGAQ954H","name":"Ngozi Uche"}},{"type":"sent","description":"Sent to the receiving bank","at":"2026-10-25T09:03:00Z","actor":null},{"type":"failed","description":"Rejected, money returned","at":"2026-10-25T09:41:00Z","actor":null}],"nip_session_id":"000013261025100300308991224577","completed_at":null,"livemode":true}],"has_more":true,"next_cursor":"txn_01JCN79G430A3WHT69SZ7MJBBG"}}},"exampleType":"examples"},"text/csv":{"schema":{"type":"string","description":"CSV with a header row: date, description, reference, type, account, status, direction, amount, currency, fee, transaction_id.","uniqueKey":"","typeLabel":"string"},"example":"date,description,reference,type,account,status,direction,amount,currency,fee,transaction_id\n2026-10-27T08:41:00Z,Kano Freight Services,INV-0142,collection,Naira · Main,completed,in,1250000.00,NGN,,txn_01JC31CVY7B6Y8XTZW3AEMMED3\n","examples":{"Example":{"title":"Example","value":"date,description,reference,type,account,status,direction,amount,currency,fee,transaction_id\n2026-10-27T08:41:00Z,Kano Freight Services,INV-0142,collection,Naira · Main,completed,in,1250000.00,NGN,,txn_01JC31CVY7B6Y8XTZW3AEMMED3\n"}},"exampleType":"examples"}},"exampleType":"examples"},"9685aa0d-1a54-4077-a67d-d752a3755c9b":{"description":"Malformed request.","headers":{"X-Request-Id":{"description":"Our request id (`req_…`), on every response. Always ours, never the client's `X-Request-Id`. Quote it to support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute for this key, token or session.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["response_code","type","code","message","request_id"],"properties":{"response_code":{"type":"string","pattern":"^[0-9A-Z]{2}$","description":"Two-character ISO 8583 response code, using the NIBSS NIP meanings (CONVENTIONS §7a). `00` is success.\nCarried on every error (mapped from `error.code`, see errors.yaml `x-codes`) and on every money-movement\nobject (the bank's final code, or our own while it is in flight). Clients must tolerate codes added later.\n","enum":["00","01","03","05","06","07","08","09","12","13","14","15","16","17","21","25","26","30","34","35","51","57","58","61","63","65","68","91","92","94","96","97"],"x-codes":{"12":"Invalid transaction","13":"Invalid amount","14":"Invalid batch number","15":"Invalid session or record id","16":"Unknown bank code","17":"Invalid channel","21":"No action taken","25":"Unable to locate record","26":"Duplicate record","30":"Format error","34":"Suspected fraud","35":"Contact sending bank","51":"No sufficient funds","57":"Transaction not permitted to sender","58":"Transaction not permitted on channel","61":"Transfer limit exceeded","63":"Security violation","65":"Exceeds withdrawal frequency","68":"Response received too late","91":"Beneficiary bank not available","92":"Routing error","94":"Duplicate transaction","96":"System malfunction","97":"Timeout waiting for response from destination","00":"Approved or completed successfully","01":"Status unknown, please wait for settlement report","03":"Invalid sender","05":"Do not honour","06":"Dormant account","07":"Invalid account","08":"Account name mismatch","09":"Request processing in progress"},"isRequired":true,"uniqueKey":"error.response_code","typeLabel":"enum\u003cstring>"},"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","partner","internal"],"description":"Error class, fixed per `code` (errors.yaml `x-codes` `type`; CONVENTIONS §7).","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Stable machine-readable error code. Clients must tolerate codes added later.","enum":["invalid_json","parameter_missing","parameter_invalid","parameter_unknown","invalid_api_key","session_expired","invalid_credentials","two_factor_required","two_factor_invalid","token_expired","staff_account_not_allowed","role_not_permitted","scope_missing","step_up_required","business_frozen","business_not_approved","account_closed","ip_not_allowed","agent_paused","test_key_on_live","email_not_verified","two_factor_enrolment_required","csrf_token_invalid","resource_not_found","idempotency_key_reused","invalid_state","self_approval_not_allowed","already_decided","duplicate_resource","version_conflict","insufficient_balance","limit_exceeded","daily_limit_exceeded","approval_threshold_exceeded","recipient_not_allowed","recipient_name_mismatch","name_enquiry_failed","account_number_invalid","currency_not_enabled","currency_mismatch","amount_too_small","amount_too_large","schedule_in_past","batch_row_invalid","batch_too_large","document_rejected","checks_incomplete","rate_expired","payroll_short_funds","webhook_url_invalid","password_too_weak","password_breached","scope_not_allowed","application_incomplete","account_balance_not_zero","verification_code_invalid","link_expired","invite_expired","net_pay_negative","notification_channel_locked","phone_not_verified","rate_limited","bank_unavailable","identity_provider_unavailable","registry_unavailable","partner_timeout","screening_unavailable","messaging_unavailable","internal_error"],"x-codes":{"invalid_json":{"status":400,"type":"invalid_request","response_code":"30","meaning":"Body is not valid JSON."},"parameter_missing":{"status":400,"type":"invalid_request","response_code":"30","meaning":"A required field is missing; see `param`."},"parameter_invalid":{"status":400,"type":"invalid_request","response_code":"30","meaning":"A field has the wrong type or format; see `param`."},"parameter_unknown":{"status":400,"type":"invalid_request","response_code":"30","meaning":"An unknown field was sent."},"invalid_api_key":{"status":401,"type":"authentication","response_code":"63","meaning":"Key unknown, revoked, or its business inactive. Never treated as anonymous."},"session_expired":{"status":401,"type":"authentication","response_code":"63","meaning":"Session timed out or was revoked."},"invalid_credentials":{"status":401,"type":"authentication","response_code":"63","meaning":"Email or password wrong (no hint which)."},"two_factor_required":{"status":401,"type":"authentication","response_code":"63","meaning":"Password accepted; a 2FA code is needed to finish sign-in."},"two_factor_invalid":{"status":401,"type":"authentication","response_code":"63","meaning":"2FA or backup code wrong or already used."},"token_expired":{"status":401,"type":"authentication","response_code":"63","meaning":"OAuth access token expired; refresh it."},"role_not_permitted":{"status":403,"type":"permission","response_code":"57","meaning":"The caller's role can't do this."},"scope_missing":{"status":403,"type":"permission","response_code":"57","meaning":"The key or token lacks the scope in `details.required_scope`."},"step_up_required":{"status":403,"type":"permission","response_code":"63","meaning":"Send a fresh X-Step-Up-Token (2FA within 5 minutes)."},"business_frozen":{"status":403,"type":"permission","response_code":"57","meaning":"The business is frozen; money can't move. Message stays neutral."},"business_not_approved":{"status":403,"type":"permission","response_code":"57","meaning":"Onboarding not approved yet; live money movement is closed."},"account_closed":{"status":403,"type":"permission","response_code":"57","meaning":"The account is closed."},"ip_not_allowed":{"status":403,"type":"permission","response_code":"63","meaning":"Request came from outside the allowed IP ranges."},"agent_paused":{"status":403,"type":"permission","response_code":"57","meaning":"The agent is paused by its owner; its tokens are revoked."},"test_key_on_live":{"status":403,"type":"permission","response_code":"58","meaning":"A pk_test_ key was used against a live-only operation."},"resource_not_found":{"status":404,"type":"not_found","response_code":"25","meaning":"Not found or not visible to this tenant."},"idempotency_key_reused":{"status":409,"type":"conflict","response_code":"94","meaning":"Same Idempotency-Key with a different body."},"invalid_state":{"status":409,"type":"conflict","response_code":"12","meaning":"The resource's status doesn't allow this action; see `details.status`."},"self_approval_not_allowed":{"status":409,"type":"conflict","response_code":"57","meaning":"The requester can't decide their own approval."},"already_decided":{"status":409,"type":"conflict","response_code":"21","meaning":"The approval was already approved, rejected or expired."},"duplicate_resource":{"status":409,"type":"conflict","response_code":"26","meaning":"An identical resource already exists (e.g. recipient)."},"version_conflict":{"status":409,"type":"conflict","response_code":"21","meaning":"The resource changed since it was read; re-read and retry."},"insufficient_balance":{"status":422,"type":"invalid_request","response_code":"51","meaning":"Available balance can't cover amount + fee; `details.available`."},"limit_exceeded":{"status":422,"type":"invalid_request","response_code":"61","meaning":"Over a per-payment limit; `details.limit`."},"daily_limit_exceeded":{"status":422,"type":"invalid_request","response_code":"61","meaning":"Over the daily limit."},"approval_threshold_exceeded":{"status":422,"type":"invalid_request","response_code":"09","meaning":"Over the caller's approval threshold; a pending approval was created instead (see `details.approval_id`)."},"recipient_not_allowed":{"status":422,"type":"invalid_request","response_code":"57","meaning":"Agent tried to pay a recipient outside its allowlist."},"recipient_name_mismatch":{"status":422,"type":"invalid_request","response_code":"08","meaning":"Name on the account doesn't match the name given and confirmation wasn't sent."},"name_enquiry_failed":{"status":422,"type":"invalid_request","response_code":"25","meaning":"The bank couldn't confirm the account name."},"account_number_invalid":{"status":422,"type":"invalid_request","response_code":"07","meaning":"Not a valid NUBAN for that bank."},"currency_not_enabled":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Currency not live for this business yet."},"currency_mismatch":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Amount currency doesn't match the account's currency."},"amount_too_small":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Below the minimum for this payment type."},"amount_too_large":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Above the maximum for this payment type."},"schedule_in_past":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Scheduled date is not in the future."},"batch_row_invalid":{"status":422,"type":"invalid_request","response_code":"30","meaning":"One or more batch rows failed validation; `details.rows`."},"batch_too_large":{"status":422,"type":"invalid_request","response_code":"14","meaning":"Batch exceeds the row limit for this plan."},"document_rejected":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Upload is the wrong type, too large, or unreadable."},"checks_incomplete":{"status":422,"type":"invalid_request","response_code":"21","meaning":"Can't approve; not every KYB check has passed."},"rate_expired":{"status":422,"type":"invalid_request","response_code":"12","meaning":"FX quote expired; get a new one."},"payroll_short_funds":{"status":422,"type":"invalid_request","response_code":"51","meaning":"Payroll account can't cover the run; `details.short_by`."},"webhook_url_invalid":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Webhook URL must be https and publicly reachable."},"password_too_weak":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Password fails the strength rules."},"password_breached":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Password appears in a known breach."},"email_not_verified":{"status":403,"type":"permission","response_code":"63","meaning":"Verify the email address before continuing."},"two_factor_enrolment_required":{"status":403,"type":"permission","response_code":"63","meaning":"Set up two-factor authentication before doing anything else."},"staff_account_not_allowed":{"status":401,"type":"authentication","response_code":"63","meaning":"Sign-in with this Google account is not allowed. Not returned to customers."},"scope_not_allowed":{"status":422,"type":"invalid_request","response_code":"57","meaning":"None of the requested OAuth scopes can be granted to this client."},"application_incomplete":{"status":422,"type":"invalid_request","response_code":"21","meaning":"The onboarding application is missing required details; see `details.issues`."},"account_balance_not_zero":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Move the balance out before closing the account."},"verification_code_invalid":{"status":422,"type":"invalid_request","response_code":"63","meaning":"The verification code is wrong or expired."},"link_expired":{"status":422,"type":"invalid_request","response_code":"63","meaning":"The link has expired; request a new one."},"invite_expired":{"status":422,"type":"invalid_request","response_code":"15","meaning":"The invite has expired; ask for a new one."},"net_pay_negative":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Deductions exceed gross pay for this person; see `details.person_id`."},"notification_channel_locked":{"status":422,"type":"invalid_request","response_code":"57","meaning":"This notification channel can't be turned off (e.g. email for `compliance_request`); see `param`."},"phone_not_verified":{"status":422,"type":"invalid_request","response_code":"63","meaning":"Needs a verified phone number first (SMS notifications, SMS recovery codes)."},"csrf_token_invalid":{"status":403,"type":"permission","response_code":"63","meaning":"A state-changing request made with a session cookie had a missing or wrong `X-CSRF-Token`, or came from another origin."},"rate_limited":{"status":429,"type":"rate_limited","response_code":"65","meaning":"Too many requests; wait `Retry-After` seconds."},"bank_unavailable":{"status":503,"type":"partner","response_code":"91","meaning":"Partner bank is down or degraded. Retry with the same Idempotency-Key."},"identity_provider_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"Identity checks provider unavailable."},"registry_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"CAC registry unavailable; onboarding continues as \"pending registry\"."},"partner_timeout":{"status":502,"type":"partner","response_code":"97","meaning":"A partner (the bank, or the SMS provider) didn't answer in time. For payments we confirm the status with the bank before any retry."},"screening_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"Sanctions and PEP screening is unavailable; nothing was changed. Retry with the same Idempotency-Key."},"messaging_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"We couldn't send the email or text message right now. Retry shortly."},"internal_error":{"status":500,"type":"internal","response_code":"96","meaning":"Our fault. Safe to retry with the same Idempotency-Key."}},"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Safe to show the customer. Never reveals screening, fraud or STR state.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"`req_…`","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"Dot path of the offending field.","uniqueKey":"error.param","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Page explaining the code.","uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable extra context for the code.","uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"response_code":"00","type":"invalid_request","code":"invalid_json","message":"\u003cstring>","request_id":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"f777d3bf-0fe1-494b-ae2b-5b8c82216476":{"description":"Missing, invalid or expired credentials.","headers":{"X-Request-Id":{"description":"Our request id (`req_…`), on every response. Always ours, never the client's `X-Request-Id`. Quote it to support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute for this key, token or session.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["response_code","type","code","message","request_id"],"properties":{"response_code":{"type":"string","pattern":"^[0-9A-Z]{2}$","description":"Two-character ISO 8583 response code, using the NIBSS NIP meanings (CONVENTIONS §7a). `00` is success.\nCarried on every error (mapped from `error.code`, see errors.yaml `x-codes`) and on every money-movement\nobject (the bank's final code, or our own while it is in flight). Clients must tolerate codes added later.\n","enum":["00","01","03","05","06","07","08","09","12","13","14","15","16","17","21","25","26","30","34","35","51","57","58","61","63","65","68","91","92","94","96","97"],"x-codes":{"12":"Invalid transaction","13":"Invalid amount","14":"Invalid batch number","15":"Invalid session or record id","16":"Unknown bank code","17":"Invalid channel","21":"No action taken","25":"Unable to locate record","26":"Duplicate record","30":"Format error","34":"Suspected fraud","35":"Contact sending bank","51":"No sufficient funds","57":"Transaction not permitted to sender","58":"Transaction not permitted on channel","61":"Transfer limit exceeded","63":"Security violation","65":"Exceeds withdrawal frequency","68":"Response received too late","91":"Beneficiary bank not available","92":"Routing error","94":"Duplicate transaction","96":"System malfunction","97":"Timeout waiting for response from destination","00":"Approved or completed successfully","01":"Status unknown, please wait for settlement report","03":"Invalid sender","05":"Do not honour","06":"Dormant account","07":"Invalid account","08":"Account name mismatch","09":"Request processing in progress"},"isRequired":true,"uniqueKey":"error.response_code","typeLabel":"enum\u003cstring>"},"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","partner","internal"],"description":"Error class, fixed per `code` (errors.yaml `x-codes` `type`; CONVENTIONS §7).","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Stable machine-readable error code. Clients must tolerate codes added later.","enum":["invalid_json","parameter_missing","parameter_invalid","parameter_unknown","invalid_api_key","session_expired","invalid_credentials","two_factor_required","two_factor_invalid","token_expired","staff_account_not_allowed","role_not_permitted","scope_missing","step_up_required","business_frozen","business_not_approved","account_closed","ip_not_allowed","agent_paused","test_key_on_live","email_not_verified","two_factor_enrolment_required","csrf_token_invalid","resource_not_found","idempotency_key_reused","invalid_state","self_approval_not_allowed","already_decided","duplicate_resource","version_conflict","insufficient_balance","limit_exceeded","daily_limit_exceeded","approval_threshold_exceeded","recipient_not_allowed","recipient_name_mismatch","name_enquiry_failed","account_number_invalid","currency_not_enabled","currency_mismatch","amount_too_small","amount_too_large","schedule_in_past","batch_row_invalid","batch_too_large","document_rejected","checks_incomplete","rate_expired","payroll_short_funds","webhook_url_invalid","password_too_weak","password_breached","scope_not_allowed","application_incomplete","account_balance_not_zero","verification_code_invalid","link_expired","invite_expired","net_pay_negative","notification_channel_locked","phone_not_verified","rate_limited","bank_unavailable","identity_provider_unavailable","registry_unavailable","partner_timeout","screening_unavailable","messaging_unavailable","internal_error"],"x-codes":{"invalid_json":{"status":400,"type":"invalid_request","response_code":"30","meaning":"Body is not valid JSON."},"parameter_missing":{"status":400,"type":"invalid_request","response_code":"30","meaning":"A required field is missing; see `param`."},"parameter_invalid":{"status":400,"type":"invalid_request","response_code":"30","meaning":"A field has the wrong type or format; see `param`."},"parameter_unknown":{"status":400,"type":"invalid_request","response_code":"30","meaning":"An unknown field was sent."},"invalid_api_key":{"status":401,"type":"authentication","response_code":"63","meaning":"Key unknown, revoked, or its business inactive. Never treated as anonymous."},"session_expired":{"status":401,"type":"authentication","response_code":"63","meaning":"Session timed out or was revoked."},"invalid_credentials":{"status":401,"type":"authentication","response_code":"63","meaning":"Email or password wrong (no hint which)."},"two_factor_required":{"status":401,"type":"authentication","response_code":"63","meaning":"Password accepted; a 2FA code is needed to finish sign-in."},"two_factor_invalid":{"status":401,"type":"authentication","response_code":"63","meaning":"2FA or backup code wrong or already used."},"token_expired":{"status":401,"type":"authentication","response_code":"63","meaning":"OAuth access token expired; refresh it."},"role_not_permitted":{"status":403,"type":"permission","response_code":"57","meaning":"The caller's role can't do this."},"scope_missing":{"status":403,"type":"permission","response_code":"57","meaning":"The key or token lacks the scope in `details.required_scope`."},"step_up_required":{"status":403,"type":"permission","response_code":"63","meaning":"Send a fresh X-Step-Up-Token (2FA within 5 minutes)."},"business_frozen":{"status":403,"type":"permission","response_code":"57","meaning":"The business is frozen; money can't move. Message stays neutral."},"business_not_approved":{"status":403,"type":"permission","response_code":"57","meaning":"Onboarding not approved yet; live money movement is closed."},"account_closed":{"status":403,"type":"permission","response_code":"57","meaning":"The account is closed."},"ip_not_allowed":{"status":403,"type":"permission","response_code":"63","meaning":"Request came from outside the allowed IP ranges."},"agent_paused":{"status":403,"type":"permission","response_code":"57","meaning":"The agent is paused by its owner; its tokens are revoked."},"test_key_on_live":{"status":403,"type":"permission","response_code":"58","meaning":"A pk_test_ key was used against a live-only operation."},"resource_not_found":{"status":404,"type":"not_found","response_code":"25","meaning":"Not found or not visible to this tenant."},"idempotency_key_reused":{"status":409,"type":"conflict","response_code":"94","meaning":"Same Idempotency-Key with a different body."},"invalid_state":{"status":409,"type":"conflict","response_code":"12","meaning":"The resource's status doesn't allow this action; see `details.status`."},"self_approval_not_allowed":{"status":409,"type":"conflict","response_code":"57","meaning":"The requester can't decide their own approval."},"already_decided":{"status":409,"type":"conflict","response_code":"21","meaning":"The approval was already approved, rejected or expired."},"duplicate_resource":{"status":409,"type":"conflict","response_code":"26","meaning":"An identical resource already exists (e.g. recipient)."},"version_conflict":{"status":409,"type":"conflict","response_code":"21","meaning":"The resource changed since it was read; re-read and retry."},"insufficient_balance":{"status":422,"type":"invalid_request","response_code":"51","meaning":"Available balance can't cover amount + fee; `details.available`."},"limit_exceeded":{"status":422,"type":"invalid_request","response_code":"61","meaning":"Over a per-payment limit; `details.limit`."},"daily_limit_exceeded":{"status":422,"type":"invalid_request","response_code":"61","meaning":"Over the daily limit."},"approval_threshold_exceeded":{"status":422,"type":"invalid_request","response_code":"09","meaning":"Over the caller's approval threshold; a pending approval was created instead (see `details.approval_id`)."},"recipient_not_allowed":{"status":422,"type":"invalid_request","response_code":"57","meaning":"Agent tried to pay a recipient outside its allowlist."},"recipient_name_mismatch":{"status":422,"type":"invalid_request","response_code":"08","meaning":"Name on the account doesn't match the name given and confirmation wasn't sent."},"name_enquiry_failed":{"status":422,"type":"invalid_request","response_code":"25","meaning":"The bank couldn't confirm the account name."},"account_number_invalid":{"status":422,"type":"invalid_request","response_code":"07","meaning":"Not a valid NUBAN for that bank."},"currency_not_enabled":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Currency not live for this business yet."},"currency_mismatch":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Amount currency doesn't match the account's currency."},"amount_too_small":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Below the minimum for this payment type."},"amount_too_large":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Above the maximum for this payment type."},"schedule_in_past":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Scheduled date is not in the future."},"batch_row_invalid":{"status":422,"type":"invalid_request","response_code":"30","meaning":"One or more batch rows failed validation; `details.rows`."},"batch_too_large":{"status":422,"type":"invalid_request","response_code":"14","meaning":"Batch exceeds the row limit for this plan."},"document_rejected":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Upload is the wrong type, too large, or unreadable."},"checks_incomplete":{"status":422,"type":"invalid_request","response_code":"21","meaning":"Can't approve; not every KYB check has passed."},"rate_expired":{"status":422,"type":"invalid_request","response_code":"12","meaning":"FX quote expired; get a new one."},"payroll_short_funds":{"status":422,"type":"invalid_request","response_code":"51","meaning":"Payroll account can't cover the run; `details.short_by`."},"webhook_url_invalid":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Webhook URL must be https and publicly reachable."},"password_too_weak":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Password fails the strength rules."},"password_breached":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Password appears in a known breach."},"email_not_verified":{"status":403,"type":"permission","response_code":"63","meaning":"Verify the email address before continuing."},"two_factor_enrolment_required":{"status":403,"type":"permission","response_code":"63","meaning":"Set up two-factor authentication before doing anything else."},"staff_account_not_allowed":{"status":401,"type":"authentication","response_code":"63","meaning":"Sign-in with this Google account is not allowed. Not returned to customers."},"scope_not_allowed":{"status":422,"type":"invalid_request","response_code":"57","meaning":"None of the requested OAuth scopes can be granted to this client."},"application_incomplete":{"status":422,"type":"invalid_request","response_code":"21","meaning":"The onboarding application is missing required details; see `details.issues`."},"account_balance_not_zero":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Move the balance out before closing the account."},"verification_code_invalid":{"status":422,"type":"invalid_request","response_code":"63","meaning":"The verification code is wrong or expired."},"link_expired":{"status":422,"type":"invalid_request","response_code":"63","meaning":"The link has expired; request a new one."},"invite_expired":{"status":422,"type":"invalid_request","response_code":"15","meaning":"The invite has expired; ask for a new one."},"net_pay_negative":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Deductions exceed gross pay for this person; see `details.person_id`."},"notification_channel_locked":{"status":422,"type":"invalid_request","response_code":"57","meaning":"This notification channel can't be turned off (e.g. email for `compliance_request`); see `param`."},"phone_not_verified":{"status":422,"type":"invalid_request","response_code":"63","meaning":"Needs a verified phone number first (SMS notifications, SMS recovery codes)."},"csrf_token_invalid":{"status":403,"type":"permission","response_code":"63","meaning":"A state-changing request made with a session cookie had a missing or wrong `X-CSRF-Token`, or came from another origin."},"rate_limited":{"status":429,"type":"rate_limited","response_code":"65","meaning":"Too many requests; wait `Retry-After` seconds."},"bank_unavailable":{"status":503,"type":"partner","response_code":"91","meaning":"Partner bank is down or degraded. Retry with the same Idempotency-Key."},"identity_provider_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"Identity checks provider unavailable."},"registry_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"CAC registry unavailable; onboarding continues as \"pending registry\"."},"partner_timeout":{"status":502,"type":"partner","response_code":"97","meaning":"A partner (the bank, or the SMS provider) didn't answer in time. For payments we confirm the status with the bank before any retry."},"screening_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"Sanctions and PEP screening is unavailable; nothing was changed. Retry with the same Idempotency-Key."},"messaging_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"We couldn't send the email or text message right now. Retry shortly."},"internal_error":{"status":500,"type":"internal","response_code":"96","meaning":"Our fault. Safe to retry with the same Idempotency-Key."}},"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Safe to show the customer. Never reveals screening, fraud or STR state.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"`req_…`","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"Dot path of the offending field.","uniqueKey":"error.param","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Page explaining the code.","uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable extra context for the code.","uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"response_code":"00","type":"invalid_request","code":"invalid_json","message":"\u003cstring>","request_id":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"6acb0ec1-84c3-4002-bcc0-4b257e3b58f9":{"description":"Authenticated but not allowed (role, scope, step-up, frozen business).","headers":{"X-Request-Id":{"description":"Our request id (`req_…`), on every response. Always ours, never the client's `X-Request-Id`. Quote it to support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute for this key, token or session.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["response_code","type","code","message","request_id"],"properties":{"response_code":{"type":"string","pattern":"^[0-9A-Z]{2}$","description":"Two-character ISO 8583 response code, using the NIBSS NIP meanings (CONVENTIONS §7a). `00` is success.\nCarried on every error (mapped from `error.code`, see errors.yaml `x-codes`) and on every money-movement\nobject (the bank's final code, or our own while it is in flight). Clients must tolerate codes added later.\n","enum":["00","01","03","05","06","07","08","09","12","13","14","15","16","17","21","25","26","30","34","35","51","57","58","61","63","65","68","91","92","94","96","97"],"x-codes":{"12":"Invalid transaction","13":"Invalid amount","14":"Invalid batch number","15":"Invalid session or record id","16":"Unknown bank code","17":"Invalid channel","21":"No action taken","25":"Unable to locate record","26":"Duplicate record","30":"Format error","34":"Suspected fraud","35":"Contact sending bank","51":"No sufficient funds","57":"Transaction not permitted to sender","58":"Transaction not permitted on channel","61":"Transfer limit exceeded","63":"Security violation","65":"Exceeds withdrawal frequency","68":"Response received too late","91":"Beneficiary bank not available","92":"Routing error","94":"Duplicate transaction","96":"System malfunction","97":"Timeout waiting for response from destination","00":"Approved or completed successfully","01":"Status unknown, please wait for settlement report","03":"Invalid sender","05":"Do not honour","06":"Dormant account","07":"Invalid account","08":"Account name mismatch","09":"Request processing in progress"},"isRequired":true,"uniqueKey":"error.response_code","typeLabel":"enum\u003cstring>"},"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","partner","internal"],"description":"Error class, fixed per `code` (errors.yaml `x-codes` `type`; CONVENTIONS §7).","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Stable machine-readable error code. Clients must tolerate codes added later.","enum":["invalid_json","parameter_missing","parameter_invalid","parameter_unknown","invalid_api_key","session_expired","invalid_credentials","two_factor_required","two_factor_invalid","token_expired","staff_account_not_allowed","role_not_permitted","scope_missing","step_up_required","business_frozen","business_not_approved","account_closed","ip_not_allowed","agent_paused","test_key_on_live","email_not_verified","two_factor_enrolment_required","csrf_token_invalid","resource_not_found","idempotency_key_reused","invalid_state","self_approval_not_allowed","already_decided","duplicate_resource","version_conflict","insufficient_balance","limit_exceeded","daily_limit_exceeded","approval_threshold_exceeded","recipient_not_allowed","recipient_name_mismatch","name_enquiry_failed","account_number_invalid","currency_not_enabled","currency_mismatch","amount_too_small","amount_too_large","schedule_in_past","batch_row_invalid","batch_too_large","document_rejected","checks_incomplete","rate_expired","payroll_short_funds","webhook_url_invalid","password_too_weak","password_breached","scope_not_allowed","application_incomplete","account_balance_not_zero","verification_code_invalid","link_expired","invite_expired","net_pay_negative","notification_channel_locked","phone_not_verified","rate_limited","bank_unavailable","identity_provider_unavailable","registry_unavailable","partner_timeout","screening_unavailable","messaging_unavailable","internal_error"],"x-codes":{"invalid_json":{"status":400,"type":"invalid_request","response_code":"30","meaning":"Body is not valid JSON."},"parameter_missing":{"status":400,"type":"invalid_request","response_code":"30","meaning":"A required field is missing; see `param`."},"parameter_invalid":{"status":400,"type":"invalid_request","response_code":"30","meaning":"A field has the wrong type or format; see `param`."},"parameter_unknown":{"status":400,"type":"invalid_request","response_code":"30","meaning":"An unknown field was sent."},"invalid_api_key":{"status":401,"type":"authentication","response_code":"63","meaning":"Key unknown, revoked, or its business inactive. Never treated as anonymous."},"session_expired":{"status":401,"type":"authentication","response_code":"63","meaning":"Session timed out or was revoked."},"invalid_credentials":{"status":401,"type":"authentication","response_code":"63","meaning":"Email or password wrong (no hint which)."},"two_factor_required":{"status":401,"type":"authentication","response_code":"63","meaning":"Password accepted; a 2FA code is needed to finish sign-in."},"two_factor_invalid":{"status":401,"type":"authentication","response_code":"63","meaning":"2FA or backup code wrong or already used."},"token_expired":{"status":401,"type":"authentication","response_code":"63","meaning":"OAuth access token expired; refresh it."},"role_not_permitted":{"status":403,"type":"permission","response_code":"57","meaning":"The caller's role can't do this."},"scope_missing":{"status":403,"type":"permission","response_code":"57","meaning":"The key or token lacks the scope in `details.required_scope`."},"step_up_required":{"status":403,"type":"permission","response_code":"63","meaning":"Send a fresh X-Step-Up-Token (2FA within 5 minutes)."},"business_frozen":{"status":403,"type":"permission","response_code":"57","meaning":"The business is frozen; money can't move. Message stays neutral."},"business_not_approved":{"status":403,"type":"permission","response_code":"57","meaning":"Onboarding not approved yet; live money movement is closed."},"account_closed":{"status":403,"type":"permission","response_code":"57","meaning":"The account is closed."},"ip_not_allowed":{"status":403,"type":"permission","response_code":"63","meaning":"Request came from outside the allowed IP ranges."},"agent_paused":{"status":403,"type":"permission","response_code":"57","meaning":"The agent is paused by its owner; its tokens are revoked."},"test_key_on_live":{"status":403,"type":"permission","response_code":"58","meaning":"A pk_test_ key was used against a live-only operation."},"resource_not_found":{"status":404,"type":"not_found","response_code":"25","meaning":"Not found or not visible to this tenant."},"idempotency_key_reused":{"status":409,"type":"conflict","response_code":"94","meaning":"Same Idempotency-Key with a different body."},"invalid_state":{"status":409,"type":"conflict","response_code":"12","meaning":"The resource's status doesn't allow this action; see `details.status`."},"self_approval_not_allowed":{"status":409,"type":"conflict","response_code":"57","meaning":"The requester can't decide their own approval."},"already_decided":{"status":409,"type":"conflict","response_code":"21","meaning":"The approval was already approved, rejected or expired."},"duplicate_resource":{"status":409,"type":"conflict","response_code":"26","meaning":"An identical resource already exists (e.g. recipient)."},"version_conflict":{"status":409,"type":"conflict","response_code":"21","meaning":"The resource changed since it was read; re-read and retry."},"insufficient_balance":{"status":422,"type":"invalid_request","response_code":"51","meaning":"Available balance can't cover amount + fee; `details.available`."},"limit_exceeded":{"status":422,"type":"invalid_request","response_code":"61","meaning":"Over a per-payment limit; `details.limit`."},"daily_limit_exceeded":{"status":422,"type":"invalid_request","response_code":"61","meaning":"Over the daily limit."},"approval_threshold_exceeded":{"status":422,"type":"invalid_request","response_code":"09","meaning":"Over the caller's approval threshold; a pending approval was created instead (see `details.approval_id`)."},"recipient_not_allowed":{"status":422,"type":"invalid_request","response_code":"57","meaning":"Agent tried to pay a recipient outside its allowlist."},"recipient_name_mismatch":{"status":422,"type":"invalid_request","response_code":"08","meaning":"Name on the account doesn't match the name given and confirmation wasn't sent."},"name_enquiry_failed":{"status":422,"type":"invalid_request","response_code":"25","meaning":"The bank couldn't confirm the account name."},"account_number_invalid":{"status":422,"type":"invalid_request","response_code":"07","meaning":"Not a valid NUBAN for that bank."},"currency_not_enabled":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Currency not live for this business yet."},"currency_mismatch":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Amount currency doesn't match the account's currency."},"amount_too_small":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Below the minimum for this payment type."},"amount_too_large":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Above the maximum for this payment type."},"schedule_in_past":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Scheduled date is not in the future."},"batch_row_invalid":{"status":422,"type":"invalid_request","response_code":"30","meaning":"One or more batch rows failed validation; `details.rows`."},"batch_too_large":{"status":422,"type":"invalid_request","response_code":"14","meaning":"Batch exceeds the row limit for this plan."},"document_rejected":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Upload is the wrong type, too large, or unreadable."},"checks_incomplete":{"status":422,"type":"invalid_request","response_code":"21","meaning":"Can't approve; not every KYB check has passed."},"rate_expired":{"status":422,"type":"invalid_request","response_code":"12","meaning":"FX quote expired; get a new one."},"payroll_short_funds":{"status":422,"type":"invalid_request","response_code":"51","meaning":"Payroll account can't cover the run; `details.short_by`."},"webhook_url_invalid":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Webhook URL must be https and publicly reachable."},"password_too_weak":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Password fails the strength rules."},"password_breached":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Password appears in a known breach."},"email_not_verified":{"status":403,"type":"permission","response_code":"63","meaning":"Verify the email address before continuing."},"two_factor_enrolment_required":{"status":403,"type":"permission","response_code":"63","meaning":"Set up two-factor authentication before doing anything else."},"staff_account_not_allowed":{"status":401,"type":"authentication","response_code":"63","meaning":"Sign-in with this Google account is not allowed. Not returned to customers."},"scope_not_allowed":{"status":422,"type":"invalid_request","response_code":"57","meaning":"None of the requested OAuth scopes can be granted to this client."},"application_incomplete":{"status":422,"type":"invalid_request","response_code":"21","meaning":"The onboarding application is missing required details; see `details.issues`."},"account_balance_not_zero":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Move the balance out before closing the account."},"verification_code_invalid":{"status":422,"type":"invalid_request","response_code":"63","meaning":"The verification code is wrong or expired."},"link_expired":{"status":422,"type":"invalid_request","response_code":"63","meaning":"The link has expired; request a new one."},"invite_expired":{"status":422,"type":"invalid_request","response_code":"15","meaning":"The invite has expired; ask for a new one."},"net_pay_negative":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Deductions exceed gross pay for this person; see `details.person_id`."},"notification_channel_locked":{"status":422,"type":"invalid_request","response_code":"57","meaning":"This notification channel can't be turned off (e.g. email for `compliance_request`); see `param`."},"phone_not_verified":{"status":422,"type":"invalid_request","response_code":"63","meaning":"Needs a verified phone number first (SMS notifications, SMS recovery codes)."},"csrf_token_invalid":{"status":403,"type":"permission","response_code":"63","meaning":"A state-changing request made with a session cookie had a missing or wrong `X-CSRF-Token`, or came from another origin."},"rate_limited":{"status":429,"type":"rate_limited","response_code":"65","meaning":"Too many requests; wait `Retry-After` seconds."},"bank_unavailable":{"status":503,"type":"partner","response_code":"91","meaning":"Partner bank is down or degraded. Retry with the same Idempotency-Key."},"identity_provider_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"Identity checks provider unavailable."},"registry_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"CAC registry unavailable; onboarding continues as \"pending registry\"."},"partner_timeout":{"status":502,"type":"partner","response_code":"97","meaning":"A partner (the bank, or the SMS provider) didn't answer in time. For payments we confirm the status with the bank before any retry."},"screening_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"Sanctions and PEP screening is unavailable; nothing was changed. Retry with the same Idempotency-Key."},"messaging_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"We couldn't send the email or text message right now. Retry shortly."},"internal_error":{"status":500,"type":"internal","response_code":"96","meaning":"Our fault. Safe to retry with the same Idempotency-Key."}},"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Safe to show the customer. Never reveals screening, fraud or STR state.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"`req_…`","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"Dot path of the offending field.","uniqueKey":"error.param","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Page explaining the code.","uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable extra context for the code.","uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"response_code":"00","type":"invalid_request","code":"invalid_json","message":"\u003cstring>","request_id":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"e4e0f126-c457-4240-9592-bb6523a0ae8b":{"description":"Too many requests.","headers":{"X-Request-Id":{"description":"Our request id (`req_…`), on every response. Always ours, never the client's `X-Request-Id`. Quote it to support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute for this key, token or session.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time when the window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["response_code","type","code","message","request_id"],"properties":{"response_code":{"type":"string","pattern":"^[0-9A-Z]{2}$","description":"Two-character ISO 8583 response code, using the NIBSS NIP meanings (CONVENTIONS §7a). `00` is success.\nCarried on every error (mapped from `error.code`, see errors.yaml `x-codes`) and on every money-movement\nobject (the bank's final code, or our own while it is in flight). Clients must tolerate codes added later.\n","enum":["00","01","03","05","06","07","08","09","12","13","14","15","16","17","21","25","26","30","34","35","51","57","58","61","63","65","68","91","92","94","96","97"],"x-codes":{"12":"Invalid transaction","13":"Invalid amount","14":"Invalid batch number","15":"Invalid session or record id","16":"Unknown bank code","17":"Invalid channel","21":"No action taken","25":"Unable to locate record","26":"Duplicate record","30":"Format error","34":"Suspected fraud","35":"Contact sending bank","51":"No sufficient funds","57":"Transaction not permitted to sender","58":"Transaction not permitted on channel","61":"Transfer limit exceeded","63":"Security violation","65":"Exceeds withdrawal frequency","68":"Response received too late","91":"Beneficiary bank not available","92":"Routing error","94":"Duplicate transaction","96":"System malfunction","97":"Timeout waiting for response from destination","00":"Approved or completed successfully","01":"Status unknown, please wait for settlement report","03":"Invalid sender","05":"Do not honour","06":"Dormant account","07":"Invalid account","08":"Account name mismatch","09":"Request processing in progress"},"isRequired":true,"uniqueKey":"error.response_code","typeLabel":"enum\u003cstring>"},"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","partner","internal"],"description":"Error class, fixed per `code` (errors.yaml `x-codes` `type`; CONVENTIONS §7).","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Stable machine-readable error code. Clients must tolerate codes added later.","enum":["invalid_json","parameter_missing","parameter_invalid","parameter_unknown","invalid_api_key","session_expired","invalid_credentials","two_factor_required","two_factor_invalid","token_expired","staff_account_not_allowed","role_not_permitted","scope_missing","step_up_required","business_frozen","business_not_approved","account_closed","ip_not_allowed","agent_paused","test_key_on_live","email_not_verified","two_factor_enrolment_required","csrf_token_invalid","resource_not_found","idempotency_key_reused","invalid_state","self_approval_not_allowed","already_decided","duplicate_resource","version_conflict","insufficient_balance","limit_exceeded","daily_limit_exceeded","approval_threshold_exceeded","recipient_not_allowed","recipient_name_mismatch","name_enquiry_failed","account_number_invalid","currency_not_enabled","currency_mismatch","amount_too_small","amount_too_large","schedule_in_past","batch_row_invalid","batch_too_large","document_rejected","checks_incomplete","rate_expired","payroll_short_funds","webhook_url_invalid","password_too_weak","password_breached","scope_not_allowed","application_incomplete","account_balance_not_zero","verification_code_invalid","link_expired","invite_expired","net_pay_negative","notification_channel_locked","phone_not_verified","rate_limited","bank_unavailable","identity_provider_unavailable","registry_unavailable","partner_timeout","screening_unavailable","messaging_unavailable","internal_error"],"x-codes":{"invalid_json":{"status":400,"type":"invalid_request","response_code":"30","meaning":"Body is not valid JSON."},"parameter_missing":{"status":400,"type":"invalid_request","response_code":"30","meaning":"A required field is missing; see `param`."},"parameter_invalid":{"status":400,"type":"invalid_request","response_code":"30","meaning":"A field has the wrong type or format; see `param`."},"parameter_unknown":{"status":400,"type":"invalid_request","response_code":"30","meaning":"An unknown field was sent."},"invalid_api_key":{"status":401,"type":"authentication","response_code":"63","meaning":"Key unknown, revoked, or its business inactive. Never treated as anonymous."},"session_expired":{"status":401,"type":"authentication","response_code":"63","meaning":"Session timed out or was revoked."},"invalid_credentials":{"status":401,"type":"authentication","response_code":"63","meaning":"Email or password wrong (no hint which)."},"two_factor_required":{"status":401,"type":"authentication","response_code":"63","meaning":"Password accepted; a 2FA code is needed to finish sign-in."},"two_factor_invalid":{"status":401,"type":"authentication","response_code":"63","meaning":"2FA or backup code wrong or already used."},"token_expired":{"status":401,"type":"authentication","response_code":"63","meaning":"OAuth access token expired; refresh it."},"role_not_permitted":{"status":403,"type":"permission","response_code":"57","meaning":"The caller's role can't do this."},"scope_missing":{"status":403,"type":"permission","response_code":"57","meaning":"The key or token lacks the scope in `details.required_scope`."},"step_up_required":{"status":403,"type":"permission","response_code":"63","meaning":"Send a fresh X-Step-Up-Token (2FA within 5 minutes)."},"business_frozen":{"status":403,"type":"permission","response_code":"57","meaning":"The business is frozen; money can't move. Message stays neutral."},"business_not_approved":{"status":403,"type":"permission","response_code":"57","meaning":"Onboarding not approved yet; live money movement is closed."},"account_closed":{"status":403,"type":"permission","response_code":"57","meaning":"The account is closed."},"ip_not_allowed":{"status":403,"type":"permission","response_code":"63","meaning":"Request came from outside the allowed IP ranges."},"agent_paused":{"status":403,"type":"permission","response_code":"57","meaning":"The agent is paused by its owner; its tokens are revoked."},"test_key_on_live":{"status":403,"type":"permission","response_code":"58","meaning":"A pk_test_ key was used against a live-only operation."},"resource_not_found":{"status":404,"type":"not_found","response_code":"25","meaning":"Not found or not visible to this tenant."},"idempotency_key_reused":{"status":409,"type":"conflict","response_code":"94","meaning":"Same Idempotency-Key with a different body."},"invalid_state":{"status":409,"type":"conflict","response_code":"12","meaning":"The resource's status doesn't allow this action; see `details.status`."},"self_approval_not_allowed":{"status":409,"type":"conflict","response_code":"57","meaning":"The requester can't decide their own approval."},"already_decided":{"status":409,"type":"conflict","response_code":"21","meaning":"The approval was already approved, rejected or expired."},"duplicate_resource":{"status":409,"type":"conflict","response_code":"26","meaning":"An identical resource already exists (e.g. recipient)."},"version_conflict":{"status":409,"type":"conflict","response_code":"21","meaning":"The resource changed since it was read; re-read and retry."},"insufficient_balance":{"status":422,"type":"invalid_request","response_code":"51","meaning":"Available balance can't cover amount + fee; `details.available`."},"limit_exceeded":{"status":422,"type":"invalid_request","response_code":"61","meaning":"Over a per-payment limit; `details.limit`."},"daily_limit_exceeded":{"status":422,"type":"invalid_request","response_code":"61","meaning":"Over the daily limit."},"approval_threshold_exceeded":{"status":422,"type":"invalid_request","response_code":"09","meaning":"Over the caller's approval threshold; a pending approval was created instead (see `details.approval_id`)."},"recipient_not_allowed":{"status":422,"type":"invalid_request","response_code":"57","meaning":"Agent tried to pay a recipient outside its allowlist."},"recipient_name_mismatch":{"status":422,"type":"invalid_request","response_code":"08","meaning":"Name on the account doesn't match the name given and confirmation wasn't sent."},"name_enquiry_failed":{"status":422,"type":"invalid_request","response_code":"25","meaning":"The bank couldn't confirm the account name."},"account_number_invalid":{"status":422,"type":"invalid_request","response_code":"07","meaning":"Not a valid NUBAN for that bank."},"currency_not_enabled":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Currency not live for this business yet."},"currency_mismatch":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Amount currency doesn't match the account's currency."},"amount_too_small":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Below the minimum for this payment type."},"amount_too_large":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Above the maximum for this payment type."},"schedule_in_past":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Scheduled date is not in the future."},"batch_row_invalid":{"status":422,"type":"invalid_request","response_code":"30","meaning":"One or more batch rows failed validation; `details.rows`."},"batch_too_large":{"status":422,"type":"invalid_request","response_code":"14","meaning":"Batch exceeds the row limit for this plan."},"document_rejected":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Upload is the wrong type, too large, or unreadable."},"checks_incomplete":{"status":422,"type":"invalid_request","response_code":"21","meaning":"Can't approve; not every KYB check has passed."},"rate_expired":{"status":422,"type":"invalid_request","response_code":"12","meaning":"FX quote expired; get a new one."},"payroll_short_funds":{"status":422,"type":"invalid_request","response_code":"51","meaning":"Payroll account can't cover the run; `details.short_by`."},"webhook_url_invalid":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Webhook URL must be https and publicly reachable."},"password_too_weak":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Password fails the strength rules."},"password_breached":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Password appears in a known breach."},"email_not_verified":{"status":403,"type":"permission","response_code":"63","meaning":"Verify the email address before continuing."},"two_factor_enrolment_required":{"status":403,"type":"permission","response_code":"63","meaning":"Set up two-factor authentication before doing anything else."},"staff_account_not_allowed":{"status":401,"type":"authentication","response_code":"63","meaning":"Sign-in with this Google account is not allowed. Not returned to customers."},"scope_not_allowed":{"status":422,"type":"invalid_request","response_code":"57","meaning":"None of the requested OAuth scopes can be granted to this client."},"application_incomplete":{"status":422,"type":"invalid_request","response_code":"21","meaning":"The onboarding application is missing required details; see `details.issues`."},"account_balance_not_zero":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Move the balance out before closing the account."},"verification_code_invalid":{"status":422,"type":"invalid_request","response_code":"63","meaning":"The verification code is wrong or expired."},"link_expired":{"status":422,"type":"invalid_request","response_code":"63","meaning":"The link has expired; request a new one."},"invite_expired":{"status":422,"type":"invalid_request","response_code":"15","meaning":"The invite has expired; ask for a new one."},"net_pay_negative":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Deductions exceed gross pay for this person; see `details.person_id`."},"notification_channel_locked":{"status":422,"type":"invalid_request","response_code":"57","meaning":"This notification channel can't be turned off (e.g. email for `compliance_request`); see `param`."},"phone_not_verified":{"status":422,"type":"invalid_request","response_code":"63","meaning":"Needs a verified phone number first (SMS notifications, SMS recovery codes)."},"csrf_token_invalid":{"status":403,"type":"permission","response_code":"63","meaning":"A state-changing request made with a session cookie had a missing or wrong `X-CSRF-Token`, or came from another origin."},"rate_limited":{"status":429,"type":"rate_limited","response_code":"65","meaning":"Too many requests; wait `Retry-After` seconds."},"bank_unavailable":{"status":503,"type":"partner","response_code":"91","meaning":"Partner bank is down or degraded. Retry with the same Idempotency-Key."},"identity_provider_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"Identity checks provider unavailable."},"registry_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"CAC registry unavailable; onboarding continues as \"pending registry\"."},"partner_timeout":{"status":502,"type":"partner","response_code":"97","meaning":"A partner (the bank, or the SMS provider) didn't answer in time. For payments we confirm the status with the bank before any retry."},"screening_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"Sanctions and PEP screening is unavailable; nothing was changed. Retry with the same Idempotency-Key."},"messaging_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"We couldn't send the email or text message right now. Retry shortly."},"internal_error":{"status":500,"type":"internal","response_code":"96","meaning":"Our fault. Safe to retry with the same Idempotency-Key."}},"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Safe to show the customer. Never reveals screening, fraud or STR state.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"`req_…`","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"Dot path of the offending field.","uniqueKey":"error.param","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Page explaining the code.","uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable extra context for the code.","uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"response_code":"00","type":"invalid_request","code":"invalid_json","message":"\u003cstring>","request_id":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"dbb9efbf-5149-4015-b253-bc655862d289":{"description":"Something went wrong on our side (`internal_error`). Safe to retry with the same Idempotency-Key.","headers":{"X-Request-Id":{"description":"Our request id (`req_…`), on every response. Always ours, never the client's `X-Request-Id`. Quote it to support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed per minute for this key, token or session.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time when the window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["response_code","type","code","message","request_id"],"properties":{"response_code":{"type":"string","pattern":"^[0-9A-Z]{2}$","description":"Two-character ISO 8583 response code, using the NIBSS NIP meanings (CONVENTIONS §7a). `00` is success.\nCarried on every error (mapped from `error.code`, see errors.yaml `x-codes`) and on every money-movement\nobject (the bank's final code, or our own while it is in flight). Clients must tolerate codes added later.\n","enum":["00","01","03","05","06","07","08","09","12","13","14","15","16","17","21","25","26","30","34","35","51","57","58","61","63","65","68","91","92","94","96","97"],"x-codes":{"12":"Invalid transaction","13":"Invalid amount","14":"Invalid batch number","15":"Invalid session or record id","16":"Unknown bank code","17":"Invalid channel","21":"No action taken","25":"Unable to locate record","26":"Duplicate record","30":"Format error","34":"Suspected fraud","35":"Contact sending bank","51":"No sufficient funds","57":"Transaction not permitted to sender","58":"Transaction not permitted on channel","61":"Transfer limit exceeded","63":"Security violation","65":"Exceeds withdrawal frequency","68":"Response received too late","91":"Beneficiary bank not available","92":"Routing error","94":"Duplicate transaction","96":"System malfunction","97":"Timeout waiting for response from destination","00":"Approved or completed successfully","01":"Status unknown, please wait for settlement report","03":"Invalid sender","05":"Do not honour","06":"Dormant account","07":"Invalid account","08":"Account name mismatch","09":"Request processing in progress"},"isRequired":true,"uniqueKey":"error.response_code","typeLabel":"enum\u003cstring>"},"type":{"type":"string","enum":["invalid_request","authentication","permission","not_found","conflict","rate_limited","partner","internal"],"description":"Error class, fixed per `code` (errors.yaml `x-codes` `type`; CONVENTIONS §7).","isRequired":true,"uniqueKey":"error.type","typeLabel":"enum\u003cstring>"},"code":{"type":"string","description":"Stable machine-readable error code. Clients must tolerate codes added later.","enum":["invalid_json","parameter_missing","parameter_invalid","parameter_unknown","invalid_api_key","session_expired","invalid_credentials","two_factor_required","two_factor_invalid","token_expired","staff_account_not_allowed","role_not_permitted","scope_missing","step_up_required","business_frozen","business_not_approved","account_closed","ip_not_allowed","agent_paused","test_key_on_live","email_not_verified","two_factor_enrolment_required","csrf_token_invalid","resource_not_found","idempotency_key_reused","invalid_state","self_approval_not_allowed","already_decided","duplicate_resource","version_conflict","insufficient_balance","limit_exceeded","daily_limit_exceeded","approval_threshold_exceeded","recipient_not_allowed","recipient_name_mismatch","name_enquiry_failed","account_number_invalid","currency_not_enabled","currency_mismatch","amount_too_small","amount_too_large","schedule_in_past","batch_row_invalid","batch_too_large","document_rejected","checks_incomplete","rate_expired","payroll_short_funds","webhook_url_invalid","password_too_weak","password_breached","scope_not_allowed","application_incomplete","account_balance_not_zero","verification_code_invalid","link_expired","invite_expired","net_pay_negative","notification_channel_locked","phone_not_verified","rate_limited","bank_unavailable","identity_provider_unavailable","registry_unavailable","partner_timeout","screening_unavailable","messaging_unavailable","internal_error"],"x-codes":{"invalid_json":{"status":400,"type":"invalid_request","response_code":"30","meaning":"Body is not valid JSON."},"parameter_missing":{"status":400,"type":"invalid_request","response_code":"30","meaning":"A required field is missing; see `param`."},"parameter_invalid":{"status":400,"type":"invalid_request","response_code":"30","meaning":"A field has the wrong type or format; see `param`."},"parameter_unknown":{"status":400,"type":"invalid_request","response_code":"30","meaning":"An unknown field was sent."},"invalid_api_key":{"status":401,"type":"authentication","response_code":"63","meaning":"Key unknown, revoked, or its business inactive. Never treated as anonymous."},"session_expired":{"status":401,"type":"authentication","response_code":"63","meaning":"Session timed out or was revoked."},"invalid_credentials":{"status":401,"type":"authentication","response_code":"63","meaning":"Email or password wrong (no hint which)."},"two_factor_required":{"status":401,"type":"authentication","response_code":"63","meaning":"Password accepted; a 2FA code is needed to finish sign-in."},"two_factor_invalid":{"status":401,"type":"authentication","response_code":"63","meaning":"2FA or backup code wrong or already used."},"token_expired":{"status":401,"type":"authentication","response_code":"63","meaning":"OAuth access token expired; refresh it."},"role_not_permitted":{"status":403,"type":"permission","response_code":"57","meaning":"The caller's role can't do this."},"scope_missing":{"status":403,"type":"permission","response_code":"57","meaning":"The key or token lacks the scope in `details.required_scope`."},"step_up_required":{"status":403,"type":"permission","response_code":"63","meaning":"Send a fresh X-Step-Up-Token (2FA within 5 minutes)."},"business_frozen":{"status":403,"type":"permission","response_code":"57","meaning":"The business is frozen; money can't move. Message stays neutral."},"business_not_approved":{"status":403,"type":"permission","response_code":"57","meaning":"Onboarding not approved yet; live money movement is closed."},"account_closed":{"status":403,"type":"permission","response_code":"57","meaning":"The account is closed."},"ip_not_allowed":{"status":403,"type":"permission","response_code":"63","meaning":"Request came from outside the allowed IP ranges."},"agent_paused":{"status":403,"type":"permission","response_code":"57","meaning":"The agent is paused by its owner; its tokens are revoked."},"test_key_on_live":{"status":403,"type":"permission","response_code":"58","meaning":"A pk_test_ key was used against a live-only operation."},"resource_not_found":{"status":404,"type":"not_found","response_code":"25","meaning":"Not found or not visible to this tenant."},"idempotency_key_reused":{"status":409,"type":"conflict","response_code":"94","meaning":"Same Idempotency-Key with a different body."},"invalid_state":{"status":409,"type":"conflict","response_code":"12","meaning":"The resource's status doesn't allow this action; see `details.status`."},"self_approval_not_allowed":{"status":409,"type":"conflict","response_code":"57","meaning":"The requester can't decide their own approval."},"already_decided":{"status":409,"type":"conflict","response_code":"21","meaning":"The approval was already approved, rejected or expired."},"duplicate_resource":{"status":409,"type":"conflict","response_code":"26","meaning":"An identical resource already exists (e.g. recipient)."},"version_conflict":{"status":409,"type":"conflict","response_code":"21","meaning":"The resource changed since it was read; re-read and retry."},"insufficient_balance":{"status":422,"type":"invalid_request","response_code":"51","meaning":"Available balance can't cover amount + fee; `details.available`."},"limit_exceeded":{"status":422,"type":"invalid_request","response_code":"61","meaning":"Over a per-payment limit; `details.limit`."},"daily_limit_exceeded":{"status":422,"type":"invalid_request","response_code":"61","meaning":"Over the daily limit."},"approval_threshold_exceeded":{"status":422,"type":"invalid_request","response_code":"09","meaning":"Over the caller's approval threshold; a pending approval was created instead (see `details.approval_id`)."},"recipient_not_allowed":{"status":422,"type":"invalid_request","response_code":"57","meaning":"Agent tried to pay a recipient outside its allowlist."},"recipient_name_mismatch":{"status":422,"type":"invalid_request","response_code":"08","meaning":"Name on the account doesn't match the name given and confirmation wasn't sent."},"name_enquiry_failed":{"status":422,"type":"invalid_request","response_code":"25","meaning":"The bank couldn't confirm the account name."},"account_number_invalid":{"status":422,"type":"invalid_request","response_code":"07","meaning":"Not a valid NUBAN for that bank."},"currency_not_enabled":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Currency not live for this business yet."},"currency_mismatch":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Amount currency doesn't match the account's currency."},"amount_too_small":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Below the minimum for this payment type."},"amount_too_large":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Above the maximum for this payment type."},"schedule_in_past":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Scheduled date is not in the future."},"batch_row_invalid":{"status":422,"type":"invalid_request","response_code":"30","meaning":"One or more batch rows failed validation; `details.rows`."},"batch_too_large":{"status":422,"type":"invalid_request","response_code":"14","meaning":"Batch exceeds the row limit for this plan."},"document_rejected":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Upload is the wrong type, too large, or unreadable."},"checks_incomplete":{"status":422,"type":"invalid_request","response_code":"21","meaning":"Can't approve; not every KYB check has passed."},"rate_expired":{"status":422,"type":"invalid_request","response_code":"12","meaning":"FX quote expired; get a new one."},"payroll_short_funds":{"status":422,"type":"invalid_request","response_code":"51","meaning":"Payroll account can't cover the run; `details.short_by`."},"webhook_url_invalid":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Webhook URL must be https and publicly reachable."},"password_too_weak":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Password fails the strength rules."},"password_breached":{"status":422,"type":"invalid_request","response_code":"30","meaning":"Password appears in a known breach."},"email_not_verified":{"status":403,"type":"permission","response_code":"63","meaning":"Verify the email address before continuing."},"two_factor_enrolment_required":{"status":403,"type":"permission","response_code":"63","meaning":"Set up two-factor authentication before doing anything else."},"staff_account_not_allowed":{"status":401,"type":"authentication","response_code":"63","meaning":"Sign-in with this Google account is not allowed. Not returned to customers."},"scope_not_allowed":{"status":422,"type":"invalid_request","response_code":"57","meaning":"None of the requested OAuth scopes can be granted to this client."},"application_incomplete":{"status":422,"type":"invalid_request","response_code":"21","meaning":"The onboarding application is missing required details; see `details.issues`."},"account_balance_not_zero":{"status":422,"type":"invalid_request","response_code":"12","meaning":"Move the balance out before closing the account."},"verification_code_invalid":{"status":422,"type":"invalid_request","response_code":"63","meaning":"The verification code is wrong or expired."},"link_expired":{"status":422,"type":"invalid_request","response_code":"63","meaning":"The link has expired; request a new one."},"invite_expired":{"status":422,"type":"invalid_request","response_code":"15","meaning":"The invite has expired; ask for a new one."},"net_pay_negative":{"status":422,"type":"invalid_request","response_code":"13","meaning":"Deductions exceed gross pay for this person; see `details.person_id`."},"notification_channel_locked":{"status":422,"type":"invalid_request","response_code":"57","meaning":"This notification channel can't be turned off (e.g. email for `compliance_request`); see `param`."},"phone_not_verified":{"status":422,"type":"invalid_request","response_code":"63","meaning":"Needs a verified phone number first (SMS notifications, SMS recovery codes)."},"csrf_token_invalid":{"status":403,"type":"permission","response_code":"63","meaning":"A state-changing request made with a session cookie had a missing or wrong `X-CSRF-Token`, or came from another origin."},"rate_limited":{"status":429,"type":"rate_limited","response_code":"65","meaning":"Too many requests; wait `Retry-After` seconds."},"bank_unavailable":{"status":503,"type":"partner","response_code":"91","meaning":"Partner bank is down or degraded. Retry with the same Idempotency-Key."},"identity_provider_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"Identity checks provider unavailable."},"registry_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"CAC registry unavailable; onboarding continues as \"pending registry\"."},"partner_timeout":{"status":502,"type":"partner","response_code":"97","meaning":"A partner (the bank, or the SMS provider) didn't answer in time. For payments we confirm the status with the bank before any retry."},"screening_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"Sanctions and PEP screening is unavailable; nothing was changed. Retry with the same Idempotency-Key."},"messaging_unavailable":{"status":503,"type":"partner","response_code":"96","meaning":"We couldn't send the email or text message right now. Retry shortly."},"internal_error":{"status":500,"type":"internal","response_code":"96","meaning":"Our fault. Safe to retry with the same Idempotency-Key."}},"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Safe to show the customer. Never reveals screening, fraud or STR state.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"`req_…`","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"param":{"type":"string","description":"Dot path of the offending field.","uniqueKey":"error.param","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Page explaining the code.","uniqueKey":"error.doc_url","typeLabel":"string\u003curi>"},"details":{"type":"object","additionalProperties":true,"description":"Machine-readable extra context for the code.","uniqueKey":"error.details","typeLabel":"object"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"response_code":"00","type":"invalid_request","code":"invalid_json","message":"\u003cstring>","request_id":"\u003cstring>","param":"\u003cstring>","doc_url":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"e2510fd5-506e-4738-9bc2-ff6c620156d3":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"pk_live_… / pk_test_…","description":"Server API key, scoped. `pk_test_` keys hit the sandbox tenant.","scopes":[],"schemeName":"ApiKey"}},"47554ecb-c340-4512-9a24-d1a7f2679039":{"OAuth2":{"type":"oauth2","description":"OAuth 2.1 with PKCE. Used by agents (MCP) and third-party apps. Access tokens live 15 minutes.","flows":{"authorizationCode":{"authorizationUrl":"https://app.panoflow.io/oauth/authorize","tokenUrl":"https://api.panoflow.io/v1/oauth/token","refreshUrl":"https://api.panoflow.io/v1/oauth/token","scopes":{"accounts:read":"Read balances, accounts and transactions","transfers:read":"Read payments","transfers:write":"Create payments (guardrails-checked for agents)","recipients:read":"Read recipients","recipients:write":"Create recipients (allowlist-checked for agents)","collections:read":"Read invoices, payment links and virtual accounts","collections:write":"Create invoices and payment links"}}},"scopes":[],"schemeName":"OAuth2"}}},"servers":{"cf259c20-e7c1-48a9-9f97-74f4b4326eb6":{"url":"https://api.panoflow.io/v1","description":"Live and sandbox (sandbox is chosen by `pk_test_` keys and test sessions)."},"6e3d7379-d61e-45cf-97a8-a7d6fcb274b1":{"url":"https://api-dev-9d8b.up.railway.app/v1","description":"Development (Railway). Synthetic data and fake partners; redeployed from main, may be reset at any time."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"pk_live_… / pk_test_…","description":"Server API key, scoped. `pk_test_` keys hit the sandbox tenant.","scopes":[],"schemeName":"ApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Server API key, scoped. `pk_test_` keys hit the sandbox tenant.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKey","name":"Authorization"}],"title":"ApiKey"},{"schemes":[{"scheme":{"type":"oauth2","description":"OAuth 2.1 with PKCE. Used by agents (MCP) and third-party apps. Access tokens live 15 minutes.","flows":{"authorizationCode":{"authorizationUrl":"https://app.panoflow.io/oauth/authorize","tokenUrl":"https://api.panoflow.io/v1/oauth/token","refreshUrl":"https://api.panoflow.io/v1/oauth/token","scopes":{"accounts:read":"Read balances, accounts and transactions","transfers:read":"Read payments","transfers:write":"Create payments (guardrails-checked for agents)","recipients:read":"Read recipients","recipients:write":"Create recipients (allowlist-checked for agents)","collections:read":"Read invoices, payment links and virtual accounts","collections:write":"Create invoices and payment links"}}},"scopes":[],"schemeName":"OAuth2"},"schema":{"title":"OAuth2 Auth","type":"string","isRequired":true,"description":"OAuth 2.1 with PKCE. Used by agents (MCP) and third-party apps. Access tokens live 15 minutes.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"OAuth2","name":"Authorization"}],"title":"OAuth2"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"panoflow","siteName":"PanoFlow","title":"List transactions - PanoFlow","navMaps":{"firstHrefInVersion":{"v1":{"href":"/api-reference/transactions/list-transactions","matchLevel":0}},"firstHrefInLanguage":{}},"lastModified":"2026-11-08T18:33:48.748Z","originalFileLocation":"api-reference/transactions/list-transactions.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"AppTransactions, account Activity and Home \u0026quot;Recent transactions\u0026quot;. Newest first. account_id matches the debited or credited account and, for internal moves, either side. Type tabs: All, Payouts, Collections, Transfers. \u0026quot;Needs attention\u0026quot; counts come from status=failed / status=processing with include=total_count. \u0026quot;Export CSV\u0026quot;: send Accept: text/csv with the same filters (up to 10,000 rows; use statements for more). Error codes: invalid_api_key, parameter_invalid, rate_limited.\">\u003cmeta data-mint-head name=\"application-name\" content=\"PanoFlow\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/panoflow/WDq2SakZKu0M2bGM/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/panoflow/WDq2SakZKu0M2bGM/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/panoflow/WDq2SakZKu0M2bGM/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/panoflow/WDq2SakZKu0M2bGM/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/panoflow/WDq2SakZKu0M2bGM/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/panoflow/WDq2SakZKu0M2bGM/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/panoflow/WDq2SakZKu0M2bGM/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/panoflow/WDq2SakZKu0M2bGM/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/panoflow/WDq2SakZKu0M2bGM/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"List transactions - PanoFlow\">\u003cmeta data-mint-head property=\"og:description\" content=\"AppTransactions, account Activity and Home \u0026quot;Recent transactions\u0026quot;. Newest first. account_id matches the debited or credited account and, for internal moves, either side. Type tabs: All, Payouts, Collections, Transfers. \u0026quot;Needs attention\u0026quot; counts come from status=failed / status=processing with include=total_count. \u0026quot;Export CSV\u0026quot;: send Accept: text/csv with the same filters (up to 10,000 rows; use statements for more). Error codes: invalid_api_key, parameter_invalid, rate_limited.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"PanoFlow\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.panoflow.io/api-reference/transactions/list-transactions\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://panoflow.mintlify.site/_mintlify/api/og/v2?division=Transactions\u0026amp;title=List+transactions\u0026amp;description=AppTransactions%2C+account+Activity+and+Home+%22Recent+transactions%22.+Newest+first.+%60account_id%60+matches+the+debited+or+credited+account+and%2C%0Afor+internal+moves%2C+ei\u0026amp;theme=dcfc8e6ef742308b509f3624\u0026amp;signature=50bc66bf4acbfda6c660348b30df0a389b53eff60e9338e606eb829af2e3a268\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"List transactions - PanoFlow\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"AppTransactions, account Activity and Home \u0026quot;Recent transactions\u0026quot;. Newest first. account_id matches the debited or credited account and, for internal moves, either side. Type tabs: All, Payouts, Collections, Transfers. \u0026quot;Needs attention\u0026quot; counts come from status=failed / status=processing with include=total_count. \u0026quot;Export CSV\u0026quot;: send Accept: text/csv with the same filters (up to 10,000 rows; use statements for more). Error codes: invalid_api_key, parameter_invalid, rate_limited.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://panoflow.mintlify.site/_mintlify/api/og/v2?division=Transactions\u0026amp;title=List+transactions\u0026amp;description=AppTransactions%2C+account+Activity+and+Home+%22Recent+transactions%22.+Newest+first.+%60account_id%60+matches+the+debited+or+credited+account+and%2C%0Afor+internal+moves%2C+ei\u0026amp;theme=dcfc8e6ef742308b509f3624\u0026amp;signature=50bc66bf4acbfda6c660348b30df0a389b53eff60e9338e606eb829af2e3a268\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/panoflow/WDq2SakZKu0M2bGM/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"PanoFlow\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3F4DD4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.panoflow.io/api-reference/transactions/list-transactions\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/transactions/list-transactions.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.panoflow.io/#organization\",\"name\":\"PanoFlow\",\"url\":\"https://docs.panoflow.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/panoflow/rkIjB8OWIncVCLey/logo/light.svg?fit=max\u0026auto=format\u0026n=rkIjB8OWIncVCLey\u0026q=85\u0026s=90a8e82b5135ae0b8b004499569230a7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.panoflow.io#website\",\"name\":\"PanoFlow\",\"url\":\"https://docs.panoflow.io\",\"publisher\":{\"@id\":\"https://docs.panoflow.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.panoflow.io/api-reference/transactions/list-transactions#webpage\",\"url\":\"https://docs.panoflow.io/api-reference/transactions/list-transactions\",\"name\":\"List transactions\",\"description\":\"AppTransactions, account Activity and Home \\\"Recent transactions\\\". Newest first. account_id matches the debited or credited account and, for internal moves, either side. Type tabs: All, Payouts, Collections, Transfers. \\\"Needs attention\\\" counts come from status=failed / status=processing with include=total_count. \\\"Export CSV\\\": send Accept: text/csv with the same filters (up to 10,000 rows; use statements for more). Error codes: invalid_api_key, parameter_invalid, rate_limited.\",\"dateModified\":\"2026-11-08T18:33:48.748Z\",\"isPartOf\":{\"@id\":\"https://docs.panoflow.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.panoflow.io/api-reference/transactions/list-transactions#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.panoflow.io/api-reference/transactions/list-transactions#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accounts \u0026 transactions\",\"item\":\"https://docs.panoflow.io/api-reference/business/get-the-business\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"List transactions\",\"item\":\"https://docs.panoflow.io/api-reference/transactions/list-transactions\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.panoflow.io/api-reference/transactions/list-transactions#apireference\",\"headline\":\"List transactions\",\"name\":\"List transactions\",\"description\":\"AppTransactions, account Activity and Home \\\"Recent transactions\\\". Newest first. account_id matches the debited or credited account and, for internal moves, either side. Type tabs: All, Payouts, Collections, Transfers. \\\"Needs attention\\\" counts come from status=failed / status=processing with include=total_count. \\\"Export CSV\\\": send Accept: text/csv with the same filters (up to 10,000 rows; use statements for more). Error codes: invalid_api_key, parameter_invalid, rate_limited.\",\"url\":\"https://docs.panoflow.io/api-reference/transactions/list-transactions\",\"mainEntityOfPage\":{\"@id\":\"https://docs.panoflow.io/api-reference/transactions/list-transactions#webpage\"},\"dateModified\":\"2026-11-08T18:33:48.748Z\",\"publisher\":{\"@id\":\"https://docs.panoflow.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.panoflow.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"PanoFlow\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"PanoFlow","nav":{"global":null,"versions":[{"version":"v1","default":true,"tag":"Preview","tabs":[{"tab":"Guides","icon":"book-open","pages":[{"title":"Guides","href":""}]},{"tab":"API reference","icon":"square-terminal","groups":[{"group":"Accounts \u0026 transactions","icon":"landmark","pages":[{"group":"Business","pages":[{"title":"Get the business","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /businesses/me","href":"/api-reference/business/get-the-business"}]},{"group":"Accounts","pages":[{"title":"List accounts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /accounts","href":"/api-reference/accounts/list-accounts"},{"title":"Open a sub-account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /accounts","href":"/api-reference/accounts/open-a-sub-account"},{"title":"Get an account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /accounts/{account_id}","href":"/api-reference/accounts/get-an-account"},{"title":"Rename an account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /accounts/{account_id}","href":"/api-reference/accounts/rename-an-account"},{"title":"Close a sub-account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /accounts/{account_id}/close","href":"/api-reference/accounts/close-a-sub-account"},{"title":"Get account details to share","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /accounts/{account_id}/share-details","href":"/api-reference/accounts/get-account-details-to-share"},{"title":"Download an account confirmation letter","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /accounts/{account_id}/confirmation-letter","href":"/api-reference/accounts/download-an-account-confirmation-letter"},{"title":"Get total balances and money in and out","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /balances","href":"/api-reference/accounts/get-total-balances-and-money-in-and-out"}]},{"group":"Statements","pages":[{"title":"List statements for an account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /accounts/{account_id}/statements","href":"/api-reference/statements/list-statements-for-an-account"},{"title":"Create a statement for a date range","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /accounts/{account_id}/statements","href":"/api-reference/statements/create-a-statement-for-a-date-range"},{"title":"Get a statement","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /statements/{statement_id}","href":"/api-reference/statements/get-a-statement"},{"title":"Get a statement download link","description":"\"PDF\" / \"CSV\". Only when `ready` (else 409 `invalid_state`).\n\n**Error codes:** `invalid_api_key`, `parameter_missing`, `resource_not_found`, `invalid_state`, `rate_limited`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /statements/{statement_id}/download","href":"/api-reference/statements/get-a-statement-download-link"}]},{"group":"Transactions","pages":[{"title":"List transactions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /transactions","href":"/api-reference/transactions/list-transactions"},{"title":"Get a transaction","description":"TxnDetail drawer: progress, details, failure reason and attachments.\n\n**Error codes:** `invalid_api_key`, `resource_not_found`, `rate_limited`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /transactions/{transaction_id}","href":"/api-reference/transactions/get-a-transaction"},{"title":"Add a note or category","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /transactions/{transaction_id}","href":"/api-reference/transactions/add-a-note-or-category"},{"title":"Attach a receipt or invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /transactions/{transaction_id}/attachments","href":"/api-reference/transactions/attach-a-receipt-or-invoice"},{"title":"Download a receipt","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /transactions/{transaction_id}/receipt","href":"/api-reference/transactions/download-a-receipt"}]}]},{"group":"Payments","icon":"send","pages":[{"group":"Banks","pages":[{"title":"List banks","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /banks","href":"/api-reference/banks/list-banks"},{"title":"Look up the name on a bank account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /name-enquiry","href":"/api-reference/banks/look-up-the-name-on-a-bank-account"}]},{"group":"Recipients","pages":[{"title":"List recipients","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /recipients","href":"/api-reference/recipients/list-recipients"},{"title":"Save a recipient","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /recipients","href":"/api-reference/recipients/save-a-recipient"},{"title":"Get a recipient","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /recipients/{recipient_id}","href":"/api-reference/recipients/get-a-recipient"},{"title":"Update a recipient's name, nickname or email","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /recipients/{recipient_id}","href":"/api-reference/recipients/update-a-recipients-name-nickname-or-email"},{"title":"Archive a recipient","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /recipients/{recipient_id}/archive","href":"/api-reference/recipients/archive-a-recipient"}]},{"group":"Transfers","pages":[{"title":"Preview a transfer's fee, total and arrival","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /transfers/quote","href":"/api-reference/transfers/preview-a-transfers-fee-total-and-arrival"},{"title":"Create a transfer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /transfers","href":"/api-reference/transfers/create-a-transfer"},{"title":"List transfers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /transfers","href":"/api-reference/transfers/list-transfers"},{"title":"Get a transfer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /transfers/{transfer_id}","href":"/api-reference/transfers/get-a-transfer"},{"title":"Cancel a transfer before it is processed","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /transfers/{transfer_id}/cancel","href":"/api-reference/transfers/cancel-a-transfer-before-it-is-processed"},{"title":"Get a transfer's receipt","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /transfers/{transfer_id}/receipt","href":"/api-reference/transfers/get-a-transfers-receipt"}]},{"group":"Batches","pages":[{"title":"Validate a batch file or rows","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /batches/validate","href":"/api-reference/batches/validate-a-batch-file-or-rows"},{"title":"Create a batch","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /batches","href":"/api-reference/batches/create-a-batch"},{"title":"List batches","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /batches","href":"/api-reference/batches/list-batches"},{"title":"Get a batch","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /batches/{batch_id}","href":"/api-reference/batches/get-a-batch"},{"title":"List a batch's rows","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /batches/{batch_id}/items","href":"/api-reference/batches/list-a-batchs-rows"},{"title":"Cancel a batch waiting for approval","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /batches/{batch_id}/cancel","href":"/api-reference/batches/cancel-a-batch-waiting-for-approval"},{"title":"Get a batch's receipt","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /batches/{batch_id}/receipt","href":"/api-reference/batches/get-a-batchs-receipt"}]},{"group":"Scheduled payments","pages":[{"title":"Schedule a payment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /scheduled-payments","href":"/api-reference/scheduled-payments/schedule-a-payment"},{"title":"List scheduled payments","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /scheduled-payments","href":"/api-reference/scheduled-payments/list-scheduled-payments"},{"title":"Get a scheduled payment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /scheduled-payments/{scheduled_payment_id}","href":"/api-reference/scheduled-payments/get-a-scheduled-payment"},{"title":"Edit a scheduled payment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /scheduled-payments/{scheduled_payment_id}","href":"/api-reference/scheduled-payments/edit-a-scheduled-payment"},{"title":"Pause a scheduled payment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /scheduled-payments/{scheduled_payment_id}/pause","href":"/api-reference/scheduled-payments/pause-a-scheduled-payment"},{"title":"Resume a paused scheduled payment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /scheduled-payments/{scheduled_payment_id}/resume","href":"/api-reference/scheduled-payments/resume-a-paused-scheduled-payment"},{"title":"Skip the next run","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /scheduled-payments/{scheduled_payment_id}/skip-next","href":"/api-reference/scheduled-payments/skip-the-next-run"},{"title":"Cancel a scheduled payment","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /scheduled-payments/{scheduled_payment_id}/cancel","href":"/api-reference/scheduled-payments/cancel-a-scheduled-payment"}]},{"group":"Limits","pages":[{"title":"Get payment limits","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /limits","href":"/api-reference/limits/get-payment-limits"}]}]},{"group":"Collections","icon":"hand-coins","pages":[{"group":"Summary and customers","pages":[{"title":"Get the Collections header figures","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /collections/summary","href":"/api-reference/collections/get-the-collections-header-figures"},{"title":"List saved customers (payers)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /collections/customers","href":"/api-reference/collections/list-saved-customers-payers"}]},{"group":"Invoices","pages":[{"title":"Create an invoice (draft, or create and send)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/invoices","href":"/api-reference/invoices/create-an-invoice-draft-or-create-and-send"},{"title":"List invoices","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /collections/invoices","href":"/api-reference/invoices/list-invoices"},{"title":"Get an invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /collections/invoices/{invoice_id}","href":"/api-reference/invoices/get-an-invoice"},{"title":"Update a draft invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /collections/invoices/{invoice_id}","href":"/api-reference/invoices/update-a-draft-invoice"},{"title":"Send a draft invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/invoices/{invoice_id}/send","href":"/api-reference/invoices/send-a-draft-invoice"},{"title":"Send a reminder now","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/invoices/{invoice_id}/remind","href":"/api-reference/invoices/send-a-reminder-now"},{"title":"Void an invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/invoices/{invoice_id}/void","href":"/api-reference/invoices/void-an-invoice"},{"title":"Mark an invoice as paid (paid outside PanoFlow)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/invoices/{invoice_id}/mark-paid","href":"/api-reference/invoices/mark-an-invoice-as-paid-paid-outside-panoflow"},{"title":"Create an account number for a sent invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/invoices/{invoice_id}/virtual-account","href":"/api-reference/invoices/create-an-account-number-for-a-sent-invoice"},{"title":"Get a download link for the invoice PDF","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /collections/invoices/{invoice_id}/pdf","href":"/api-reference/invoices/get-a-download-link-for-the-invoice-pdf"}]},{"group":"Payment links","pages":[{"title":"Create a payment link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/payment-links","href":"/api-reference/payment-links/create-a-payment-link"},{"title":"List payment links","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /collections/payment-links","href":"/api-reference/payment-links/list-payment-links"},{"title":"Get a payment link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /collections/payment-links/{payment_link_id}","href":"/api-reference/payment-links/get-a-payment-link"},{"title":"Pause a payment link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/payment-links/{payment_link_id}/pause","href":"/api-reference/payment-links/pause-a-payment-link"},{"title":"Turn a paused payment link back on","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/payment-links/{payment_link_id}/resume","href":"/api-reference/payment-links/turn-a-paused-payment-link-back-on"}]},{"group":"Virtual accounts","pages":[{"title":"Create a static virtual account for a customer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/virtual-accounts","href":"/api-reference/virtual-accounts/create-a-static-virtual-account-for-a-customer"},{"title":"List static virtual accounts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /collections/virtual-accounts","href":"/api-reference/virtual-accounts/list-static-virtual-accounts"},{"title":"Get a static virtual account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /collections/virtual-accounts/{virtual_account_id}","href":"/api-reference/virtual-accounts/get-a-static-virtual-account"},{"title":"Close a static virtual account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/virtual-accounts/{virtual_account_id}/close","href":"/api-reference/virtual-accounts/close-a-static-virtual-account"},{"title":"Reopen a closed static virtual account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/virtual-accounts/{virtual_account_id}/reopen","href":"/api-reference/virtual-accounts/reopen-a-closed-static-virtual-account"},{"title":"Email the account details to the customer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /collections/virtual-accounts/{virtual_account_id}/send-details","href":"/api-reference/virtual-accounts/email-the-account-details-to-the-customer"},{"title":"List money received into a static virtual account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /collections/virtual-accounts/{virtual_account_id}/inbound-credits","href":"/api-reference/virtual-accounts/list-money-received-into-a-static-virtual-account"}]},{"group":"Inbound credits","pages":[{"title":"List inbound credits (money in)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /inbound-credits","href":"/api-reference/inbound-credits/list-inbound-credits-money-in"},{"title":"Get an inbound credit","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /inbound-credits/{inbound_credit_id}","href":"/api-reference/inbound-credits/get-an-inbound-credit"},{"title":"Attach an unattached credit to an invoice","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /inbound-credits/{inbound_credit_id}/match","href":"/api-reference/inbound-credits/attach-an-unattached-credit-to-an-invoice"}]}]},{"group":"Payroll","icon":"users","pages":[{"group":"People","pages":[{"title":"Add a person to payroll","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payroll/people","href":"/api-reference/people/add-a-person-to-payroll"},{"title":"List people on payroll","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/people","href":"/api-reference/people/list-people-on-payroll"},{"title":"Get a person","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/people/{person_id}","href":"/api-reference/people/get-a-person"},{"title":"Update a person (details, pay, bank account, leave)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /payroll/people/{person_id}","href":"/api-reference/people/update-a-person-details-pay-bank-account-leave"},{"title":"Offboard a person","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payroll/people/{person_id}/offboard","href":"/api-reference/people/offboard-a-person"},{"title":"List deductions added to a person","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/people/{person_id}/deductions","href":"/api-reference/people/list-deductions-added-to-a-person"},{"title":"Add a deduction to a person","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payroll/people/{person_id}/deductions","href":"/api-reference/people/add-a-deduction-to-a-person"},{"title":"Remove a deduction from a person","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payroll/people/{person_id}/deductions/{person_deduction_id}/remove","href":"/api-reference/people/remove-a-deduction-from-a-person"}]},{"group":"Deduction types","pages":[{"title":"Add a deduction type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payroll/deduction-types","href":"/api-reference/deduction-types/add-a-deduction-type"},{"title":"List deduction types","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/deduction-types","href":"/api-reference/deduction-types/list-deduction-types"},{"title":"Get a deduction type","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/deduction-types/{deduction_type_id}","href":"/api-reference/deduction-types/get-a-deduction-type"},{"title":"Turn a deduction type on or off, or edit it","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /payroll/deduction-types/{deduction_type_id}","href":"/api-reference/deduction-types/turn-a-deduction-type-on-or-off-or-edit-it"}]},{"group":"Payroll settings","pages":[{"title":"Get payroll settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/settings","href":"/api-reference/payroll-settings/get-payroll-settings"},{"title":"Update payroll settings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /payroll/settings","href":"/api-reference/payroll-settings/update-payroll-settings"}]},{"group":"Pay runs","pages":[{"title":"Get the next pay run at a glance","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/upcoming-run","href":"/api-reference/pay-runs/get-the-next-pay-run-at-a-glance"},{"title":"Prepare a pay run","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payroll/runs","href":"/api-reference/pay-runs/prepare-a-pay-run"},{"title":"List pay runs","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/runs","href":"/api-reference/pay-runs/list-pay-runs"},{"title":"Get a pay run with its lines and totals","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/runs/{run_id}","href":"/api-reference/pay-runs/get-a-pay-run-with-its-lines-and-totals"},{"title":"Change when a draft run pays","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /payroll/runs/{run_id}","href":"/api-reference/pay-runs/change-when-a-draft-run-pays"},{"title":"Include or exclude a person, or set a one-off bonus","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /payroll/runs/{run_id}/lines/{line_id}","href":"/api-reference/pay-runs/include-or-exclude-a-person-or-set-a-one-off-bonus"},{"title":"Approve a pay run (2FA)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payroll/runs/{run_id}/approve","href":"/api-reference/pay-runs/approve-a-pay-run-2fa"},{"title":"Pay out an approved run now","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payroll/runs/{run_id}/execute","href":"/api-reference/pay-runs/pay-out-an-approved-run-now"},{"title":"Cancel a pay run","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payroll/runs/{run_id}/cancel","href":"/api-reference/pay-runs/cancel-a-pay-run"},{"title":"Download the pay run report","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/runs/{run_id}/report","href":"/api-reference/pay-runs/download-the-pay-run-report"}]},{"group":"Payslips","pages":[{"title":"Download every payslip in a run","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/runs/{run_id}/payslips/download","href":"/api-reference/payslips/download-every-payslip-in-a-run"},{"title":"List payslips","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/payslips","href":"/api-reference/payslips/list-payslips"},{"title":"Get a payslip","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/payslips/{payslip_id}","href":"/api-reference/payslips/get-a-payslip"},{"title":"Get a download link for a payslip PDF","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payroll/payslips/{payslip_id}/download","href":"/api-reference/payslips/get-a-download-link-for-a-payslip-pdf"},{"title":"Email a payslip to the person","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payroll/payslips/{payslip_id}/email","href":"/api-reference/payslips/email-a-payslip-to-the-person"}]}]},{"group":"Approvals","icon":"badge-check","pages":[{"title":"List approvals","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /approvals","href":"/api-reference/approvals/list-approvals"},{"title":"Get an approval","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /approvals/{approval_id}","href":"/api-reference/approvals/get-an-approval"}]},{"group":"Webhooks \u0026 events","icon":"webhook","pages":[{"group":"Webhooks","pages":[{"title":"Add a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /webhooks","href":"/api-reference/webhooks/add-a-webhook-endpoint"},{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /webhooks","href":"/api-reference/webhooks/list-webhook-endpoints"},{"title":"Retrieve a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /webhooks/{webhook_id}","href":"/api-reference/webhooks/retrieve-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /webhooks/{webhook_id}","href":"/api-reference/webhooks/update-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /webhooks/{webhook_id}","href":"/api-reference/webhooks/delete-a-webhook-endpoint"},{"title":"Disable a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /webhooks/{webhook_id}/disable","href":"/api-reference/webhooks/disable-a-webhook-endpoint"},{"title":"Enable a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /webhooks/{webhook_id}/enable","href":"/api-reference/webhooks/enable-a-webhook-endpoint"},{"title":"Reveal the signing secret","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /webhooks/{webhook_id}/secret","href":"/api-reference/webhooks/reveal-the-signing-secret"},{"title":"Roll the signing secret","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /webhooks/{webhook_id}/roll-secret","href":"/api-reference/webhooks/roll-the-signing-secret"},{"title":"Send a test event","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /webhooks/{webhook_id}/test","href":"/api-reference/webhooks/send-a-test-event"},{"title":"List deliveries","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /webhooks/{webhook_id}/deliveries","href":"/api-reference/webhooks/list-deliveries"},{"title":"Retrieve a delivery","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /webhooks/{webhook_id}/deliveries/{delivery_id}","href":"/api-reference/webhooks/retrieve-a-delivery"},{"title":"Retry a delivery now","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /webhooks/{webhook_id}/deliveries/{delivery_id}/retry","href":"/api-reference/webhooks/retry-a-delivery-now"}]},{"group":"Events","pages":[{"title":"List events","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /events","href":"/api-reference/events/list-events"},{"title":"Retrieve an event","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /events/{event_id}","href":"/api-reference/events/retrieve-an-event"},{"title":"Replay an event","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /events/{event_id}/replay","href":"/api-reference/events/replay-an-event"},{"title":"List event types","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /event-types","href":"/api-reference/events/list-event-types"}]}]},{"group":"OAuth","icon":"key-round","pages":[{"title":"Authorization server metadata","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /.well-known/oauth-authorization-server","href":"/api-reference/oauth/authorization-server-metadata"},{"title":"Register an OAuth client","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /oauth/register","href":"/api-reference/oauth/register-an-oauth-client"},{"title":"Token endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /oauth/token","href":"/api-reference/oauth/token-endpoint"},{"title":"Revoke a token","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /oauth/revoke","href":"/api-reference/oauth/revoke-a-token"}]}]}]}]},"basePath":"","title":"List transactions - PanoFlow","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}