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 |
| 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