# Kordio - [Kordio documentation](https://docs.kordio.io/index.md): Two APIs on one host. Pick the one you are integrating. - [Where Kordio fits](https://docs.kordio.io/positioning.md): What Kordio is, what sits underneath it, and whether you need it. - [Changelog](https://docs.kordio.io/changelog.md): Updates and breaking changes across both Kordio APIs. - [Kordio Control](https://docs.kordio.io/agents/index.md): Decide what an agent may do before it does it, and sign the answer. - [Authorize an agent action](https://docs.kordio.io/agents/quickstart.md): Gate your first agent action in test mode, with one HTTP call. - [Agent keys and dashboard tokens](https://docs.kordio.io/agents/authentication.md): Two credentials, trusted differently, and how to get the first one. - [Where a control layer fits](https://docs.kordio.io/agents/why.md): Why a prompt, an if statement, and a card limit each stop short. - [How a decision is reached](https://docs.kordio.io/agents/concepts.md): Evaluation order, outcomes, states, and headroom. - [Writing a policy](https://docs.kordio.io/agents/policies.md): Caps, windows, allowlists, and the condition language. - [Spend tokens](https://docs.kordio.io/agents/spend-tokens.md): A single-use ceiling an agent mints against its own budget. - [Holding spend for a person](https://docs.kordio.io/agents/approvals.md): What a 202 means, how an agent waits, and what an approver sees. - [Verifying an authorization](https://docs.kordio.io/agents/cosignatures.md): Check a signed decision offline, without trusting the agent that carries it. - [Give an agent a budget for one run](https://docs.kordio.io/agents/guides/session-budget.md): Open a budget, spend against it, and stop a loop at the envelope. - [Require a person above a threshold](https://docs.kordio.io/agents/guides/approval-threshold.md): Hold spend over a limit, and let the agent wait instead of failing. - [Stop an agent over-refunding](https://docs.kordio.io/agents/guides/refund-ceiling.md): Cap a refund at the order it belongs to, with one condition rule. - [Pass facts from your own service](https://docs.kordio.io/agents/guides/metadata-facts.md): Compute a fact your side, send it in metadata, compare it in a rule. - [Roll a policy out safely](https://docs.kordio.io/agents/guides/policy-rollout.md): Preview a draft, prove it on a test agent, then turn it on live. - [What Kordio guarantees](https://docs.kordio.io/agents/guarantees.md): The properties spend control holds, and the ones it deliberately does not. - [Where the ledger fits](https://docs.kordio.io/agents/ledger-projection.md): What the projection mirrors into the books, and what it does not promise. - [Errors](https://docs.kordio.io/agents/errors.md): Every code spend control returns, and every rule that can refuse. - [Webhooks](https://docs.kordio.io/agents/webhooks.md): Subscribe to control-layer events and verify signed deliveries. - [Kordio Control API](https://docs.kordio.io/agents/api-reference/introduction.md): Every control-layer endpoint, generated from the OpenAPI specification. - [Authorize an action](https://docs.kordio.io/api-reference/actions/authorize-an-action.md): The call that goes in front of the spend. Runs the full policy evaluation, reserves budget against the budget, records an intent, and returns the decision. - [Simulate an action](https://docs.kordio.io/api-reference/actions/simulate-an-action.md): Runs the same evaluation and records nothing: no intent, no reservation, no budget consumed. Always `200`, whatever the outcome. - [Read an action intent](https://docs.kordio.io/api-reference/actions/read-an-action-intent.md): The current state of one intent. This is what you poll while an action sits in `requires_approval`, if you are not using webhooks. - [Report success](https://docs.kordio.io/api-reference/actions/report-success.md): The action succeeded. Settles the reservation and moves the intent from `pending` to `completed`. - [Report failure](https://docs.kordio.io/api-reference/actions/report-failure.md): The action failed. Releases the reservation back to the budget and moves the intent from `pending` or `requires_approval` to `failed`. - [Open a budget](https://docs.kordio.io/api-reference/budgets/open-a-budget.md): A budget is the budget envelope for one agent run. Every authorized action commits against it, and it is what a runaway loop runs into. - [Read a budget](https://docs.kordio.io/api-reference/budgets/read-a-budget.md): Read the remaining budget on a budget. - [List budgets](https://docs.kordio.io/api-reference/budgets/list-budgets.md) - [Read a budget](https://docs.kordio.io/api-reference/budgets/read-a-budget-1.md) - [Mint a spend token](https://docs.kordio.io/api-reference/spend-tokens/mint-a-spend-token.md): A spend token is a single-use ceiling an agent mints against one of its own budgets and presents later on `POST /v1/agent/payment_intents` via `spend_token_id`. - [List spend tokens](https://docs.kordio.io/api-reference/spend-tokens/list-spend-tokens.md): Read-only. Tokens are minted on the agent side only. - [Read a spend token](https://docs.kordio.io/api-reference/spend-tokens/read-a-spend-token.md) - [Authorize a payment](https://docs.kordio.io/api-reference/payment-intents/authorize-a-payment.md): Evaluated as the action type `payment.create` with the counterparty as its resource, so an agent's caps, windows and allowlists apply across payments and other actions together. Spend on one consumes headroom for the other. - [Simulate a payment](https://docs.kordio.io/api-reference/payment-intents/simulate-a-payment.md): Evaluates without reserving or recording anything. Always `200`. - [Read a payment intent](https://docs.kordio.io/api-reference/payment-intents/read-a-payment-intent.md) - [Report that the money moved](https://docs.kordio.io/api-reference/payment-intents/report-that-the-money-moved.md): Your rail settled the payment. Moves the intent from `pending` to `executed` and keeps the reservation spent. - [Report that it did not](https://docs.kordio.io/api-reference/payment-intents/report-that-it-did-not.md): Your rail refused or errored. Moves the intent to `failed` and releases the reservation back to the budget. - [Verify a cosignature and spend it](https://docs.kordio.io/api-reference/cosignatures/verify-a-cosignature-and-spend-it.md): Unauthenticated. Does everything `verify` does, and then marks the authority spent so the same cosignature cannot be presented twice. - [Verify a cosignature](https://docs.kordio.io/api-reference/cosignatures/verify-a-cosignature.md): Unauthenticated. Checks the signature and, beyond that, whether the underlying intent is still spendable and still carries the amount the token claims. - [Cosignature public keys](https://docs.kordio.io/api-reference/cosignatures/cosignature-public-keys.md): The public keys for offline cosignature verification. Unauthenticated, unthrottled, and cacheable. - [List your workspaces](https://docs.kordio.io/api-reference/workspaces/list-your-workspaces.md): Every workspace the caller is a member of. This is the one list on the control plane that is not paginated. - [Create a workspace](https://docs.kordio.io/api-reference/workspaces/create-a-workspace.md): The caller becomes its `owner`. - [Read a workspace](https://docs.kordio.io/api-reference/workspaces/read-a-workspace.md) - [Delete a workspace](https://docs.kordio.io/api-reference/workspaces/delete-a-workspace.md): Requires the `manage_members` capability. You must echo the slug back in `confirm`. - [Export a workspace](https://docs.kordio.io/api-reference/workspaces/export-a-workspace.md): A full JSON dump of the workspace: agents, policies, policy modules, budgets, spend tokens, action and payment intents, audit events, memberships, webhook endpoints, entitlement grants and the subscription. Requires `manage_members`. - [List agents](https://docs.kordio.io/api-reference/agents/list-agents.md) - [Create an agent](https://docs.kordio.io/api-reference/agents/create-an-agent.md): Requires the `manage_policy` capability. - [Read an agent](https://docs.kordio.io/api-reference/agents/read-an-agent.md) - [Update an agent](https://docs.kordio.io/api-reference/agents/update-an-agent.md): Requires `manage_policy`. Use this to suspend, revoke, or re-scope an agent. - [List policies](https://docs.kordio.io/api-reference/policies/list-policies.md) - [Create a policy](https://docs.kordio.io/api-reference/policies/create-a-policy.md): Requires `manage_policy`. - [Read a policy](https://docs.kordio.io/api-reference/policies/read-a-policy.md) - [Update a policy](https://docs.kordio.io/api-reference/policies/update-a-policy.md): Requires `manage_policy`. - [List policy modules](https://docs.kordio.io/api-reference/policy-modules/list-policy-modules.md): Sorted by name, ascending. - [Create a policy module](https://docs.kordio.io/api-reference/policy-modules/create-a-policy-module.md): Requires `manage_policy`. - [Read a policy module](https://docs.kordio.io/api-reference/policy-modules/read-a-policy-module.md): Modules are addressed by `name`, not by id. - [Delete a policy module](https://docs.kordio.io/api-reference/policy-modules/delete-a-policy-module.md): Requires `manage_policy`. A module still imported by a policy will not delete. - [Update a policy module](https://docs.kordio.io/api-reference/policy-modules/update-a-policy-module.md): Requires `manage_policy`. `name` is ignored on update; a module cannot be renamed while policies reference it. - [Preview a draft policy](https://docs.kordio.io/api-reference/policy-previews/preview-a-draft-policy.md): Evaluate a policy you have not saved against a synthetic action, and get back the decision it would produce. - [Read workspace funds](https://docs.kordio.io/api-reference/funds/read-workspace-funds.md): Committed, held and available spend across every active session in the workspace, plus what the ledger has caught up on. - [List action intents](https://docs.kordio.io/api-reference/approvals/list-action-intents.md): Filter by `state=requires_approval` for the approval queue. - [Read an action intent](https://docs.kordio.io/api-reference/approvals/read-an-action-intent.md) - [What approving this would do](https://docs.kordio.io/api-reference/approvals/what-approving-this-would-do.md): Everything an approver needs to decide, before they click: the amount, the rule that held it, the budget it draws on, how much comes back if it is denied, how many other holds compete for the same budget, and every window it consumes. - [Approve a held action](https://docs.kordio.io/api-reference/approvals/approve-a-held-action.md): Requires the `approve` capability. - [Deny a held action](https://docs.kordio.io/api-reference/approvals/deny-a-held-action.md): Requires `approve`. Moves the intent to `denied` and releases the reserved budget back to the budget. - [List payment intents](https://docs.kordio.io/api-reference/approvals/list-payment-intents.md) - [Read a payment intent](https://docs.kordio.io/api-reference/approvals/read-a-payment-intent.md) - [What approving this payment would do](https://docs.kordio.io/api-reference/approvals/what-approving-this-payment-would-do.md): The same summary as the action-intent impact call, plus the spend token the payment cites, if any. - [Approve a held payment](https://docs.kordio.io/api-reference/approvals/approve-a-held-payment.md): Requires `approve`. - [Deny a held payment](https://docs.kordio.io/api-reference/approvals/deny-a-held-payment.md): Requires `approve`. Releases the reservation and enqueues the ledger release. - [List audit events](https://docs.kordio.io/api-reference/audit-events/list-audit-events.md): The append-only record of everything the control layer did. Every role can read it, including `member`. An audit trail only some people can see is not much of one. - [Read an audit event](https://docs.kordio.io/api-reference/audit-events/read-an-audit-event.md) - [List webhook endpoints](https://docs.kordio.io/api-reference/webhook-endpoints/list-webhook-endpoints.md) - [Create a webhook endpoint](https://docs.kordio.io/api-reference/webhook-endpoints/create-a-webhook-endpoint.md): Requires `manage_policy`. - [Read a webhook endpoint](https://docs.kordio.io/api-reference/webhook-endpoints/read-a-webhook-endpoint.md) - [Delete a webhook endpoint](https://docs.kordio.io/api-reference/webhook-endpoints/delete-a-webhook-endpoint.md): Requires `manage_policy`. - [Rotate a signing secret](https://docs.kordio.io/api-reference/webhook-endpoints/rotate-a-signing-secret.md): Requires `manage_policy`. Returns a new `secret`, once. The previous secret stops verifying immediately. - [List members](https://docs.kordio.io/api-reference/members/list-members.md) - [Add a member](https://docs.kordio.io/api-reference/members/add-a-member.md): Requires `manage_members`. Consumes plan member headroom. - [Remove a member](https://docs.kordio.io/api-reference/members/remove-a-member.md): Requires `manage_members`. Removing the last owner is refused. - [Change a member's role](https://docs.kordio.io/api-reference/members/change-a-members-role.md): Requires `manage_members`. A change that would leave the workspace with no owner is refused. - [List open invitations](https://docs.kordio.io/api-reference/members/list-open-invitations.md) - [Invite someone](https://docs.kordio.io/api-reference/members/invite-someone.md): Requires `manage_members`. A new invitation for an email with an open one supersedes it. - [Revoke an invitation](https://docs.kordio.io/api-reference/members/revoke-an-invitation.md): Requires `manage_members`. - [Look up an invitation](https://docs.kordio.io/api-reference/members/look-up-an-invitation.md): Resolve an invitation token before accepting it, so your UI can show what is being joined and whether the signed-in account matches. - [Accept an invitation](https://docs.kordio.io/api-reference/members/accept-an-invitation.md) - [Read plan and entitlements](https://docs.kordio.io/api-reference/billing/read-plan-and-entitlements.md): The current plan, subscription, entitlement usage, prepaid volume, and the plan catalogue. Console-facing; agents never call this. - [Start a plan checkout](https://docs.kordio.io/api-reference/billing/start-a-plan-checkout.md): Requires `manage_members`. Returns a hosted checkout URL, or, if the workspace is already subscribed, changes the plan in place. - [Buy prepaid volume](https://docs.kordio.io/api-reference/billing/buy-prepaid-volume.md): Requires `manage_members`. - [Open the billing portal](https://docs.kordio.io/api-reference/billing/open-the-billing-portal.md): Requires `manage_members`. - [Cancel the subscription](https://docs.kordio.io/api-reference/billing/cancel-the-subscription.md): Requires `manage_members`. Cancels at period end; the plan keeps entitling until then. - [Re-sync billing state](https://docs.kordio.io/api-reference/billing/re-sync-billing-state.md): Requires `manage_members`. Pulls the current subscription from the billing provider rather than waiting for the next webhook. - [Ledger API](https://docs.kordio.io/ledger/index.md): A programmable double-entry system of record over HTTP. - [Post your first transaction](https://docs.kordio.io/ledger/quickstart.md): From credentials to a posted transaction and a balance. - [OAuth client credentials](https://docs.kordio.io/ledger/authentication.md): Mint a token, pick scopes, and keep test and live apart. - [Why a ledger API](https://docs.kordio.io/ledger/why.md): Versus Postgres, a processor, accounting software, and other ledger APIs. - [Ledger concepts](https://docs.kordio.io/ledger/concepts.md): Double-entry, corrections, idempotency, multi-currency, value dates. - [Money flows](https://docs.kordio.io/ledger/money-flows.md): How value moves through accounts as balanced postings. - [Reconciliation](https://docs.kordio.io/ledger/reconciliation.md): Match the books against the outside world, and prove it tied out. - [Feeds](https://docs.kordio.io/ledger/feeds.md): Ingest external money movement and work the break queue. - [Pagination and expand](https://docs.kordio.io/ledger/pagination.md): Walk lists with cursors and inline related objects. - [Invariants](https://docs.kordio.io/ledger/invariants.md): What the ledger makes impossible, and the bug class each rule removes. - [Why not just use Postgres?](https://docs.kordio.io/ledger/why-not-postgres.md): Why a correct ledger is not a schema problem. - [Errors](https://docs.kordio.io/ledger/errors.md): Every error code the ledger returns, with its status and a hint. - [Webhooks](https://docs.kordio.io/ledger/webhooks.md): Subscribe to ledger events, verify signatures, and replay from the tail. - [Ledger API](https://docs.kordio.io/ledger/api-reference/introduction.md): Every ledger endpoint, generated from the OpenAPI specification. - [Liveness + DB probe](https://docs.kordio.io/api-reference/system/liveness-+-db-probe.md) - [RFC 8414 authorization server metadata](https://docs.kordio.io/api-reference/system/rfc-8414-authorization-server-metadata.md): Discovery document for OAuth clients. Tells tooling where the token endpoint is, what grant types and scopes are supported, what signing algorithms we use. - [Capabilities, guarantees, and limits of this deployment](https://docs.kordio.io/api-reference/system/capabilities-guarantees-and-limits-of-this-deployment.md): Self-describing contract surface. Hit once at boot to discover what's wired up, what the ledger promises, and what the hard limits are, instead of hardcoding assumptions. - [Issue an access token](https://docs.kordio.io/api-reference/authentication/issue-an-access-token.md): RFC 6749 section 4.4 client_credentials. Authenticate with HTTP Basic (`client_id:client_secret`) **or** with `client_id` and `client_secret` in the form body. - [List accounts](https://docs.kordio.io/api-reference/accounts/list-accounts.md) - [Create an account](https://docs.kordio.io/api-reference/accounts/create-an-account.md) - [Get an account](https://docs.kordio.io/api-reference/accounts/get-an-account.md) - [Get the rolled-up balance for an account category](https://docs.kordio.io/api-reference/accounts/get-the-rolled-up-balance-for-an-account-category.md): Returns the aggregate balance across all accounts under the same category as the addressed account (e.g. the sum of every `accounts_receivable:*` account). Useful for treasury-level dashboards that want a single number per category. - [Get an account's balance (current or point-in-time)](https://docs.kordio.io/api-reference/accounts/get-an-accounts-balance-current-or-point-in-time.md): Pass `?at=` for a historical balance computed from `value_date` on each posting. Without `at`, returns the current balance from the actor's in-memory state. - [Account statement for a period](https://docs.kordio.io/api-reference/accounts/account-statement-for-a-period.md): Opening balance at `from`, every posting in `[from, to)` ordered by `value_date` ascending, closing balance at `to`. The auditor's per-account view. - [List postings on an account](https://docs.kordio.io/api-reference/accounts/list-postings-on-an-account.md) - [List account templates](https://docs.kordio.io/api-reference/accounts/list-account-templates.md) - [Define an account template](https://docs.kordio.io/api-reference/accounts/define-an-account-template.md): A template names a reusable shape for accounts: accounting type, allowed currencies, balance sign rule. When `POST /v1/accounts` is called with `template: `, the request is validated against the template before insert. Templates are immutable; create a new name to evolve. - [Get an account template](https://docs.kordio.io/api-reference/accounts/get-an-account-template.md) - [List transactions](https://docs.kordio.io/api-reference/transactions/list-transactions.md) - [Create a transaction](https://docs.kordio.io/api-reference/transactions/create-a-transaction.md): Write a balanced set of postings. Replays of the same `Idempotency-Key` return the original transaction with status 200. - [Create many transactions in one call](https://docs.kordio.io/api-reference/transactions/create-many-transactions-in-one-call.md): Each item carries its own `idempotency_key`. The header `Idempotency-Key` is ignored on this endpoint; bulk callers must inline keys. - [Look up a transaction by external reference](https://docs.kordio.io/api-reference/transactions/look-up-a-transaction-by-external-reference.md): Returns the transaction that previously recorded a given external reference (e.g. a blockchain tx hash, a custody deposit id, a settlement confirmation id). All three of `rail`, `kind`, `value` are required and form the lookup tuple. - [Get a transaction](https://docs.kordio.io/api-reference/transactions/get-a-transaction.md) - [Not allowed, the ledger is append-only](https://docs.kordio.io/api-reference/transactions/not-allowed-the-ledger-is-append-only.md): Returns `405` with a hint pointing at `/reverse`. This is intentional: corrections must be auditable transactions, not silent deletes. - [Update transaction metadata](https://docs.kordio.io/api-reference/transactions/update-transaction-metadata.md): Metadata is the only mutable field on a transaction. Any other field returns `409 immutable_field`. To correct posted data, write a reversal. - [Reverse a transaction](https://docs.kordio.io/api-reference/transactions/reverse-a-transaction.md): Creates a new transaction with each posting's direction flipped and writes a bidirectional link via `reverses` / `reversed_by`. Idempotent on `Idempotency-Key`. - [Commit pending postings](https://docs.kordio.io/api-reference/transactions/commit-pending-postings.md): Finalizes any `pending: true` postings on a transaction. Idempotent on `Idempotency-Key`: replays return the original result without re-emitting events. - [Refund a transaction (partial or full)](https://docs.kordio.io/api-reference/transactions/refund-a-transaction-partial-or-full.md): Books an inverse transaction for the requested amount, scaling every leg of the original (including legs in other currencies) by `amount / gross_in(currency)`. Banker's rounding; residual on the largest leg per currency, so the new transaction is balanced per currency. - [Sweep funds into a reserve account](https://docs.kordio.io/api-reference/reserves/sweep-funds-into-a-reserve-account.md): Creates a reserve account (if it doesn't yet exist) for the `(template, counterparty_ref, currency)` triple and books a balanced transaction that debits the source account and credits the reserve. Reserves model holdbacks, escrow, FX holds, and any other case where unrestricted funds need to be earm… - [Release funds from a reserve to a target account](https://docs.kordio.io/api-reference/reserves/release-funds-from-a-reserve-to-a-target-account.md): Books a balanced transaction debiting the reserve and crediting `target_account_id`. The target need not be the original source. Idempotent on `Idempotency-Key`. - [Claw funds from a reserve into an operator account](https://docs.kordio.io/api-reference/reserves/claw-funds-from-a-reserve-into-an-operator-account.md): Books a balanced transaction debiting the reserve and crediting `operator_account_id`. Used when the held-back funds are forfeited to the operator (e.g. a chargeback lost by the merchant, an expired escrow window). The `reason_code` is persisted in transaction metadata for audit. - [List events](https://docs.kordio.io/api-reference/events/list-events.md): Same payloads webhooks deliver. Use for backfill, debugging, or as a polling alternative to webhooks. - [Fetch one event](https://docs.kordio.io/api-reference/events/fetch-one-event.md) - [Trial balance as of a timestamp](https://docs.kordio.io/api-reference/reports/trial-balance-as-of-a-timestamp.md): Every account's balance, with per-currency debit/credit totals. A healthy ledger has `totals_by_currency[X].residual == 0` for every currency. The `healthy` boolean rolls this up. - [Balance sheet (assets / liabilities / equity)](https://docs.kordio.io/api-reference/reports/balance-sheet-assets-liabilities-equity.md): Point-in-time balance sheet computed against `value_date`. Pass `?at=` for a historical view; omit for current. `currency` may be passed to scope the report to a single currency. - [Income statement (revenue / expense over a period)](https://docs.kordio.io/api-reference/reports/income-statement-revenue-expense-over-a-period.md): Revenue and expense totals over `[from, to)`. Both `from` and `to` are ISO 8601 instants and use `value_date` for inclusion. - [Cash flow over a period](https://docs.kordio.io/api-reference/reports/cash-flow-over-a-period.md): Cash movement broken out by category over `[from, to)`. Uses `value_date`. - [Total reserved per currency per counterparty](https://docs.kordio.io/api-reference/reports/total-reserved-per-currency-per-counterparty.md): Sums the posted balance of every `account_kind = "reserve"` account in the ledger, grouped by `(counterparty_ref, currency)`. Empty when no reserves exist. - [Funds segregation snapshot](https://docs.kordio.io/api-reference/reports/funds-segregation-snapshot.md): Per-currency totals of `client_held` vs. `custody_held` accounts plus a delta and a custody breakdown. Feeds regulator-style client-money reports (EMI, CASP, etc.). The platform itself does not interpret the classification beyond grouping. - [List historic reconciliation runs](https://docs.kordio.io/api-reference/reconciliation/list-historic-reconciliation-runs.md) - [Run a reconciliation](https://docs.kordio.io/api-reference/reconciliation/run-a-reconciliation.md): Match a snapshot of external items against unreconciled postings. Matching is per-currency, per-amount, with a default 24-hour `value_date` window. Optional `account_id` on each item narrows the candidate pool. - [Fetch a single run with its snapshot](https://docs.kordio.io/api-reference/reconciliation/fetch-a-single-run-with-its-snapshot.md) - [Manually mark a posting as reconciled](https://docs.kordio.io/api-reference/reconciliation/manually-mark-a-posting-as-reconciled.md): For ad-hoc cleanups when the automated matcher couldn't pair an item. Already-reconciled postings are returned untouched. - [List reconciliation sources](https://docs.kordio.io/api-reference/sources/list-reconciliation-sources.md) - [Create a source](https://docs.kordio.io/api-reference/sources/create-a-source.md): A source names an external system you reconcile against (a PSP, bank, exchange). Per-source defaults (`default_strategy`, `default_window_seconds`, `default_tolerance_minor_units`, `default_account_id`) apply to source-scoped runs. - [Fetch a source](https://docs.kordio.io/api-reference/sources/fetch-a-source.md) - [Update a source's defaults](https://docs.kordio.io/api-reference/sources/update-a-sources-defaults.md) - [Ingest external transactions (idempotent batch)](https://docs.kordio.io/api-reference/sources/ingest-external-transactions-idempotent-batch.md): Stores up to 1000 external money-movement rows. Idempotent on `(source, external_id)`: re-submitting a row never mutates the stored copy and reports `replayed`. Invalid rows report `error` per item without blocking the rest. - [Run reconciliation for a source](https://docs.kordio.io/api-reference/sources/run-reconciliation-for-a-source.md): Draws open external transactions for the source (optionally bounded by `from`/`to` on `occurred_at`) and matches them. Strategy, window, and tolerance default from the source. - [Enable or rotate the source's hosted inbound endpoint](https://docs.kordio.io/api-reference/sources/enable-or-rotate-the-sources-hosted-inbound-endpoint.md): Mints an inbound URL and signing secret. The plaintext secret is returned once in this response and never again; calling again rotates both token and secret, invalidating the old pair immediately. - [Disable the source's inbound endpoint](https://docs.kordio.io/api-reference/sources/disable-the-sources-inbound-endpoint.md) - [Hosted inbound push endpoint](https://docs.kordio.io/api-reference/sources/hosted-inbound-push-endpoint.md): Unauthenticated except for the per-source HMAC signature (see the enable endpoint). Unknown or disabled tokens 404. Never runs matching; queue a run or rely on your scheduled runs. - [List external transactions](https://docs.kordio.io/api-reference/sources/list-external-transactions.md): `status=open` is the break list. Filter by `source_id`, `currency`, and `from`/`to` on `occurred_at`. Newest first. - [Fetch an external transaction](https://docs.kordio.io/api-reference/sources/fetch-an-external-transaction.md) - [Match audit trail for an external transaction](https://docs.kordio.io/api-reference/sources/match-audit-trail-for-an-external-transaction.md): Includes reversed matches (`reversed_at` set). - [Exclude an external transaction from matching](https://docs.kordio.io/api-reference/sources/exclude-an-external-transaction-from-matching.md): Marks an open row `ignored` (provider fees booked elsewhere, test rows). Idempotent on already-ignored rows. Matched rows are rejected with `invalid_state`; unmatch first. Emits `external_transaction.ignored`. - [Manually match an external transaction to postings](https://docs.kordio.io/api-reference/sources/manually-match-an-external-transaction-to-postings.md): The postings must be unreconciled, share the row's currency, and sum exactly to its amount; otherwise 422 with the residual in the hint. Records a match with strategy `manual` and emits `reconciliation.match_created`. - [Undo a match](https://docs.kordio.io/api-reference/sources/undo-a-match.md): Reopens the matched postings, stamps the match row `reversed_at` (kept for audit), returns the row to `open`, and emits `reconciliation.match_reversed`. - [List postings, tenant-wide](https://docs.kordio.io/api-reference/postings/list-postings-tenant-wide.md): Cross-account list. Filter with `reconciled=true|false` to narrow to settled or open postings; pass `account=` to scope to one account. For per-account history with the same tags filter, use `GET /v1/accounts/:id/postings`. - [List period closes](https://docs.kordio.io/api-reference/periods/list-period-closes.md) - [Close a period](https://docs.kordio.io/api-reference/periods/close-a-period.md): Snapshots the trial balance at `period_end` and locks the window. After close, any new transaction with `value_date` inside the window is rejected with `period_closed`. Enforced both in the coordinator and by a DB trigger. - [Fetch a close with full trial-balance snapshot](https://docs.kordio.io/api-reference/periods/fetch-a-close-with-full-trial-balance-snapshot.md) - [Reopen a closed period](https://docs.kordio.io/api-reference/periods/reopen-a-closed-period.md): Records who reopened and when. Use sparingly; every reopen invalidates a previously-signed period report. The original close row is preserved with `reopened_at` + `reopened_by_label` for audit. - [List webhook endpoints](https://docs.kordio.io/api-reference/webhooks/list-webhook-endpoints.md) - [Register a webhook endpoint](https://docs.kordio.io/api-reference/webhooks/register-a-webhook-endpoint.md): The response includes `signing_secret`, the **only** time it is returned. Store it before discarding the response. - [Get a webhook endpoint](https://docs.kordio.io/api-reference/webhooks/get-a-webhook-endpoint.md) - [Remove an endpoint](https://docs.kordio.io/api-reference/webhooks/remove-an-endpoint.md) - [Update endpoint settings](https://docs.kordio.io/api-reference/webhooks/update-endpoint-settings.md) - [Rotate the signing secret](https://docs.kordio.io/api-reference/webhooks/rotate-the-signing-secret.md): Mints a new signing secret and returns the plaintext **once**. The previous secret remains valid for inbound signature verification for 24 hours after rotation, then is destroyed (sweeper job). Outgoing deliveries sign with the current secret only; Kordio does not dual-sign. - [List recent deliveries for an endpoint](https://docs.kordio.io/api-reference/webhooks/list-recent-deliveries-for-an-endpoint.md): Returns the recent webhook deliveries for `:id`, newest-first, with full request/response detail so an integrator can debug a failing handler without DB access. `request_headers` is sanitized: any header containing `authorization`, `secret`, or `cookie` is redacted. The `Kordio-Signature` header is… - [Count failed deliveries for an endpoint](https://docs.kordio.io/api-reference/webhooks/count-failed-deliveries-for-an-endpoint.md): Returns the count of deliveries that exhausted their retries (`status == failed`) for this endpoint. `since` accepts either an ISO-8601 timestamp or a relative duration (`24h`, `7d`, `1h`). Unparseable values are ignored. - [Enqueue a synthetic test delivery](https://docs.kordio.io/api-reference/webhooks/enqueue-a-synthetic-test-delivery.md): Creates a `webhook_delivery` row for `:id` carrying a synthetic event. The synthetic event is NOT persisted to `/v1/events`; test sends shouldn't pollute the durable event tail subscribers consume. The DeliveryWorker delivers it like any other. - [Fetch a webhook delivery](https://docs.kordio.io/api-reference/webhooks/fetch-a-webhook-delivery.md) - [Re-enqueue a delivery](https://docs.kordio.io/api-reference/webhooks/re-enqueue-a-delivery.md): Inserts a NEW `webhook_delivery` row referencing the same event + endpoint. The source row is not modified. The DeliveryWorker picks up the new row on its next tick. Replaying the same `Idempotency-Key` returns the original new row. - [List OAuth clients](https://docs.kordio.io/api-reference/auth/list-oauth-clients.md): Lists every client in the tenant. Secrets are **never** returned on this endpoint, only on create + rotate. Requires `ledger:clients:read`. - [Register an OAuth client](https://docs.kordio.io/api-reference/auth/register-an-oauth-client.md): Mints a new client. The response includes `client_secret`, the **only** time it is returned. Store it before discarding the response. Requires `ledger:clients:write`. - [Get an OAuth client](https://docs.kordio.io/api-reference/auth/get-an-oauth-client.md) - [Delete an OAuth client](https://docs.kordio.io/api-reference/auth/delete-an-oauth-client.md): Removes the client. In-flight access tokens minted by it remain valid until their natural expiry (JWTs are stateless); no new tokens can be issued. - [Rotate the client secret](https://docs.kordio.io/api-reference/auth/rotate-the-client-secret.md): Mints a new client secret and returns the plaintext **once**. The previous secret remains valid for `POST /oauth/token` for 24 hours after rotation, then is destroyed (sweeper job). - [Queue an async export of the tenant's data](https://docs.kordio.io/api-reference/tenant/queue-an-async-export-of-the-tenants-data.md): Queues a background job that streams the tenant's data (accounts, transactions, postings, events, period_closes, reconciliation_runs, webhook_endpoints, with secrets stripped) into NDJSON files and returns signed `download_urls` valid for 7 days. Poll `GET /v1/exports/{id}` to wait for `status: "rea… - [Fetch an export](https://docs.kordio.io/api-reference/tenant/fetch-an-export.md): Returns the export row. Poll until `status` is `ready`, then download from `download_urls` before `expires_at`. - [Redact tenant metadata and party references](https://docs.kordio.io/api-reference/tenant/redact-tenant-metadata-and-party-references.md): Right-of-erasure. Wipes `metadata` on every transaction, posting, account, event, and webhook delivery payload owned by the tenant, and replaces party-reference keys (`counterparty_ref`, `sender_party_id`, `recipient_party_id`) with the literal string `REDACTED`. - [List ledgers in the caller's organization](https://docs.kordio.io/api-reference/ledgers/list-ledgers-in-the-callers-organization.md) - [Create a ledger](https://docs.kordio.io/api-reference/ledgers/create-a-ledger.md) - [Get a ledger](https://docs.kordio.io/api-reference/ledgers/get-a-ledger.md) - [Update a ledger](https://docs.kordio.io/api-reference/ledgers/update-a-ledger.md) - [Return the caller's organization context](https://docs.kordio.io/api-reference/organizations/return-the-callers-organization-context.md): Resolves the calling client's organization and membership in one round trip. Useful as a session bootstrap. ## OpenAPI Specs - [openapi](/agents/api-reference/openapi.yaml) - [openapi](/api-reference/openapi.yaml) - [openapi](/ledger/api-reference/openapi.yaml) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.