Skip to content

Endpoints

The live OpenAPI schema is at https://app.saebooks.com.au/api/v1/openapi.json and the Swagger UI at /api/v1/docs.

All paths below are relative to https://app.saebooks.com.au/api/v1. Roles: viewer ⊂ bookkeeper ⊂ accountant ⊂ admin ⊂ owner. Hard-delete (?hard=true) is admin-only everywhere.

Authentication

Method Path Auth Notes
POST /auth/login none Email + password → {access_token, token_type, expires_in}
POST /auth/refresh bearer Unexpired token → fresh access token
GET /auth/me bearer Current user profile + role + tenant
POST /auth/change-password bearer Old + new password
POST /auth/signup none Create account + tenant (first-run)
POST /auth/verify-email none Email verification token → JWT
POST /auth/resend-verification none Re-send verification email
POST /auth/password-reset/request none Request password-reset email
POST /auth/password-reset/confirm none Reset token + new password → JWT
POST /auth/magic-link/request none Request magic-link email
POST /auth/magic-link/consume none Magic-link token → JWT

Users

Method Path Role Notes
GET /users admin List users in current tenant
POST /users admin Invite / create user
GET /users/{id} admin, self User detail
PATCH /users/{id} admin, self Partial update (role: admin only)
DELETE /users/{id} admin Soft-delete
DELETE /users/{id}?hard=true admin Hard-delete
GET /users/{id}/permissions admin Per-user overrides
PUT /users/{id}/permissions admin Replace permission set

Contacts (customers / vendors)

Method Path Role Notes
GET /contacts bookkeeper+ ?type=customer / ?type=vendor
POST /contacts bookkeeper+
GET /contacts/{id} bookkeeper+
PATCH /contacts/{id} bookkeeper+
DELETE /contacts/{id} bookkeeper+ Soft
DELETE /contacts/{id}?hard=true admin

Invoices

Method Path Role Notes
GET /invoices bookkeeper+
POST /invoices bookkeeper+
GET /invoices/{id} bookkeeper+
PATCH /invoices/{id} bookkeeper+
DELETE /invoices/{id} bookkeeper+ Soft; reverses postings
DELETE /invoices/{id}?hard=true admin

Bills

Same shape as invoices — replace /invoices with /bills.

Payments

Method Path Role Notes
GET /payments bookkeeper+
POST /payments bookkeeper+
GET /payments/{id} bookkeeper+
PATCH /payments/{id} bookkeeper+
DELETE /payments/{id} bookkeeper+ Soft
DELETE /payments/{id}?hard=true admin

Credit notes

Same shape — /credit_notes.

Journal entries

Method Path Role Notes
GET /journal_entries bookkeeper+
POST /journal_entries bookkeeper+ Creates + auto-posts
GET /journal_entries/{id} bookkeeper+
PATCH /journal_entries/{id} bookkeeper+ Draft only
DELETE /journal_entries/{id} bookkeeper+ Soft (posts reversal)
DELETE /journal_entries/{id}?hard=true admin
POST /journal_entries/{id}/post bookkeeper+ Post a draft
POST /journal_entries/{id}/reverse bookkeeper+ Post a reversal

Accounts (chart of accounts)

Method Path Role
GET /accounts bookkeeper+
POST /accounts admin
GET /accounts/{id} bookkeeper+
PATCH /accounts/{id} admin
DELETE /accounts/{id} admin

Bank accounts

Method Path Role
GET /bank_accounts bookkeeper+
POST /bank_accounts admin
GET /bank_accounts/{id} bookkeeper+
PATCH /bank_accounts/{id} admin
DELETE /bank_accounts/{id} admin

Bank statement lines

Method Path Role Notes
GET /bank_statement_lines bookkeeper+
POST /bank_statement_lines bookkeeper+ Manual import
GET /bank_statement_lines/{id} bookkeeper+
PATCH /bank_statement_lines/{id} bookkeeper+
DELETE /bank_statement_lines/{id} bookkeeper+
POST /bank_statement_lines/{id}/match bookkeeper+ Link to journal/invoice
POST /bank_statement_lines/{id}/unmatch bookkeeper+
POST /bank_statement_lines/{id}/split_match bookkeeper+ Multi-allocation

Reconciliation

Method Path Role Notes
GET /reconciliation/accounts bookkeeper+ Accounts available to reconcile
GET /reconciliation/unmatched bookkeeper+ Unmatched statement lines
GET /reconciliation/suggest/{bsl_id} bookkeeper+ AI-suggested match for a line
POST /reconciliation/match bookkeeper+ Confirm a match
POST /reconciliation/unmatch/{id} bookkeeper+
POST /reconciliation/auto_match bookkeeper+ Run auto-match across unmatched

Reports

All report endpoints are GET /reports/<name> and accept ?date_from / ?date_to (ISO-8601) unless otherwise noted.

Path Notes
/reports/profit_loss P&L statement
/reports/balance_sheet Balance sheet at a point in time
/reports/trial_balance Debit/credit totals by account
/reports/cashflow Cash flow statement (indirect method)
/reports/aged_receivables AR ageing by contact
/reports/aged_payables AP ageing by contact
/reports/bas_summary BAS labels (G1, 1A, 1B, …)
/reports/budget_vs_actual Variance against budget for period
/reports/pl_by_segment P&L broken down by project/segment
/reports/revenue_by_customer Revenue ranked by contact
/reports/ytd_turnover Rolling 12-month revenue
/reports/depreciation_schedule Asset register with period charges
/reports/fx_revaluation FX gain/loss on foreign-currency balances

API tokens

Method Path Auth Notes
POST /api-tokens JWT Issue a new token; cleartext returned once
GET /api-tokens JWT List tokens for the current user
DELETE /api-tokens/{id} JWT Revoke a token

Issuance requires a live JWT session (not another API token). See Authentication.

Other resources

All standard CRUD resources follow the GET / POST / GET {id} / PATCH {id} / DELETE {id} shape documented for invoices unless noted.

Resource Prefix Notes
Items (products) /items
Tax codes /tax_codes
Fixed assets /fixed_assets
Depreciation models /depreciation_models
Projects / segments /projects
Recurring invoices /recurring_invoices
Quotes /quotes
Expenses /expenses
Receipts /receipts
Transfers /transfers Between own bank accounts
Intercompany postings /intercompany
Supplier credit notes /supplier_credit_notes
Journal templates /journal_templates
Reclassifications /reclassifications
Account ranges /account_ranges
Bank rules /bank_rules
Bank feeds /bank-feeds
Budgets /budgets
Allocations /allocation_rules
Cashbook /cashbook
Companies /companies
Branches /branches
Attachments /attachments
Imports /imports CSV / bank statement import
Documents (AI extraction) /documents
Statements /statements Supplier statements
Statement templates /statement-templates
Period close /period-close
Audit log /audit-log Read-only
Changes /changes Audit change log
Snapshot /snapshot
Employees /employees
Time entries /time-entries
Leave /leave
Pay runs /pay-runs
STP submissions /stp-submissions
Super funds /super-funds
Super lodgements /super_lodgements
TPAR /tpar
Tax returns /tax_returns
Search /search

Health

Path Auth Notes
/healthz none Liveness — always 200 OK
/version none {version, edition}

See also