Skip to content

Get a ledger transaction

The ledger.transactions.get operation: GET /api/v1/ledger/transactions/{id} in the REST API and the ledger_transactions_get tool in the MCP server.

GET/api/v1/ledger/transactions/{id}

Returns one transaction of the legal entity's ledger by its ID (txn_…): its kind and status, the debit and credit entries with their account codes (integer micros), the totals per currency, the business date (effectiveAt), the objects it is about (links), the memo, and the actor who posted it (actor.approvalId names the approval request when a second person approved it). A transaction of another entity or mode is resource_not_found.

At a glance

  • REST: GET /api/v1/ledger/transactions/{id}
  • MCP tool: ledger_transactions_get
  • Operation ID: ledger.transactions.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:read scope
  • Since: M2

Request

Path parameters

FieldTypeDescription
idtxn_… ID

Query parameters

This operation takes no query parameters.

Response

200 OK with a JSON object:

FieldTypeDescription
idtxn_… ID
object"ledger_transaction"
entityIdent_… ID
livemodeboolean
brandIdbrd_… ID or null
kindone of 19 values, e.g. topup, sale, grant (all in the OpenAPI document)
statusone of pending, posted, voided
entriesarray of object
entries[].accountIdacct_… ID
entries[].accountCodestringThe account's code from the chart of accounts.
entries[].sideone of debit, credit
entries[].amountstringInteger micros, more than zero.
entries[].currencystring
totalsarray of objectDebit and credit totals per currency, always equal.
totals[].currencystring
totals[].debitsstring
totals[].creditsstring
effectiveAtdate-timeThe business date of the movement.
postedAtdate-time or null
voidedAtdate-time or null
reversalOftxn_… ID or nullThe posted transaction this one reverses.
linksobjectObjects the transaction is about, by ID.
memostringThe description; for a manual adjustment, its reason.
actorobjectWho posted it. approvalId names the approval request when a second person approved it.
actor.typeone of user, api_key, agent, app, system, public, customer
actor.idstring
actor.viaone of console, api, mcp, assistant, portal, job or null
actor.approvalIdstring or null
actor.onBehalfOfUserIdstring or null
actor.clientIdstring or null
actor.supportGrantIdstring or null
createdAtdate-time

Examples

An approved manual adjustment

HTTP
GET /api/v1/ledger/transactions/txn_01m4tx5nj8emwbyf7y9vcf47xg
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "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"
}

Errors

CodeHTTP statusWhenWhat to do
resource_not_found404No transaction 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_required400The 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_denied403You 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.