Getting Started
REST API — Bearer API keys and OpenAPI reference for the platform.
Overview
The REST API is the primary programmatic surface: JSON under https://app.axiomatic.software/api/..., documented in openapi.json and in the sidebar categories below.
- Authentication:
Authorization: Bearer ak_...using an API key from API keys in Settings. Keys are scoped to one entity and to coarse module scopes (read:ledger,write:crm, …). Routes that usewithTenantenforce the scope implied by the first path segment after/api/(for example,/api/ledger/...needs ledger scopes). Write scope implies read for the same module. - Interactive use: Logged-in browser traffic hits the same routes; you do not send a Bearer header manually from the UI.
Base URL: https://app.axiomatic.software
Authentication
curl "https://app.axiomatic.software/api/ledger/accounts?entityId=<uuid>" \
-H "Authorization: Bearer ak_..."Create and revoke keys under Settings → API keys. Rate limits apply per key.
Multi-tenant routing
Each organization has an isolated database. For routes that use withTenant, entity scope is resolved from (in order):
entityIdorentity_idquery parameterx-entity-idheader — common for browser shells and GET requests that do not putentityIdin the query string- On POST/PUT/PATCH (non-GET),
entityIdin the JSON body if not already set above Authorization: Bearer ak_...— the API key pins the entity; includeentityIdin query/body/header only when it must match that key’s entityx-tenant-id— advanced control-plane resolution when applicable
CRM, Sales, Helpdesk, and most module APIs use this model so the same routes work for session cookies and Bearer API keys.
Endpoints
Browse the sidebar: each group (System, Core, Ledger, …) is a collapsible folder. Short links without the section segment (for example /docs/api/entities) redirect to the canonical URL (/docs/api/core/entities).
| Category | Description |
|---|---|
| Health | Liveness and engine version (no auth) |
| Entities | Create and manage legal entities |
| Books | Multi-book accounting (GAAP, IFRS, tax) |
| Accounts | Chart of accounts CRUD |
| Account Mappings | Map roles to accounts for automated posting |
| CRM | Companies, contacts, leads, activities — read:crm / write:crm, entityId |
| Sales | Quotes, orders, plans, subscriptions — read:sales / write:sales, entityId |
| Helpdesk | Tickets and messages (/api/helpdesk/...) — read:helpdesk / write:helpdesk, entityId |
| Events | Record financial events |
| Process | Trigger the posting engine |
| Journal | Query and manage journal entries |
| Trial Balance | Per-account debit/credit totals |
| Periods | Accounting period lifecycle |
| Reports | Balance sheet, income statement, cash flow |
| Fund Reports | Fund-specific reporting |
| AR | Invoices, customers, payments |
| AP | Bills, vendors, payments |
| Treasury | Cash positions and linked accounts |
| FX Rates | Exchange rate management |
| FX Revaluation | Period-end currency revaluation |
| Rule Packs | DSL posting rules |
| Reconciliation | Transaction matching and confirmation |
| Anomalies | AI-powered anomaly detection and review |
| Auth | User registration and email verification |
| Team | Team members and invitations |
| API Keys | Programmatic API key management |
| Compliance | GDPR data export, erasure, consent |
| Integrations | Plaid bank linking and sync |
| Billing | Stripe checkout and subscriptions |
| Notifications | In-app notification management |
| Payroll | Payroll runs, employees, calculator, tax forms |
| Inventory | Inventory items, lots, transactions, counts, valuation |
| Fixed Assets | Asset register, depreciation, disposal |
| Loans | Loan instruments and amortization |
| Leases | Lease accounting (ASC 842 / IFRS 16) |
| Contracts | Revenue contracts (ASC 606 / IFRS 15) |
| Exchange | Receivables exchange marketplace |
| Dimensions | Segment and dimension tagging |
| Subledgers | Subledger management and drill-down |
| Consolidation | Multi-entity consolidation |
| Intercompany | Intercompany transactions |
| Close Calendar | Period-end close templates and tasks |
| Approval Policies | Multi-level approval workflows |
| Accruals | Accrual schedule management |
| Waterfall | Fund waterfall distributions |
| Documents | Document upload and management |
| Comments | Threaded comments and reactions |
| Audit Log | Immutable audit trail queries |
| Cost Categories | Cost classification and reports |
| Tax Rates | Tax rate tables and tax reports |
| Payment Intents | Payment intents and file generation |
| Settlements | Settlement recording and batches |
| Webhook Subscriptions | Outbound webhook configuration |
| Address Book | Counterparties and contacts |
| Practice | Practice management dashboard |
| Partner | Partner program and client management |
| Privacy | Shielded transfers and ZK proofs |
| Import Batches | Bulk data import |
| Connections | Provider connections and sync |
| Categorization | Transaction matching patterns |
| Tax Lots | Crypto/investment tax lot tracking |
Rate limits
API requests are rate-limited per API key. Typical limits:
- 100 requests/minute for read endpoints (GET)
- 30 requests/minute for write endpoints (POST/PUT/PATCH/DELETE)
Rate limit headers may be included in responses:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 97
X-RateLimit-Reset: 1709164800Errors
All errors return a JSON body with an error field:
{ "error": "Entity not found" }| Status | Meaning |
|---|---|
400 | Bad request — missing or invalid parameters |
401 | Unauthorized — missing or invalid credentials |
403 | Forbidden — insufficient access or entity mismatch |
404 | Not found — resource doesn't exist |
402 | Payment required — credit balance exhausted (writes) |
429 | Rate limited — too many requests |
500 | Server error — unexpected failure |