Skip to main content
GET
Get an account

Authorizations

Authorization
string
header
required

Pass your secret key in the Authorization header as a Bearer token: Authorization: Bearer sk_test_... (sandbox) or Bearer sk_live_... (production).

Keys are created in the developer portal and the plaintext secret is shown exactly once at creation. Treat them like passwords — never embed them in mobile apps or front-end code.

Path Parameters

account_id
string
required

Query Parameters

client_id
string
required

The Client (cli_…) to scope the read to. Required on account, transaction, and statement reads — LedgerSync's backend data APIs are scoped per end-user, so these resources are resolved within a single Client.

Response

The Account.

id
string
required
Example:

"acc_FINICITY_45"

source
enum<string>
required

Financial-data source backing an account. Aggregator sources (FINICITY, MX) and FDE back a Connection; PDF does not.

Values:

  • FINICITY — Finicity aggregation
  • MX — MX aggregation
  • FDE — Financial Document Extraction (LedgerSync proprietary)
  • PDF — Uploaded bank statements. Read-only: exposed on /accounts and /transactions (statements are not served for PDF), and never as a Connection (PDF accounts have connection_id: null).
Available options:
FINICITY,
MX,
FDE,
PDF
type
enum<string>
required

Coarse account classification, normalized by LedgerSync so the same six values mean the same thing on every source. Always present. other means the source did not classify the account, or classified it as something with no home in this enum (a rewards balance, an MX "other liability") - read subtype to tell those apart. This list is closed and stable; new upstream products appear in subtype, never here.

Available options:
checking,
savings,
credit_card,
loan,
investment,
other
Example:

"credit_card"

iso_currency_code
string
required

ISO-4217 currency code. Defaults to USD when the source omits it.

Example:

"USD"

connection_id
string | null

Owning connection — canonical id (con_<SOURCE>_<bankAccountId>). Null on a sandbox single-fetch (a sandbox account id doesn't encode its connection). Always present when listing accounts by connection.

Example:

"con_FINICITY_41294"

client_id
string
name
string
subtype
string

The finer label the source reported, before it was collapsed into type. Always present. This is an OPEN vocabulary that grows as sources report new products, which is why it is a plain string and not an enum: a new value here is never a breaking change. Branch on type; use subtype for display, or for finer routing you control and can update. unknown when the source reported no type at all, which today is every FDE account and roughly half of the accounts created from uploaded statements. Examples of the collapse: money_market and certificate_of_deposit report type: savings; mortgage and line_of_credit report type: loan; ira, roth and plan_401k report type: investment; bank reports type: checking.

Pattern: ^[a-z0-9_]+$
Example:

"money_market"

mask
string | null

Last 4 digits of the account number (Plaid-style mask).

Example:

"1234"

current_balance
number | null

Most recent balance in the account's currency, as a decimal, signed from the account holder's point of view and normalized by LedgerSync so it means the same thing on every source. Positive is value you hold, negative is value you owe, so summing this across a client's accounts gives net worth. A credit card or loan carrying a balance is therefore negative, and a checking account in overdraft is negative too. The sign is meaningful in both directions: an overpaid card with a real credit balance is positive. Null when the source hasn't reported one yet. The account.refresh.completed webhook reports the same account with the same sign, wrapped as {amount, iso_currency_code} rather than a bare decimal.

Example:

-1234.56

available_balance
number | null

Available balance, when the source distinguishes it from the current balance. On a credit card this is available credit, an amount you can spend, so it is NOT sign-flipped the way current_balance is and is normally positive. MX is the only source that reports it, and only for some accounts (common on checking, rare on cards), so it is null far more often than not. Check realized_capabilities.available_balance rather than assuming it is present.

last_refreshed_at
string<date-time> | null
oldest_transaction_date
string<date> | null

How far back our transaction history for this account actually goes: the date of the oldest transaction we hold. It is the minimum date you will see if you page this account's entire history through GET /accounts/{account_id}/transactions. Measured from the transactions we hold, not a claim by the aggregator about what it could supply. Null means we hold no transactions for this account at all, which is normal for one that was linked but has not completed a first refresh. It moves backwards, never forwards, when a backfill lands, and it is not a promise about what a future refresh will retrieve.

Example:

"2023-04-11"

liabilities
object | null

Credit-card terms for this account: what the client can borrow, what they owed at the last statement close, and what the bank wants next. Null for every account that is not a credit card or line of credit, and also for cards at institutions that do not report these values, so its presence is itself the signal that anything is known. Individual fields inside it are independently nullable for the same reason.

realized_capabilities
object | null

Per-account observed outcome of the most recent attempt at each capability. Today the backend tracks status at the bank level — accounts within the same connection share this snapshot. Per-account divergence (one account in a connection failed but others succeeded) requires a backend extension and is deferred.

created_at
string<date-time> | null

When LedgerSync first stored this account, which is when we first saw it at the source. For accounts present at link time this tracks the connection; for one shared later it is when it arrived. There is no account.added webhook, so this is the field to sort or diff on when you re-list accounts to find what is new. It never moves afterwards.

updated_at
string<date-time> | null