Read-only REST API for accessing your organization’s clients, events, proposals, contracts, and invoices.
https://platform-zennvue.com/api/v1API access is available on the Studioplan and above. If your plan doesn’t include API access, requests will return 403 tier_required.
Every request needs an API key in the Authorization header:
Authorization: Bearer znv_live_a1b2c3d4...Issue keys from your dashboard at Settings → API Keys. Keys are shown once at creation. Store them somewhere safe. To revoke a key, click the trash icon on its row in the same settings panel.
curl https://platform-zennvue.com/api/v1/clients \
-H "Authorization: Bearer znv_live_..." \
-H "Accept: application/json"Returns JSON in the shape { data: Client[], pagination: { page, pageSize, total, totalPages } }.
| Method | Path | Description |
|---|---|---|
| GET | /clients | List clients, paginated. Filter by status, tag, or search. |
| GET | /events | List events, paginated. Filter by status, date range, client. |
| GET | /proposals | List proposals, paginated. Filter by status or client. |
| GET | /contracts | List contracts, paginated. Filter by status or client. |
| GET | /invoices | List invoices, paginated. Filter by status or client. |
All list endpoints accept ?page=1 (1-indexed) and ?pageSize=50 (clamped to [1, 200]). The response envelope always includes a pagination object with { page, pageSize, total, totalPages }.
Each API key is limited to 1,000 requests per hour. The current limit and remaining requests are returned on every response in the X-RateLimit-Limit and X-RateLimit-Remaining headers. Exceeding the limit returns 429 with a Retry-After header telling you how long to wait.
Errors come back as JSON with a stable error.code:
401 missing_api_key: no Authorization header401 invalid_api_key: the key wasn’t recognized401 key_revoked: the key was revoked401 key_expired: the key passed its expiration date403 tier_required: your plan doesn’t include API access429 rate_limited: over the per-key rate limitDrop this into Postman, Insomnia, or Stainless for an auto-generated client:
/api/v1/openapi.json