Public API
Versioned REST contract for web, native apps, and integrations. Use the OpenAPI file as the source of truth; generate clients with your toolchain (for example openapi-typescript).
Example endpoints
Illustrative snippets from your static export; validate against the OpenAPI spec.
List endpoints return meta.limit, meta.offset, and invoice lists echo meta.status when filtered. See the roadmap for cursor pagination, richer payloads, and outbound webhooks.
- GET
/api/v1/customersList customers with optional limit (1–100, default 100) and offset pagination.
GET /api/v1/customers?limit=50&offset=0 Authorization: Bearer <supabase_jwt> x-tenant-slug: your-workspace-slug
- GET
/api/v1/customers/{id}Fetch one customer by UUID.
GET /api/v1/customers/<customer_uuid> Authorization: Bearer <supabase_jwt> x-tenant-slug: your-workspace-slug
- PATCH
/api/v1/customers/{id}Update name and/or email (empty string clears email).
PATCH /api/v1/customers/<customer_uuid> Content-Type: application/json Authorization: Bearer <supabase_jwt> x-tenant-slug: your-workspace-slug { "name": "Acme Holdings Ltd", "email": "ap@acme.example" } - POST
/api/v1/customersCreate a customer (returns id for use with POST /invoices).
POST /api/v1/customers Content-Type: application/json Authorization: Bearer <supabase_jwt> x-tenant-slug: your-workspace-slug { "name": "Acme Ltd", "email": "billing@acme.example" } - GET
/api/v1/invoicesList invoices with limit/offset and optional status filter (?status=draft&status=paid or ?status=draft,issued).
GET /api/v1/invoices?limit=20&offset=0&status=draft&status=issued Authorization: Bearer <supabase_jwt> x-tenant-slug: your-workspace-slug
- GET
/api/v1/invoices/{id}Fetch one invoice with line rows and customer snapshot.
GET /api/v1/invoices/<invoice_uuid> Authorization: Bearer <supabase_jwt> x-tenant-slug: your-workspace-slug
- POST
/api/v1/invoicesCreate an invoice (default issued). Pass lines[] for multi-row payloads (max 50); omit lines for single-line fields.
POST /api/v1/invoices Content-Type: application/json Authorization: Bearer <supabase_jwt> x-tenant-slug: your-workspace-slug { "customer_id": "550e8400-e29b-41d4-a716-446655440000", "number": "INV-2048", "status": "draft", "lines": [ { "description": "Consulting", "quantity": 2, "unit_price": 150, "tax_rate": 20 }, { "description": "Materials", "quantity": 1, "unit_price": 49.99, "tax_rate": 0 } ] } - PATCH
/api/v1/invoices/{id}Edit a draft invoice: adjust single-line fields, replace all rows with lines[], or set status issued to finalize.
PATCH /api/v1/invoices/<invoice_uuid> Content-Type: application/json Authorization: Bearer <supabase_jwt> x-tenant-slug: your-workspace-slug { "lines": [ { "description": "Consulting", "quantity": 2, "unit_price": 175, "tax_rate": 20 } ], "status": "issued" } - DELETE
/api/v1/invoices/{id}Delete a draft invoice only (204 No Content).
DELETE /api/v1/invoices/<invoice_uuid> Authorization: Bearer <supabase_jwt> x-tenant-slug: your-workspace-slug
Official SDKs
Placeholder SDK cards from your archive — publish packages when ready.
Python SDK
Type hints and async-friendly patterns.
JavaScript SDK
Node and browser; TypeScript definitions.
Ruby SDK
Gem for Rails and Ruby apps.
Ready to integrate?
Create a workspace, then issue API keys from your admin console when exposed.
Start trial