Developers

Build on ZekerFlex

A REST API for shifts, timesheets and webhooks, plus a read-mostly GraphQL endpoint. Both run against the same data as the dashboard — nothing here is a separate sandbox.

Reference

OpenAPI spec

The full machine-readable spec — every endpoint, request/response schema and error shape — is published at https://www.zekerflex.com/openapi.json. Point any OpenAPI-aware tool (Postman, an LLM function-calling layer, a codegen client) at it directly.

Authentication

API keys

Every request needs an API key, either as a Bearer token or an x-api-key header:

Authorization: Bearer zf_live_...
# or
x-api-key: zf_live_...

Keys are scoped (shifts:read, shifts:write, timesheets:read, webhooks:manage, invoices:read, users:read) and rate-limited per your plan (see pricing below) — every response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset headers so you can self-throttle before hitting a 429. Logged-in employers create and manage their own keys at /werkgever/integraties — no need to email anyone for the Free tier. Need Scale-level volume? Talk to partners@zekerflex.com.

Pricing

Plans

Free

Free

  • 60 req/min
  • 10,000/month
  • 2 scopes

Starter

€49/mo

  • 300 req/min
  • 100,000/month
  • 4 scopes

Pro

€199/mo

  • 1200 req/min
  • 1,000,000/month
  • 6 scopes

Scale

Custom

  • 1200 req/min
  • Negotiated
  • 6 scopes

Start free, upgrade any time from /werkgever/integraties.

Endpoints

REST

GET /api/public/v1/shifts

Open shifts for your organization. Requires shifts:read.

curl https://www.zekerflex.com/api/public/v1/shifts \
  -H "Authorization: Bearer zf_live_..."

POST /api/public/v1/shifts

Create a shift and run matching against it. Requires shifts:write.

curl -X POST https://www.zekerflex.com/api/public/v1/shifts \
  -H "Authorization: Bearer zf_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "branchId": "br_123",
    "title": "Weekend bediening",
    "startsAt": "2026-11-01T16:00:00Z",
    "endsAt": "2026-11-01T23:00:00Z",
    "hourlyRateCents": 1650,
    "positions": 2
  }'

GET /api/public/v1/timesheets/approved

Approved/paid timesheets for your organization. Requires timesheets:read.

curl https://www.zekerflex.com/api/public/v1/timesheets/approved \
  -H "Authorization: Bearer zf_live_..."

POST /api/public/v1/webhooks

Register a URL for shift/timesheet/dispute events. Requires webhooks:manage. The signing secret is returned once, in the response — store it immediately.

curl -X POST https://www.zekerflex.com/api/public/v1/webhooks \
  -H "Authorization: Bearer zf_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/webhooks/zekerflex",
    "eventTypes": ["shift.matched", "timesheet.approved"]
  }'

Alternative

GraphQL

A read-mostly GraphQL endpoint is available at https://www.zekerflex.com/api/graphql, authenticated with the same session/role system as the dashboard (not API keys) — it's meant for logged-in users and internal tooling, not third-party integrations. Introspect the schema directly against the endpoint to see the full set of queries and types.

For agents

Machine-readable discovery

  • https://www.zekerflex.com/llms.txt — what ZekerFlex is, when to use it, and links to everything below.
  • https://www.zekerflex.com/openapi.json — the full REST API spec.
  • https://www.zekerflex.com/sitemap.xml — every indexable page.
  • Homepage and the 404 page both honor Accept: text/markdown with a real Markdown body instead of HTML.
Developers — ZekerFlex API · ZekerFlex