Get a ledger account
The ledger.accounts.get operation: GET /api/v1/ledger/accounts/{id} in the REST API and the ledger_accounts_get tool in the MCP server.
/api/v1/ledger/accounts/{id}Returns one account of the legal entity's ledger by its ID (acct_…): code, type, normal side, currency and
balance (integer micros, signed in the account's normal direction), plus its newest transactions
(recentTransactions, up to 10). For the full statement, list transactions with
accountId (recentTransactions.url). An account of another entity or mode is resource_not_found.
At a glance
- REST:
GET /api/v1/ledger/accounts/{id} - MCP tool:
ledger_accounts_get - Operation ID:
ledger.accounts.get - Scope: Legal entity
- Permission:
ledger:read - Risk tier:
read - Dry run: Not supported
- Idempotency: Not needed (read only)
- Modes: Test and live
- Authentication: API key with the
ledger:readscope - Since: M2
Request
Path parameters
| Field | Type | Description |
|---|---|---|
id | acct_… ID |
Query parameters
This operation takes no query parameters.
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
id | acct_… ID | |
object | "ledger_account" | |
entityId | ent_… ID | |
livemode | boolean | |
brandId | brd_… ID or null | The brand of a revenue, deferred revenue or receivables account, or of a customer's account. |
code | string | The account code from the chart of accounts, e.g. opening_balances:EUR. |
kind | one of 19 values, e.g. processor_clearing, bank, receivable_customers (all in the OpenAPI document) | What the code names, e.g. usage_revenue or tax_payable. |
type | one of asset, liability, revenue, expense, equity | |
currency | string | |
normalSide | one of debit, credit | The side that increases the balance: debit for assets and expenses, credit for the rest. |
noNegative | boolean | The posted balance can't go below zero. |
balance | object | Integer micros, signed in the normal direction (negative: on the other side). pending counts pending transactions. |
balance.posted | integer string | |
balance.pending | integer string | |
createdAt | date-time | |
updatedAt | date-time | |
recentTransactions | object | |
recentTransactions.object | "list" | |
recentTransactions.data | array of object | |
recentTransactions.data[].id | txn_… ID | |
recentTransactions.data[].object | "ledger_transaction" | |
recentTransactions.data[].entityId | ent_… ID | |
recentTransactions.data[].livemode | boolean | |
recentTransactions.data[].brandId | brd_… ID or null | |
recentTransactions.data[].kind | one of 19 values, e.g. topup, sale, grant (all in the OpenAPI document) | |
recentTransactions.data[].status | one of pending, posted, voided | |
recentTransactions.data[].entries | array of object | |
recentTransactions.data[].entries[].accountId | acct_… ID | |
recentTransactions.data[].entries[].accountCode | string | The account's code from the chart of accounts. |
recentTransactions.data[].entries[].side | one of debit, credit | |
recentTransactions.data[].entries[].amount | string | Integer micros, more than zero. |
recentTransactions.data[].entries[].currency | string | |
recentTransactions.data[].totals | array of object | Debit and credit totals per currency, always equal. |
recentTransactions.data[].totals[].currency | string | |
recentTransactions.data[].totals[].debits | string | |
recentTransactions.data[].totals[].credits | string | |
recentTransactions.data[].effectiveAt | date-time | The business date of the movement. |
recentTransactions.data[].postedAt | date-time or null | |
recentTransactions.data[].voidedAt | date-time or null | |
recentTransactions.data[].reversalOf | txn_… ID or null | The posted transaction this one reverses. |
recentTransactions.data[].links | object | Objects the transaction is about, by ID. |
recentTransactions.data[].memo | string | The description; for a manual adjustment, its reason. |
recentTransactions.data[].actor | object | Who posted it. approvalId names the approval request when a second person approved it. |
recentTransactions.data[].actor.type | one of user, api_key, agent, app, system, public, customer | |
recentTransactions.data[].actor.id | string | |
recentTransactions.data[].actor.via | one of console, api, mcp, assistant, portal, job or null | |
recentTransactions.data[].actor.approvalId | string or null | |
recentTransactions.data[].actor.onBehalfOfUserId | string or null | |
recentTransactions.data[].actor.clientId | string or null | |
recentTransactions.data[].actor.supportGrantId | string or null | |
recentTransactions.data[].createdAt | date-time | |
recentTransactions.has_more | boolean | |
recentTransactions.url | string |
Examples
The entity's EUR bank account
GET /api/v1/ledger/accounts/acct_01m4tx5nj8emwbyf7y9vcf47xc
Authorization: Bearer or_test_…
Response (200):
{
"id": "acct_01m4tx5nj8emwbyf7y9vcf47xc",
"object": "ledger_account",
"entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
"livemode": true,
"brandId": null,
"code": "bank:ent_01m4tx5nj8emwbyf7y9vcf47x2:EUR",
"kind": "bank",
"type": "asset",
"currency": "EUR",
"normalSide": "debit",
"noNegative": false,
"balance": {
"posted": "1500000000",
"pending": "0"
},
"createdAt": "2026-10-13T12:00:00.000Z",
"updatedAt": "2026-10-14T09:30:00.000Z",
"recentTransactions": {
"object": "list",
"data": [
{
"id": "txn_01m4tx5nj8emwbyf7y9vcf47xg",
"object": "ledger_transaction",
"entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
"livemode": true,
"brandId": null,
"kind": "adjustment",
"status": "posted",
"entries": [
{
"accountId": "acct_01m4tx5nj8emwbyf7y9vcf47xc",
"accountCode": "bank:ent_01m4tx5nj8emwbyf7y9vcf47x2:EUR",
"side": "debit",
"amount": "1500000000",
"currency": "EUR"
},
{
"accountId": "acct_01m4tx5nj8emwbyf7y9vcf47xd",
"accountCode": "opening_balances:EUR",
"side": "credit",
"amount": "1500000000",
"currency": "EUR"
}
],
"totals": [
{
"currency": "EUR",
"debits": "1500000000",
"credits": "1500000000"
}
],
"effectiveAt": "2026-10-14T09:30:00.000Z",
"postedAt": "2026-10-14T09:30:00.000Z",
"voidedAt": null,
"reversalOf": null,
"links": {},
"memo": "Opening bank balance from the 2026-09-30 statement",
"actor": {
"type": "user",
"id": "usr_01m4tx5nj8emwbyf7y9vcf47xa",
"via": "console",
"approvalId": "apr_01m4tx5nj8emwbyf7y9vcf47xj",
"onBehalfOfUserId": null,
"clientId": null,
"supportGrantId": null
},
"createdAt": "2026-10-14T09:30:00.000Z"
}
],
"has_more": false,
"url": "/api/v1/ledger/transactions?accountId=acct_01m4tx5nj8emwbyf7y9vcf47xc"
}
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
resource_not_found | 404 | No account with this ID is in this entity's ledger in this mode. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
scope_required | 400 | The request names no legal entity (an org key without Ownrecord-Entity). | Call the operation with credentials or a target at its level: an organization, a legal entity, a brand or the platform (details.required_scope). |
permission_denied | 403 | You can't see this entity's ledger (brand-scoped members never can). | Ask an organization owner or admin for a role or scope that allows this action. |
It can also return these common errors: validation_failed, api_version_unsupported, authentication_required, api_key_invalid, dry_run_not_supported, rate_limited, internal_error.