Connections
Reauthorize (fix) a broken connection in place
NewPOST /v3/connections/{connection_id}/reauthorize — repair a connection
that reports status: requires_action without minting new ids.- Returns a
reauthorizeaction with a hostedreauth_url; redirect the end user there to re-enter credentials or re-consent at the institution, then wait forconnection.active(orconnection.failed). - Keeps the same
con_/acc_/txn_ids, unlike starting a fresh connection — so a delta re-sync over the overlap window dedupes cleanly against transactions you already have. - Available for
FINICITY,MX, andFDE. Uploaded-statement (PDF) sources are read-only and have no connection to reauthorize.
ChecksFDE
Check images are now readable from the API
Thecheck_images capability has had a read path since day one on the data
side, but no route to fetch it. Three endpoints now serve it, nested under the
owning account:- Requires the new
read:checksscope. Existing keys don’t have it — tick it on a new key in the portal, orPATCH /v3/api-keys/{id}to widen the key you already have without rotating its secret. - FDE-only. Non-FDE accounts return an empty list rather than an error, so you can call this uniformly across sources.
- There is no back image — LedgerSync captures the front of a check only, so there is no
sidefield. - Bank-reported fields and
ocr.*are kept separate, so you can always tell what the bank said from what OCR read off the paper. - The sandbox Ledgersync Bank (
ins_a7397a8d0656e1b7) returns real check images, so the whole flow is testable end-to-end.
ConnectionsMX
On-demand refresh now works for MX connections
POST /v3/connections/{id}/refresh now supports MX (con_MX_*) the same way
it already supported Finicity and FDE: it returns 202 Accepted with an
operation_id and triggers a fresh aggregation. (Previously MX returned
502 refresh_not_supported.)- Completion is asynchronous — listen for the
account.refresh.completedwebhook (oraccount.refresh.failedon terminal failure), then re-readGET /v3/accountsfor the updated balances and transactions. - All three connectable sources (Finicity, MX, FDE) now answer
/refreshuniformly, so you no longer need to special-case MX.
AccountsTransactions
PDF: a read-only fourth data source
Accounts created from uploaded bank statements now surface through the API. Their accounts and transactions come back withsource: "PDF" (ids like acc_PDF_42, txn_PDF_8837).- Read-only:
PDFisn’t linked through the widget and never appears underGET /v3/connections— aPDFaccount’sconnection_idisnull. - Exposed on
GET /v3/accountsandGET /v3/accounts/{id}/transactions. Statements aren’t served forPDFaccounts. - Everything else — pagination, filtering, the response shape — reads exactly like an aggregator source.
Pagination
Cursor pagination on all list endpoints
Every list endpoint now returns an opaquenext_cursor and a has_more flag. Pass next_cursor back as the cursor query param and loop until has_more is false.- Keyset (seek) based, so it stays correct even as rows are added or removed between pages — no skipped or double-counted items.
limitdefaults to100(max500; higher values are capped, not rejected).- Cursors are opaque and query-scoped — reusing one against a different account, filter, or date window returns
400 invalid_request.
Statements
Extract transactions from a bank-statement PDF
NewPOST /v3/statements/extract — upload a bank-statement PDF and get back the OCR-extracted transactions, powered by the same engine behind the LedgerSync app’s Bank Statement Converter.- Customer-level and standalone: no
client_id, and the upload never attaches to a connection, account, or stored statement. - Async: returns
202with anoperation_id; pollGET /v3/operations/{id}(most statements finish in under a minute). The result carrieskind: statement_extraction. There’s no webhook for this one — polling is the completion signal. - PDF only, up to 30 MB (larger uploads are rejected with
413). Requires thewrite:statementsscope. Per-customer concurrency and daily budgets apply on top of the standard rate tiers — exceeding them returns429.
