{"templateId":"openapi_docs","sharedDataIds":{"openAPIDocsStore":"oas-openapi.yaml","sidebar":"sidebar-sidebars.yaml"},"props":{"definitionId":"openapi.yaml","dynamicMarkdocComponents":[],"baseSlug":"/openapi","seo":{"title":"Dyflexis API","keywords":["Dyflexis","workforce management API","staff scheduling API","time clock API","payroll API","staff capacity API","absence management API","OpenAPI 3.1"],"siteUrl":"https://beta-developer.dyflexis.com","lang":"en-US","llmstxt":{"sections":[{"title":"API reference","description":"OpenAPI 3.1 reference for every Dyflexis endpoint.","includeFiles":["openapi.yaml","paths/**","components/**"],"excludeFiles":[]},{"title":"Guides","description":"Onboarding, quickstart, integration patterns, webhook receiver contract, and the partner process.","includeFiles":["index.md","guides/**"],"excludeFiles":[]}],"hide":false,"excludeFiles":[]}},"itemId":"","disableAutoScroll":true,"metadata":{"type":"openapi","title":"Dyflexis API","description":"Dyflexis is a complete **workforce management platform** that\nbrings staff scheduling, time tracking and attendance, leave and\nabsence, AI-powered demand forecasting, payroll, performance\nmanagement, skills management, and an employee hub with chat\ntogether in one system. The Dyflexis API gives you programmatic access to the\nworkforce data behind that platform, the (automated) staff\nplanning, time tracking, payrolling, absence management, workload\ninformation, and staff capacity that Dyflexis manages.\n\nEndpoints are organised by resource, **Employees**, **Contracts**,\n**Time clock**, **Payroll**, **Absence**, **Information streams**, and\nso on. The version of each endpoint (`v0`, `api2`, `v3`) lives in the\nURL; you can mix versions in the same integration.\n\n## Base URL\n\n```\nhttps://app.dyflexis.com/{systemName}\n```\n\nReplace `{systemName}` with the tenant identifier of the\ncustomer you are integrating with, the customer provides this\nvalue to you when they connect your integration (see the\n[`systemName` server variable](#section/Servers) below for\ndetails on where to find it). Every server URL in this\nspecification (and any new environment added in the future)\nstarts with this base; new environments extend it with\nadditional path segments rather than introducing a different\nhost. This is enforced by the `rule/server-url-base` lint\nassertion in `redocly.yaml`. Each version has its own URL\nprefix under that base:\n\n| Version | Prefix | Status |\n| --- | --- | --- |\n| v3 | `/api/<resource>/v3/...` | Latest production, preferred for new integrations |\n| api2 (v2) | `/api2/...` | Stable production, use when no v3 equivalent exists |\n| v0 | `/api/v0/...` | Legacy, one endpoint kept for existing Business Intelligence consumers |\n\n## Authentication\n\nAlmost every endpoint requires an API key, sent in the\n`Authorization` header with the `Token` prefix:\n\n```\nAuthorization: Token YOUR_AUTH_TOKEN\n```\n\n`YOUR_AUTH_TOKEN` is the API key issued to you by Dyflexis.\n\nTo call an endpoint directly from these docs: open the\noperation, click **Try it**, and open the **Security** tab of\nthe request panel. **Name** is pre-filled with `Authorization`\nand **API key** with `Token YOUR_AUTH_TOKEN`; replace\n`YOUR_AUTH_TOKEN` with your API key, keeping the `Token `\nprefix. The key is kept in your browser's session storage only\nand is cleared when the session ends.\n\n### API scopes\n\nEach token is issued with one or more **scopes** that gate which\nparts of the API it can call. A scope is a named permission on the\ntoken (for example `business`, `clock`, `payroll`, `absence`,\n`external_employees`, `information_lines`); every operation\ndeclares the scope it requires, and the scope must be **enabled on\nyour token** before that operation will accept the request. A\ntoken without the required scope is rejected with `403 Forbidden`,\neven when the token itself is otherwise valid.\n\nScopes are issued per integration, you do not pick them yourself.\nAsk a Dyflexis administrator to enable the scopes you need when you request your\ntoken. The required scope is listed on each operation.\n\n## Timezones\n\nAll date and time values in this API are expressed in the\n**timezone configured on the customer's Dyflexis tenant**, not\nUTC and not the partner's local timezone. A shift returned as\nstarting at `09:00` starts at `09:00` in the customer's\nconfigured timezone, regardless of where your client is\nrunning, and a timestamp you send in is interpreted the same\nway. The tenant timezone is a per-customer setting; if you\nintegrate with customers in different countries, treat the\ntimezone as a per-tenant property and read or store it\nalongside the data you process.\n\n## Errors\n\nThe API returns standard HTTP status codes. Successful responses are\nin the `2xx` range; client errors in the `4xx` range; server errors in\nthe `5xx` range.\n\n| Code | Meaning |\n| --- | --- |\n| `200 OK` | Request succeeded |\n| `201 Created` | Resource created |\n| `400 Bad Request` | Validation failed or the payload was malformed |\n| `401 Unauthorized` | Missing or invalid authentication |\n| `403 Forbidden` | Token does not include the required scope |\n| `404 Not Found` | Resource or path does not exist |\n| `429 Too Many Requests` | Rate limit exceeded, back off and retry |\n| `500 Internal Server Error` | Unexpected server error |\n| `503 Service Unavailable` | Upstream system temporarily unavailable |\n\nError bodies are returned as `application/json` **only when the request\nsends an `Accept: application/json` header**; without it the API may\nreturn an HTML error page instead, so always send that header. A JSON\nerror body has the fields `title`, `status`, `detail`, `message` (the\nsame text as `detail`), and `code`. Validation failures (`400`) add a\n`violations` array with one entry per invalid field (`propertyPath`,\n`title`, `type`).\n\n## Rate limiting\n\nRequests are rate-limited per token. When a token exceeds the limit,\nrequests return `429 Too Many Requests`. Implement exponential backoff\non `429` and `5xx` responses, and avoid tight polling loops.\n\n## Pagination\n\nList endpoints paginate with a `page` query parameter (or a path\nsegment, depending on the version). Where supported, responses\ninclude a `_links` block with `self`, `next`, `prev`, `first`, and\n`last` URLs you can follow without recomputing.\n","summary":"REST API for the Dyflexis workforce management platform."},"compilationErrors":[],"markdown":{"partials":{},"variables":{"rbac":{"teams":["anonymous"]},"user":{},"remoteAddr":{"hostname":"beta-developer.dyflexis.com","port":4000,"ipAddress":"216.73.216.153"},"lang":"default_locale","env":{"PUBLIC_REDOCLY_BRANCH_NAME":"master"}}},"pagePropGetterError":{"message":"","name":""}},"slug":"/openapi","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}