The LedgerSync API gives you one uniform REST API for your users' bank data — accounts, balances, transactions, and statements — across multiple bank data sources, with no plumbing to build yourself. You link a bank account once and receive clean JSON, regardless of which bank or underlying data source is behind it.
This article explains the core concepts, data model, and data sources powering the API.
Under the hood, LedgerSync routes requests between three sources automatically. You never choose a source — LedgerSync picks the right one server-side based on the institution.
| Source | What it covers |
|---|---|
| Finicity (Mastercard Open Finance) | Broadest US coverage, with bank OAuth where the institution supports it. |
| MX | An alternate aggregator that covers banks Finicity misses. |
| FDE (LedgerSync Proprietary) | LedgerSync's own credential-based extraction for banks neither aggregator covers. |
The connection ID you receive back (e.g., con_FINICITY_41294 or con_MX_1224) tells you which source served it. There is no source parameter — routing is fully automatic.
Note on PDF accounts: When a user's account was set up from uploaded bank statements, that data comes back with source: "PDF". PDF accounts have no Connection ID and appear only under accounts and transactions — not under GET /v3/connections.
Everything in the API hangs off four nested objects. Learn these once and the rest reads naturally.
| Object | What it represents |
|---|---|
Client (cli_...) | Your record of one end-user. You set an external_id to join back to your own system. |
Connection (con_...) | One linked bank for a Client. A single Client can have multiple Connections. |
Account (acc_...) | A checking, savings, credit card, or loan account exposed by a Connection. |
Transaction / Statement (txn_...) | The actual financial data on an Account. |
Reads are Client-scoped — pass client_id on every read call. For example:
GET /v3/accounts?client_id=cli_...&connection_id=con_FINICITY_41294
external_id./v3/clients/{id}/connections with an institution_id. You receive a 202 and an operation_id to track progress.widget_url in the user's browser. They pick their bank, sign in, and authorize accounts. You never see their credentials.active, store the canonical con_... ID and start reading accounts, transactions, and statements.No SDK is required. Send and receive JSON, authenticate with a Bearer key, and read the X-LS-Trace-Id header on every response for support tracing.
https://api-sandbox.ledgersyncappv2.com/v3https://api.ledgersyncappv2.com/v3