Zinstruct API
Read your school's contacts, products, offers, enrollments and engagement data from your own tools, and get events pushed to you with webhooks.
API access needs the Advanced or Professional plan. Keys can't be created on other plans, and keys made earlier stop working if the workspace moves off them. Compare plans.
Base URL
Every request goes to:
https://app.zinstruct.comThe endpoints sit in 2 families:
/api/public/v1— 8 endpoints/api/reporting/v1— 9 endpoints
Get an API key
- Sign in at app.zinstruct.com as the workspace owner.
- Open Settings → API keys, name the key after the tool it's for, and click Create key.
- Copy the key straight away — it is shown once. Keys are read-only and reach only your own school.
Read your school's data from your own tools.
Authenticating
Every request carries an API key as a bearer token:
Authorization: Bearer YOUR_API_KEYCreate a key at Settings → API keys. The full key is shown once, when you create it. Keys are read-only, reach only your own school, and stop working the moment you revoke them.
Start with GET /api/reporting/v1/health — it proves the key and the header are right before you touch any data.
Conventions
- Field names are
snake_case; timestamps are ISO-8601 in UTC; money is always integer cents, never a decimal. - List endpoints return
{ data, total, page, page_size }.totalcounts every matching row, not just the page. - Paginate with
?page=and?page_size=.page_sizeis clamped to 1–100, and defaults to 50. - Errors return
{ "error": { "code", "message" } }with a matching HTTP status. Branch oncode— it is stable;messagemay be reworded.
Rate limits
Requests are limited per key: 600 requests per 60 seconds. Over the limit you get 429 with code rate_limited. Give each integration its own key so one busy tool cannot exhaust another's budget.
Error codes
Branch on error.code. These are every code the API returns:
unauthorizedforbiddennot_foundbad_requestrate_limitedinternal_error
Versioning
The version is part of every path (/api/public/v1, /api/reporting/v1), so a request names the version it was written against. Webhook payloads carry their own api_version, currently 2026-05-24.
Next
- API reference — every endpoint, with code samples in six languages.
- Webhooks — every event and what it carries.
- Downloads — the OpenAPI file and a PDF of the reference.