Operentra API
A REST API over the data in an Operentra workspace: people, the organisation around them, the hours they work, and eventually what they are paid.
It exists so you can keep another system in step — an HRIS, a BI warehouse, a Slack bot, a time-clock vendor, your own internal tooling — without anyone exporting a spreadsheet on a Friday afternoon.
curl https://app.operentra.com/api/v1/employees \
-H "Authorization: Bearer opk_live_..."
What you should know before you start
Everything is scoped to one workspace. A key belongs to a workspace and can never see another one. There is no cross-workspace call and no account-level key.
Requests are made server-side. API keys are not usable from a browser —
/api/v1 does not allow cross-origin credentialed requests, deliberately. A
key in front-end code is a key you have published.
The contract is stable, and it is generated. Every response is built from a field definition that also produces the OpenAPI document and the object reference. A field cannot appear in one and not the others, so the documentation cannot quietly describe something the API does not return.
The shape of everything
| Concern | How it works |
|---|---|
| Base URL | https://app.operentra.com/api/v1 |
| Auth | Authorization: Bearer opk_live_... |
| Case | snake_case, on the way in and the way out |
| Money | decimal strings ("50000.00"), in the workspace currency |
| Dates | calendar dates (2026-03-01) where there is no time of day |
| Timestamps | RFC 3339, always UTC (2026-03-01T09:07:00.000Z) |
| Lists | { "data": [...], "has_more": true, "next_cursor": "..." } |
| Errors | application/problem+json with a stable code |
Money is a string because 1234567.89 is not exactly representable as a
float64, and a client that parses pay as one eventually produces a payslip that
is a cent wrong. Dates and timestamps are separate types because a joining date
has no time of day, and rendering one as midnight UTC invites a timezone
conversion that lands it on the previous day.
Where to go next
- Quickstart — from no key to a first successful call.
- Authentication — how keys work and what scopes grant.
- Errors — the failure shape, and every code you can branch on.
- Webhooks — get told when something changes, instead of polling.
- Reference — every endpoint, generated from the contract.
Status
The API is in private beta. The shapes documented here are what we intend to publish, but until general availability a breaking change is possible — see Versioning and changelog for how one would reach you. If you are building against it now, tell us, because the list of who to warn is how that promise gets kept.