Base URL
Authentication
Every request must include anAuthorization header using the Bearer scheme:
Bearer — other schemes (Token, Basic, or a bare token) return 401 token_missing.
Tokens are issued from the API tokens settings page. Personal access tokens are read-only by default — message support to request write access for a specific token. Write requests (POST, PUT, PATCH, DELETE) made with a read-only token return 403 token_read_only.
Quickstart
Verify your token with a request to/v1/me, which returns the currently authenticated user:
Rate limits
Every request is checked against three buckets. The strictest bucket wins, and exceeded requests return429 Too Many Requests.
| Bucket | Personal access token | OAuth app (default) |
|---|---|---|
| Per token / per user | 1,000 req / hr | 500 req / hr |
| Per company / per app | 10,000 req / hr | 1,000 req / hr |
| Per IP | 10,000 req / hr | 10,000 req / hr |
Idempotency
Safely retryPOST requests by including an Idempotency-Key header with a unique value (a UUID works well):
5xx responses are never cached, so retries after a server error always re-execute.
Request format
Requests with a body (POST, PUT, PATCH) must include Content-Type: application/json. Without it, the body is ignored and your fields come through empty. A malformed JSON body returns 400 invalid_json.
Conventions
- Pagination — list endpoints accept
page(default 1) andper_page(default 25, max 100). Responses include{ data: [...], pagination: { current_page, total_pages, total_count, per_page } }. - IDs — all IDs are opaque strings. Use them as-is.
- Book scoping — most endpoints accept an optional
book_idquery parameter. A “book” is an advisor’s workspace. UseGET /v1/booksto list the books your token can see. - Timestamps — ISO 8601.
Errors
Errors are returned as{ "error": "<code>", "detail": "<message>" } with the appropriate HTTP status.
| Code | Status | When it happens |
|---|---|---|
token_missing | 401 | Authorization header is missing or doesn’t use the Bearer scheme |
token_invalid | 401 | Token can’t be verified (expired, revoked, or malformed) |
token_read_only | 403 | Read-only token attempted a write request |
invalid_json | 400 | Request body isn’t valid JSON |
parameter_missing | 422 | A required parameter is missing from the request |
record_invalid | 422 | Validation failed on the record being created or updated |
record_not_found | 404 | The referenced record doesn’t exist or isn’t visible to your token |