Create or update cash transactions in batch from an external finance system (the inbound counterpart to the Xero sync). Requires the transactions:write scope. Each row is validated independently, so a batch may partially succeed; re-pushing the same externalId updates the existing row instead of duplicating it. Amounts are in your organisation’s base currency, signed (money-in negative). Cash movements only — journal lines are not accepted.
API key as a Bearer token: Authorization: Bearer lk_live_<48 hex>. Create keys in Settings → API keys (Owner or Admin); the full key is shown once. API access is a Professional+ feature. Each key is granted one or more scopes — read (projects:read, reports:read, allocations:read, transactions:read) and the single write scope (transactions:write) — and is limited to 120 requests per minute.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Ledgitify","colors":{"primary":"#4f46e5","light":"#818cf8","dark":"#4338ca"},"logo":{"light":"https://mintcdn.com/ledgitify/6UWFl1MiQ0l8t0qo/logo/light.svg?fit=max\u0026auto=format\u0026n=6UWFl1MiQ0l8t0qo\u0026q=85\u0026s=de060fc3a34f970c58295f5d03782137","dark":"https://mintcdn.com/ledgitify/6UWFl1MiQ0l8t0qo/logo/dark.svg?fit=max\u0026auto=format\u0026n=6UWFl1MiQ0l8t0qo\u0026q=85\u0026s=cc8e134d1fe8c5765e1bf62525350edb"},"favicon":"https://mintcdn.com/ledgitify/6UWFl1MiQ0l8t0qo/favicon.svg?fit=max\u0026auto=format\u0026n=6UWFl1MiQ0l8t0qo\u0026q=85\u0026s=e0af7cd961fb5606743f702835b7ac62","footer":{"socials":{"website":"https://ledgitify.com"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ledgitify","hasAudioNarration":false,"actualSubdomain":"ledgitify","customDomains":["docs.ledgitify.com"],"gitSource":{"type":"github","owner":"ledgitify","repo":"ledgitify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6a7262894d99146d997e90d6","collectionId":"09452639-8ec5-472e-8441-1b6f606f3f8b","liveDeploymentHistoryId":"6a7262894d99146d997e90d6","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a7262894d99146d997e90d6:success","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Guides","count":7},{"language":"default","tag":"API Reference","count":6},{"language":"default","tag":"Xero","count":5},{"language":"default","tag":"Projects","count":3},{"language":"default","tag":"Get started","count":2},{"language":"default","tag":"Transactions","count":2},{"language":"default","tag":"Developers","count":1},{"language":"default","tag":"API","count":1},{"language":"default","tag":"Allocations","count":1}]},"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":"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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/transactions/push-transactions-batch","slug":"/api-reference/transactions/push-transactions-batch","pageMetadata":{"title":"Push transactions (batch)","description":"Create or update cash transactions in batch from an external finance system (the inbound counterpart to the Xero sync). Requires the `transactions:write` scope. Each row is validated independently, so a batch may partially succeed; re-pushing the same `externalId` updates the existing row instead of duplicating it. Amounts are in your organisation's base currency, signed (money-in negative). Cash movements only — journal lines are not accepted.","deprecated":null,"version":null,"openapi":"/openapi.json post /transactions","href":"/api-reference/transactions/push-transactions-batch","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Create or update cash transactions in batch from an external finance system (the inbound counterpart to the Xero sync). Requires the \", _jsx(_components.code, {\n children: \"transactions:write\"\n }), \" scope. Each row is validated independently, so a batch may partially succeed; re-pushing the same \", _jsx(_components.code, {\n children: \"externalId\"\n }), \" updates the existing row instead of duplicating it. Amounts are in your organisation’s base currency, signed (money-in negative). Cash movements only — journal lines are not accepted.\"]\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":"Push transactions (batch)","description":"Create or update cash transactions in batch from an external finance system (the inbound counterpart to the Xero sync). Requires the `transactions:write` scope. Each row is validated independently, so a batch may partially succeed; re-pushing the same `externalId` updates the existing row instead of duplicating it. Amounts are in your organisation's base currency, signed (money-in negative). Cash movements only — journal lines are not accepted.","deprecated":null,"version":null,"openapi":"/openapi.json post /transactions","href":"/api-reference/transactions/push-transactions-batch","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"pushTransactions","summary":"Push transactions (batch)","description":"Create or update cash transactions in batch from an external finance system (the inbound counterpart to the Xero sync). Requires the `transactions:write` scope. Each row is validated independently, so a batch may partially succeed; re-pushing the same `externalId` updates the existing row instead of duplicating it. Amounts are in your organisation's base currency, signed (money-in negative). Cash movements only — journal lines are not accepted.","tags":["Transactions"],"requestBody":"34257a35-4a2a-42f6-a0d6-01ed941d33b6","responses":{"200":"74d6ac48-cdaf-4e9a-98ea-5939b8d618b6","400":"f7966c4e-3e6f-424d-9071-b2c93e4041cf","401":"54090c5c-a4ec-4496-a6a6-699df2bda4f8","403":"e8d6d1aa-2fa6-4c66-89b7-80251c33c924","422":"11b5ac55-51fa-4858-a8e9-d4de16d2d4b9","429":"81baa2b1-4b88-49f7-9561-514f3488050f"},"method":"post","type":"path","servers":["98f4eb0d-7977-4216-9d4f-af22177f0157"],"security":["d892f580-143b-4854-9ece-02c3b83b3112"],"path":"/transactions","baseUrlOptions":["https://ledgitify.com/api/v1"],"title":"Push transactions (batch)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["rows"],"properties":{"rows":{"type":"array","minItems":1,"maxItems":500,"items":{"type":"object","required":["externalId","date","amount"],"properties":{"externalId":{"type":"string","maxLength":200,"description":"Your stable id for the transaction. Idempotency key — re-pushing the same value updates the existing row.","isRequired":true,"uniqueKey":"rows.items.[INDEX].externalId","typeLabel":"string"},"date":{"type":"string","format":"date","description":"ISO date, e.g. 2026-08-01.","isRequired":true,"uniqueKey":"rows.items.[INDEX].date","typeLabel":"string\u003cdate>"},"amount":{"type":"number","description":"Signed, in your base currency. Money-in is negative, money-out positive. Must be non-zero.","isRequired":true,"uniqueKey":"rows.items.[INDEX].amount","typeLabel":"number"},"description":{"type":"string","maxLength":1000,"uniqueKey":"rows.items.[INDEX].description","typeLabel":"string"},"contact":{"oneOf":[{"type":"string","maxLength":500,"description":"Payee / counterparty name.","uniqueKey":"rows.items.[INDEX].contact.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":500,"description":"Payee / counterparty name.","uniqueKey":"rows.items.[INDEX].contact.oneOf.1","typeLabel":"null"}],"uniqueKey":"rows.items.[INDEX].contact","typeLabel":"string | null"},"currency":{"type":"string","description":"3-letter ISO code; defaults to AUD.","uniqueKey":"rows.items.[INDEX].currency","typeLabel":"string"},"type":{"type":"string","enum":["bank_transaction"],"default":"bank_transaction","description":"Cash movements only.","uniqueKey":"rows.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"accountCode":{"oneOf":[{"type":"string","maxLength":100,"uniqueKey":"rows.items.[INDEX].accountCode.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":100,"uniqueKey":"rows.items.[INDEX].accountCode.oneOf.1","typeLabel":"null"}],"uniqueKey":"rows.items.[INDEX].accountCode","typeLabel":"string | null"},"trackingCategories":{"type":"array","items":{"type":"string","uniqueKey":"rows.items.[INDEX].trackingCategories.items.[INDEX]","typeLabel":"string"},"maxItems":50,"uniqueKey":"rows.items.[INDEX].trackingCategories","typeLabel":"string[]"}},"uniqueKey":"rows.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"rows","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"rows":[{"externalId":"GL-2026-0001","date":"2026-08-01","description":"Office supplies","contact":"Officeworks","amount":249.5,"accountCode":"400"},{"externalId":"GL-2026-0002","date":"2026-08-02","description":"Grant receipt","amount":-50000}]},"examples":{"Example":{"title":"Example","value":{"rows":[{"externalId":"GL-2026-0001","date":"2026-08-01","description":"Office supplies","contact":"Officeworks","amount":249.5,"accountCode":"400"},{"externalId":"GL-2026-0002","date":"2026-08-02","description":"Grant receipt","amount":-50000}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"74d6ac48-cdaf-4e9a-98ea-5939b8d618b6":{"description":"At least one row succeeded. Per-row results plus a summary.","content":{"application/json":{"schema":{"type":"object","required":["results","summary"],"properties":{"results":{"type":"array","items":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["created","updated","rejected"],"isRequired":true,"uniqueKey":"results.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"externalId":{"oneOf":[{"type":"string","uniqueKey":"results.items.[INDEX].externalId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"results.items.[INDEX].externalId.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].externalId","typeLabel":"string | null"},"id":{"type":"string","description":"The Ledgitify transaction id (present when created or updated).","uniqueKey":"results.items.[INDEX].id","typeLabel":"string"},"errors":{"type":"array","items":{"type":"string","uniqueKey":"results.items.[INDEX].errors.items.[INDEX]","typeLabel":"string"},"description":"Present when status is rejected.","uniqueKey":"results.items.[INDEX].errors","typeLabel":"string[]"}},"uniqueKey":"results.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"results","typeLabel":"object[]"},"summary":{"type":"object","required":["total","created","updated","rejected"],"properties":{"total":{"type":"integer","isRequired":true,"uniqueKey":"summary.total","typeLabel":"integer"},"created":{"type":"integer","isRequired":true,"uniqueKey":"summary.created","typeLabel":"integer"},"updated":{"type":"integer","isRequired":true,"uniqueKey":"summary.updated","typeLabel":"integer"},"rejected":{"type":"integer","isRequired":true,"uniqueKey":"summary.rejected","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"summary","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"results":[{"externalId":"GL-2026-0001","status":"created","id":"77aa..."},{"externalId":"GL-2026-0002","status":"updated","id":"77ab..."}],"summary":{"total":2,"created":1,"updated":1,"rejected":0}},"examples":{"Example":{"title":"Example","value":{"results":[{"externalId":"GL-2026-0001","status":"created","id":"77aa..."},{"externalId":"GL-2026-0002","status":"updated","id":"77ab..."}],"summary":{"total":2,"created":1,"updated":1,"rejected":0}}}},"exampleType":"examples"}},"exampleType":"examples"},"f7966c4e-3e6f-424d-9071-b2c93e4041cf":{"description":"The batch envelope itself is malformed (missing `rows`, empty, or over 500 rows).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable reason the batch envelope was rejected.","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"The \"rows\" array must not be empty."},"examples":{"Example":{"title":"Example","value":{"error":"The \"rows\" array must not be empty."}}},"exampleType":"examples"}},"exampleType":"examples"},"54090c5c-a4ec-4496-a6a6-699df2bda4f8":{"description":"Missing, malformed, unknown, or revoked API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unauthorized","forbidden","insufficient_scope","not_found","rate_limited"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"unauthorized","message":"Invalid or revoked API key."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthorized","message":"Invalid or revoked API key."}}}},"exampleType":"examples"}},"exampleType":"examples"},"e8d6d1aa-2fa6-4c66-89b7-80251c33c924":{"description":"The plan does not include API access, or the key lacks the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unauthorized","forbidden","insufficient_scope","not_found","rate_limited"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"planGate":{"title":"planGate","value":{"error":{"code":"forbidden","message":"API access is not available on this plan."}}},"scope":{"title":"scope","value":{"error":{"code":"insufficient_scope","message":"This key lacks the reports:read scope."}}}},"exampleType":"examples"}},"exampleType":"examples"},"11b5ac55-51fa-4858-a8e9-d4de16d2d4b9":{"description":"Every row was rejected. The body carries the per-row rejection reasons.","content":{"application/json":{"schema":{"type":"object","required":["results","summary"],"properties":{"results":{"type":"array","items":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["created","updated","rejected"],"isRequired":true,"uniqueKey":"results.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"externalId":{"oneOf":[{"type":"string","uniqueKey":"results.items.[INDEX].externalId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"results.items.[INDEX].externalId.oneOf.1","typeLabel":"null"}],"uniqueKey":"results.items.[INDEX].externalId","typeLabel":"string | null"},"id":{"type":"string","description":"The Ledgitify transaction id (present when created or updated).","uniqueKey":"results.items.[INDEX].id","typeLabel":"string"},"errors":{"type":"array","items":{"type":"string","uniqueKey":"results.items.[INDEX].errors.items.[INDEX]","typeLabel":"string"},"description":"Present when status is rejected.","uniqueKey":"results.items.[INDEX].errors","typeLabel":"string[]"}},"uniqueKey":"results.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"results","typeLabel":"object[]"},"summary":{"type":"object","required":["total","created","updated","rejected"],"properties":{"total":{"type":"integer","isRequired":true,"uniqueKey":"summary.total","typeLabel":"integer"},"created":{"type":"integer","isRequired":true,"uniqueKey":"summary.created","typeLabel":"integer"},"updated":{"type":"integer","isRequired":true,"uniqueKey":"summary.updated","typeLabel":"integer"},"rejected":{"type":"integer","isRequired":true,"uniqueKey":"summary.rejected","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"summary","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"results":[{"status":"created","externalId":"\u003cstring>","id":"\u003cstring>","errors":["\u003cstring>"]}],"summary":{"total":123,"created":123,"updated":123,"rejected":123}}}},"exampleType":"generated"}},"exampleType":"generated"},"81baa2b1-4b88-49f7-9561-514f3488050f":{"description":"Per-key rate limit exceeded (120 requests/minute).","headers":{"Retry-After":{"description":"Seconds until the limit resets.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"The per-minute request limit.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["unauthorized","forbidden","insufficient_scope","not_found","rate_limited"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"code":"rate_limited","message":"Rate limit exceeded."}},"examples":{"Example":{"title":"Example","value":{"error":{"code":"rate_limited","message":"Rate limit exceeded."}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"d892f580-143b-4854-9ece-02c3b83b3112":{"ApiKeyAuth":{"type":"http","scheme":"bearer","bearerFormat":"lk_live_...","description":"API key as a Bearer token: `Authorization: Bearer lk_live_\u003c48 hex>`. Create keys in Settings → API keys (Owner or Admin); the full key is shown once. API access is a Professional+ feature. Each key is granted one or more scopes — read (`projects:read`, `reports:read`, `allocations:read`, `transactions:read`) and the single write scope (`transactions:write`) — and is limited to 120 requests per minute.","scopes":[]}}},"servers":{"98f4eb0d-7977-4216-9d4f-af22177f0157":{"url":"https://ledgitify.com/api/v1","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"lk_live_...","description":"API key as a Bearer token: `Authorization: Bearer lk_live_\u003c48 hex>`. Create keys in Settings → API keys (Owner or Admin); the full key is shown once. API access is a Professional+ feature. Each key is granted one or more scopes — read (`projects:read`, `reports:read`, `allocations:read`, `transactions:read`) and the single write scope (`transactions:write`) — and is limited to 120 requests per minute.","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key as a Bearer token: `Authorization: Bearer lk_live_\u003c48 hex>`. Create keys in Settings → API keys (Owner or Admin); the full key is shown once. API access is a Professional+ feature. Each key is granted one or more scopes — read (`projects:read`, `reports:read`, `allocations:read`, `transactions:read`) and the single write scope (`transactions:write`) — and is limited to 120 requests per minute.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKeyAuth","name":"Authorization"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"ledgitify","siteName":"Ledgitify","title":"Push transactions (batch) - Ledgitify","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-04T14:26:48.495Z","originalFileLocation":"api-reference/transactions/push-transactions-batch.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=\"Create or update cash transactions in batch from an external finance system (the inbound counterpart to the Xero sync). Requires the transactions:write scope. Each row is validated independently, so a batch may partially succeed; re-pushing the same externalId updates the existing row instead of duplicating it. Amounts are in your organisation\u0026#x27;s base currency, signed (money-in negative). Cash movements only — journal lines are not accepted.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Ledgitify\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ledgitify/B4FWJ7nTFr9pshfS/_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/ledgitify/B4FWJ7nTFr9pshfS/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ledgitify/B4FWJ7nTFr9pshfS/_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/ledgitify/B4FWJ7nTFr9pshfS/_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/ledgitify/B4FWJ7nTFr9pshfS/_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/ledgitify/B4FWJ7nTFr9pshfS/_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/ledgitify/B4FWJ7nTFr9pshfS/_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/ledgitify/B4FWJ7nTFr9pshfS/_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/ledgitify/B4FWJ7nTFr9pshfS/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Push transactions (batch) - Ledgitify\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create or update cash transactions in batch from an external finance system (the inbound counterpart to the Xero sync). Requires the transactions:write scope. Each row is validated independently, so a batch may partially succeed; re-pushing the same externalId updates the existing row instead of duplicating it. Amounts are in your organisation\u0026#x27;s base currency, signed (money-in negative). Cash movements only — journal lines are not accepted.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ledgitify\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ledgitify.com/api-reference/transactions/push-transactions-batch\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ledgitify.mintlify.app/_mintlify/api/og/v2?division=Transactions\u0026amp;title=Push+transactions+%28batch%29\u0026amp;description=Create+or+update+cash+transactions+in+batch+from+an+external+finance+system+%28the+inbound+counterpart+to+the+Xero+sync%29.+Requires+the+%60transactions%3Awrite%60+scope.\u0026amp;theme=b203b73e4c9af7f027d1ecab\u0026amp;signature=ea7406debbf8aa6d7af344117a0dc3e185d0c3a548ccd8e5aafb09ca2adb7fd2\">\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=\"Push transactions (batch) - Ledgitify\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create or update cash transactions in batch from an external finance system (the inbound counterpart to the Xero sync). Requires the transactions:write scope. Each row is validated independently, so a batch may partially succeed; re-pushing the same externalId updates the existing row instead of duplicating it. Amounts are in your organisation\u0026#x27;s base currency, signed (money-in negative). Cash movements only — journal lines are not accepted.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ledgitify.mintlify.app/_mintlify/api/og/v2?division=Transactions\u0026amp;title=Push+transactions+%28batch%29\u0026amp;description=Create+or+update+cash+transactions+in+batch+from+an+external+finance+system+%28the+inbound+counterpart+to+the+Xero+sync%29.+Requires+the+%60transactions%3Awrite%60+scope.\u0026amp;theme=b203b73e4c9af7f027d1ecab\u0026amp;signature=ea7406debbf8aa6d7af344117a0dc3e185d0c3a548ccd8e5aafb09ca2adb7fd2\">\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/ledgitify/B4FWJ7nTFr9pshfS/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Ledgitify\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#4f46e5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ledgitify.com/api-reference/transactions/push-transactions-batch\">\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/push-transactions-batch.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ledgitify.com/#organization\",\"name\":\"Ledgitify\",\"url\":\"https://docs.ledgitify.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ledgitify/6UWFl1MiQ0l8t0qo/logo/light.svg?fit=max\u0026auto=format\u0026n=6UWFl1MiQ0l8t0qo\u0026q=85\u0026s=de060fc3a34f970c58295f5d03782137\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ledgitify.com#website\",\"name\":\"Ledgitify\",\"url\":\"https://docs.ledgitify.com\",\"publisher\":{\"@id\":\"https://docs.ledgitify.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ledgitify.com/api-reference/transactions/push-transactions-batch#webpage\",\"url\":\"https://docs.ledgitify.com/api-reference/transactions/push-transactions-batch\",\"name\":\"Push transactions (batch)\",\"description\":\"Create or update cash transactions in batch from an external finance system (the inbound counterpart to the Xero sync). Requires the transactions:write scope. Each row is validated independently, so a batch may partially succeed; re-pushing the same externalId updates the existing row instead of duplicating it. Amounts are in your organisation's base currency, signed (money-in negative). Cash movements only — journal lines are not accepted.\",\"dateModified\":\"2026-08-04T14:26:48.495Z\",\"isPartOf\":{\"@id\":\"https://docs.ledgitify.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ledgitify.com/api-reference/transactions/push-transactions-batch#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ledgitify.com/api-reference/transactions/push-transactions-batch#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Transactions\",\"item\":\"https://docs.ledgitify.com/api-reference/transactions/list-transactions\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Push transactions (batch)\",\"item\":\"https://docs.ledgitify.com/api-reference/transactions/push-transactions-batch\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.ledgitify.com/api-reference/transactions/push-transactions-batch#apireference\",\"headline\":\"Push transactions (batch)\",\"name\":\"Push transactions (batch)\",\"description\":\"Create or update cash transactions in batch from an external finance system (the inbound counterpart to the Xero sync). Requires the transactions:write scope. Each row is validated independently, so a batch may partially succeed; re-pushing the same externalId updates the existing row instead of duplicating it. Amounts are in your organisation's base currency, signed (money-in negative). Cash movements only — journal lines are not accepted.\",\"url\":\"https://docs.ledgitify.com/api-reference/transactions/push-transactions-batch\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ledgitify.com/api-reference/transactions/push-transactions-batch#webpage\"},\"dateModified\":\"2026-08-04T14:26:48.495Z\",\"publisher\":{\"@id\":\"https://docs.ledgitify.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ledgitify.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Ledgitify\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Ledgitify","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/api-reference"}]},{"tab":"API Reference","groups":[{"group":"Projects","pages":[{"title":"List projects","deprecated":null,"version":null,"openapi":"/openapi.json get /projects","href":"/api-reference/projects/list-projects"},{"title":"Get a project","deprecated":null,"version":null,"openapi":"/openapi.json get /projects/{id}","href":"/api-reference/projects/get-a-project"},{"title":"Project budget-vs-actual report","deprecated":null,"version":null,"openapi":"/openapi.json get /projects/{id}/report","href":"/api-reference/projects/project-budget-vs-actual-report"}]},{"group":"Allocations","pages":[{"title":"Project allocations","deprecated":null,"version":null,"openapi":"/openapi.json get /projects/{id}/allocations","href":"/api-reference/allocations/project-allocations"}]},{"group":"Transactions","pages":[{"title":"List transactions","description":"Organisation-level accounting transactions (an allocation links a transaction to a project, so transactions are not nested under a project). Requires the `transactions:read` scope. The full provider payload and internal exclusion audit fields are never exposed.","deprecated":null,"version":null,"openapi":"/openapi.json get /transactions","href":"/api-reference/transactions/list-transactions"},{"title":"Push transactions (batch)","deprecated":null,"version":null,"openapi":"/openapi.json post /transactions","href":"/api-reference/transactions/push-transactions-batch"}]}]}]},"basePath":"","title":"Push transactions (batch) - Ledgitify","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DCDCdBVX.js","utils-ME8dDnLe.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-0e84ACsd.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-wgRBj-ia.js","snippetPresets-C11Sgb-o.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-C0lapOpP.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ZeRQV8fF.js","shallow-BupWh095.js","getApiPlaygroundDisplay-BnYQO2Ss.js","CodeSnippet-RKKOc8c_.js","CodeSnippets-Drf_m8wS.js","Page-Bevw23-4.js","getPastedJson-u6QiPzNZ.js","icon-Bb-CBSxO.js","MethodPill-F7l5AI7V.js","DuplicateIcon-IiAXkdSg.js","createIcon-FliI8EBc.js","DynamicMarkdown-B62XqCSI.js","SectionHeading-Dj31pT03.js","axios-vUo_bRtp.js","Markdown-BOgQCTwD.js","clsx-BIWXJmsZ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DKZWslLH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-UDqbR6xh.js"]}