Base URL
Novala runs each tenant on a dedicated subdomain. Use the subdomain form for all v1 endpoints:{tenant} with your tenant slug (for example, acme → https://acme.novala.ai/api/v1).
Endpoints that are not yet under /v1 use the same subdomain base without the version prefix:
All examples in this reference use
app.novala.ai as a placeholder. Replace it with your tenant subdomain when making real requests.Authentication
Every request to a protected endpoint must include anAuthorization header carrying a bearer API key:
Pagination
The API uses two pagination styles depending on the endpoint.Offset-based pagination
Most list endpoints acceptpage (1-based, default 1) and limit (default 25, max 100) query parameters. The response envelope looks like:
Cursor-based pagination
Newer endpoints (leads, and future additions) use keyset/cursor pagination. Passlimit and an opaque cursor string obtained from the previous response:
hasMore is false or nextCursor is null, you have reached the last page.
Error responses
All errors return a JSON body with anerror field:
HTTP status codes
| Code | Meaning |
|---|---|
200 OK | Request succeeded. |
201 Created | Resource created successfully. |
400 Bad Request | Request body failed validation. |
401 Unauthorized | Missing or invalid API key. |
403 Forbidden | API key does not have the required scope. |
404 Not Found | Resource not found or not accessible to this tenant. |
409 Conflict | Conflict with existing data (for example, duplicate slug). |
429 Too Many Requests | Rate limit exceeded. |
500 Internal Server Error | Unexpected server error. |
Rate limiting
API requests are rate-limited per tenant. When you exceed the limit, the server returns429 Too Many Requests. Implement exponential backoff and retry logic in your integration.
Versioning
Endpoints under/api/v1/ follow a stable versioning contract. Breaking changes are never made within a major version. Endpoints outside /v1/ (inspections, invoices, bookings) are production-stable but may receive additive changes without a version increment.