WorkMonitor.

Developers

The whole record, one call away.

Read every hour, project, timesheet and daily score the product shows a manager. From your own systems, over a versioned REST API, with keys scoped to exactly what one integration needs.

Free for two seats, no card. Keys are created in Settings → API keys.

v1
Versioned. A breaking change ships under a new prefix, never inside this one.
OpenAPI 3.1
One document. The reference and the typed client are both generated from it.
X-Api-Key
One header. Your organisation is taken from the key, never from a parameter.
REQUEST
# Yesterday's rollups, newest updated firstcurl "https://api.workmonitor.ai/v1/analytics/daily?limit=2" \  -H "X-Api-Key: $WM_API_KEY"
RESPONSE200 OK
{  "data": [    {      "id": "dr_7c41f0",      "memberId": "mem_9f2a",      "date": "2026-09-02",      "workMinutes": 431,      "activeMinutes": 366,      "breakMinutes": 42,      "idleMinutes": 65,      "meetingMinutes": 84,      "productiveMinutes": 298,      "neutralMinutes": 51,      "unproductiveMinutes": 17,      "avgActivityLevel": 0.71,      "productivityScore": 78,      "updatedAt": "2026-09-02T18:04:11.220Z"    }  ],  "nextCursor": "eyJ1IjoiMjAyNi0wOS0wMlQxOD..."}
X-RateLimit-Limit: 600X-RateLimit-Remaining: 599X-RateLimit-Reset: 41Follow nextCursor until it is null.

The surface

Small enough to hold in your head.

6 routes: method, path, the scope a key must hold to call it, and what comes back. Read down the scope column to see how little a credential has to be able to do.

Every route, parameter and error at /v1/docs
The shipped v1 routes, the scope each requires, and what it returns
METHODPATHSCOPERETURNS
GET/v1/membersmembers:readList members with their consent status.
GET/v1/time-entriestime:readList time entries for members and teams.
GET/v1/timesheetstime:readList timesheets; submit and decide via POST.
GET/v1/projectsprojects:readList projects and their tasks.
GET/v1/analytics/dailyanalytics:readDaily focus, activity, and output rollups.
GET/v1/deliverablesoutcomes:readList shipped deliverables from the Proof Ledger.

Every collection is cursor-paginated, newest-updated first: ask for up to 200 rows with limit and follow nextCursor until it comes back null. Writes exist too — appending time, submitting and deciding a timesheet, creating a project — and each one requires an Idempotency-Key, so a retry replays the stored answer instead of booking the hours twice.

Why any of this matters

Data you cannot get out is data you do not own.

Hours, projects, timesheets, daily scores and shipped deliverables all leave through the same versioned surface — into your warehouse, your BI tool, your own product. No export request, no CSV somebody emails you.

Quickstart

From nothing to your first call.

  1. 1

    Create a scoped key

    Settings → API keys. Grant only the scopes the integration needs, and optionally the IP ranges it may call from. The secret is shown once.

  2. 2

    Send it on the request

    As X-Api-Key, or the same key as a bearer token. Your organisation is taken from the key, so a credential can only ever read its own.

  3. 3

    Page the collection

    Ask for up to 200 rows at a time and follow nextCursor until it comes back null. Cursors are opaque — store them, do not parse them.

  4. 4

    Poll for what changed

    After the first load, pass updatedSince and de-duplicate on each record’s stable id. Nothing that has not moved is read twice.

Start free

Authorisation

Getting data out, without handing over the whole company.

Every read goes through a scoped API key you create in Settings → API keys. Send the key on each request in the X-Api-Key header (or as a bearer token); the secret is shown once at creation, and a key can never do more than the scopes it was granted.

X-Api-Key: vk_live_…
  1. 01Scopes, not master keysGrant only what an integration needs: read members (members:read), time entries (time:read), projects (projects:read), and daily analytics (analytics:read).
  2. 02Per-key IP allowlistEach key can carry an optional IP allowlist (CIDR ranges, IPv4 and IPv6) enforced on every request.
  3. 03Incremental pollingCursor-paginate the collections, then poll incrementally with updatedSince and de-duplicate on each record’s stable id.
  4. 04Predictable limits & errorsKeys are rate-limited with a Retry-After header on 429, and every error is the same JSON envelope.
  5. 05No-code with ZapierConnect WorkMonitor to 6,000+ apps with the built-in Zapier integration, with no server to run.

The full, interactive reference lives at /v1/docs.

Self-hosting is on the roadmap, not shipped. Data residency and bring-your-own-key encryption will land with it.

API keys
Scoped keys, never master keys
KEYSCOPESSOURCE IPSLAST USED
  • Client portalvk_live_a91c7d2e••••time:readprojects:read2 ranges4m ago
  • Warehouse syncvk_live_5f30b8c1••••analytics:readmembers:read1 range1h ago
  • Proof widget, stagingSandboxvk_test_2d6af053••••ledger:readcertificates:readAny IP12m ago
  • Zapiervk_live_c74e19ab••••time:readoutcomes:readAny IPYesterday
  • Invoice exportvk_live_8b12ee74••••projects:readwebhooks:read1 range26 Aug
  • Old billing scriptRevokedvk_live_ff4a0d19••••billing:readAny IP14 Jul
New keyPick its scopes, its allowed ranges and an expiry. The secret is shown once and never again.
A key can never do more than the scopes it was granted — there is no master key5 active · 1 revoked

Settings → API keys, in the product. Each row carries the scopes it was granted and the source addresses it may call from; the sandbox key is marked, and the revoked one stays on the list so you can see it was revoked.

Beyond the read

What there is to build once reading works.

Everything below is shipped and reachable with the same credential. Nothing here is a roadmap item wearing a present tense.

Straight answers

The questions we would ask in your position

Every answer here is the one you would get on a call. Open as many as you like; they stay open, so two can be held side by side.

6 questions
Ask us something else

Make the first call today.

Create an account, open Settings → API keys, and grant one scope. The sample at the top of this page then runs against your own workspace, and a sandbox key keeps the experiment away from live data entirely.

Free for two seats, no card. Talk to us about a partner or white-label integration.