API documentation
Manage people, projects and tasks, run the optimizer, and pull solve data programmatically. Every call is scoped to your organization and metered the same way in-app actions are.
Authentication
Create a key from the APIpage once you're logged in (account owner only). Send it as a bearer token on every request:
curl https://your-domain/api/v1/people \ -H "Authorization: Bearer sk_live_..."
The full key is shown only once, at creation time — store it somewhere safe. Revoking a key from the API page takes effect immediately.
Branches
Every resource lives in a branch (branch). Requests default to your org's main branch; target a specific branch with ?scenario=<scenario_id>, using the branch's public id (visible in the app's Manage Branches page URL).
Endpoints
| Method | Path | Description |
|---|---|---|
| GET | /api/v1/people | List people in a branch. |
| POST | /api/v1/people | Create a person (defaults to Mon–Fri 09:00–17:00 GMT availability). |
| GET | /api/v1/people/{id} | Get one person. |
| PATCH | /api/v1/people/{id} | Update a person. |
| DELETE | /api/v1/people/{id} | Delete a person (sirat-scoped — never affects other branches). |
| GET | /api/v1/projects | List projects in a branch. |
| POST | /api/v1/projects | Create a project. |
| GET | /api/v1/projects/{id} | Get one project. |
| PATCH | /api/v1/projects/{id} | Update a project. |
| DELETE | /api/v1/projects/{id} | Delete a project. |
| GET | /api/v1/projects/{id}/tasks | List tasks under a project. |
| POST | /api/v1/projects/{id}/tasks | Create a task under a project. |
| GET | /api/v1/tasks/{id} | Get one task. |
| PATCH | /api/v1/tasks/{id} | Update a task. |
| DELETE | /api/v1/tasks/{id} | Delete a task. |
| GET | /api/v1/solves | List solves run in a branch. Async — solves start 'queued', then 'solving', then a final status. |
| POST | /api/v1/solves | Queue a solve over a date range; returns immediately, poll for the result. |
| GET | /api/v1/solves/{id} | Get a solve's status, totals and every assignment. |
| DELETE | /api/v1/solves/{id} | Delete a solve. |
| GET | /api/v1/solves/batches | List batch solves for the org. |
| POST | /api/v1/solves/batches | Trigger the same solve conditions across several branches (or all of them) at once. |
| GET | /api/v1/solves/batches/{id} | Get a batch's solves, with the best-scoring one flagged for comparison. |
| GET | /api/v1/solves/scheduled | List scheduled/recurring solves. |
| POST | /api/v1/solves/scheduled | Create a scheduled/recurring solve with a relative start offset. |
| PATCH | /api/v1/solves/scheduled/{id} | Pause or resume a scheduled solve. |
| DELETE | /api/v1/solves/scheduled/{id} | Delete a scheduled solve. |
| GET | /api/v1/changes | Read the audit trail (add ?scope=org for every user's changes, admin keys only). |
Requests and responses are JSON. Successful responses are shaped { data: ... }; errors are { error: "..." } with a non-2xx status.
Example: add a person, run a solve, get the data
# Add a person
curl -X POST https://your-domain/api/v1/people \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"name": "Amara Okafor"}'
# Run the optimizer over a date range
curl -X POST https://your-domain/api/v1/solves \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"start_date": "2026-08-01", "end_date": "2026-08-28"}'
# Pull the resulting assignments
curl https://your-domain/api/v1/solves/<solve_id> \
-H "Authorization: Bearer sk_live_..."API access by plan
| Plan | API access |
|---|---|
| Scientist | Not included |
| Explorer | Not included |
| Crew | Included, subject to your plan's call limit |
| Satellite | Included, subject to your plan's call limit |
| Custom Order | Included, subject to your plan's call limit |
See pricingfor full plan details. Every call — API or in-app — counts against your plan's limits; see the API page once logged in.
Get an API key
Log in, open API, and create a key (account owner only).
Log in to create a key