# HTTP API reference


This reference is generated from the same code-owned registry as
[/openapi.json](/openapi.json). It covers every operation in that public document,
including response bodies and errors. Each operation has its own page and Markdown
mirror. The [command reference](/docs/command-reference/) and
[report reference](/docs/report-reference/) explain each operation variant in detail.
[Download the full Markdown export](/docs/api-reference/full/index.md).

For an end-to-end call, use the [direct API walkthrough](/docs/direct-api/).
For the model behind the fields, read [concepts](/docs/concepts/).
[Authentication and recovery](/docs/api/) explain the shared request rules.

This public contract grants no access. Obtain a bearer for the OAuth resource
`https://economi.co/mcp`, select a business with `X-Economico-Business`, and use
`GET /v1/openapi.json` to discover that connection's permitted operations.
Commands marked `browser` require a signed-in human. Never paste credentials
into documentation prompts. Practice writes only in a disposable sandbox.

Agents: use the [agent entry point](/docs/agents/) and [agent concepts](/docs/concepts/agent/index.md).
For `POST /v1/commands`, choose the request variant whose `name` constant is the
command you need. Describe it through `GET /v1/catalog/commands/{name}` first.
For `POST /v1/reports`, choose the variant whose `kind` constant matches the
report. Resolve local `$ref` values in the reusable schemas below. Keep exact
integer-string amounts and stable idempotency keys.


## Targeted reference pages for agents

Fetch only the operation or variant you need. These Markdown pages preserve
its exact OpenAPI schemas and link back to shared parameters and errors.
The full export is at https://economi.co/docs/api-reference/full/index.md.

- [POST /v1/platform/purchases](https://economi.co/docs/api-reference/operations/platform-purchase/index.md): POST /v1/platform/purchases: Discover and accept an exact Solo extra-events, Founders or Startup agreement, prepare its invoice, recover status and open invoices, or explicitly pay a saved card with action=pay and method=card. MPP and x402 payment use the separate paymentUrl. The authenticated business is the target. A full-access agent acting for its current owner can accept; wallet policy governs payment. Status may finish paid activation. On prepare, fundingAccountId may name a live USD account for Link/Stripe or company-owned token wallet for direct Tempo; without it wallet activation can finish while customer payment bookkeeping waits. Correct the choice on prepare until the buyer payment commits. Payment credentials are never purchase arguments. Responses include a paymentUrl and browserFallback when available.

- [POST /v1/platform/purchases/{offerId}/payment](https://economi.co/docs/api-reference/operations/platform-pay/index.md): POST /v1/platform/purchases/{offerId}/payment: Pay the prepared invoice with an offered MPP or x402 method. Keep OAuth Authorization: Bearer; send MPP's complete Payment credential in the separate Payment header, or an x402 credential in PAYMENT-SIGNATURE. Omit the request body. Retry pending outcomes through purchase status before trying another method. A 402 is a wallet challenge, not payment consent or proof of settlement.

- [GET /v1/plan-publications](https://economi.co/docs/api-reference/operations/plan-publications-list/index.md): GET /v1/plan-publications: List the versions this business has published to the vendor catalog, newest first, with their status (published or withdrawn). The business owner publishes, in person or through an agent connected interactively with public.manage.

- [POST /v1/plan-publications](https://economi.co/docs/api-reference/operations/plan-publications-publish/index.md): POST /v1/plan-publications: Publish a previewed bundle to the vendor catalog. Send the preview's publish object, optionally with domain and method to prove a domain. A version is never edited: publish a new version with supersedes and summary to change or reinstate a plan. A retry with the same input delivers the same version. The business owner publishes, in person or through an agent connected interactively with public.manage.

- [POST /v1/plan-publications/preview](https://economi.co/docs/api-reference/operations/plan-publications-preview/index.md): POST /v1/plan-publications/preview: Build the exact public bundle and CID an active on-sale template would publish, without publishing. The reply's publish object is the input for plan_publications.publish. The business owner publishes, in person or through an agent connected interactively with public.manage.

- [POST /v1/plan-publications/withdrawals](https://economi.co/docs/api-reference/operations/plan-publications-withdraw/index.md): POST /v1/plan-publications/withdrawals: Withdraw a version this business published from new adoptions. It stays readable by CID and its adopters keep it; a later version can supersede it. The business owner publishes, in person or through an agent connected interactively with public.manage.





















































































































- [POST /v1/commands](https://economi.co/docs/api-reference/operations/commands-execute/index.md): POST /v1/commands: Execute a public command. Retry with the same idempotency_key to retrieve the accepted receipt. Only active businesses may write.

- [GET /v1/commands/{id}](https://economi.co/docs/api-reference/operations/commands-get/index.md): GET /v1/commands/{id}: Retrieve an accepted receipt without executing a command.

- [GET /v1/documents](https://economi.co/docs/api-reference/operations/documents-list/index.md): GET /v1/documents: Read immutable document metadata and exact bytes. Every row carries label (the founder word: Invoice, Bill, Payment receipt, Charge, Plan, Contract, …) and title; a statement also carries counterpartyId and, when its first effect is money, its headline amount (integer minor units) and currency. An activity, template or contract version also carries record, the type and id of the record it is a version of. Relations rows carry fromLabel, fromTitle, toLabel and toTitle (null when that document is missing). Get requires id and returns contentBase64; a source_document or image also carries size, its exact registered byte count. List supports kind, external_id, label and ids filters with an exclusive document-ID after cursor; ids takes 1–500 document ids and returns those the book holds, in id order (a repeat counts once). Label takes a record type's founder word (Invoice, Payment receipt, Bill, Bill payment, Refund, Credit note, Cancellation or Activity statement) and refuses any other word, so filter catalog documents by kind. Relations requires id and pages by the exclusive numeric after_id relation cursor.

- [POST /v1/documents](https://economi.co/docs/api-reference/operations/documents-submit/index.md): POST /v1/documents: Register an immutable artifact via documents.receive. Same idempotency and receipts as commands.execute; omit name. Native upload uses multipart/form-data with metadata (the JSON envelope without input.contentBase64) and file (exact bytes).

- [GET /v1/events](https://economi.co/docs/api-reference/operations/events-list/index.md): GET /v1/events: Read event history and provenance. Every row carries commandName and the documents the event produced, each with its founder label (Invoice, Bill, Contract, …); a document.related row also carries relatedDocuments, the from and to documents its payload relates, each with id, kind, label and title (null when that document is missing). List is oldest first and pages by an exclusive numeric after cursor; with order desc it is newest first and pages by an exclusive numeric before cursor instead. Get requires id. List accepts footprint_contract_id to select only events with postings attributed to that contract by the ledger footprint, including independent payment allocations and reversals, under events.read authority. claim_contract_id instead selects only the events that posted to one of that contract's claims (its bills, invoices and refunds, and the payments, allocations, unallocations and reversals against them), found on the claim index, driven from the contract's claims to each event by id, so a page costs the contract's own postings, never the rest of the book's history; a contract that does not exist selects no events. payment_direction (in or out) selects only the payment.recorded events of payments in that direction that no reversal took back, on an index of payments by direction, so a page costs the page, never the book's history. A subject_id filter also needs its subject_type. kind_prefix narrows to event kinds in one or more namespaces, comma-separated (party.,party_contact.), which selects the business, document, party and financial-account events that carry no subject. Payload amounts are integer strings. An ingestion.* payload omits the delegation captured at intake (authority) and each upload's tokenHash, as the ingestions read does. No verification sweep is triggered.

- [GET /v1/events/head](https://economi.co/docs/api-reference/operations/events-head/index.md): GET /v1/events/head: Read event history and provenance. Every row carries commandName and the documents the event produced, each with its founder label (Invoice, Bill, Contract, …); a document.related row also carries relatedDocuments, the from and to documents its payload relates, each with id, kind, label and title (null when that document is missing). List is oldest first and pages by an exclusive numeric after cursor; with order desc it is newest first and pages by an exclusive numeric before cursor instead. Get requires id. List accepts footprint_contract_id to select only events with postings attributed to that contract by the ledger footprint, including independent payment allocations and reversals, under events.read authority. claim_contract_id instead selects only the events that posted to one of that contract's claims (its bills, invoices and refunds, and the payments, allocations, unallocations and reversals against them), found on the claim index, driven from the contract's claims to each event by id, so a page costs the contract's own postings, never the rest of the book's history; a contract that does not exist selects no events. payment_direction (in or out) selects only the payment.recorded events of payments in that direction that no reversal took back, on an index of payments by direction, so a page costs the page, never the book's history. A subject_id filter also needs its subject_type. kind_prefix narrows to event kinds in one or more namespaces, comma-separated (party.,party_contact.), which selects the business, document, party and financial-account events that carry no subject. Payload amounts are integer strings. An ingestion.* payload omits the delegation captured at intake (authority) and each upload's tokenHash, as the ingestions read does. No verification sweep is triggered.

- [GET /v1/subjects](https://economi.co/docs/api-reference/operations/subjects-types/index.md): GET /v1/subjects: Read derived lifecycle state. Call types first: it lists every subject type with its statuses and the filters its list accepts. List and get require type; get requires id. List supports status, the type's declared filters (email, code, contract_id, activity_key, document_id, record_type, plan, kind, party_id, activity_document_id, template_document_id), ids (1–500 subject ids of the type, those it holds in id order) and an exclusive subject-ID after cursor; a filter the type does not declare is refused. The contract kind filter accepts customer, vendor, investment or other, derived from its saved roles and rights; it returns busy while bounded historical index catch-up is pending, and requires schema 27. On contracts, party_id lists those naming a party in any role, activity_document_id those binding a right's document version and template_document_id those made from a template or plan document version; each of these two also takes a list of 1–500 versions and matches a contract on any of them, with no other filter; otherwise filters combine. Activity and template rows carry versions, every document the record has been, oldest first. An activity_occurrence's state carries recordType (invoice, payment_receipt, bill, bill_payment, refund, credit_note, cancellation or activity_statement), and record_type filters by it. Types carry a founder label and note; activity, template, contract and activity_occurrence rows carry label and title (an occurrence also counterpartyId and, when its headline effect is money, amount, currency and decimals). An invoice, bill or receipt is titled by its occurrence key; a recording that moved nothing (an acceptance, a delivery) by the name of the activity it ran; correlate on state.occurrenceKey, never on title.

- [GET /v1/ledgers](https://economi.co/docs/api-reference/operations/ledgers-list/index.md): GET /v1/ledgers: Read native-unit ledger metadata, balances and posting statements. Get, balances and statement require ledger_id. Balances returns one ledger's per-(account, sub-key) debits, credits and balance in its own unit — the balance read for usage meters, prepaid capacity and share classes as well as currency ledgers; account_code (and, with it, sub_key) narrows it to that account's rows, summed on the account index; an optional as_of limits it to postings up to that point (a YYYY-MM-DD date includes that whole UTC day; a UTC timestamp counts postings before it), sub-keys intact. Statement pages postings by the exclusive numeric after_id cursor and can be narrowed to one account_code and, with it, one sub_key (the statement's own subKey string). List pages by the exclusive string ledger-ID after cursor. Currencies names each currency the business's GAAP ledgers hold real postings in, once, and in ledgers the ledger that holds it now (the open one, else the most recently closed; a functional-currency change or an incorporation succeeds a currency's ledger). A business starts with its selected functional-currency ledger (USD when omitted); other canonical currency ledgers open when a contract first binds them. Amounts remain exact strings and are never summed across units. Transaction requires occurrence_id (an invoice, bill or payment record) and returns every posting of every event that touched its claims (the record itself, the payments, credits and corrections against it, with each correction's reversal), in effective order, each with the record it came from, plus otherClaims: other invoices or bills those events also settled. Footprint takes exactly one of party_id, contract_id or occurrence_id and returns every posting of every recording on that party's contracts, on that contract, or in that record's transaction, in effective order, each attributed to its record (occurrenceId, occurrenceKey), activity, pattern and party the way the activity_balances report attributes it, with its ledger's unit and decimals; plus contracts, the contracts it spans. Null when the party, contract or record does not exist.

- [GET /v1/people](https://economi.co/docs/api-reference/operations/people-list/index.md): GET /v1/people: Read dated team membership, work arrangements and named service identities. Uses party-read permission, returns no monetary data. as_of defaults to the adapter clock; periods are half-open.

- [GET /v1/people/memberships](https://economi.co/docs/api-reference/operations/people-memberships/index.md): GET /v1/people/memberships: Read dated team membership, work arrangements and named service identities. Uses party-read permission, returns no monetary data. as_of defaults to the adapter clock; periods are half-open.

- [GET /v1/people/arrangements](https://economi.co/docs/api-reference/operations/people-arrangements/index.md): GET /v1/people/arrangements: Read dated team membership, work arrangements and named service identities. Uses party-read permission, returns no monetary data. as_of defaults to the adapter clock; periods are half-open.

- [GET /v1/people/identities](https://economi.co/docs/api-reference/operations/people-identities/index.md): GET /v1/people/identities: Read dated team membership, work arrangements and named service identities. Uses party-read permission, returns no monetary data. as_of defaults to the adapter clock; periods are half-open.

- [GET /v1/parties](https://economi.co/docs/api-reference/operations/parties-list/index.md): GET /v1/parties: Read counterparties and contacts. Get requires id. List uses an exclusive party-ID after cursor and includes archived records; category narrows it to parties playing that role (customer, vendor, founder, investor, provider, employee), and vendor also matches providers; ids (1–500 party ids) narrows it to those, in id order. Categories returns the relationship categories in use.

- [GET /v1/parties/categories](https://economi.co/docs/api-reference/operations/parties-categories/index.md): GET /v1/parties/categories: Read counterparties and contacts. Get requires id. List uses an exclusive party-ID after cursor and includes archived records; category narrows it to parties playing that role (customer, vendor, founder, investor, provider, employee), and vendor also matches providers; ids (1–500 party ids) narrows it to those, in id order. Categories returns the relationship categories in use.

- [GET /v1/accounts](https://economi.co/docs/api-reference/operations/accounts-list/index.md): GET /v1/accounts: Read registered financial accounts, their currency, provider, brand color, logo and default status. Get, activity, overview and summary require id. Summary also requires month (YYYY-MM, UTC); summaries takes 1–100 ids and month and returns the same figures in an items array. Both return exact balance and spending integer strings without movements (spent is null for ambiguous manual journals); transfers, funding, card repayments, customer refunds and collected-tax remittances are excluded. Activity returns the account's recent recorded payment effects and provider fees with their exact total. Overview returns what the account's page shows: the GL account it is held on (2135 keyed to the owner for a person's own card, whose balance is what the company owes that person across all their own accounts) and its balance; the latest movements (limit caps them, newest first; count is the total), each signed by the account's normal balance with its counterparty, running balance, counter accounts and, through a settled bill, the expense accounts it landed on; totals by month, counter account, expense account and counterparty; and its payment endpoints with full payto/CAIP-10 URIs and rails. List uses an exclusive financial-account-ID after cursor and includes archived accounts; ids (1–100 account ids) narrows it to those, in id order.

- [GET /v1/accounts/summaries](https://economi.co/docs/api-reference/operations/accounts-summaries/index.md): GET /v1/accounts/summaries: Read registered financial accounts, their currency, provider, brand color, logo and default status. Get, activity, overview and summary require id. Summary also requires month (YYYY-MM, UTC); summaries takes 1–100 ids and month and returns the same figures in an items array. Both return exact balance and spending integer strings without movements (spent is null for ambiguous manual journals); transfers, funding, card repayments, customer refunds and collected-tax remittances are excluded. Activity returns the account's recent recorded payment effects and provider fees with their exact total. Overview returns what the account's page shows: the GL account it is held on (2135 keyed to the owner for a person's own card, whose balance is what the company owes that person across all their own accounts) and its balance; the latest movements (limit caps them, newest first; count is the total), each signed by the account's normal balance with its counterparty, running balance, counter accounts and, through a settled bill, the expense accounts it landed on; totals by month, counter account, expense account and counterparty; and its payment endpoints with full payto/CAIP-10 URIs and rails. List uses an exclusive financial-account-ID after cursor and includes archived accounts; ids (1–100 account ids) narrows it to those, in id order.

- [GET /v1/payment_routes/quote](https://economi.co/docs/api-reference/operations/payment-routes-quote/index.md): GET /v1/payment_routes/quote: Quote eligible outbound or inbound payment methods from active payment endpoints and provider-contract fee schedules. Pure read; does not move money. Amount and costs are exact minor-unit strings.

- [GET /v1/categories](https://economi.co/docs/api-reference/operations/categories-list/index.md): GET /v1/categories: Read revenue categories. Get requires id. List pages by exclusive category-ID cursor.

- [GET /v1/tax_codes](https://economi.co/docs/api-reference/operations/tax-codes-list/index.md): GET /v1/tax_codes: Read configured tax codes: role (output, input, reverse_charge, imported_services, non_recoverable), rate in parts per million, effective period, the liability it credits and the sales-tax regime that seeded it. Get requires id. List includes inactive codes and pages by exclusive tax-code-ID cursor.

- [GET /v1/shared_views](https://economi.co/docs/api-reference/operations/shared-views-list/index.md): GET /v1/shared_views: List this business's capability links (shared views): every share ever created, revoked ones included with their revoking event, oldest first, with the token each resolves at /e/{slug}/share/{token} on this server. Pages by the exclusive view-ID after cursor. Create and revoke through the shared_views.create and shared_views.revoke commands.

- [GET /v1/business](https://economi.co/docs/api-reference/operations/business-get/index.md): GET /v1/business: Read the authenticated business's profile (including its fiscal year end and fiscal-year settings, and its sales-tax registrations in force), preview a fiscal-year change (effective_at, year_end MM-DD): its transition period and the fiscal years that follow; list the sales-tax regimes the business can register for in its country, with each regime's registration-number format and the tax codes registering would seed (sales_tax_regimes); read the platform plan (plan): free (the Solo plan), team (the Startup plan) or system, and, on team, the active Startup contract's id (read its terms through subjects to find a trial end or billing date); or read its Economico plan's event meter (meter): the monthly billing period running now, the billable events recorded in it so far and the allowance, and, while a cancelled plan's usage is closed, allowed: the most events the period permits (its included events, or the end of a started block the cancel billed; the period's total, not what is left); or read the event ledger (event_totals): the business's billable events per UTC day, newest first, a page at a time (after: the cursor); or read its imports (imports): the one-time import allowance (null in Economico's own books), the events imported so far, what remains, and the cutoff: a change dated before it (when the business was created on Economico) is recorded as an import, free of monthly events, while the allowance lasts. Returns null for get if no profile has been recorded. Does not change the business.

- [GET /v1/business/fiscal-year-change-preview](https://economi.co/docs/api-reference/operations/business-fiscal-year-change-preview/index.md): GET /v1/business/fiscal-year-change-preview: Read the authenticated business's profile (including its fiscal year end and fiscal-year settings, and its sales-tax registrations in force), preview a fiscal-year change (effective_at, year_end MM-DD): its transition period and the fiscal years that follow; list the sales-tax regimes the business can register for in its country, with each regime's registration-number format and the tax codes registering would seed (sales_tax_regimes); read the platform plan (plan): free (the Solo plan), team (the Startup plan) or system, and, on team, the active Startup contract's id (read its terms through subjects to find a trial end or billing date); or read its Economico plan's event meter (meter): the monthly billing period running now, the billable events recorded in it so far and the allowance, and, while a cancelled plan's usage is closed, allowed: the most events the period permits (its included events, or the end of a started block the cancel billed; the period's total, not what is left); or read the event ledger (event_totals): the business's billable events per UTC day, newest first, a page at a time (after: the cursor); or read its imports (imports): the one-time import allowance (null in Economico's own books), the events imported so far, what remains, and the cutoff: a change dated before it (when the business was created on Economico) is recorded as an import, free of monthly events, while the allowance lasts. Returns null for get if no profile has been recorded. Does not change the business.

- [GET /v1/business/sales-tax-regimes](https://economi.co/docs/api-reference/operations/business-sales-tax-regimes/index.md): GET /v1/business/sales-tax-regimes: Read the authenticated business's profile (including its fiscal year end and fiscal-year settings, and its sales-tax registrations in force), preview a fiscal-year change (effective_at, year_end MM-DD): its transition period and the fiscal years that follow; list the sales-tax regimes the business can register for in its country, with each regime's registration-number format and the tax codes registering would seed (sales_tax_regimes); read the platform plan (plan): free (the Solo plan), team (the Startup plan) or system, and, on team, the active Startup contract's id (read its terms through subjects to find a trial end or billing date); or read its Economico plan's event meter (meter): the monthly billing period running now, the billable events recorded in it so far and the allowance, and, while a cancelled plan's usage is closed, allowed: the most events the period permits (its included events, or the end of a started block the cancel billed; the period's total, not what is left); or read the event ledger (event_totals): the business's billable events per UTC day, newest first, a page at a time (after: the cursor); or read its imports (imports): the one-time import allowance (null in Economico's own books), the events imported so far, what remains, and the cutoff: a change dated before it (when the business was created on Economico) is recorded as an import, free of monthly events, while the allowance lasts. Returns null for get if no profile has been recorded. Does not change the business.

- [GET /v1/business/plan](https://economi.co/docs/api-reference/operations/business-plan/index.md): GET /v1/business/plan: Read the authenticated business's profile (including its fiscal year end and fiscal-year settings, and its sales-tax registrations in force), preview a fiscal-year change (effective_at, year_end MM-DD): its transition period and the fiscal years that follow; list the sales-tax regimes the business can register for in its country, with each regime's registration-number format and the tax codes registering would seed (sales_tax_regimes); read the platform plan (plan): free (the Solo plan), team (the Startup plan) or system, and, on team, the active Startup contract's id (read its terms through subjects to find a trial end or billing date); or read its Economico plan's event meter (meter): the monthly billing period running now, the billable events recorded in it so far and the allowance, and, while a cancelled plan's usage is closed, allowed: the most events the period permits (its included events, or the end of a started block the cancel billed; the period's total, not what is left); or read the event ledger (event_totals): the business's billable events per UTC day, newest first, a page at a time (after: the cursor); or read its imports (imports): the one-time import allowance (null in Economico's own books), the events imported so far, what remains, and the cutoff: a change dated before it (when the business was created on Economico) is recorded as an import, free of monthly events, while the allowance lasts. Returns null for get if no profile has been recorded. Does not change the business.

- [GET /v1/business/meter](https://economi.co/docs/api-reference/operations/business-meter/index.md): GET /v1/business/meter: Read the authenticated business's profile (including its fiscal year end and fiscal-year settings, and its sales-tax registrations in force), preview a fiscal-year change (effective_at, year_end MM-DD): its transition period and the fiscal years that follow; list the sales-tax regimes the business can register for in its country, with each regime's registration-number format and the tax codes registering would seed (sales_tax_regimes); read the platform plan (plan): free (the Solo plan), team (the Startup plan) or system, and, on team, the active Startup contract's id (read its terms through subjects to find a trial end or billing date); or read its Economico plan's event meter (meter): the monthly billing period running now, the billable events recorded in it so far and the allowance, and, while a cancelled plan's usage is closed, allowed: the most events the period permits (its included events, or the end of a started block the cancel billed; the period's total, not what is left); or read the event ledger (event_totals): the business's billable events per UTC day, newest first, a page at a time (after: the cursor); or read its imports (imports): the one-time import allowance (null in Economico's own books), the events imported so far, what remains, and the cutoff: a change dated before it (when the business was created on Economico) is recorded as an import, free of monthly events, while the allowance lasts. Returns null for get if no profile has been recorded. Does not change the business.

- [GET /v1/business/event-totals](https://economi.co/docs/api-reference/operations/business-event-totals/index.md): GET /v1/business/event-totals: Read the authenticated business's profile (including its fiscal year end and fiscal-year settings, and its sales-tax registrations in force), preview a fiscal-year change (effective_at, year_end MM-DD): its transition period and the fiscal years that follow; list the sales-tax regimes the business can register for in its country, with each regime's registration-number format and the tax codes registering would seed (sales_tax_regimes); read the platform plan (plan): free (the Solo plan), team (the Startup plan) or system, and, on team, the active Startup contract's id (read its terms through subjects to find a trial end or billing date); or read its Economico plan's event meter (meter): the monthly billing period running now, the billable events recorded in it so far and the allowance, and, while a cancelled plan's usage is closed, allowed: the most events the period permits (its included events, or the end of a started block the cancel billed; the period's total, not what is left); or read the event ledger (event_totals): the business's billable events per UTC day, newest first, a page at a time (after: the cursor); or read its imports (imports): the one-time import allowance (null in Economico's own books), the events imported so far, what remains, and the cutoff: a change dated before it (when the business was created on Economico) is recorded as an import, free of monthly events, while the allowance lasts. Returns null for get if no profile has been recorded. Does not change the business.

- [GET /v1/business/imports](https://economi.co/docs/api-reference/operations/business-imports/index.md): GET /v1/business/imports: Read the authenticated business's profile (including its fiscal year end and fiscal-year settings, and its sales-tax registrations in force), preview a fiscal-year change (effective_at, year_end MM-DD): its transition period and the fiscal years that follow; list the sales-tax regimes the business can register for in its country, with each regime's registration-number format and the tax codes registering would seed (sales_tax_regimes); read the platform plan (plan): free (the Solo plan), team (the Startup plan) or system, and, on team, the active Startup contract's id (read its terms through subjects to find a trial end or billing date); or read its Economico plan's event meter (meter): the monthly billing period running now, the billable events recorded in it so far and the allowance, and, while a cancelled plan's usage is closed, allowed: the most events the period permits (its included events, or the end of a started block the cancel billed; the period's total, not what is left); or read the event ledger (event_totals): the business's billable events per UTC day, newest first, a page at a time (after: the cursor); or read its imports (imports): the one-time import allowance (null in Economico's own books), the events imported so far, what remains, and the cutoff: a change dated before it (when the business was created on Economico) is recorded as an import, free of monthly events, while the allowance lasts. Returns null for get if no profile has been recorded. Does not change the business.

- [GET /v1/ingestions/{id}](https://economi.co/docs/api-reference/operations/ingestions-get/index.md): GET /v1/ingestions/{id}: Get document intake status, immutable source references and provenance, attachment status, processing revisions and financial execution by id. delivery describes processing; recordingDelivery describes automatic financial delivery, including exhausted failures requiring an operator retry. Pending uploads are independent of the primary source. This read does not return upload URLs or captured permissions; an upload URL appears only in the live response of the command that issued it — call ingestions.reissue_upload for a fresh one. A revision's extraction carries its exact retained text only when include_text is true (default false), which reads it from storage on every call; otherwise the extraction carries textBytes and its derived CID only, so a status poll stays cheap. Requires business read access for frozen identity context and document read access to every registered source and pending attachment kind.

- [GET /v1/documents/{id}](https://economi.co/docs/api-reference/operations/documents-get/index.md): GET /v1/documents/{id}: Read immutable document metadata and exact bytes. Every row carries label (the founder word: Invoice, Bill, Payment receipt, Charge, Plan, Contract, …) and title; a statement also carries counterpartyId and, when its first effect is money, its headline amount (integer minor units) and currency. An activity, template or contract version also carries record, the type and id of the record it is a version of. Relations rows carry fromLabel, fromTitle, toLabel and toTitle (null when that document is missing). Get requires id and returns contentBase64; a source_document or image also carries size, its exact registered byte count. List supports kind, external_id, label and ids filters with an exclusive document-ID after cursor; ids takes 1–500 document ids and returns those the book holds, in id order (a repeat counts once). Label takes a record type's founder word (Invoice, Payment receipt, Bill, Bill payment, Refund, Credit note, Cancellation or Activity statement) and refuses any other word, so filter catalog documents by kind. Relations requires id and pages by the exclusive numeric after_id relation cursor.

- [GET /v1/documents/{id}/relations](https://economi.co/docs/api-reference/operations/documents-relations/index.md): GET /v1/documents/{id}/relations: Read immutable document metadata and exact bytes. Every row carries label (the founder word: Invoice, Bill, Payment receipt, Charge, Plan, Contract, …) and title; a statement also carries counterpartyId and, when its first effect is money, its headline amount (integer minor units) and currency. An activity, template or contract version also carries record, the type and id of the record it is a version of. Relations rows carry fromLabel, fromTitle, toLabel and toTitle (null when that document is missing). Get requires id and returns contentBase64; a source_document or image also carries size, its exact registered byte count. List supports kind, external_id, label and ids filters with an exclusive document-ID after cursor; ids takes 1–500 document ids and returns those the book holds, in id order (a repeat counts once). Label takes a record type's founder word (Invoice, Payment receipt, Bill, Bill payment, Refund, Credit note, Cancellation or Activity statement) and refuses any other word, so filter catalog documents by kind. Relations requires id and pages by the exclusive numeric after_id relation cursor.

- [GET /v1/events/{id}](https://economi.co/docs/api-reference/operations/events-get/index.md): GET /v1/events/{id}: Read event history and provenance. Every row carries commandName and the documents the event produced, each with its founder label (Invoice, Bill, Contract, …); a document.related row also carries relatedDocuments, the from and to documents its payload relates, each with id, kind, label and title (null when that document is missing). List is oldest first and pages by an exclusive numeric after cursor; with order desc it is newest first and pages by an exclusive numeric before cursor instead. Get requires id. List accepts footprint_contract_id to select only events with postings attributed to that contract by the ledger footprint, including independent payment allocations and reversals, under events.read authority. claim_contract_id instead selects only the events that posted to one of that contract's claims (its bills, invoices and refunds, and the payments, allocations, unallocations and reversals against them), found on the claim index, driven from the contract's claims to each event by id, so a page costs the contract's own postings, never the rest of the book's history; a contract that does not exist selects no events. payment_direction (in or out) selects only the payment.recorded events of payments in that direction that no reversal took back, on an index of payments by direction, so a page costs the page, never the book's history. A subject_id filter also needs its subject_type. kind_prefix narrows to event kinds in one or more namespaces, comma-separated (party.,party_contact.), which selects the business, document, party and financial-account events that carry no subject. Payload amounts are integer strings. An ingestion.* payload omits the delegation captured at intake (authority) and each upload's tokenHash, as the ingestions read does. No verification sweep is triggered.

- [GET /v1/subjects/{type}](https://economi.co/docs/api-reference/operations/subjects-list/index.md): GET /v1/subjects/{type}: Read derived lifecycle state. Call types first: it lists every subject type with its statuses and the filters its list accepts. List and get require type; get requires id. List supports status, the type's declared filters (email, code, contract_id, activity_key, document_id, record_type, plan, kind, party_id, activity_document_id, template_document_id), ids (1–500 subject ids of the type, those it holds in id order) and an exclusive subject-ID after cursor; a filter the type does not declare is refused. The contract kind filter accepts customer, vendor, investment or other, derived from its saved roles and rights; it returns busy while bounded historical index catch-up is pending, and requires schema 27. On contracts, party_id lists those naming a party in any role, activity_document_id those binding a right's document version and template_document_id those made from a template or plan document version; each of these two also takes a list of 1–500 versions and matches a contract on any of them, with no other filter; otherwise filters combine. Activity and template rows carry versions, every document the record has been, oldest first. An activity_occurrence's state carries recordType (invoice, payment_receipt, bill, bill_payment, refund, credit_note, cancellation or activity_statement), and record_type filters by it. Types carry a founder label and note; activity, template, contract and activity_occurrence rows carry label and title (an occurrence also counterpartyId and, when its headline effect is money, amount, currency and decimals). An invoice, bill or receipt is titled by its occurrence key; a recording that moved nothing (an acceptance, a delivery) by the name of the activity it ran; correlate on state.occurrenceKey, never on title.

- [GET /v1/ledgers/{ledger_id}](https://economi.co/docs/api-reference/operations/ledgers-get/index.md): GET /v1/ledgers/{ledger_id}: Read native-unit ledger metadata, balances and posting statements. Get, balances and statement require ledger_id. Balances returns one ledger's per-(account, sub-key) debits, credits and balance in its own unit — the balance read for usage meters, prepaid capacity and share classes as well as currency ledgers; account_code (and, with it, sub_key) narrows it to that account's rows, summed on the account index; an optional as_of limits it to postings up to that point (a YYYY-MM-DD date includes that whole UTC day; a UTC timestamp counts postings before it), sub-keys intact. Statement pages postings by the exclusive numeric after_id cursor and can be narrowed to one account_code and, with it, one sub_key (the statement's own subKey string). List pages by the exclusive string ledger-ID after cursor. Currencies names each currency the business's GAAP ledgers hold real postings in, once, and in ledgers the ledger that holds it now (the open one, else the most recently closed; a functional-currency change or an incorporation succeeds a currency's ledger). A business starts with its selected functional-currency ledger (USD when omitted); other canonical currency ledgers open when a contract first binds them. Amounts remain exact strings and are never summed across units. Transaction requires occurrence_id (an invoice, bill or payment record) and returns every posting of every event that touched its claims (the record itself, the payments, credits and corrections against it, with each correction's reversal), in effective order, each with the record it came from, plus otherClaims: other invoices or bills those events also settled. Footprint takes exactly one of party_id, contract_id or occurrence_id and returns every posting of every recording on that party's contracts, on that contract, or in that record's transaction, in effective order, each attributed to its record (occurrenceId, occurrenceKey), activity, pattern and party the way the activity_balances report attributes it, with its ledger's unit and decimals; plus contracts, the contracts it spans. Null when the party, contract or record does not exist.

- [GET /v1/ledgers/{ledger_id}/balances](https://economi.co/docs/api-reference/operations/ledgers-balances/index.md): GET /v1/ledgers/{ledger_id}/balances: Read native-unit ledger metadata, balances and posting statements. Get, balances and statement require ledger_id. Balances returns one ledger's per-(account, sub-key) debits, credits and balance in its own unit — the balance read for usage meters, prepaid capacity and share classes as well as currency ledgers; account_code (and, with it, sub_key) narrows it to that account's rows, summed on the account index; an optional as_of limits it to postings up to that point (a YYYY-MM-DD date includes that whole UTC day; a UTC timestamp counts postings before it), sub-keys intact. Statement pages postings by the exclusive numeric after_id cursor and can be narrowed to one account_code and, with it, one sub_key (the statement's own subKey string). List pages by the exclusive string ledger-ID after cursor. Currencies names each currency the business's GAAP ledgers hold real postings in, once, and in ledgers the ledger that holds it now (the open one, else the most recently closed; a functional-currency change or an incorporation succeeds a currency's ledger). A business starts with its selected functional-currency ledger (USD when omitted); other canonical currency ledgers open when a contract first binds them. Amounts remain exact strings and are never summed across units. Transaction requires occurrence_id (an invoice, bill or payment record) and returns every posting of every event that touched its claims (the record itself, the payments, credits and corrections against it, with each correction's reversal), in effective order, each with the record it came from, plus otherClaims: other invoices or bills those events also settled. Footprint takes exactly one of party_id, contract_id or occurrence_id and returns every posting of every recording on that party's contracts, on that contract, or in that record's transaction, in effective order, each attributed to its record (occurrenceId, occurrenceKey), activity, pattern and party the way the activity_balances report attributes it, with its ledger's unit and decimals; plus contracts, the contracts it spans. Null when the party, contract or record does not exist.

- [GET /v1/ledgers/{ledger_id}/statement](https://economi.co/docs/api-reference/operations/ledgers-statement/index.md): GET /v1/ledgers/{ledger_id}/statement: Read native-unit ledger metadata, balances and posting statements. Get, balances and statement require ledger_id. Balances returns one ledger's per-(account, sub-key) debits, credits and balance in its own unit — the balance read for usage meters, prepaid capacity and share classes as well as currency ledgers; account_code (and, with it, sub_key) narrows it to that account's rows, summed on the account index; an optional as_of limits it to postings up to that point (a YYYY-MM-DD date includes that whole UTC day; a UTC timestamp counts postings before it), sub-keys intact. Statement pages postings by the exclusive numeric after_id cursor and can be narrowed to one account_code and, with it, one sub_key (the statement's own subKey string). List pages by the exclusive string ledger-ID after cursor. Currencies names each currency the business's GAAP ledgers hold real postings in, once, and in ledgers the ledger that holds it now (the open one, else the most recently closed; a functional-currency change or an incorporation succeeds a currency's ledger). A business starts with its selected functional-currency ledger (USD when omitted); other canonical currency ledgers open when a contract first binds them. Amounts remain exact strings and are never summed across units. Transaction requires occurrence_id (an invoice, bill or payment record) and returns every posting of every event that touched its claims (the record itself, the payments, credits and corrections against it, with each correction's reversal), in effective order, each with the record it came from, plus otherClaims: other invoices or bills those events also settled. Footprint takes exactly one of party_id, contract_id or occurrence_id and returns every posting of every recording on that party's contracts, on that contract, or in that record's transaction, in effective order, each attributed to its record (occurrenceId, occurrenceKey), activity, pattern and party the way the activity_balances report attributes it, with its ledger's unit and decimals; plus contracts, the contracts it spans. Null when the party, contract or record does not exist.

- [GET /v1/ledgers/{ledger_id}/currencies](https://economi.co/docs/api-reference/operations/ledgers-currencies/index.md): GET /v1/ledgers/{ledger_id}/currencies: Read native-unit ledger metadata, balances and posting statements. Get, balances and statement require ledger_id. Balances returns one ledger's per-(account, sub-key) debits, credits and balance in its own unit — the balance read for usage meters, prepaid capacity and share classes as well as currency ledgers; account_code (and, with it, sub_key) narrows it to that account's rows, summed on the account index; an optional as_of limits it to postings up to that point (a YYYY-MM-DD date includes that whole UTC day; a UTC timestamp counts postings before it), sub-keys intact. Statement pages postings by the exclusive numeric after_id cursor and can be narrowed to one account_code and, with it, one sub_key (the statement's own subKey string). List pages by the exclusive string ledger-ID after cursor. Currencies names each currency the business's GAAP ledgers hold real postings in, once, and in ledgers the ledger that holds it now (the open one, else the most recently closed; a functional-currency change or an incorporation succeeds a currency's ledger). A business starts with its selected functional-currency ledger (USD when omitted); other canonical currency ledgers open when a contract first binds them. Amounts remain exact strings and are never summed across units. Transaction requires occurrence_id (an invoice, bill or payment record) and returns every posting of every event that touched its claims (the record itself, the payments, credits and corrections against it, with each correction's reversal), in effective order, each with the record it came from, plus otherClaims: other invoices or bills those events also settled. Footprint takes exactly one of party_id, contract_id or occurrence_id and returns every posting of every recording on that party's contracts, on that contract, or in that record's transaction, in effective order, each attributed to its record (occurrenceId, occurrenceKey), activity, pattern and party the way the activity_balances report attributes it, with its ledger's unit and decimals; plus contracts, the contracts it spans. Null when the party, contract or record does not exist.

- [GET /v1/ledgers/{ledger_id}/transaction](https://economi.co/docs/api-reference/operations/ledgers-transaction/index.md): GET /v1/ledgers/{ledger_id}/transaction: Read native-unit ledger metadata, balances and posting statements. Get, balances and statement require ledger_id. Balances returns one ledger's per-(account, sub-key) debits, credits and balance in its own unit — the balance read for usage meters, prepaid capacity and share classes as well as currency ledgers; account_code (and, with it, sub_key) narrows it to that account's rows, summed on the account index; an optional as_of limits it to postings up to that point (a YYYY-MM-DD date includes that whole UTC day; a UTC timestamp counts postings before it), sub-keys intact. Statement pages postings by the exclusive numeric after_id cursor and can be narrowed to one account_code and, with it, one sub_key (the statement's own subKey string). List pages by the exclusive string ledger-ID after cursor. Currencies names each currency the business's GAAP ledgers hold real postings in, once, and in ledgers the ledger that holds it now (the open one, else the most recently closed; a functional-currency change or an incorporation succeeds a currency's ledger). A business starts with its selected functional-currency ledger (USD when omitted); other canonical currency ledgers open when a contract first binds them. Amounts remain exact strings and are never summed across units. Transaction requires occurrence_id (an invoice, bill or payment record) and returns every posting of every event that touched its claims (the record itself, the payments, credits and corrections against it, with each correction's reversal), in effective order, each with the record it came from, plus otherClaims: other invoices or bills those events also settled. Footprint takes exactly one of party_id, contract_id or occurrence_id and returns every posting of every recording on that party's contracts, on that contract, or in that record's transaction, in effective order, each attributed to its record (occurrenceId, occurrenceKey), activity, pattern and party the way the activity_balances report attributes it, with its ledger's unit and decimals; plus contracts, the contracts it spans. Null when the party, contract or record does not exist.

- [GET /v1/ledgers/{ledger_id}/footprint](https://economi.co/docs/api-reference/operations/ledgers-footprint/index.md): GET /v1/ledgers/{ledger_id}/footprint: Read native-unit ledger metadata, balances and posting statements. Get, balances and statement require ledger_id. Balances returns one ledger's per-(account, sub-key) debits, credits and balance in its own unit — the balance read for usage meters, prepaid capacity and share classes as well as currency ledgers; account_code (and, with it, sub_key) narrows it to that account's rows, summed on the account index; an optional as_of limits it to postings up to that point (a YYYY-MM-DD date includes that whole UTC day; a UTC timestamp counts postings before it), sub-keys intact. Statement pages postings by the exclusive numeric after_id cursor and can be narrowed to one account_code and, with it, one sub_key (the statement's own subKey string). List pages by the exclusive string ledger-ID after cursor. Currencies names each currency the business's GAAP ledgers hold real postings in, once, and in ledgers the ledger that holds it now (the open one, else the most recently closed; a functional-currency change or an incorporation succeeds a currency's ledger). A business starts with its selected functional-currency ledger (USD when omitted); other canonical currency ledgers open when a contract first binds them. Amounts remain exact strings and are never summed across units. Transaction requires occurrence_id (an invoice, bill or payment record) and returns every posting of every event that touched its claims (the record itself, the payments, credits and corrections against it, with each correction's reversal), in effective order, each with the record it came from, plus otherClaims: other invoices or bills those events also settled. Footprint takes exactly one of party_id, contract_id or occurrence_id and returns every posting of every recording on that party's contracts, on that contract, or in that record's transaction, in effective order, each attributed to its record (occurrenceId, occurrenceKey), activity, pattern and party the way the activity_balances report attributes it, with its ledger's unit and decimals; plus contracts, the contracts it spans. Null when the party, contract or record does not exist.

- [GET /v1/parties/{id}](https://economi.co/docs/api-reference/operations/parties-get/index.md): GET /v1/parties/{id}: Read counterparties and contacts. Get requires id. List uses an exclusive party-ID after cursor and includes archived records; category narrows it to parties playing that role (customer, vendor, founder, investor, provider, employee), and vendor also matches providers; ids (1–500 party ids) narrows it to those, in id order. Categories returns the relationship categories in use.

- [GET /v1/accounts/{id}](https://economi.co/docs/api-reference/operations/accounts-get/index.md): GET /v1/accounts/{id}: Read registered financial accounts, their currency, provider, brand color, logo and default status. Get, activity, overview and summary require id. Summary also requires month (YYYY-MM, UTC); summaries takes 1–100 ids and month and returns the same figures in an items array. Both return exact balance and spending integer strings without movements (spent is null for ambiguous manual journals); transfers, funding, card repayments, customer refunds and collected-tax remittances are excluded. Activity returns the account's recent recorded payment effects and provider fees with their exact total. Overview returns what the account's page shows: the GL account it is held on (2135 keyed to the owner for a person's own card, whose balance is what the company owes that person across all their own accounts) and its balance; the latest movements (limit caps them, newest first; count is the total), each signed by the account's normal balance with its counterparty, running balance, counter accounts and, through a settled bill, the expense accounts it landed on; totals by month, counter account, expense account and counterparty; and its payment endpoints with full payto/CAIP-10 URIs and rails. List uses an exclusive financial-account-ID after cursor and includes archived accounts; ids (1–100 account ids) narrows it to those, in id order.

- [GET /v1/accounts/{id}/activity](https://economi.co/docs/api-reference/operations/accounts-activity/index.md): GET /v1/accounts/{id}/activity: Read registered financial accounts, their currency, provider, brand color, logo and default status. Get, activity, overview and summary require id. Summary also requires month (YYYY-MM, UTC); summaries takes 1–100 ids and month and returns the same figures in an items array. Both return exact balance and spending integer strings without movements (spent is null for ambiguous manual journals); transfers, funding, card repayments, customer refunds and collected-tax remittances are excluded. Activity returns the account's recent recorded payment effects and provider fees with their exact total. Overview returns what the account's page shows: the GL account it is held on (2135 keyed to the owner for a person's own card, whose balance is what the company owes that person across all their own accounts) and its balance; the latest movements (limit caps them, newest first; count is the total), each signed by the account's normal balance with its counterparty, running balance, counter accounts and, through a settled bill, the expense accounts it landed on; totals by month, counter account, expense account and counterparty; and its payment endpoints with full payto/CAIP-10 URIs and rails. List uses an exclusive financial-account-ID after cursor and includes archived accounts; ids (1–100 account ids) narrows it to those, in id order.

- [GET /v1/accounts/{id}/overview](https://economi.co/docs/api-reference/operations/accounts-overview/index.md): GET /v1/accounts/{id}/overview: Read registered financial accounts, their currency, provider, brand color, logo and default status. Get, activity, overview and summary require id. Summary also requires month (YYYY-MM, UTC); summaries takes 1–100 ids and month and returns the same figures in an items array. Both return exact balance and spending integer strings without movements (spent is null for ambiguous manual journals); transfers, funding, card repayments, customer refunds and collected-tax remittances are excluded. Activity returns the account's recent recorded payment effects and provider fees with their exact total. Overview returns what the account's page shows: the GL account it is held on (2135 keyed to the owner for a person's own card, whose balance is what the company owes that person across all their own accounts) and its balance; the latest movements (limit caps them, newest first; count is the total), each signed by the account's normal balance with its counterparty, running balance, counter accounts and, through a settled bill, the expense accounts it landed on; totals by month, counter account, expense account and counterparty; and its payment endpoints with full payto/CAIP-10 URIs and rails. List uses an exclusive financial-account-ID after cursor and includes archived accounts; ids (1–100 account ids) narrows it to those, in id order.

- [GET /v1/accounts/{id}/summary](https://economi.co/docs/api-reference/operations/accounts-summary/index.md): GET /v1/accounts/{id}/summary: Read registered financial accounts, their currency, provider, brand color, logo and default status. Get, activity, overview and summary require id. Summary also requires month (YYYY-MM, UTC); summaries takes 1–100 ids and month and returns the same figures in an items array. Both return exact balance and spending integer strings without movements (spent is null for ambiguous manual journals); transfers, funding, card repayments, customer refunds and collected-tax remittances are excluded. Activity returns the account's recent recorded payment effects and provider fees with their exact total. Overview returns what the account's page shows: the GL account it is held on (2135 keyed to the owner for a person's own card, whose balance is what the company owes that person across all their own accounts) and its balance; the latest movements (limit caps them, newest first; count is the total), each signed by the account's normal balance with its counterparty, running balance, counter accounts and, through a settled bill, the expense accounts it landed on; totals by month, counter account, expense account and counterparty; and its payment endpoints with full payto/CAIP-10 URIs and rails. List uses an exclusive financial-account-ID after cursor and includes archived accounts; ids (1–100 account ids) narrows it to those, in id order.

- [GET /v1/categories/{id}](https://economi.co/docs/api-reference/operations/categories-get/index.md): GET /v1/categories/{id}: Read revenue categories. Get requires id. List pages by exclusive category-ID cursor.

- [GET /v1/tax_codes/{id}](https://economi.co/docs/api-reference/operations/tax-codes-get/index.md): GET /v1/tax_codes/{id}: Read configured tax codes: role (output, input, reverse_charge, imported_services, non_recoverable), rate in parts per million, effective period, the liability it credits and the sales-tax regime that seeded it. Get requires id. List includes inactive codes and pages by exclusive tax-code-ID cursor.

- [GET /v1/shared_views/{id}](https://economi.co/docs/api-reference/operations/shared-views-get/index.md): GET /v1/shared_views/{id}: List this business's capability links (shared views): every share ever created, revoked ones included with their revoking event, oldest first, with the token each resolves at /e/{slug}/share/{token} on this server. Pages by the exclusive view-ID after cursor. Create and revoke through the shared_views.create and shared_views.revoke commands.

- [GET /v1/subjects/{type}/{id}](https://economi.co/docs/api-reference/operations/subjects-get/index.md): GET /v1/subjects/{type}/{id}: Read derived lifecycle state. Call types first: it lists every subject type with its statuses and the filters its list accepts. List and get require type; get requires id. List supports status, the type's declared filters (email, code, contract_id, activity_key, document_id, record_type, plan, kind, party_id, activity_document_id, template_document_id), ids (1–500 subject ids of the type, those it holds in id order) and an exclusive subject-ID after cursor; a filter the type does not declare is refused. The contract kind filter accepts customer, vendor, investment or other, derived from its saved roles and rights; it returns busy while bounded historical index catch-up is pending, and requires schema 27. On contracts, party_id lists those naming a party in any role, activity_document_id those binding a right's document version and template_document_id those made from a template or plan document version; each of these two also takes a list of 1–500 versions and matches a contract on any of them, with no other filter; otherwise filters combine. Activity and template rows carry versions, every document the record has been, oldest first. An activity_occurrence's state carries recordType (invoice, payment_receipt, bill, bill_payment, refund, credit_note, cancellation or activity_statement), and record_type filters by it. Types carry a founder label and note; activity, template, contract and activity_occurrence rows carry label and title (an occurrence also counterpartyId and, when its headline effect is money, amount, currency and decimals). An invoice, bill or receipt is titled by its occurrence key; a recording that moved nothing (an acceptance, a delivery) by the name of the activity it ran; correlate on state.occurrenceKey, never on title.

- [GET /v1/logos](https://economi.co/docs/api-reference/operations/logos-uploadinfo/index.md): GET /v1/logos: Shared public raster logo upload requirements and this business's own images, published and pending, at most 21 per page in CID order; `next` is the `after` for the next page, or null. Uploading this image makes it public until the business deletes it. Anyone with its link can view it. Exact bytes, including EXIF metadata such as GPS location, are retained; downloaded copies may remain after deletion, and cached copies can be served for about five minutes after it. Requires party-management authority.

- [POST /v1/logos](https://economi.co/docs/api-reference/operations/logos-upload/index.md): POST /v1/logos: Uploading this image makes it public until the business deletes it. Anyone with its link can view it. Exact bytes, including EXIF metadata such as GPS location, are retained; downloaded copies may remain after deletion, and cached copies can be served for about five minutes after it. Publishes exact PNG, JPEG or WebP bytes (up to 256 KiB and 1024 pixels per dimension) until the business deletes them. Returns a CID and opaque owner URL. Requires party-management authority. Identical bytes within one business reuse the URL; another business receives a different URL. With X-Economico-Replace-Logo, which requires `parties.update`, the business must hold the replaced image (or already hold the new one from an earlier attempt): the new image is published first and may use the replaced image's storage, then the replaced image is deleted; the response adds `replaced`.

- [DELETE /v1/logos/{cid}](https://economi.co/docs/api-reference/operations/logos-delete/index.md): DELETE /v1/logos/{cid}: Deletes this business's copy of a public image, published or still pending, and frees its storage budget. Its link stops resolving everywhere it was copied, including issued documents, within about five minutes as cached copies expire (max-age=300); downloaded copies cannot be recalled. Another business's identical image is unaffected. Deleting a CID the business holds no image for returns `deleted: false`, unless a late write left bytes under its namespace: those are removed, answering `deleted: true`. A business may start at most 50 deletions and replacements of published images per UTC day (`logo_churn_exceeded`, HTTP 429, refused before anything changes). Requires `parties.update`.


































- [POST /v1/reports](https://economi.co/docs/api-reference/operations/reports-run/index.md): POST /v1/reports: Run one public report. Monetary values are integer strings; ratios and assumptions may be fractional numbers.

- [GET /v1/reports](https://economi.co/docs/api-reference/operations/reports-list/index.md): GET /v1/reports: List all public report kinds, parameters and examples.

- [GET /v1/reports/definitions](https://economi.co/docs/api-reference/operations/reports-definitions/index.md): GET /v1/reports/definitions: List the latest published custom report definitions, at most 100 per page.

- [POST /v1/reports/definitions/run](https://economi.co/docs/api-reference/operations/reports-run-definition/index.md): POST /v1/reports/definitions/run: Run a saved report with caller authority. Version pins immutable definition bytes; params sets the parameters the report declares, within their bounds. An answer may be reused for up to an hour while the books are unchanged: computed_at says when it was computed, and fresh runs it again.

- [GET /v1/reports/definitions/guide](https://economi.co/docs/api-reference/operations/reports-format-guide/index.md): GET /v1/reports/definitions/guide: Read how a custom report is written before writing one: the block types and their fields, the parameter kinds, the money, chart, caption and layout rules, the limits, the monthly_metrics view for headline figures, and two worked definitions (a small report and an investor update) that pass the checks publishing applies. Then read the report schema, check, preview and publish.

- [POST /v1/reports/definitions/check](https://economi.co/docs/api-reference/operations/reports-check-definition/index.md): POST /v1/reports/definitions/check: Check a custom report definition with the checks publishing applies to it, without publishing: no version is made and nothing is recorded. A refusal names the block at fault. Publishing also refuses an archived id.

- [POST /v1/reports/definitions/preview](https://economi.co/docs/api-reference/operations/reports-preview-definition/index.md): POST /v1/reports/definitions/preview: Run a custom report definition once without publishing it, with caller authority. It is held to what publishing accepts; nothing is recorded.

- [POST /v1/reports/definitions/source](https://economi.co/docs/api-reference/operations/reports-definition-source/index.md): POST /v1/reports/definitions/source: Read a published custom report's definition as it was stored: the latest version, or the one named. Publish it again with changes to make a new version.

- [POST /v1/reports/definitions/versions](https://economi.co/docs/api-reference/operations/reports-definition-versions/index.md): POST /v1/reports/definitions/versions: List a custom report's versions, newest first, at most 100.

- [POST /v1/reports/query](https://economi.co/docs/api-reference/operations/reports-query/index.md): POST /v1/reports/query: Answer a question no built-in report covers with one read-only SQL query over the report schema. Returns typed columns and rows, with money (columns named *_minor) as integer strings and the head event the answer was read at. A result over the published row or size limit is refused, not cut short.

- [GET /v1/reports/schema](https://economi.co/docs/api-reference/operations/reports-schema/index.md): GET /v1/reports/schema: Describe the report schema: the views a query can read, their columns, the conventions and the limits on an answer.

- [GET /v1/catalog](https://economi.co/docs/api-reference/operations/catalog-list/index.md): GET /v1/catalog: List permitted command names and descriptions.

- [GET /v1/catalog/permissions](https://economi.co/docs/api-reference/operations/catalog-permissions/index.md): GET /v1/catalog/permissions: Read effective permission statements and resource constraints.

- [GET /v1/export](https://economi.co/docs/api-reference/operations/export-get/index.md): GET /v1/export: Export the event history and document manifest with authenticated download URLs. Event paging remains deferred maintenance. The export is the raw content-addressed DAG-CBOR blocks and is not redacted: unlike the events read, ingestion.* payloads keep the captured delegation (authority) and each upload's tokenHash, so treat an export as sensitive.

- [GET /v1/openapi.json](https://economi.co/docs/api-reference/operations/openapi-get/index.md): GET /v1/openapi.json: Generated OpenAPI for the current public catalog.

- [GET /v1/documents/{id}/download](https://economi.co/docs/api-reference/operations/export-document/index.md): GET /v1/documents/{id}/download: Download one original R2-backed document from a portable export. Requires export and history permission for this business.

- [GET /v1/catalog/commands/{name}](https://economi.co/docs/api-reference/operations/catalog-describe/index.md): GET /v1/catalog/commands/{name}: Describe a public command: input/result schemas, examples, the source-document kinds it accepts, the credential it needs and the input fields that must name a known principal.

- [POST /v1/events/verify](https://economi.co/docs/api-reference/operations/events-verify/index.md): POST /v1/events/verify: Verify the ledger without appending commands. Takes no body. A result with ok false, empty diffs and a pending list means the core state matched and only derived contract-value coverage is still being filled in.

- [GET /v1/vendor-catalog](https://economi.co/docs/api-reference/operations/vendor-catalog-find/index.md): GET /v1/vendor-catalog: Read the shared vendor catalog (find). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/vendor-catalog/vendors/{slug}](https://economi.co/docs/api-reference/operations/vendor-catalog-vendor/index.md): GET /v1/vendor-catalog/vendors/{slug}: Read the shared vendor catalog (vendor). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/vendor-catalog/plans](https://economi.co/docs/api-reference/operations/vendor-catalog-galleryplans/index.md): GET /v1/vendor-catalog/plans: Read the shared vendor catalog (galleryPlans). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/vendor-catalog/vendors/{slug}/plans](https://economi.co/docs/api-reference/operations/vendor-catalog-plans/index.md): GET /v1/vendor-catalog/vendors/{slug}/plans: Read the shared vendor catalog (plans). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/vendor-catalog/vendors/{slug}/plans/{plan}/history](https://economi.co/docs/api-reference/operations/vendor-catalog-history/index.md): GET /v1/vendor-catalog/vendors/{slug}/plans/{plan}/history: Read the shared vendor catalog (history). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/vendor-catalog/vendors/{slug}/agreements](https://economi.co/docs/api-reference/operations/vendor-catalog-agreements/index.md): GET /v1/vendor-catalog/vendors/{slug}/agreements: Read the shared vendor catalog (agreements). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/vendor-catalog/{cid}](https://economi.co/docs/api-reference/operations/vendor-catalog-get/index.md): GET /v1/vendor-catalog/{cid}: Read the shared vendor catalog (get). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/vendor-catalog/{cid}/raw](https://economi.co/docs/api-reference/operations/vendor-catalog-raw/index.md): GET /v1/vendor-catalog/{cid}/raw: Read the shared vendor catalog (raw). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/vendor-catalog/{cid}/history](https://economi.co/docs/api-reference/operations/vendor-catalog-historybycid/index.md): GET /v1/vendor-catalog/{cid}/history: Read the shared vendor catalog (historyByCid). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/vendor-catalog/supersession](https://economi.co/docs/api-reference/operations/vendor-catalog-supersession/index.md): GET /v1/vendor-catalog/supersession: Read the shared vendor catalog (supersession). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/vendor-catalog/publications](https://economi.co/docs/api-reference/operations/vendor-catalog-publications/index.md): GET /v1/vendor-catalog/publications: Read the shared vendor catalog (publications). Requires a signed-in connection. Pages contain at most 100 rows and 1 MiB. Oversized expanded reads can be read as individual documents through /raw. Shares a per-principal budget of 120 reads per minute with MCP.

- [GET /v1/businesses](https://economi.co/docs/api-reference/operations/businesses-list/index.md): GET /v1/businesses: List approved businesses and, with separate consent, current memberships. Set audience=public for the separate public directory. Select a business with --business for its operations.

- [Reusable schemas and security schemes](https://economi.co/docs/api-reference/components/index.md): Resolve local OpenAPI references and bearer security definitions.



