{"info":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","description":"<html><head></head><body><p>The Workfeed API is organised per company. Every endpoint lives under <code>/companies/{companyID}/...</code> and every request needs your API key.</p>\n<h2 id=\"set-it-up-once\">Set it up once</h2>\n<p>Every request in this collection is built from <strong>collection variables</strong>, so you only fill these in once rather than editing each URL:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variable</th>\n<th>What to set it to</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>baseURL</code></td>\n<td><code>https://europe-west1-production-eu-327a3.cloudfunctions.net/api</code></td>\n</tr>\n<tr>\n<td><code>companyID</code></td>\n<td>Your company id</td>\n</tr>\n<tr>\n<td><code>apiKey</code></td>\n<td>Your API key</td>\n</tr>\n</tbody>\n</table>\n</div><p>Requests are stored as <code>https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts</code> — the URLs shown on this page are those variables already filled in, so you can read them as real URLs. <strong>Fork or import the collection into Postman, set the three variables in the collection's Variables tab, and every request works immediately.</strong></p>\n<h2 id=\"authentication\">Authentication</h2>\n<p>Send the key in the <code>Authorization</code> header — no <code>Bearer</code> prefix, just the key:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: 1a2b3c4d-5e6f-7a8b-9c0d-1e2f3a4b5c6d\n</code></pre><div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Code</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td><code>\"Not authenticated\"</code> — no <code>Authorization</code> header was sent</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td><code>\"Not authorized. This API key does not have access to companyID &lt;companyID&gt;\"</code> — the key is valid but has no access to that company</td>\n</tr>\n</tbody>\n</table>\n</div><p>These two apply to every endpoint and are not repeated on the individual pages.</p>\n<h2 id=\"conventions-across-the-api\">Conventions across the API</h2>\n<ul>\n<li><strong>Timestamps</strong> are ISO 8601 in UTC (<code>2026-03-12T09:00:00.000Z</code>). <strong>Calendar days</strong> are <code>yyyy-MM-dd</code> and are interpreted in the <strong>company's</strong> time zone, not yours. Availability endpoints go one step further and reject a timestamp without an offset.</li>\n<li><strong>Creating</strong> returns <code>201</code> with the new id. <strong>Updating</strong> returns <code>200</code> with the full updated object. <strong>Deleting</strong> returns <code>204</code> with no body.</li>\n<li><strong>Errors</strong> are a JSON string, not an object — a <code>400</code> body reads <code>\"Query param startFrom is missing\"</code>. The one exception is a <code>409</code> from the availability endpoints, which returns an object carrying the ids of the conflicting records.</li>\n<li><strong>Deletes are mostly permanent.</strong> <code>DELETE</code> on a <strong>shift, leave, transaction, table booking or availability</strong> removes the document outright - it cannot be restored. <strong>Tags</strong> are the one exception and are soft-deleted via <code>deletedOn</code>. <strong>Employees</strong> have no delete endpoint at all; you soft-delete them by setting <code>deletedOn</code> through <em>Update employee</em>, and that cannot be undone through the API either.</li>\n<li><strong>Range queries are not uniform.</strong> Each list endpoint documents its own comparison — some filter on start, some on end, some on overlap. Read the note on the endpoint rather than assuming.</li>\n</ul>\n<h2 id=\"labor-cost\">Labor cost</h2>\n<p>Per-shift <code>grossPay</code> is <code>0</code> for monthly-paid employees, so summing it across shifts understates cost. For a true daily total use <strong>Get department stats</strong>, which includes dynamic supplements and percentage-based extra costs.</p>\n<h2 id=\"examples\">Examples</h2>\n<p>Every endpoint carries at least one saved example, and the error cases are saved as examples too — pick them from the dropdown above the response pane. They all describe the same fictional company (Bistro Nord) so ids line up across endpoints.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"11154454","collectionId":"59bfbd79-56b8-4afc-ba02-aaa84928a576","publishedId":"2s93eR3v2K","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"2f67ff"},"publishDate":"2024-03-01T19:29:17.000Z"},"item":[{"name":"Shifts","item":[{"name":"Create shift","id":"da24097a-1a79-409b-b2b7-a589b12f314c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"roleID\": \"roleID\",\n    \"start\": \"2023-05-18T14:00:00.000Z\",\n    \"end\": \"2023-05-19T02:00:00.000Z\",\n    \"employeeID\": null,\n    \"released\": true,\n    \"comment\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts","description":"<h3 id=\"request-fields\"><strong>Request Fields</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>roleID</code></td>\n<td>Yes</td>\n<td>GET your Roles <a href=\"https://documenter.postman.com/preview/30744173-7f2de8cc-0d2f-4cbd-a060-70becdaa6e21?environment=&amp;versionTag=latest&amp;apiName=CURRENT&amp;version=latest&amp;documentationLayout=classic-double-column&amp;documentationTheme=light&amp;logo=https%3A%2F%2Fres.cloudinary.com%2Fpostman%2Fimage%2Fupload%2Ft_team_logo%2Fv1698394511%2Fteam%2Fc80083d308271119df348a297ea71b34f04ba1b5dd8afdec4a985581d53114d6&amp;logoDark=https%3A%2F%2Fres.cloudinary.com%2Fpostman%2Fimage%2Fupload%2Ft_team_logo%2Fv1698394511%2Fteam%2Fc80083d308271119df348a297ea71b34f04ba1b5dd8afdec4a985581d53114d6&amp;right-sidebar=303030&amp;top-bar=FFFFFF&amp;highlight=FF6C37&amp;right-sidebar-dark=303030&amp;top-bar-dark=212121&amp;highlight-dark=FF6C37#a0402d1b-9f00-401a-82da-1bffb1b2b1ff\">here</a></td>\n<td><code>string</code></td>\n<td><code>hLbEKIPTlMh3ehotXl0w</code></td>\n</tr>\n<tr>\n<td><code>start</code></td>\n<td>Yes</td>\n<td>When Shift starts</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-05-18T14:00:00.000Z</code></td>\n</tr>\n<tr>\n<td><code>end</code></td>\n<td>Yes</td>\n<td>When shift ends</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-05-19T02:00:00.000Z</code></td>\n</tr>\n<tr>\n<td><code>employeeID</code></td>\n<td>Yes</td>\n<td>GET your Employees <a href=\"https://documenter.postman.com/preview/30744173-7f2de8cc-0d2f-4cbd-a060-70becdaa6e21?environment=&amp;versionTag=latest&amp;apiName=CURRENT&amp;version=latest&amp;documentationLayout=classic-double-column&amp;documentationTheme=light&amp;logo=https%3A%2F%2Fres.cloudinary.com%2Fpostman%2Fimage%2Fupload%2Ft_team_logo%2Fv1698394511%2Fteam%2Fc80083d308271119df348a297ea71b34f04ba1b5dd8afdec4a985581d53114d6&amp;logoDark=https%3A%2F%2Fres.cloudinary.com%2Fpostman%2Fimage%2Fupload%2Ft_team_logo%2Fv1698394511%2Fteam%2Fc80083d308271119df348a297ea71b34f04ba1b5dd8afdec4a985581d53114d6&amp;right-sidebar=303030&amp;top-bar=FFFFFF&amp;highlight=FF6C37&amp;right-sidebar-dark=303030&amp;top-bar-dark=212121&amp;highlight-dark=FF6C37#c3dbd4a7-4614-4866-93b9-860a7c027eb8\">here</a></td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>j1TznpqVtLN0nmgPfK476U5fn2O2</code></td>\n</tr>\n<tr>\n<td><code>released</code></td>\n<td>Yes</td>\n<td>if Shift was released (Published)</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td><code>comment</code></td>\n<td>Yes</td>\n<td>Shift comments</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td><code>tagIDs</code></td>\n<td>No</td>\n<td>Shift tags</td>\n<td><code>string[]</code></td>\n<td><code>[\"tagID_1\", \"tagID_2\"]</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Created Shift Id</td>\n<td><code>string</code></td>\n<td><code>InOzjxrVqOjtIpqyTfF4</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","shifts"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"0b310116-b43d-48ae-a9e6-dd834a6a6a65","name":"Create shift","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"roleID\": \"hLbEKIPTlMh3ehotXl0w\",\n    \"start\": \"2023-05-18T14:00:00.000Z\",\n    \"end\": \"2023-05-19T02:00:00.000Z\",\n    \"employeeID\": null,\n    \"released\": true,\n    \"comment\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"InOzjxrVqOjtIpqyTfF4\"\n}"}],"_postman_id":"da24097a-1a79-409b-b2b7-a589b12f314c"},{"name":"Get shifts","id":"0807785c-d41e-4b2d-b4c4-72fb8968ffcd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts?startFrom=2023-05-01T00:00:00.000Z&startTo=2023-05-07T00:00:00.000Z","description":"<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Param</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>startFrom</code></td>\n<td>Yes</td>\n<td>Only get shifts starting <em>on or after</em> this time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2022-04-07T22:00:00.000Z</code></td>\n</tr>\n<tr>\n<td><code>startTo</code></td>\n<td>Yes</td>\n<td>Only get shifts starting <em>before</em> this time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2022-04-10T22:00:00.000Z</code></td>\n</tr>\n<tr>\n<td><code>employeeID</code></td>\n<td>No</td>\n<td>If present, only get shifts of the employee with this id</td>\n<td><code>string</code></td>\n<td><code>j1TznpqVtLN0nmgPfK476U5fn2O2</code></td>\n</tr>\n<tr>\n<td><code>released</code></td>\n<td>No</td>\n<td>If present, only get released (if <code>true</code>) or unreleased (if <code>false</code>) shifts</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td><code>roleID</code></td>\n<td>No</td>\n<td>If present, only get shifts on this role. An unknown role ID returns <code>400</code>.</td>\n<td><code>string</code></td>\n<td><code>hLbEKIPTlMh3ehotXl0w</code></td>\n</tr>\n<tr>\n<td><code>departmentID</code></td>\n<td>No</td>\n<td>If present, only get shifts in this department. An unknown department ID returns <code>400</code>. A role belongs to exactly one department, so <code>roleID</code> on its own is already sufficient; if you send both and the role does not belong to the department, the request returns <code>400</code>.</td>\n<td><code>string</code></td>\n<td><code>PKHaOSgFA4uguOqmLfWv</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Shift ID</td>\n<td><code>string</code></td>\n<td><code>Trcu7MKFomu5y5zv1B8G</code></td>\n</tr>\n<tr>\n<td>start</td>\n<td>When Shift starts</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T08:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When Shift ends</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T16:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>employeeID</td>\n<td>Employee associated to the Shift</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>roleID</td>\n<td>Role associated with the Shift</td>\n<td><code>string</code></td>\n<td><code>hLbEKIPTlMh3ehotXl0w</code></td>\n</tr>\n<tr>\n<td>departmentID</td>\n<td>Department associated with the Shift</td>\n<td><code>string</code></td>\n<td><code>PKHaOSgFA4uguOqmLfWv</code></td>\n</tr>\n<tr>\n<td>released</td>\n<td>If Shift was released</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>isForSale</td>\n<td>if Shift is for sale</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>comment</td>\n<td>Shift comments</td>\n<td><code>object</code> / <code>null</code></td>\n<td></td>\n</tr>\n<tr>\n<td>comment.message</td>\n<td>Comment Text</td>\n<td><code>string</code></td>\n<td><code>Comments! 😍</code></td>\n</tr>\n<tr>\n<td>comment.creatorID</td>\n<td>How was this comment created, via UI or API</td>\n<td><code>string</code></td>\n<td><code>API</code></td>\n</tr>\n<tr>\n<td>comment.createdOn</td>\n<td>When comment was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:43:36.542Z</code></td>\n</tr>\n<tr>\n<td>customBreak</td>\n<td>Employee Break for example \"Lunch Break\"</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>customBreak.creatorID</td>\n<td>If it was created by the Employee or automatically</td>\n<td><code>string</code> / <code>\"automatic\"</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>customBreak.duration</td>\n<td>Break duration in Hours</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>customBreak.createdOn</td>\n<td>When Break was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>overlappingLeaveID</td>\n<td>If there is a Leave overlapping the Shift, for example a Vacation, Parental leave, etc...</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>approval</td>\n<td>Shift Approval</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>approval.approver</td>\n<td><code>EmployeeID</code> / <code>\"automatic\"</code></td>\n<td><code>string</code></td>\n<td><code>automatic</code></td>\n</tr>\n<tr>\n<td>approval.date</td>\n<td>Shift Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-12-27T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>approval.originalStart</td>\n<td>Shift Original Start Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-12-07T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>approval.originalEnd</td>\n<td>Shift Original End Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-12-08T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>grossPay</td>\n<td>Shift Salary. If <code>employeeID</code>  <br />is null, this value will not be calculated and return <code>null</code>  <br />  <br /><strong>Note:</strong> While grossPay has been rigorously tested, its accuracy in some unique cases might vary. We welcome <strong>feedback</strong> to enhance its precision.</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td><code>tagIDs</code></td>\n<td>Shift tags</td>\n<td><code>string[]</code></td>\n<td><code>[\"tagID_1\", \"tagID_2\"]</code></td>\n</tr>\n<tr>\n<td>checkIn</td>\n<td>The employee's actual clock-in, as an object. The key is always present and is <code>null</code> when they have not clocked in.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"time\": \"2023-10-23T08:02:11.000Z\"}</code></td>\n</tr>\n<tr>\n<td>checkIn.time</td>\n<td>When the employee clocked in</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T08:02:11.000Z</code></td>\n</tr>\n<tr>\n<td>checkOut</td>\n<td>The employee's actual clock-out, as an object. The key is always present and is <code>null</code> when they have not clocked out.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"time\": \"2023-10-23T16:04:57.000Z\"}</code></td>\n</tr>\n<tr>\n<td>checkOut.time</td>\n<td>When the employee clocked out</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T16:04:57.000Z</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Shift was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Shift was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:10:30.336Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","shifts"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[{"description":{"content":"<p>Only get shifts starting <em>on or after</em> this time</p>\n","type":"text/plain"},"key":"startFrom","value":"2023-05-01T00:00:00.000Z"},{"description":{"content":"<p>Only get shifts starting <em>before</em> this time</p>\n","type":"text/plain"},"key":"startTo","value":"2023-05-07T00:00:00.000Z"},{"disabled":true,"description":{"content":"<p>If present, only get shifts of the employee with this id</p>\n","type":"text/plain"},"key":"employeeID","value":"89nzICSt3oZJWhTeco6AmO958Bz1"},{"disabled":true,"description":{"content":"<p>If present, only get released (if <code>true</code>) or unreleased (if <code>false</code>) shifts</p>\n","type":"text/plain"},"key":"released","value":"true"}],"variable":[]}},"response":[{"id":"503e46b7-121c-4031-ab5e-a184c8184466","name":"Get shifts","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts?startFrom=2023-05-01T00:00:00.000Z&startTo=2023-10-30T00:00:00.000Z","protocol":"https","host":["europe-west1-production-eu-327a3","cloudfunctions","net"],"path":["api","companies","COMPANY_ID","shifts"],"query":[{"key":"employeeID","value":"89nzICSt3oZJWhTeco6AmO958Bz1","disabled":true},{"key":"released","value":"true","disabled":true},{"key":"startFrom","value":"2023-05-01T00:00:00.000Z"},{"key":"startTo","value":"2023-10-30T00:00:00.000Z"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"Trcu7MKFomu5y5zv1B8G\",\n        \"start\": \"2026-03-12T09:00:00.000Z\",\n        \"end\": \"2026-03-12T17:00:00.000Z\",\n        \"checkIn\": null,\n        \"checkOut\": null,\n        \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n        \"roleID\": \"hLbEKIPTlMh3ehotXl0w\",\n        \"departmentID\": \"PKHaOSgFA4uguOqmLfWv\",\n        \"released\": true,\n        \"isForSale\": false,\n        \"comment\": {\n            \"message\": \"Stocktake before close\",\n            \"creatorID\": \"API\",\n            \"createdOn\": \"2026-09-03T13:05:54.986Z\"\n        },\n        \"customBreak\": null,\n        \"overlappingLeaveID\": null,\n        \"approval\": null,\n        \"tagIDs\": [\n            \"4FfT87ZfNpOj5aP4E4N3\"\n        ],\n        \"createTime\": \"2026-09-03T13:05:55.179Z\",\n        \"updateTime\": \"2026-09-03T13:05:55.179Z\",\n        \"grossPay\": 0\n    },\n    {\n        \"id\": \"8QwZmRt4LpXvNb2KdYfC\",\n        \"start\": \"2026-03-13T17:00:00.000Z\",\n        \"end\": \"2026-03-13T23:00:00.000Z\",\n        \"checkIn\": null,\n        \"checkOut\": null,\n        \"employeeID\": null,\n        \"roleID\": \"hLbEKIPTlMh3ehotXl0w\",\n        \"departmentID\": \"PKHaOSgFA4uguOqmLfWv\",\n        \"released\": false,\n        \"isForSale\": false,\n        \"comment\": null,\n        \"customBreak\": null,\n        \"overlappingLeaveID\": null,\n        \"approval\": null,\n        \"tagIDs\": [],\n        \"createTime\": \"2026-09-03T13:06:31.484Z\",\n        \"updateTime\": \"2026-09-03T13:06:31.484Z\",\n        \"grossPay\": 0\n    }\n]"},{"id":"89f38885-5c19-90c2-a7e6-d2286f0f32f0","name":"Missing startFrom","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts?startFrom=2023-05-01T00:00:00.000Z&startTo=2023-05-07T00:00:00.000Z","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","shifts"],"query":[{"key":"startFrom","value":"2023-05-01T00:00:00.000Z","description":"Only get shifts starting *on or after* this time"},{"key":"startTo","value":"2023-05-07T00:00:00.000Z","description":"Only get shifts starting *before* this time"},{"key":"employeeID","value":"89nzICSt3oZJWhTeco6AmO958Bz1","description":"If present, only get shifts of the employee with this id","disabled":true},{"key":"released","value":"true","description":"If present, only get released (if `true`) or unreleased (if `false`) shifts","disabled":true}]},"description":"### Request Fields\n\n| **Param** | **Required** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- | --- |\n| `startFrom` | Yes | Only get shifts starting _on or after_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2022-04-07T22:00:00.000Z` |\n| `startTo` | Yes | Only get shifts starting _before_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2022-04-10T22:00:00.000Z` |\n| `employeeID` | No | If present, only get shifts of the employee with this id | `string` | `j1TznpqVtLN0nmgPfK476U5fn2O2` |\n| `released` | No | If present, only get released (if `true`) or unreleased (if `false`) shifts | `boolean` | `true` |\n| `roleID` | No | If present, only get shifts on this role. An unknown role ID returns `400`. | `string` | `hLbEKIPTlMh3ehotXl0w` |\n| `departmentID` | No | If present, only get shifts in this department. An unknown department ID returns `400`. A role belongs to exactly one department, so `roleID` on its own is already sufficient; if you send both and the role does not belong to the department, the request returns `400`. | `string` | `PKHaOSgFA4uguOqmLfWv` |\n\n### Response Fields\n\n| **Body** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- |\n| id | Shift ID | `string` | `Trcu7MKFomu5y5zv1B8G` |\n| start | When Shift starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T08:00:00.000Z` |\n| end | When Shift ends | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T16:00:00.000Z` |\n| employeeID | Employee associated to the Shift | `string` / `null` | `null` |\n| roleID | Role associated with the Shift | `string` | `hLbEKIPTlMh3ehotXl0w` |\n| departmentID | Department associated with the Shift | `string` | `PKHaOSgFA4uguOqmLfWv` |\n| released | If Shift was released | `boolean` | `false` |\n| isForSale | if Shift is for sale | `boolean` | `false` |\n| comment | Shift comments | `object` / `null` |  |\n| comment.message | Comment Text | `string` | `Comments! 😍` |\n| comment.creatorID | How was this comment created, via UI or API | `string` | `API` |\n| comment.createdOn | When comment was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:43:36.542Z` |\n| customBreak | Employee Break for example \"Lunch Break\" | `object` / `null` | `null` |\n| customBreak.creatorID | If it was created by the Employee or automatically | `string` / `\"automatic\"` | `null` |\n| customBreak.duration | Break duration in Hours | `number` | `1` |\n| customBreak.createdOn | When Break was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |\n| overlappingLeaveID | If there is a Leave overlapping the Shift, for example a Vacation, Parental leave, etc... | `string` / `null` | `null` |\n| approval | Shift Approval | `object` / `null` | `null` |\n| approval.approver | `EmployeeID` / `\"automatic\"` | `string` | `automatic` |\n| approval.date | Shift Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-27T09:10:30.336Z` |\n| approval.originalStart | Shift Original Start Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-07T09:10:30.336Z` |\n| approval.originalEnd | Shift Original End Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-08T09:10:30.336Z` |\n| grossPay | Shift Salary. If `employeeID`  <br>is null, this value will not be calculated and return `null`  <br>  <br>**Note:** While grossPay has been rigorously tested, its accuracy in some unique cases might vary. We welcome **feedback** to enhance its precision. | `number` / `null` | `null` |\n| `tagIDs` | Shift tags | `string[]` | `[\"tagID_1\", \"tagID_2\"]` |\n| checkIn | The employee's actual clock-in, as an object. The key is always present and is `null` when they have not clocked in. | `object` / `null` | `{\"time\": \"2023-10-23T08:02:11.000Z\"}` |\n| checkIn.time | When the employee clocked in | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T08:02:11.000Z` |\n| checkOut | The employee's actual clock-out, as an object. The key is always present and is `null` when they have not clocked out. | `object` / `null` | `{\"time\": \"2023-10-23T16:04:57.000Z\"}` |\n| checkOut.time | When the employee clocked out | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T16:04:57.000Z` |\n| createTime | When Shift was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |\n| updateTime | When Shift was updated | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Query param startFrom is missing\""},{"id":"a35c69c3-8932-79c1-2f5c-d5e5dbbb6377","name":"Unknown roleID","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts?startFrom=2023-05-01T00:00:00.000Z&startTo=2023-05-07T00:00:00.000Z","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","shifts"],"query":[{"key":"startFrom","value":"2023-05-01T00:00:00.000Z","description":"Only get shifts starting *on or after* this time"},{"key":"startTo","value":"2023-05-07T00:00:00.000Z","description":"Only get shifts starting *before* this time"},{"key":"employeeID","value":"89nzICSt3oZJWhTeco6AmO958Bz1","description":"If present, only get shifts of the employee with this id","disabled":true},{"key":"released","value":"true","description":"If present, only get released (if `true`) or unreleased (if `false`) shifts","disabled":true}]},"description":"### Request Fields\n\n| **Param** | **Required** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- | --- |\n| `startFrom` | Yes | Only get shifts starting _on or after_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2022-04-07T22:00:00.000Z` |\n| `startTo` | Yes | Only get shifts starting _before_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2022-04-10T22:00:00.000Z` |\n| `employeeID` | No | If present, only get shifts of the employee with this id | `string` | `j1TznpqVtLN0nmgPfK476U5fn2O2` |\n| `released` | No | If present, only get released (if `true`) or unreleased (if `false`) shifts | `boolean` | `true` |\n| `roleID` | No | If present, only get shifts on this role. An unknown role ID returns `400`. | `string` | `hLbEKIPTlMh3ehotXl0w` |\n| `departmentID` | No | If present, only get shifts in this department. An unknown department ID returns `400`. A role belongs to exactly one department, so `roleID` on its own is already sufficient; if you send both and the role does not belong to the department, the request returns `400`. | `string` | `PKHaOSgFA4uguOqmLfWv` |\n\n### Response Fields\n\n| **Body** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- |\n| id | Shift ID | `string` | `Trcu7MKFomu5y5zv1B8G` |\n| start | When Shift starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T08:00:00.000Z` |\n| end | When Shift ends | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T16:00:00.000Z` |\n| employeeID | Employee associated to the Shift | `string` / `null` | `null` |\n| roleID | Role associated with the Shift | `string` | `hLbEKIPTlMh3ehotXl0w` |\n| departmentID | Department associated with the Shift | `string` | `PKHaOSgFA4uguOqmLfWv` |\n| released | If Shift was released | `boolean` | `false` |\n| isForSale | if Shift is for sale | `boolean` | `false` |\n| comment | Shift comments | `object` / `null` |  |\n| comment.message | Comment Text | `string` | `Comments! 😍` |\n| comment.creatorID | How was this comment created, via UI or API | `string` | `API` |\n| comment.createdOn | When comment was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:43:36.542Z` |\n| customBreak | Employee Break for example \"Lunch Break\" | `object` / `null` | `null` |\n| customBreak.creatorID | If it was created by the Employee or automatically | `string` / `\"automatic\"` | `null` |\n| customBreak.duration | Break duration in Hours | `number` | `1` |\n| customBreak.createdOn | When Break was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |\n| overlappingLeaveID | If there is a Leave overlapping the Shift, for example a Vacation, Parental leave, etc... | `string` / `null` | `null` |\n| approval | Shift Approval | `object` / `null` | `null` |\n| approval.approver | `EmployeeID` / `\"automatic\"` | `string` | `automatic` |\n| approval.date | Shift Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-27T09:10:30.336Z` |\n| approval.originalStart | Shift Original Start Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-07T09:10:30.336Z` |\n| approval.originalEnd | Shift Original End Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-08T09:10:30.336Z` |\n| grossPay | Shift Salary. If `employeeID`  <br>is null, this value will not be calculated and return `null`  <br>  <br>**Note:** While grossPay has been rigorously tested, its accuracy in some unique cases might vary. We welcome **feedback** to enhance its precision. | `number` / `null` | `null` |\n| `tagIDs` | Shift tags | `string[]` | `[\"tagID_1\", \"tagID_2\"]` |\n| checkIn | The employee's actual clock-in, as an object. The key is always present and is `null` when they have not clocked in. | `object` / `null` | `{\"time\": \"2023-10-23T08:02:11.000Z\"}` |\n| checkIn.time | When the employee clocked in | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T08:02:11.000Z` |\n| checkOut | The employee's actual clock-out, as an object. The key is always present and is `null` when they have not clocked out. | `object` / `null` | `{\"time\": \"2023-10-23T16:04:57.000Z\"}` |\n| checkOut.time | When the employee clocked out | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T16:04:57.000Z` |\n| createTime | When Shift was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |\n| updateTime | When Shift was updated | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Invalid roleID: role abc123 not found\""},{"id":"4a162d7e-0613-2bcf-17fb-41d6d3e14de3","name":"Unknown departmentID","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts?startFrom=2023-05-01T00:00:00.000Z&startTo=2023-05-07T00:00:00.000Z","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","shifts"],"query":[{"key":"startFrom","value":"2023-05-01T00:00:00.000Z","description":"Only get shifts starting *on or after* this time"},{"key":"startTo","value":"2023-05-07T00:00:00.000Z","description":"Only get shifts starting *before* this time"},{"key":"employeeID","value":"89nzICSt3oZJWhTeco6AmO958Bz1","description":"If present, only get shifts of the employee with this id","disabled":true},{"key":"released","value":"true","description":"If present, only get released (if `true`) or unreleased (if `false`) shifts","disabled":true}]},"description":"### Request Fields\n\n| **Param** | **Required** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- | --- |\n| `startFrom` | Yes | Only get shifts starting _on or after_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2022-04-07T22:00:00.000Z` |\n| `startTo` | Yes | Only get shifts starting _before_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2022-04-10T22:00:00.000Z` |\n| `employeeID` | No | If present, only get shifts of the employee with this id | `string` | `j1TznpqVtLN0nmgPfK476U5fn2O2` |\n| `released` | No | If present, only get released (if `true`) or unreleased (if `false`) shifts | `boolean` | `true` |\n| `roleID` | No | If present, only get shifts on this role. An unknown role ID returns `400`. | `string` | `hLbEKIPTlMh3ehotXl0w` |\n| `departmentID` | No | If present, only get shifts in this department. An unknown department ID returns `400`. A role belongs to exactly one department, so `roleID` on its own is already sufficient; if you send both and the role does not belong to the department, the request returns `400`. | `string` | `PKHaOSgFA4uguOqmLfWv` |\n\n### Response Fields\n\n| **Body** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- |\n| id | Shift ID | `string` | `Trcu7MKFomu5y5zv1B8G` |\n| start | When Shift starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T08:00:00.000Z` |\n| end | When Shift ends | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T16:00:00.000Z` |\n| employeeID | Employee associated to the Shift | `string` / `null` | `null` |\n| roleID | Role associated with the Shift | `string` | `hLbEKIPTlMh3ehotXl0w` |\n| departmentID | Department associated with the Shift | `string` | `PKHaOSgFA4uguOqmLfWv` |\n| released | If Shift was released | `boolean` | `false` |\n| isForSale | if Shift is for sale | `boolean` | `false` |\n| comment | Shift comments | `object` / `null` |  |\n| comment.message | Comment Text | `string` | `Comments! 😍` |\n| comment.creatorID | How was this comment created, via UI or API | `string` | `API` |\n| comment.createdOn | When comment was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:43:36.542Z` |\n| customBreak | Employee Break for example \"Lunch Break\" | `object` / `null` | `null` |\n| customBreak.creatorID | If it was created by the Employee or automatically | `string` / `\"automatic\"` | `null` |\n| customBreak.duration | Break duration in Hours | `number` | `1` |\n| customBreak.createdOn | When Break was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |\n| overlappingLeaveID | If there is a Leave overlapping the Shift, for example a Vacation, Parental leave, etc... | `string` / `null` | `null` |\n| approval | Shift Approval | `object` / `null` | `null` |\n| approval.approver | `EmployeeID` / `\"automatic\"` | `string` | `automatic` |\n| approval.date | Shift Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-27T09:10:30.336Z` |\n| approval.originalStart | Shift Original Start Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-07T09:10:30.336Z` |\n| approval.originalEnd | Shift Original End Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-08T09:10:30.336Z` |\n| grossPay | Shift Salary. If `employeeID`  <br>is null, this value will not be calculated and return `null`  <br>  <br>**Note:** While grossPay has been rigorously tested, its accuracy in some unique cases might vary. We welcome **feedback** to enhance its precision. | `number` / `null` | `null` |\n| `tagIDs` | Shift tags | `string[]` | `[\"tagID_1\", \"tagID_2\"]` |\n| checkIn | The employee's actual clock-in, as an object. The key is always present and is `null` when they have not clocked in. | `object` / `null` | `{\"time\": \"2023-10-23T08:02:11.000Z\"}` |\n| checkIn.time | When the employee clocked in | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T08:02:11.000Z` |\n| checkOut | The employee's actual clock-out, as an object. The key is always present and is `null` when they have not clocked out. | `object` / `null` | `{\"time\": \"2023-10-23T16:04:57.000Z\"}` |\n| checkOut.time | When the employee clocked out | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T16:04:57.000Z` |\n| createTime | When Shift was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |\n| updateTime | When Shift was updated | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Invalid departmentID: department abc123 not found\""}],"_postman_id":"0807785c-d41e-4b2d-b4c4-72fb8968ffcd"},{"name":"Get shift","id":"1e09229b-602c-40c2-9b2f-eb169d17f9ec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts/:shiftID","description":"<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Shift ID</td>\n<td><code>string</code></td>\n<td><code>Trcu7MKFomu5y5zv1B8G</code></td>\n</tr>\n<tr>\n<td>start</td>\n<td>When Shift starts</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T08:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When Shift ends</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T16:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>employeeID</td>\n<td>Employee associated to the Shift</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>roleID</td>\n<td>Role associated with the Shift</td>\n<td><code>string</code></td>\n<td><code>hLbEKIPTlMh3ehotXl0w</code></td>\n</tr>\n<tr>\n<td>departmentID</td>\n<td>Department associated with the Shift</td>\n<td><code>string</code></td>\n<td><code>PKHaOSgFA4uguOqmLfWv</code></td>\n</tr>\n<tr>\n<td>released</td>\n<td>If Shift was released</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>isForSale</td>\n<td>if Shift is for sale</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>comment</td>\n<td>Shift comments</td>\n<td><code>object</code> / <code>null</code></td>\n<td></td>\n</tr>\n<tr>\n<td>comment.message</td>\n<td>Comment Text</td>\n<td><code>string</code></td>\n<td><code>Comments! 😍</code></td>\n</tr>\n<tr>\n<td>comment.creatorID</td>\n<td>How was this comment created, via UI or API</td>\n<td><code>string</code></td>\n<td><code>API</code></td>\n</tr>\n<tr>\n<td>comment.createdOn</td>\n<td>When comment was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:43:36.542Z</code></td>\n</tr>\n<tr>\n<td>customBreak</td>\n<td>Employee Break for example \"Lunch Break\"</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>customBreak.creatorID</td>\n<td>If it was created by the Employee or automatically</td>\n<td><code>string</code> / <code>\"automatic\"</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>customBreak.duration</td>\n<td>Break duration in Hours</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>customBreak.createdOn</td>\n<td>When Break was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>overlappingLeaveID</td>\n<td>If there is a Leave overlapping the Shift, for example a Vacation, Parental leave, etc...</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>approval</td>\n<td>Shift Approval</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>approval.approver</td>\n<td><code>EmployeeID</code> / <code>\"automatic\"</code></td>\n<td><code>string</code></td>\n<td><code>automatic</code></td>\n</tr>\n<tr>\n<td>approval.date</td>\n<td>Shift Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-12-27T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>approval.originalStart</td>\n<td>Shift Original Start Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-12-07T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>approval.originalEnd</td>\n<td>Shift Original End Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-12-08T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>grossPay</td>\n<td>Shift Salary. If <code>employeeID</code>  <br />is null, this value will not be calculated and return <code>null</code>  <br />  <br /><strong>Note:</strong> While grossPay has been rigorously tested, its accuracy in some unique cases might vary. We welcome <strong>feedback</strong> to enhance its precision.</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td><code>tagIDs</code></td>\n<td>Shift tags</td>\n<td><code>string[]</code></td>\n<td><code>[\"tagID_1\", \"tagID_2\"]</code></td>\n</tr>\n<tr>\n<td>checkIn</td>\n<td>The employee's actual clock-in, as an object. The key is always present and is <code>null</code> when they have not clocked in.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"time\": \"2023-10-23T08:02:11.000Z\"}</code></td>\n</tr>\n<tr>\n<td>checkIn.time</td>\n<td>When the employee clocked in</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T08:02:11.000Z</code></td>\n</tr>\n<tr>\n<td>checkOut</td>\n<td>The employee's actual clock-out, as an object. The key is always present and is <code>null</code> when they have not clocked out.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"time\": \"2023-10-23T16:04:57.000Z\"}</code></td>\n</tr>\n<tr>\n<td>checkOut.time</td>\n<td>When the employee clocked out</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T16:04:57.000Z</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Shift was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Shift was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:10:30.336Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","shifts",":shiftID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"description":{"content":"<p>Shift ID</p>\n","type":"text/plain"},"type":"any","value":"","key":"shiftID"}]}},"response":[{"id":"98f13a09-b32d-49f9-935c-9071ebcfbcbd","name":"Get shift","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts/Trcu7MKFomu5y5zv1B8G"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"Trcu7MKFomu5y5zv1B8G\",\n    \"start\": \"2026-03-12T09:00:00.000Z\",\n    \"end\": \"2026-03-12T17:00:00.000Z\",\n    \"checkIn\": null,\n    \"checkOut\": null,\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"roleID\": \"hLbEKIPTlMh3ehotXl0w\",\n    \"departmentID\": \"PKHaOSgFA4uguOqmLfWv\",\n    \"released\": true,\n    \"isForSale\": false,\n    \"comment\": {\n        \"message\": \"Stocktake before close\",\n        \"creatorID\": \"API\",\n        \"createdOn\": \"2026-09-03T13:05:54.986Z\"\n    },\n    \"customBreak\": null,\n    \"overlappingLeaveID\": null,\n    \"approval\": null,\n    \"tagIDs\": [\n        \"4FfT87ZfNpOj5aP4E4N3\"\n    ],\n    \"createTime\": \"2026-09-03T13:05:55.179Z\",\n    \"updateTime\": \"2026-09-03T13:05:55.179Z\",\n    \"grossPay\": 0\n}"}],"_postman_id":"1e09229b-602c-40c2-9b2f-eb169d17f9ec"},{"name":"Update shift","id":"4f040678-cf6e-49bd-8e60-fe326f839cf9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"start\": \"2023-05-04T19:30:00.000Z\",\n    \"end\": \"2023-05-05T02:00:00.000Z\",\n    \"employeeID\": \"c6gzyUOTsof8xGUBwJhKZ6l0Pwi1\",\n    \"roleID\": \"lkADAqIEiefMkhwkdmeL\",\n    \"released\": true,\n    \"comment\": \"Comments! 😍\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts/:shiftID","description":"<p><strong>NOTE:</strong> You cannot change the date of a shift</p>\n<h3 id=\"request-fields\"><strong>Request Fields</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>roleID</code></td>\n<td>No</td>\n<td>Role ID associated to the Shift</td>\n<td><code>string</code></td>\n<td><code>hLbEKIPTlMh3ehotXl0w</code></td>\n</tr>\n<tr>\n<td><code>start</code></td>\n<td>No</td>\n<td>When Shift starts</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-05-18T14:00:00.000Z</code></td>\n</tr>\n<tr>\n<td><code>end</code></td>\n<td>No</td>\n<td>When Shift ends</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-05-19T02:00:00.000Z</code></td>\n</tr>\n<tr>\n<td><code>employeeID</code></td>\n<td>No</td>\n<td>Employee ID associated to the Shift</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td><code>released</code></td>\n<td>No</td>\n<td>If Shift was released (published). <strong>Releasing is one-way</strong> - once a shift is released you cannot set this back to <code>false</code>; the request returns <code>400 \"Invalid released: cannot set released to false if the shift is currently released\"</code>.</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td><code>comment</code></td>\n<td>No</td>\n<td>Shift comments</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>Comments! 😍</code></td>\n</tr>\n<tr>\n<td><code>tagIDs</code></td>\n<td>No</td>\n<td>Shift tags</td>\n<td><code>string[]</code></td>\n<td><code>[\"tagID_1\", \"tagID_2\"]</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Shift Id</td>\n<td><code>string</code></td>\n<td><code>Trcu7MKFomu5y5zv1B8G</code></td>\n</tr>\n<tr>\n<td>start</td>\n<td>When Shift starts</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T08:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When Shift ends</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T16:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>employeeID</td>\n<td>Employee ID associated to the Shift</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>roleID</td>\n<td>Role ID associated to the Shift</td>\n<td><code>string</code></td>\n<td><code>hLbEKIPTlMh3ehotXl0w</code></td>\n</tr>\n<tr>\n<td>departmentID</td>\n<td>Department ID associated to the Shift</td>\n<td><code>string</code></td>\n<td><code>PKHaOSgFA4uguOqmLfWv</code></td>\n</tr>\n<tr>\n<td>released</td>\n<td>If Shift was released</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>isForSale</td>\n<td>if Shift is for sale</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>comment</td>\n<td>Shift comments</td>\n<td><code>object</code></td>\n<td></td>\n</tr>\n<tr>\n<td>comment.message</td>\n<td>Comment Text</td>\n<td><code>string</code></td>\n<td><code>Comments! 😍</code></td>\n</tr>\n<tr>\n<td>comment.creatorID</td>\n<td>How was this comment created, via UI or API</td>\n<td><code>string</code></td>\n<td><code>API</code></td>\n</tr>\n<tr>\n<td>comment.createdOn</td>\n<td>When comment was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:43:36.542Z</code></td>\n</tr>\n<tr>\n<td>customBreak</td>\n<td>Employee Break for example \"Lunch Break\"</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>customBreak.creatorID</td>\n<td>If it was created by the Employee or automatically</td>\n<td><code>string</code> / <code>\"automatic\"</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>customBreak.duration</td>\n<td>Break duration in Hours</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>customBreak.createdOn</td>\n<td>When Break was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>overlappingLeaveID</td>\n<td>If there is a Leave overlapping the Shift, for example a Vacation, Parental leave, etc...</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>approval</td>\n<td>Shift Approval</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>approval.approver</td>\n<td><code>EmployeeID</code> / <code>\"automatic\"</code></td>\n<td><code>string</code></td>\n<td><code>automatic</code></td>\n</tr>\n<tr>\n<td>approval.date</td>\n<td>Shift Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-12-27T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>approval.originalStart</td>\n<td>Shift Original Start Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-12-07T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>approval.originalEnd</td>\n<td>Shift Original End Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-12-08T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>grossPay</td>\n<td>Shift Salary. If <code>employeeID</code>  <br />is null, this value will not be calculated and return <code>null</code>  <br />  <br /><strong>Note:</strong> While grossPay has been rigorously tested, its accuracy in some unique cases might vary. We welcome <strong>feedback</strong> to enhance its precision.</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td><code>tagIDs</code></td>\n<td>Shift tags</td>\n<td><code>string[]</code></td>\n<td><code>[\"tagID_1\", \"tagID_2\"]</code></td>\n</tr>\n<tr>\n<td>checkIn</td>\n<td>The employee's actual clock-in, as an object. The key is always present and is <code>null</code> when they have not clocked in.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"time\": \"2023-10-23T08:02:11.000Z\"}</code></td>\n</tr>\n<tr>\n<td>checkIn.time</td>\n<td>When the employee clocked in</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T08:02:11.000Z</code></td>\n</tr>\n<tr>\n<td>checkOut</td>\n<td>The employee's actual clock-out, as an object. The key is always present and is <code>null</code> when they have not clocked out.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"time\": \"2023-10-23T16:04:57.000Z\"}</code></td>\n</tr>\n<tr>\n<td>checkOut.time</td>\n<td>When the employee clocked out</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T16:04:57.000Z</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Shift was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Shift was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:43:36.597Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","shifts",":shiftID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"id":"30f73282-f123-468d-9a07-d9159664a22d","description":{"content":"<p>Shift ID</p>\n","type":"text/plain"},"type":"any","value":"","key":"shiftID"}]}},"response":[{"id":"4ed9f299-c390-4683-87e4-0c17ee890cf4","name":"Update shift","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"employeeID\": null,\n    \"roleID\": \"hLbEKIPTlMh3ehotXl0w\",\n    \"start\": \"2023-05-18T14:00:00.000Z\",\n    \"end\": \"2023-05-19T02:00:00.000Z\",\n    \"released\": true,\n    \"comment\": \"Comments! 😍\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts/:shiftID","protocol":"https","host":["europe-west1-production-eu-327a3","cloudfunctions","net"],"path":["api","companies","COMPANY_ID","shifts",":shiftID"],"variable":[{"key":"shiftID","value":"Trcu7MKFomu5y5zv1B8G"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"Trcu7MKFomu5y5zv1B8G\",\n    \"start\": \"2026-03-12T09:00:00.000Z\",\n    \"end\": \"2026-03-12T17:00:00.000Z\",\n    \"checkIn\": {\n        \"time\": \"2026-03-12T08:57:00.000Z\"\n    },\n    \"checkOut\": {\n        \"time\": \"2026-03-12T17:12:00.000Z\"\n    },\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"roleID\": \"hLbEKIPTlMh3ehotXl0w\",\n    \"departmentID\": \"PKHaOSgFA4uguOqmLfWv\",\n    \"released\": true,\n    \"isForSale\": false,\n    \"comment\": {\n        \"message\": \"Stocktake before close 📋\",\n        \"creatorID\": \"API\",\n        \"createdOn\": \"2026-03-10T14:22:08.117Z\"\n    },\n    \"customBreak\": {\n        \"creatorID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n        \"duration\": 0.5,\n        \"createdOn\": \"2026-03-12T12:30:00.000Z\"\n    },\n    \"overlappingLeaveID\": null,\n    \"approval\": {\n        \"approver\": \"automatic\",\n        \"date\": \"2026-03-12T17:12:00.000Z\",\n        \"originalStart\": \"2026-03-12T09:00:00.000Z\",\n        \"originalEnd\": \"2026-03-12T17:00:00.000Z\"\n    },\n    \"grossPay\": 1312.5,\n    \"tagIDs\": [\n        \"4FfT87ZfNpOj5aP4E4N3\"\n    ],\n    \"createTime\": \"2026-03-01T10:04:11.229Z\",\n    \"updateTime\": \"2026-03-12T17:12:00.881Z\"\n}"},{"id":"83abb093-756b-7bc6-8b54-0eb9edbef091","name":"Unrelease a released shift","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"start\": \"2023-05-04T19:30:00.000Z\",\n    \"end\": \"2023-05-05T02:00:00.000Z\",\n    \"employeeID\": \"c6gzyUOTsof8xGUBwJhKZ6l0Pwi1\",\n    \"roleID\": \"lkADAqIEiefMkhwkdmeL\",\n    \"released\": true,\n    \"comment\": \"Comments! 😍\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts/:shiftID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","shifts",":shiftID"],"variable":[{"id":"30f73282-f123-468d-9a07-d9159664a22d","key":"shiftID","value":"","description":"Shift ID"}]},"description":"**NOTE:** You cannot change the date of a shift\n\n### **Request Fields**\n\n| **Body** | **Required** | **Description** | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| `roleID` | No | Role ID associated to the Shift | `string` | `hLbEKIPTlMh3ehotXl0w` |\n| `start` | No | When Shift starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-05-18T14:00:00.000Z` |\n| `end` | No | When Shift ends | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-05-19T02:00:00.000Z` |\n| `employeeID` | No | Employee ID associated to the Shift | `string` / `null` | `null` |\n| `released` | No | If Shift was released (published). **Releasing is one-way** - once a shift is released you cannot set this back to `false`; the request returns `400 \"Invalid released: cannot set released to false if the shift is currently released\"`. | `boolean` | `true` |\n| `comment` | No | Shift comments | `string` / `null` | `Comments! 😍` |\n| `tagIDs` | No | Shift tags | `string[]` | `[\"tagID_1\", \"tagID_2\"]` |\n\n### Response Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| id | Shift Id | `string` | `Trcu7MKFomu5y5zv1B8G` |\n| start | When Shift starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T08:00:00.000Z` |\n| end | When Shift ends | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T16:00:00.000Z` |\n| employeeID | Employee ID associated to the Shift | `string` / `null` | `null` |\n| roleID | Role ID associated to the Shift | `string` | `hLbEKIPTlMh3ehotXl0w` |\n| departmentID | Department ID associated to the Shift | `string` | `PKHaOSgFA4uguOqmLfWv` |\n| released | If Shift was released | `boolean` | `true` |\n| isForSale | if Shift is for sale | `boolean` | `false` |\n| comment | Shift comments | `object` |  |\n| comment.message | Comment Text | `string` | `Comments! 😍` |\n| comment.creatorID | How was this comment created, via UI or API | `string` | `API` |\n| comment.createdOn | When comment was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:43:36.542Z` |\n| customBreak | Employee Break for example \"Lunch Break\" | `object` / `null` | `null` |\n| customBreak.creatorID | If it was created by the Employee or automatically | `string` / `\"automatic\"` | `null` |\n| customBreak.duration | Break duration in Hours | `number` | `1` |\n| customBreak.createdOn | When Break was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |\n| overlappingLeaveID | If there is a Leave overlapping the Shift, for example a Vacation, Parental leave, etc... | `string` / `null` | `null` |\n| approval | Shift Approval | `object` / `null` | `null` |\n| approval.approver | `EmployeeID` / `\"automatic\"` | `string` | `automatic` |\n| approval.date | Shift Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-27T09:10:30.336Z` |\n| approval.originalStart | Shift Original Start Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-07T09:10:30.336Z` |\n| approval.originalEnd | Shift Original End Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-12-08T09:10:30.336Z` |\n| grossPay | Shift Salary. If `employeeID`  <br>is null, this value will not be calculated and return `null`  <br>  <br>**Note:** While grossPay has been rigorously tested, its accuracy in some unique cases might vary. We welcome **feedback** to enhance its precision. | `number` / `null` | `null` |\n| `tagIDs` | Shift tags | `string[]` | `[\"tagID_1\", \"tagID_2\"]` |\n| checkIn | The employee's actual clock-in, as an object. The key is always present and is `null` when they have not clocked in. | `object` / `null` | `{\"time\": \"2023-10-23T08:02:11.000Z\"}` |\n| checkIn.time | When the employee clocked in | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T08:02:11.000Z` |\n| checkOut | The employee's actual clock-out, as an object. The key is always present and is `null` when they have not clocked out. | `object` / `null` | `{\"time\": \"2023-10-23T16:04:57.000Z\"}` |\n| checkOut.time | When the employee clocked out | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T16:04:57.000Z` |\n| createTime | When Shift was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |\n| updateTime | When Shift was updated | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:43:36.597Z` |"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Invalid released: cannot set released to false if the shift is currently released\""}],"_postman_id":"4f040678-cf6e-49bd-8e60-fe326f839cf9"},{"name":"Delete shift","id":"41ef151d-e929-4a74-99b1-9e861552afc6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts/:shiftID","description":"<h2 id=\"this-delete-is-permanent\">This delete is permanent</h2>\n<p>The shift document is <strong>removed from the database</strong>. There is no soft-delete flag, no <code>deletedOn</code> timestamp, and no way to restore it through the API or the UI. Returns <code>204</code> with no body.</p>\n<p>If you need the record to stop counting but stay recoverable, do not call this endpoint.</p>\n","urlObject":{"path":["companies","COMPANY_ID","shifts",":shiftID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"id":"765efd63-e5d0-466c-a9fc-c6a157ef24e6","description":{"content":"<p>Shift ID</p>\n","type":"text/plain"},"type":"any","value":"","key":"shiftID"}]}},"response":[{"id":"58174a57-6f4b-4f5d-86c0-bfbd73a2a98c","name":"Delete shift","originalRequest":{"method":"DELETE","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/shifts/:shiftID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","shifts",":shiftID"],"variable":[{"key":"shiftID","value":"Trcu7MKFomu5y5zv1B8G"}]}},"status":"No Content","code":204,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null}],"_postman_id":"41ef151d-e929-4a74-99b1-9e861552afc6"}],"id":"0db7d7f2-0504-41ee-8e6e-d0895c8fbc77","_postman_id":"0db7d7f2-0504-41ee-8e6e-d0895c8fbc77","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}}},{"name":"Tags","item":[{"name":"Create tag","id":"c12c3692-1198-4e82-a578-34aa3d450c39","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Tag Name\",\n    \"color\": \"#E9379D\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/tags","description":"<h3 id=\"request-fields\"><strong>Request Fields</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>Name of the tag</td>\n<td><code>string</code></td>\n<td><code>Cool tag name!</code></td>\n</tr>\n<tr>\n<td><code>color</code></td>\n<td>Color of the tag</td>\n<td>One of the supported colors from this list: \"#85909F\", \"#3D7AFF\", \"#5FD0C8\", \"#6DABC0\", \"#5A992C\", \"#07BE62\", \"#555ACF\", \"#8824BC\", \"#A35BD8\", \"#E9379D\", \"#EC4D3D\", \"#F19D9B\", \"#FF8000\", \"#F7CD45\", \"#7E4F19\"</td>\n<td><code>#85909F</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Created tag id</td>\n<td><code>string</code></td>\n<td><code>4FfT87ZfNpOj5aP4E4N3</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","tags"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"6f6e069f-65b7-4d6a-98e6-d6ce8edcccdb","name":"Create tag","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"Tag Name\",\n    \"color\": \"#E9379D\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/tags"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"4FfT87ZfNpOj5aP4E4N3\"\n}"}],"_postman_id":"c12c3692-1198-4e82-a578-34aa3d450c39"},{"name":"Get tags","id":"c6b48b40-b173-453f-8201-4cef641cdcc5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/tags","description":"<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Tag ID</td>\n<td><code>string</code></td>\n<td><code>4FfT87ZfNpOj5aP4E4N3</code></td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>Name of the tag</td>\n<td><code>string</code></td>\n<td><code>Cool tag name!</code></td>\n</tr>\n<tr>\n<td><code>color</code></td>\n<td>Color of the tag</td>\n<td>One of the supported colors from this list: \"#85909F\", \"#3D7AFF\", \"#5FD0C8\", \"#6DABC0\", \"#5A992C\", \"#07BE62\", \"#555ACF\", \"#8824BC\", \"#A35BD8\", \"#E9379D\", \"#EC4D3D\", \"#F19D9B\", \"#FF8000\", \"#F7CD45\", \"#7E4F19\"</td>\n<td><code>\"#F7CD45\"</code></td>\n</tr>\n<tr>\n<td><code>deletedOn</code></td>\n<td>When the tag was soft-deleted or <code>null</code> if not deleted</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td><code>createTime</code></td>\n<td>When the tag was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>\"2026-01-01T00:00:00.000Z\"</code></td>\n</tr>\n<tr>\n<td><code>updateTime</code></td>\n<td>When the tag was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>\"2026-01-01T00:00:00.000Z\"</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","tags"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"b14cbe4b-8c70-48e5-b715-c40e6dae1168","name":"Get tags","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/tags"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"67sxPcpdKy8stSlpgJ4h\",\n        \"name\": \"claude-doc-verify-2\",\n        \"color\": \"#F7CD45\",\n        \"deletedOn\": \"2026-09-03T12:07:41.981Z\",\n        \"createTime\": \"2026-09-03T12:07:40.952Z\",\n        \"updateTime\": \"2026-09-03T12:07:42.041Z\"\n    },\n    {\n        \"id\": \"4FfT87ZfNpOj5aP4E4N3\",\n        \"name\": \"Closing shift\",\n        \"color\": \"#F7CD45\",\n        \"deletedOn\": null,\n        \"createTime\": \"2026-09-03T13:04:52.866Z\",\n        \"updateTime\": \"2026-09-03T13:04:52.866Z\"\n    }\n]"}],"_postman_id":"c6b48b40-b173-453f-8201-4cef641cdcc5"},{"name":"Get tag","id":"a861b925-c8ed-475a-87c1-9ca0727e6725","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/tags/:tagID","description":"<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Tag ID</td>\n<td><code>string</code></td>\n<td><code>4FfT87ZfNpOj5aP4E4N3</code></td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>Name of the tag</td>\n<td><code>string</code></td>\n<td><code>Cool tag name!</code></td>\n</tr>\n<tr>\n<td><code>color</code></td>\n<td>Color of the tag</td>\n<td>One of the supported colors from this list: \"#85909F\", \"#3D7AFF\", \"#5FD0C8\", \"#6DABC0\", \"#5A992C\", \"#07BE62\", \"#555ACF\", \"#8824BC\", \"#A35BD8\", \"#E9379D\", \"#EC4D3D\", \"#F19D9B\", \"#FF8000\", \"#F7CD45\", \"#7E4F19\"</td>\n<td><code>\"#F7CD45\"</code></td>\n</tr>\n<tr>\n<td><code>deletedOn</code></td>\n<td>When the tag was soft-deleted or <code>null</code> if not deleted</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td><code>createTime</code></td>\n<td>When the tag was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>\"2026-01-01T00:00:00.000Z\"</code></td>\n</tr>\n<tr>\n<td><code>updateTime</code></td>\n<td>When the tag was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>\"2026-01-01T00:00:00.000Z\"</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","tags",":tagID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"tagID"}]}},"response":[{"id":"e7176ccb-4809-4249-9beb-20d9164ff986","name":"Get tag","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/tags/4FfT87ZfNpOj5aP4E4N3"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"4FfT87ZfNpOj5aP4E4N3\",\n    \"name\": \"Closing shift\",\n    \"color\": \"#F7CD45\",\n    \"deletedOn\": null,\n    \"createTime\": \"2026-09-03T13:04:52.866Z\",\n    \"updateTime\": \"2026-09-03T13:04:52.866Z\"\n}"}],"_postman_id":"a861b925-c8ed-475a-87c1-9ca0727e6725"},{"name":"Update tag","id":"8b4229a2-cf41-4cb2-9ec0-fd371e7869dd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Updated Tag Name\",\n    \"color\": \"#F7CD45\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/tags/:tagID","description":"<h3 id=\"request-fields\"><strong>Request Fields</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required?</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>No</td>\n<td>Name of the tag</td>\n<td><code>string</code></td>\n<td><code>Cool tag name!</code></td>\n</tr>\n<tr>\n<td><code>color</code></td>\n<td>No</td>\n<td>Color of the tag</td>\n<td>One of the supported colors from this list: \"#85909F\", \"#3D7AFF\", \"#5FD0C8\", \"#6DABC0\", \"#5A992C\", \"#07BE62\", \"#555ACF\", \"#8824BC\", \"#A35BD8\", \"#E9379D\", \"#EC4D3D\", \"#F19D9B\", \"#FF8000\", \"#F7CD45\", \"#7E4F19\"</td>\n<td><code>#85909F</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Tag ID</td>\n<td><code>string</code></td>\n<td><code>4FfT87ZfNpOj5aP4E4N3</code></td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>Name of the tag</td>\n<td><code>string</code></td>\n<td><code>Cool tag name!</code></td>\n</tr>\n<tr>\n<td><code>color</code></td>\n<td>Color of the tag</td>\n<td>One of the supported colors from this list: \"#85909F\", \"#3D7AFF\", \"#5FD0C8\", \"#6DABC0\", \"#5A992C\", \"#07BE62\", \"#555ACF\", \"#8824BC\", \"#A35BD8\", \"#E9379D\", \"#EC4D3D\", \"#F19D9B\", \"#FF8000\", \"#F7CD45\", \"#7E4F19\"</td>\n<td><code>\"#F7CD45\"</code></td>\n</tr>\n<tr>\n<td><code>deletedOn</code></td>\n<td>When the tag was soft-deleted or <code>null</code> if not deleted</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td><code>createTime</code></td>\n<td>When the tag was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>\"2026-01-01T00:00:00.000Z\"</code></td>\n</tr>\n<tr>\n<td><code>updateTime</code></td>\n<td>When the tag was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>\"2026-01-01T00:00:00.000Z\"</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","tags",":tagID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"tagID"}]}},"response":[{"id":"791f3b1f-2dab-4395-a8c2-f9c5e3f2ac4e","name":"Update tag","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"Updated Tag Name\",\n    \"color\": \"#F7CD45\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/tags/:tagID","protocol":"https","host":["europe-west1-production-eu-327a3","cloudfunctions","net"],"path":["api","companies","COMPANY_ID","tags",":tagID"],"variable":[{"key":"tagID","value":"4FfT87ZfNpOj5aP4E4N3"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"4FfT87ZfNpOj5aP4E4N3\",\n    \"name\": \"Updated Tag Name\",\n    \"color\": \"#F7CD45\",\n    \"deletedOn\": null,\n    \"createTime\": \"2026-01-01T00:00:00.000Z\",\n    \"updateTime\": \"2026-01-01T00:00:00.000Z\"\n}"}],"_postman_id":"8b4229a2-cf41-4cb2-9ec0-fd371e7869dd"},{"name":"Delete tag","id":"806a8544-8630-43b1-8687-a89f85ec7c3a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/tags/:tagID","description":"<h2 id=\"this-delete-is-reversible\">This delete is reversible</h2>\n<p>Tags are <strong>soft-deleted</strong>: the document stays and its <code>deletedOn</code> is stamped with the current time. The tag keeps resolving on shifts that reference it. Returns <code>204</code> with no body.</p>\n<p>This is the exception - every other delete in this API is permanent.</p>\n","urlObject":{"path":["companies","COMPANY_ID","tags",":tagID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"tagID"}]}},"response":[{"id":"9a586ae8-a9cc-400b-83e1-27495469db80","name":"Delete tag","originalRequest":{"method":"DELETE","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/tags/:tagID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","tags",":tagID"],"variable":[{"key":"tagID","value":"4FfT87ZfNpOj5aP4E4N3"}]}},"status":"No Content","code":204,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null}],"_postman_id":"806a8544-8630-43b1-8687-a89f85ec7c3a"}],"id":"d99e96cd-5357-4fe1-9c3a-e98e07587805","_postman_id":"d99e96cd-5357-4fe1-9c3a-e98e07587805","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}}},{"name":"Transactions","item":[{"name":"Create transactions","id":"76a40dd2-8809-4e13-a1d6-803183bc1f77","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"[\n    {\n        \"date\": \"2023-07-14T13:37:00.000Z\",\n        \"source\": \"Superb\",\n        \"externalCompanyID\": \"externalCompanyID\",\n        \"transactionType\": \"OTHER\",\n        \"externalID\": \"externalID\",\n        \"currency\": \"DKK\",\n        \"netAmount\": 80,\n        \"taxAmount\": 20,\n        \"externalEmployeeID\": \"externalEmployeeID\",\n        \"externalDepartmentID\": \"externalDepartmentID\",\n        \"transactionLines\": [\n            {\n                \"quantity\": 1,\n                \"externalProductID\": \"externalProductID1\",\n                \"externalVariantID\": \"externalVariantID1\",\n                \"productPrice\": 45,\n                \"netAmount\": 36,\n                \"taxAmount\": 9,\n                \"productSpecificDiscountValue\": null\n            },\n            {\n                \"quantity\": 1,\n                \"externalProductID\": \"externalProductID2\",\n                \"externalVariantID\": \"externalVariantID2\",\n                \"productPrice\": 55,\n                \"netAmount\": 44,\n                \"taxAmount\": 11,\n                \"productSpecificDiscountValue\": null\n            }\n        ],\n        \"transactionDiscount\": null\n    }\n]","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/transactions","description":"<h3 id=\"request-fields\"><strong>Request Fields</strong></h3>\n<p>The body is an <strong>array</strong> of transactions - <code>[{...}, {...}]</code>, not a single object. It must contain at least one and at most <strong>500</strong> transactions. An empty array returns <code>400 \"No transactions provided\"</code>; anything that is not an array returns <code>400 \"Invalid data format. Data must be an array.\"</code></p>\n<p>Validation stops at the first bad transaction and names its position: <code>\"Invalid transaction at index 2: ...\"</code>.</p>\n<p><strong>Almost every field is required.</strong> Only <code>tipAmountReceived</code> may be omitted. Several fields are required but <em>nullable</em> - they must be present in the body, and <code>null</code> is an accepted value.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>date</code></td>\n<td>Yes</td>\n<td>Transaction Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-07-14T13:37:00.000Z</code></td>\n</tr>\n<tr>\n<td>source</td>\n<td>Yes</td>\n<td>Options:  <br /><code>Ajour</code> / <code>NemPOS</code> / <code>OnlinePOS</code> / <code>Zettle</code> / <code>Superb</code> / <code>Shopify</code> / <code>Square</code> / <code>Clover</code> / <code>Piranya</code> / <code>Sitoo / Fresto</code></td>\n<td><code>string</code></td>\n<td><code>Superb</code></td>\n</tr>\n<tr>\n<td>externalCompanyID</td>\n<td>Yes</td>\n<td>Your External Company ID</td>\n<td><code>string</code></td>\n<td><code>83642</code></td>\n</tr>\n<tr>\n<td>transactionType</td>\n<td>Yes</td>\n<td>Options:  <br /><code>POS</code> / <code>WEB_SHOP</code> / <code>OTHER</code></td>\n<td><code>string</code></td>\n<td><code>OTHER</code></td>\n</tr>\n<tr>\n<td>externalID</td>\n<td>Yes</td>\n<td>Your External Transaction ID</td>\n<td><code>string</code></td>\n<td><code>9217836611</code></td>\n</tr>\n<tr>\n<td>currency</td>\n<td>Yes</td>\n<td>Options:  <br /><code>EUR</code> / <code>JPY</code> / <code>GBP</code> / <code>DKK</code> etc...</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_4217\">ISO 4217</a> encoded <code>string</code></td>\n<td><code>DKK</code></td>\n</tr>\n<tr>\n<td>netAmount</td>\n<td>Yes</td>\n<td>Transaction Total Net Value</td>\n<td><code>number</code></td>\n<td><code>80</code></td>\n</tr>\n<tr>\n<td>taxAmount</td>\n<td>Yes</td>\n<td>Total Tax applied to the Transaction</td>\n<td><code>number</code></td>\n<td><code>20</code></td>\n</tr>\n<tr>\n<td>tipAmountReceived</td>\n<td>No</td>\n<td>Total amount of tips received for the Transaction</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>25</code></td>\n</tr>\n<tr>\n<td>externalEmployeeID</td>\n<td>Yes</td>\n<td>Your External Employee ID</td>\n<td><code>string</code></td>\n<td><code>1234</code></td>\n</tr>\n<tr>\n<td>externalDepartmentID</td>\n<td>Yes</td>\n<td>Your External Department ID</td>\n<td><code>string</code></td>\n<td><code>4321</code></td>\n</tr>\n<tr>\n<td>transactionLines</td>\n<td>Yes</td>\n<td>Array of Products</td>\n<td><code>Array of Objects</code></td>\n<td><code>[{...}...]</code></td>\n</tr>\n<tr>\n<td>object.quantity</td>\n<td>Yes</td>\n<td>Nr of Products</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>object.externalProductID</td>\n<td>Yes</td>\n<td>Your Product ID</td>\n<td><code>string</code></td>\n<td></td>\n</tr>\n<tr>\n<td>object.externalVariantID</td>\n<td>Yes</td>\n<td>Your Product Variant ID</td>\n<td><code>string</code></td>\n<td></td>\n</tr>\n<tr>\n<td>object.productPrice</td>\n<td>Yes</td>\n<td>Product price</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>45</code></td>\n</tr>\n<tr>\n<td>object.netAmount</td>\n<td>Yes</td>\n<td>Transaction Net Amount</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>36</code></td>\n</tr>\n<tr>\n<td>object.taxAmount</td>\n<td>Yes</td>\n<td>Tax applied to the Transaction</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>9</code></td>\n</tr>\n<tr>\n<td>object.productSpecificDiscountValue</td>\n<td>Yes</td>\n<td>If Product has a Discount</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>transactionDiscount</td>\n<td>Yes</td>\n<td>Array of discounts applied to the transaction. This is an <strong>array</strong>, not a single object.</td>\n<td><code>Array of Objects</code> / <code>null</code></td>\n<td><code>[{...}]</code></td>\n</tr>\n<tr>\n<td>transactionDiscount[].percentage</td>\n<td>Yes</td>\n<td>Percentage Discounted applied to transaction</td>\n<td><code>number</code></td>\n<td><code>10</code></td>\n</tr>\n<tr>\n<td>transactionDiscount[].quantity</td>\n<td>Yes</td>\n<td>How many Discounts</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>transactionDiscount[].value</td>\n<td>Yes</td>\n<td>Number Discounted applied to transaction</td>\n<td><code>number</code></td>\n<td><code>15</code></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Notes on the fields that trip people up</strong></p>\n<ul>\n<li><code>transactionLines</code> must be present and must be an array. It <strong>may be empty</strong> (<code>[]</code>), but every line it does contain must carry all seven fields below - <code>productSpecificDiscountValue</code> included, though that one accepts <code>null</code>.</li>\n<li><code>transactionDiscount</code> must be present. Send <code>null</code> when there is no discount - omitting it returns <code>400 \"Invalid transaction discount: expected an array or null\"</code>. An empty array is accepted and stored as <code>null</code>.</li>\n<li><code>externalID</code> is required. It is your own transaction id and is what you will match on when reading transactions back.</li>\n</ul>\n<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Array of created Transactions IDs</td>\n<td><code>string[]</code></td>\n<td>{ \"ids\": [\"\"...] }</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","transactions"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"7b5bc0af-8475-4691-b303-11f4942692e1","name":"Create transactions","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"[\n    {\n        \"date\": \"2023-07-14T13:37:00.000Z\",\n        \"source\": \"Superb\",\n        \"externalCompanyID\": \"externalCompanyID\",\n        \"transactionType\": \"OTHER\",\n        \"externalID\": \"externalID\",\n        \"currency\": \"DKK\",\n        \"netAmount\": 80,\n        \"taxAmount\": 20,\n        \"externalEmployeeID\": \"externalEmployeeID\",\n        \"externalDepartmentID\": \"externalDepartmentID\",\n        \"transactionLines\": [\n            {\n                \"quantity\": 1,\n                \"externalProductID\": \"externalProductID1\",\n                \"externalVariantID\": \"externalVariantID1\",\n                \"productPrice\": 45,\n                \"netAmount\": 36,\n                \"taxAmount\": 9,\n                \"productSpecificDiscountValue\": null\n            },\n            {\n                \"quantity\": 1,\n                \"externalProductID\": \"externalProductID2\",\n                \"externalVariantID\": \"externalVariantID2\",\n                \"productPrice\": 55,\n                \"netAmount\": 44,\n                \"taxAmount\": 11,\n                \"productSpecificDiscountValue\": null\n            }\n        ],\n        \"transactionDiscount\": null\n    }\n]","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/transactions"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"ids\": [\n        \"6mRbTZW5tT2zAbqZyNNQ\"\n    ]\n}"}],"_postman_id":"76a40dd2-8809-4e13-a1d6-803183bc1f77"},{"name":"Get transaction","id":"01aada66-602f-4f93-b6ec-271a2f01b98a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/transactions/:transactionID","description":"<h3 id=\"response-fields\"><strong>Response Fields</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Transaction Id</td>\n<td><code>string</code></td>\n<td><code>6mRbTZW5tT2zAbqZyNNQ</code></td>\n</tr>\n<tr>\n<td>currency</td>\n<td>Options:  <br /><code>EUR</code> / <code>JPY</code> / <code>GBP</code> / <code>DKK</code> etc...</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_4217\">ISO 4217</a> encoded <code>string</code></td>\n<td><code>DKK</code></td>\n</tr>\n<tr>\n<td><code>date</code></td>\n<td>Transaction Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-07-14T13:37:00.000Z</code></td>\n</tr>\n<tr>\n<td>externalCompanyID</td>\n<td>Your External Company ID</td>\n<td><code>string</code></td>\n<td></td>\n</tr>\n<tr>\n<td>externalEmployeeID</td>\n<td>Your External Employee ID</td>\n<td><code>string</code></td>\n<td><code>1234</code></td>\n</tr>\n<tr>\n<td>externalDepartmentID</td>\n<td>Your External Department ID</td>\n<td><code>string</code></td>\n<td><code>4321</code></td>\n</tr>\n<tr>\n<td>externalID</td>\n<td>Your External Transaction ID</td>\n<td><code>string</code></td>\n<td><code>9217836611</code></td>\n</tr>\n<tr>\n<td>netAmount</td>\n<td>Transaction Total Net Value</td>\n<td><code>number</code></td>\n<td><code>80</code></td>\n</tr>\n<tr>\n<td>source</td>\n<td>Options:  <br /><code>Ajour</code> / <code>NemPOS</code> / <code>OnlinePOS</code> / <code>Zettle</code> / <code>Superb</code> / <code>Shopify</code> / <code>Square</code> / <code>Clover</code> / <code>Piranya</code> / <code>Sitoo / Fresto</code></td>\n<td><code>string</code></td>\n<td><code>Superb</code></td>\n</tr>\n<tr>\n<td>taxAmount</td>\n<td>Total Tax applied to the Transaction</td>\n<td><code>number</code></td>\n<td><code>20</code></td>\n</tr>\n<tr>\n<td>tipAmountReceived</td>\n<td>Total amount of tips received for the Transaction</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>25</code></td>\n</tr>\n<tr>\n<td>transactionDiscount</td>\n<td>Array of discounts applied to the transaction. This is an <strong>array</strong>, not a single object.</td>\n<td><code>Array of Objects</code> / <code>null</code></td>\n<td><code>[{...}]</code></td>\n</tr>\n<tr>\n<td>transactionDiscount[].percentage</td>\n<td>Percentage Discounted applied to transaction</td>\n<td><code>number</code></td>\n<td><code>10</code></td>\n</tr>\n<tr>\n<td>transactionDiscount[].quantity</td>\n<td>How many Discounts</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>transactionDiscount[].value</td>\n<td>Number Discounted applied to transaction</td>\n<td><code>number</code></td>\n<td><code>15</code></td>\n</tr>\n<tr>\n<td>transactionLines</td>\n<td>Array of Products</td>\n<td><code>Array of Objects</code></td>\n<td><code>[{...}...]</code></td>\n</tr>\n<tr>\n<td>object.quantity</td>\n<td>Nr of Products</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>object.externalProductID</td>\n<td>Your Product ID</td>\n<td><code>string</code></td>\n<td></td>\n</tr>\n<tr>\n<td>object.externalVariantID</td>\n<td>Your Product Variant ID</td>\n<td><code>string</code></td>\n<td></td>\n</tr>\n<tr>\n<td>object.productPrice</td>\n<td>Product price</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>45</code></td>\n</tr>\n<tr>\n<td>object.netAmount</td>\n<td>Transaction Net Amount</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>36</code></td>\n</tr>\n<tr>\n<td>object.taxAmount</td>\n<td>Tax applied to the Transaction</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>9</code></td>\n</tr>\n<tr>\n<td>object.productSpecificDiscountValue</td>\n<td>If Product has a Discount</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>transactionType</td>\n<td>Options:  <br /><code>POS</code> / <code>WEB_SHOP</code> / <code>OTHER</code></td>\n<td><code>string</code></td>\n<td><code>OTHER</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Transaction was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T16:19:41.998Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Transaction was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T16:19:41.998Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","transactions",":transactionID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"description":{"content":"<p>Transaction Id</p>\n","type":"text/plain"},"type":"any","value":"","key":"transactionID"}]}},"response":[{"id":"72623cbb-7e14-4e84-9a87-273f1eef7513","name":"Get transaction","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/transactions/:transactionID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","transactions",":transactionID"],"variable":[{"key":"transactionID","value":"6mRbTZW5tT2zAbqZyNNQ"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"6mRbTZW5tT2zAbqZyNNQ\",\n    \"currency\": \"DKK\",\n    \"date\": \"2026-03-12T19:42:00.000Z\",\n    \"externalCompanyID\": \"83642\",\n    \"externalDepartmentID\": \"FOH-01\",\n    \"externalEmployeeID\": \"1042\",\n    \"externalID\": \"9217836611\",\n    \"netAmount\": 476,\n    \"source\": \"Superb\",\n    \"taxAmount\": 119,\n    \"tipAmountReceived\": 50,\n    \"transactionDiscount\": [\n        {\n            \"percentage\": 10,\n            \"quantity\": 1,\n            \"value\": 53\n        }\n    ],\n    \"transactionLines\": [\n        {\n            \"quantity\": 2,\n            \"externalProductID\": \"SKU-1180\",\n            \"externalVariantID\": \"SKU-1180-GLS\",\n            \"productPrice\": 95,\n            \"netAmount\": 152,\n            \"taxAmount\": 38,\n            \"productSpecificDiscountValue\": null\n        },\n        {\n            \"quantity\": 1,\n            \"externalProductID\": \"SKU-4402\",\n            \"externalVariantID\": \"SKU-4402-STD\",\n            \"productPrice\": 389,\n            \"netAmount\": 324,\n            \"taxAmount\": 81,\n            \"productSpecificDiscountValue\": 53\n        }\n    ],\n    \"transactionType\": \"POS\",\n    \"createTime\": \"2026-03-12T19:42:03.771Z\",\n    \"updateTime\": \"2026-03-12T19:42:03.771Z\"\n}"}],"_postman_id":"01aada66-602f-4f93-b6ec-271a2f01b98a"},{"name":"Get transactions","id":"5e00b536-9a6a-418f-a565-6fe3597a49d5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/transactions?from=2023-07-01T00:00:00.000Z&to=2023-08-02T00:00:00.000Z","description":"<p><strong>Note:</strong> this endpoint has no page size and no cap on the date range, and it returns every transaction line in full. A wide range gets slow and large fast - a 20-month range on a modestly busy company returned ~12 MB in ~20 s, and a 24-month range exceeded the gateway timeout and returned <code>408 upstream request timeout</code>. Request in monthly chunks rather than one wide range.</p>\n<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Param</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>from</td>\n<td>Yes</td>\n<td>Only get Transactions starting <em>on or after</em> this time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-07-01T00:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>to</td>\n<td>Yes</td>\n<td>Only get Transactions starting <em>before</em> this time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-30T00:00:00.000Z</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\"><strong>Response Fields</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>Transaction Id</td>\n<td><code>string</code></td>\n<td><code>6mRbTZW5tT2zAbqZyNNQ</code></td>\n</tr>\n<tr>\n<td>currency</td>\n<td>Options:  <br /><code>EUR</code> / <code>JPY</code> / <code>GBP</code> / <code>DKK</code> etc...</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_4217\">ISO 4217</a> encoded <code>string</code></td>\n<td><code>DKK</code></td>\n</tr>\n<tr>\n<td><code>date</code></td>\n<td>Transaction Date</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-07-14T13:37:00.000Z</code></td>\n</tr>\n<tr>\n<td>externalCompanyID</td>\n<td>Your External Company ID</td>\n<td><code>string</code></td>\n<td></td>\n</tr>\n<tr>\n<td>externalEmployeeID</td>\n<td>Your External Employee ID</td>\n<td><code>string</code></td>\n<td><code>1234</code></td>\n</tr>\n<tr>\n<td>externalDepartmentID</td>\n<td>Your External Department ID</td>\n<td><code>string</code></td>\n<td><code>4321</code></td>\n</tr>\n<tr>\n<td>externalID</td>\n<td>Your External Transaction ID</td>\n<td><code>string</code></td>\n<td><code>9217836611</code></td>\n</tr>\n<tr>\n<td>netAmount</td>\n<td>Transaction Total Net Value</td>\n<td><code>number</code></td>\n<td><code>80</code></td>\n</tr>\n<tr>\n<td>source</td>\n<td>Options:  <br /><code>Ajour</code> / <code>NemPOS</code> / <code>OnlinePOS</code> / <code>Zettle</code> / <code>Superb</code> / <code>Shopify</code> / <code>Square</code> / <code>Clover</code> / <code>Piranya</code> / <code>Sitoo / Fresto</code></td>\n<td><code>string</code></td>\n<td><code>Superb</code></td>\n</tr>\n<tr>\n<td>taxAmount</td>\n<td>Total Tax applied to the Transaction</td>\n<td><code>number</code></td>\n<td><code>20</code></td>\n</tr>\n<tr>\n<td>tipAmountReceived</td>\n<td>Total amount of tips received for the Transaction</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>25</code></td>\n</tr>\n<tr>\n<td>transactionDiscount</td>\n<td>Array of discounts applied to the transaction. This is an <strong>array</strong>, not a single object.</td>\n<td><code>Array of Objects</code> / <code>null</code></td>\n<td><code>[{...}]</code></td>\n</tr>\n<tr>\n<td>transactionDiscount[].percentage</td>\n<td>Percentage Discounted applied to transaction</td>\n<td><code>number</code></td>\n<td><code>10</code></td>\n</tr>\n<tr>\n<td>transactionDiscount[].quantity</td>\n<td>How many Discounts</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>transactionDiscount[].value</td>\n<td>Number Discounted applied to transaction</td>\n<td><code>number</code></td>\n<td><code>15</code></td>\n</tr>\n<tr>\n<td>transactionLines</td>\n<td>Array of Products</td>\n<td><code>Array of Objects</code></td>\n<td><code>[{...}...]</code></td>\n</tr>\n<tr>\n<td>object.quantity</td>\n<td>Nr of Products</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>object.externalProductID</td>\n<td>Your Product ID</td>\n<td><code>string</code></td>\n<td></td>\n</tr>\n<tr>\n<td>object.externalVariantID</td>\n<td>Your Product Variant ID</td>\n<td><code>string</code></td>\n<td></td>\n</tr>\n<tr>\n<td>object.productPrice</td>\n<td>Product price</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>45</code></td>\n</tr>\n<tr>\n<td>object.netAmount</td>\n<td>Transaction Net Amount</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>36</code></td>\n</tr>\n<tr>\n<td>object.taxAmount</td>\n<td>Tax applied to the Transaction</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>9</code></td>\n</tr>\n<tr>\n<td>object.productSpecificDiscountValue</td>\n<td>If Product has a Discount</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>transactionType</td>\n<td>Options:  <br /><code>POS</code> / <code>WEB_SHOP</code> / <code>OTHER</code></td>\n<td><code>string</code></td>\n<td><code>OTHER</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Transaction was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T16:19:41.998Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Transaction was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T16:19:41.998Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","transactions"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[{"key":"from","value":"2023-07-01T00:00:00.000Z"},{"key":"to","value":"2023-08-02T00:00:00.000Z"}],"variable":[]}},"response":[{"id":"970a43df-dd62-487f-a377-0bc4d6f99dbe","name":"Get transactions","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/transactions?from=2023-07-01T00:00:00.000Z&to=2023-10-30T00:00:00.000Z","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","transactions"],"query":[{"key":"from","value":"2023-07-01T00:00:00.000Z"},{"key":"to","value":"2023-10-30T00:00:00.000Z"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"6mRbTZW5tT2zAbqZyNNQ\",\n        \"currency\": \"DKK\",\n        \"date\": \"2026-03-12T19:42:00.000Z\",\n        \"externalCompanyID\": \"83642\",\n        \"externalDepartmentID\": \"FOH-01\",\n        \"externalEmployeeID\": \"1042\",\n        \"externalID\": \"9217836611\",\n        \"netAmount\": 476,\n        \"source\": \"Superb\",\n        \"taxAmount\": 119,\n        \"tipAmountReceived\": 50,\n        \"transactionDiscount\": [\n            {\n                \"percentage\": 10,\n                \"quantity\": 1,\n                \"value\": 53\n            }\n        ],\n        \"transactionLines\": [\n            {\n                \"quantity\": 2,\n                \"externalProductID\": \"SKU-1180\",\n                \"externalVariantID\": \"SKU-1180-GLS\",\n                \"productPrice\": 95,\n                \"netAmount\": 152,\n                \"taxAmount\": 38,\n                \"productSpecificDiscountValue\": null\n            },\n            {\n                \"quantity\": 1,\n                \"externalProductID\": \"SKU-4402\",\n                \"externalVariantID\": \"SKU-4402-STD\",\n                \"productPrice\": 389,\n                \"netAmount\": 324,\n                \"taxAmount\": 81,\n                \"productSpecificDiscountValue\": 53\n            }\n        ],\n        \"transactionType\": \"POS\",\n        \"createTime\": \"2026-03-12T19:42:03.771Z\",\n        \"updateTime\": \"2026-03-12T19:42:03.771Z\"\n    }\n]"},{"id":"0c518921-b862-82c6-b405-8830790d7fff","name":"Range too wide for the gateway","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/transactions?from=2023-07-01T00:00:00.000Z&to=2023-08-02T00:00:00.000Z","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","transactions"],"query":[{"key":"from","value":"2023-07-01T00:00:00.000Z"},{"key":"to","value":"2023-08-02T00:00:00.000Z"}]},"description":"**Note:** this endpoint has no page size and no cap on the date range, and it returns every transaction line in full. A wide range gets slow and large fast - a 20-month range on a modestly busy company returned ~12 MB in ~20 s, and a 24-month range exceeded the gateway timeout and returned `408 upstream request timeout`. Request in monthly chunks rather than one wide range.\n\n### Request Fields\n\n| **Param** | **Required** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- | --- |\n| from | Yes | Only get Transactions starting _on or after_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-07-01T00:00:00.000Z` |\n| to | Yes | Only get Transactions starting _before_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-30T00:00:00.000Z` |\n\n### **Response Fields**\n\n| **Body** | **Description** | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| `id` | Transaction Id | `string` | `6mRbTZW5tT2zAbqZyNNQ` |\n| currency | Options:  <br>`EUR` / `JPY` / `GBP` / `DKK` etc... | an [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) encoded `string` | `DKK` |\n| `date` | Transaction Date | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-07-14T13:37:00.000Z` |\n| externalCompanyID | Your External Company ID | `string` |  |\n| externalEmployeeID | Your External Employee ID | `string` | `1234` |\n| externalDepartmentID | Your External Department ID | `string` | `4321` |\n| externalID | Your External Transaction ID | `string` | `9217836611` |\n| netAmount | Transaction Total Net Value | `number` | `80` |\n| source | Options:  <br>`Ajour` / `NemPOS` / `OnlinePOS` / `Zettle` / `Superb` / `Shopify` / `Square` / `Clover` / `Piranya` / `Sitoo / Fresto` | `string` | `Superb` |\n| taxAmount | Total Tax applied to the Transaction | `number` | `20` |\n| tipAmountReceived | Total amount of tips received for the Transaction | `number` / `null` | `25` |\n| transactionDiscount | Array of discounts applied to the transaction. This is an **array**, not a single object. | `Array of Objects` / `null` | `[{...}]` |\n| transactionDiscount\\[\\].percentage | Percentage Discounted applied to transaction | `number` | `10` |\n| transactionDiscount\\[\\].quantity | How many Discounts | `number` | `1` |\n| transactionDiscount\\[\\].value | Number Discounted applied to transaction | `number` | `15` |\n| transactionLines | Array of Products | `Array of Objects` | `[{...}...]` |\n| object.quantity | Nr of Products | `number` | `1` |\n| object.externalProductID | Your Product ID | `string` |  |\n| object.externalVariantID | Your Product Variant ID | `string` |  |\n| object.productPrice | Product price | `number` / `null` | `45` |\n| object.netAmount | Transaction Net Amount | `number` / `null` | `36` |\n| object.taxAmount | Tax applied to the Transaction | `number` / `null` | `9` |\n| object.productSpecificDiscountValue | If Product has a Discount | `number` / `null` | `null` |\n| transactionType | Options:  <br>`POS` / `WEB_SHOP` / `OTHER` | `string` | `OTHER` |\n| createTime | When Transaction was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-28T16:19:41.998Z` |\n| updateTime | When Transaction was updated | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-28T16:19:41.998Z` |"},"status":"Request Timeout","code":408,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"upstream request timeout\""}],"_postman_id":"5e00b536-9a6a-418f-a565-6fe3597a49d5"},{"name":"Delete transaction","id":"a2c80220-84f0-456b-9ecd-17b32f70372f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/transactions/:transactionID","description":"<h2 id=\"this-delete-is-permanent\">This delete is permanent</h2>\n<p>The transaction document is <strong>removed from the database</strong>. There is no soft-delete flag, no <code>deletedOn</code> timestamp, and no way to restore it through the API or the UI. Returns <code>204</code> with no body.</p>\n<p>If you need the record to stop counting but stay recoverable, do not call this endpoint.</p>\n","urlObject":{"path":["companies","COMPANY_ID","transactions",":transactionID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"id":"216c3f55-4b8c-497d-a9a9-f5b43a8a3d26","description":{"content":"<p>Transaction Id</p>\n","type":"text/plain"},"type":"any","value":"","key":"transactionID"}]}},"response":[{"id":"35ee1998-fd77-43f7-bc66-59ce768959b8","name":"Delete transaction","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/transactions/:transactionID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","transactions",":transactionID"],"variable":[{"key":"transactionID","value":"6mRbTZW5tT2zAbqZyNNQ"}]}},"status":"No Content","code":204,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null}],"_postman_id":"a2c80220-84f0-456b-9ecd-17b32f70372f"}],"id":"4c5fa6cb-6fb0-43d6-9bc2-7096efa7272b","_postman_id":"4c5fa6cb-6fb0-43d6-9bc2-7096efa7272b","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}}},{"name":"Table Bookings","item":[{"name":"Create table booking","id":"30e1583f-644a-4323-aa34-4e208171b923","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n \"tableBookingIntegration\": \"EasyTableBooking\",\n \"externalBookingID\": \"12345678\",\n \"from\": \"2024-05-28T00:00:00Z\",\n \"durationInMinutes\": 60,\n \"status\": \"ACTIVE\",\n \"numberOfGuests\": 12,\n \"walkIn\": false,\n \"placeToken\": \"#1234FBTest\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/table-booking","description":"<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>TableBookingIntegration</strong></th>\n<th><strong>Status</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>EasyTableBooking</td>\n<td><code>ACTIVE</code> / <code>CANCELLED</code> / <code>NOT_ARRIVED</code></td>\n</tr>\n<tr>\n<td>DinnerBooking</td>\n<td><code>current</code> / <code>waiting</code> / <code>deleted</code> / <code>no_show</code> / <code>payment_error</code> / <code>moved</code></td>\n</tr>\n<tr>\n<td>Formitable</td>\n<td><code>created</code> / <code>accepted</code> / <code>cancelled</code> / <code>failed</code> / <code>expired</code></td>\n</tr>\n<tr>\n<td>Resdiary</td>\n<td><code>Unconfirmed</code> / <code>Booked</code> / <code>Confirmed</code> / <code>Closed</code> / <code>Cancelled</code> / <code>Wait</code> / <code>Declined</code> / <code>Bumped</code> / <code>WaitListQueued</code> / <code>WaitListQueueDeclined</code> / <code>WaitListQueueAccepted</code> / <code>WaitListQueueReAdded</code> / <code>Locked</code> / <code>Expired</code></td>\n</tr>\n<tr>\n<td>BookEtBord</td>\n<td><code>temporary</code> / <code>created</code> / <code>arrived</code> / <code>payed</code> / <code>completed</code> / <code>cancelled</code> / <code>deleted</code> / <code>noshow</code></td>\n</tr>\n<tr>\n<td>Couvert</td>\n<td><code>booked</code> / <code>seated</code> / <code>completed</code> / <code>cancelled</code> / <code>no-show</code> / <code>waitlisted</code></td>\n</tr>\n<tr>\n<td>Zenchef</td>\n<td><code>waiting</code> / <code>waiting_customer</code> / <code>confirmed</code> / <code>canceled</code> / <code>refused</code> / <code>arrived</code> / <code>seated</code> / <code>over</code> / <code>no_shown</code></td>\n</tr>\n<tr>\n<td>Guestplan</td>\n<td><code>active</code></td>\n</tr>\n<tr>\n<td>resOS</td>\n<td><code>request</code> / <code>declined</code> / <code>approved</code> / <code>arrived</code> / <code>seated</code> / <code>left</code> / <code>no_show</code> / <code>canceled</code> / <code>waitlist</code></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Note:</strong> integration names are case-sensitive and must match exactly as written above - <code>resOS</code> and <code>Resdiary</code> in particular.</p>\n<h3 id=\"request-fields\"><strong>Request Fields</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>tableBookingIntegration</code></td>\n<td>Yes</td>\n<td>Options:  <br /><code>EasyTableBooking</code> / <code>DinnerBooking</code> / <code>Formitable</code> / <code>Resdiary</code> / <code>BookEtBord</code> / <code>Couvert</code> / <code>Zenchef</code> / <code>Guestplan</code> / <code>resOS</code></td>\n<td><code>string</code></td>\n<td><code>EasyTableBooking</code></td>\n</tr>\n<tr>\n<td>externalBookingID</td>\n<td>Yes</td>\n<td>External booking ID from the integration system</td>\n<td><code>string</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>from</td>\n<td>Yes</td>\n<td>Timestamp representing the start time of the booking</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2024-05-28T00:00:00Z</code></td>\n</tr>\n<tr>\n<td>durationInMinutes</td>\n<td>Yes</td>\n<td>Duration of the booking in minutes</td>\n<td><code>number</code></td>\n<td><code>60</code></td>\n</tr>\n<tr>\n<td>status</td>\n<td>Yes</td>\n<td>Table Booking Status.  <br />  <br />Note: See the Table above with the list of possible status, according to <code>tableBookingIntegration</code></td>\n<td><code>string</code></td>\n<td><code>ACTIVE</code></td>\n</tr>\n<tr>\n<td>numberOfGuests</td>\n<td>Yes</td>\n<td>Number of guests for the booking</td>\n<td><code>number</code></td>\n<td><code>12</code></td>\n</tr>\n<tr>\n<td>numberOfBookings</td>\n<td>No</td>\n<td>How many bookings this record represents. Defaults to <code>1</code>; minimum <code>1</code>. Send a higher number only when one record stands for several reservations - some integrations (Guestplan) report aggregate occupancy slots rather than individual bookings.</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>walkIn</td>\n<td>Yes</td>\n<td>Indicates whether the booking is a walk-in</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>placeToken</td>\n<td>Yes</td>\n<td>Token representing the place of the booking</td>\n<td><code>string</code></td>\n<td><code>#1234FBTest</code></td>\n</tr>\n<tr>\n<td>employeeNote</td>\n<td>False</td>\n<td>Note from the employee handling the booking</td>\n<td><code>string</code></td>\n<td><code>Test Note</code></td>\n</tr>\n<tr>\n<td>arrived</td>\n<td>False</td>\n<td>Indicates whether the customer has arrived</td>\n<td><code>boolean</code></td>\n<td><code>False</code></td>\n</tr>\n<tr>\n<td>timeOfBooking</td>\n<td>False</td>\n<td>Timestamp representing the time of the booking</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2024-05-28T00:00:00Z</code></td>\n</tr>\n<tr>\n<td>customerID</td>\n<td>False</td>\n<td>ID of the customer</td>\n<td><code>string</code></td>\n<td><code>1234</code></td>\n</tr>\n<tr>\n<td>customerName</td>\n<td>False</td>\n<td>Name of the customer</td>\n<td><code>string</code></td>\n<td><code>Foo</code></td>\n</tr>\n<tr>\n<td>customerEmail</td>\n<td>False</td>\n<td>Email of the customer</td>\n<td><code>string</code></td>\n<td><code>test@example.com</code></td>\n</tr>\n<tr>\n<td>customerNote</td>\n<td>False</td>\n<td>Note from the customer</td>\n<td><code>string</code></td>\n<td><code>Test Note</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>ID of created Table Booking</td>\n<td><code>string</code></td>\n<td>{ \"id\": \"\" }</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","table-booking"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"89dd03af-7525-4a5f-9b28-0e34c3ee2cde","name":"Create table booking","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n \"tableBookingIntegration\": \"EasyTableBooking\",\n \"externalBookingID\": \"12345678\",\n \"from\": \"2024-05-28T00:00:00Z\",\n \"durationInMinutes\": 60,\n \"status\": \"ACTIVE\",\n \"numberOfGuests\": 12,\n \"walkIn\": false,\n \"placeToken\": \"#1234FBTest\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/table-booking"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"4LZ5mgZsezQcwvVsA6UC\"\n}"}],"_postman_id":"30e1583f-644a-4323-aa34-4e208171b923"},{"name":"Update table booking","id":"05f5df04-26e4-4ffd-adf3-982568762b61","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n \"tableBookingIntegration\": \"EasyTableBooking\",\n \"externalBookingID\": \"12345678\",\n \"from\": \"2024-05-28T00:00:00Z\",\n \"durationInMinutes\": 60,\n \"status\": \"ACTIVE\",\n \"numberOfGuests\": 12,\n \"walkIn\": false,\n \"placeToken\": \"#1234FBTest\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/table-booking/:tableBookingID","description":"<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>TableBookingIntegration</strong></th>\n<th><strong>Status</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>EasyTableBooking</td>\n<td><code>ACTIVE</code> / <code>CANCELLED</code> / <code>NOT_ARRIVED</code></td>\n</tr>\n<tr>\n<td>DinnerBooking</td>\n<td><code>current</code> / <code>waiting</code> / <code>deleted</code> / <code>no_show</code> / <code>payment_error</code> / <code>moved</code></td>\n</tr>\n<tr>\n<td>Formitable</td>\n<td><code>created</code> / <code>accepted</code> / <code>cancelled</code> / <code>failed</code> / <code>expired</code></td>\n</tr>\n<tr>\n<td>Resdiary</td>\n<td><code>Unconfirmed</code> / <code>Booked</code> / <code>Confirmed</code> / <code>Closed</code> / <code>Cancelled</code> / <code>Wait</code> / <code>Declined</code> / <code>Bumped</code> / <code>WaitListQueued</code> / <code>WaitListQueueDeclined</code> / <code>WaitListQueueAccepted</code> / <code>WaitListQueueReAdded</code> / <code>Locked</code> / <code>Expired</code></td>\n</tr>\n<tr>\n<td>BookEtBord</td>\n<td><code>temporary</code> / <code>created</code> / <code>arrived</code> / <code>payed</code> / <code>completed</code> / <code>cancelled</code> / <code>deleted</code> / <code>noshow</code></td>\n</tr>\n<tr>\n<td>Couvert</td>\n<td><code>booked</code> / <code>seated</code> / <code>completed</code> / <code>cancelled</code> / <code>no-show</code> / <code>waitlisted</code></td>\n</tr>\n<tr>\n<td>Zenchef</td>\n<td><code>waiting</code> / <code>waiting_customer</code> / <code>confirmed</code> / <code>canceled</code> / <code>refused</code> / <code>arrived</code> / <code>seated</code> / <code>over</code> / <code>no_shown</code></td>\n</tr>\n<tr>\n<td>Guestplan</td>\n<td><code>active</code></td>\n</tr>\n<tr>\n<td>resOS</td>\n<td><code>request</code> / <code>declined</code> / <code>approved</code> / <code>arrived</code> / <code>seated</code> / <code>left</code> / <code>no_show</code> / <code>canceled</code> / <code>waitlist</code></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Note:</strong> integration names are case-sensitive and must match exactly as written above - <code>resOS</code> and <code>Resdiary</code> in particular.</p>\n<h3 id=\"request-fields\"><strong>Request Fields</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>tableBookingIntegration</td>\n<td>False</td>\n<td>Options:  <br /><code>EasyTableBooking</code> / <code>DinnerBooking</code> / <code>Formitable</code> / <code>Resdiary</code> / <code>BookEtBord</code> / <code>Couvert</code> / <code>Zenchef</code> / <code>Guestplan</code> / <code>resOS</code></td>\n<td><code>string</code></td>\n<td><code>EasyTableBooking</code></td>\n</tr>\n<tr>\n<td>externalBookingID</td>\n<td>False</td>\n<td>External booking ID from the integration system</td>\n<td><code>string</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>from</td>\n<td>False</td>\n<td>Timestamp representing the start time of the booking.  <br />  <br />NOTE: if <code>from</code> is present in the body, <code>durationInMinutes</code> must also be present</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2024-05-28T00:00:00Z</code></td>\n</tr>\n<tr>\n<td>durationInMinutes</td>\n<td>False</td>\n<td>Duration of the booking in minutes  <br />  <br />NOTE: if <code>durationInMinutes</code> is present in the body, <code>from</code> must also be present</td>\n<td><code>number</code></td>\n<td><code>60</code></td>\n</tr>\n<tr>\n<td>status</td>\n<td>False</td>\n<td>Table Booking Status.  <br />  <br />Note: See the Table above with the list of possible status, according to <code>tableBookingIntegration</code></td>\n<td><code>string</code></td>\n<td><code>ACTIVE</code></td>\n</tr>\n<tr>\n<td>numberOfGuests</td>\n<td>False</td>\n<td>Number of guests for the booking</td>\n<td><code>number</code></td>\n<td><code>12</code></td>\n</tr>\n<tr>\n<td>numberOfBookings</td>\n<td>False</td>\n<td>How many bookings this record represents. Defaults to <code>1</code>; minimum <code>1</code>.</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>walkIn</td>\n<td>False</td>\n<td>Indicates whether the booking is a walk-in</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>placeToken</td>\n<td>False</td>\n<td>Token representing the place of the booking</td>\n<td><code>string</code></td>\n<td><code>#1234FBTest</code></td>\n</tr>\n<tr>\n<td>employeeNote</td>\n<td>False</td>\n<td>Note from the employee handling the booking</td>\n<td><code>string</code></td>\n<td><code>Test Note</code></td>\n</tr>\n<tr>\n<td>arrived</td>\n<td>False</td>\n<td>Indicates whether the customer has arrived</td>\n<td><code>boolean</code></td>\n<td><code>False</code></td>\n</tr>\n<tr>\n<td>timeOfBooking</td>\n<td>False</td>\n<td>Timestamp representing the time of the booking</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2024-05-28T00:00:00Z</code></td>\n</tr>\n<tr>\n<td>customerID</td>\n<td>False</td>\n<td>ID of the customer</td>\n<td><code>string</code></td>\n<td><code>1234</code></td>\n</tr>\n<tr>\n<td>customerName</td>\n<td>False</td>\n<td>Name of the customer</td>\n<td><code>string</code></td>\n<td><code>Foo</code></td>\n</tr>\n<tr>\n<td>customerEmail</td>\n<td>False</td>\n<td>Email of the customer</td>\n<td><code>string</code></td>\n<td><code>test@example.com</code></td>\n</tr>\n<tr>\n<td>customerNote</td>\n<td>False</td>\n<td>Note from the customer</td>\n<td><code>string</code></td>\n<td><code>Test Note</code></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Response Fields</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Table Booking ID</td>\n<td><code>string</code></td>\n<td><code>4LZ5mgZsezQcwvVsA6UC</code></td>\n</tr>\n<tr>\n<td>start</td>\n<td>When Table Booking starts</td>\n<td><code>string</code></td>\n<td><code>2024-05-28T00:00:00Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When Table Booking ends. Can be <code>null</code> for certain booking sources that don't support end times.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>2024-05-28T01:00:00Z</code></td>\n</tr>\n<tr>\n<td>tableBookingIntegration</td>\n<td></td>\n<td><code>string</code></td>\n<td><code>EasyTableBooking</code></td>\n</tr>\n<tr>\n<td>externalBookingID</td>\n<td>External booking ID from the integration system</td>\n<td><code>string</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>durationInMinutes</td>\n<td>Duration of the booking in minutes. Can be <code>null</code> for certain booking sources that don't support end times.</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>60</code></td>\n</tr>\n<tr>\n<td>status</td>\n<td>Table Booking Status.  <br />  <br />Note: See the Table above with the list of possible status, according to <code>tableBookingIntegration</code></td>\n<td><code>string</code></td>\n<td><code>ACTIVE</code></td>\n</tr>\n<tr>\n<td>numberOfGuests</td>\n<td>Number of guests for the booking</td>\n<td><code>number</code></td>\n<td><code>12</code></td>\n</tr>\n<tr>\n<td>numberOfBookings</td>\n<td>How many bookings this record represents. <code>1</code> for a normal single booking; higher when one record stands for several reservations, as with Guestplan's aggregate occupancy slots.</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>walkIn</td>\n<td>Indicates whether the booking is a walk-in</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>placeToken</td>\n<td>Token representing the place of the booking</td>\n<td><code>string</code></td>\n<td><code>#1234FBTest</code></td>\n</tr>\n<tr>\n<td>employeeNote</td>\n<td>Note from the employee handling the booking</td>\n<td><code>string</code></td>\n<td><code>Test Note</code></td>\n</tr>\n<tr>\n<td>arrived</td>\n<td>Indicates whether the customer has arrived</td>\n<td><code>boolean</code></td>\n<td><code>False</code></td>\n</tr>\n<tr>\n<td>timeOfBooking</td>\n<td>Timestamp representing the time of the booking</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2024-05-28T00:00:00Z</code></td>\n</tr>\n<tr>\n<td>customerID</td>\n<td>ID of the customer</td>\n<td><code>string</code></td>\n<td><code>1234</code></td>\n</tr>\n<tr>\n<td>customerName</td>\n<td>Name of the customer</td>\n<td><code>string</code></td>\n<td><code>Foo</code></td>\n</tr>\n<tr>\n<td>customerEmail</td>\n<td>Email of the customer</td>\n<td><code>string</code></td>\n<td><code>test@example.com</code></td>\n</tr>\n<tr>\n<td>customerNote</td>\n<td>Note from the customer</td>\n<td><code>string</code></td>\n<td><code>Test Note</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Table Booking was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T16:19:41.998Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Table Booking was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T16:19:41.998Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","table-booking",":tableBookingID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"tableBookingID"}]}},"response":[{"id":"78f57426-b669-4ab0-9f96-e011b2d53765","name":"Update table booking","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n \"tableBookingIntegration\": \"EasyTableBooking\",\n \"externalBookingID\": \"12345678\",\n \"from\": \"2024-05-28T00:00:00Z\",\n \"durationInMinutes\": 60,\n \"status\": \"ACTIVE\",\n \"numberOfGuests\": 12,\n \"walkIn\": false,\n \"placeToken\": \"#1234FBTest\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/table-booking"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"4LZ5mgZsezQcwvVsA6UC\",\n    \"start\": \"2026-03-12T18:30:00.000Z\",\n    \"end\": \"2026-03-12T20:30:00.000Z\",\n    \"tableBookingIntegration\": \"Resdiary\",\n    \"externalBookingID\": \"395318\",\n    \"durationInMinutes\": 120,\n    \"arrived\": true,\n    \"status\": \"Confirmed\",\n    \"numberOfGuests\": 4,\n    \"walkIn\": false,\n    \"customerID\": \"512089\",\n    \"customerName\": \"Sofie Krogh\",\n    \"customerEmail\": \"sofie.krogh@example.com\",\n    \"placeToken\": \"3725\",\n    \"numberOfBookings\": 1,\n    \"customerNote\": \"Vinduesbord, tak\",\n    \"employeeNote\": \"Fejrer fødselsdag 🎂\",\n    \"timeOfBooking\": \"2026-03-05T13:19:09.783Z\",\n    \"createTime\": \"2026-03-05T13:19:10.002Z\",\n    \"updateTime\": \"2026-03-12T18:34:21.118Z\"\n}"}],"_postman_id":"05f5df04-26e4-4ffd-adf3-982568762b61"},{"name":"Get table booking","id":"b423d676-c5fa-4c50-99ec-f0975c9bbf4e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/table-booking/:tableBookingID","description":"<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>TableBookingIntegration</strong></th>\n<th><strong>Status</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>EasyTableBooking</td>\n<td><code>ACTIVE</code> / <code>CANCELLED</code> / <code>NOT_ARRIVED</code></td>\n</tr>\n<tr>\n<td>DinnerBooking</td>\n<td><code>current</code> / <code>waiting</code> / <code>deleted</code> / <code>no_show</code> / <code>payment_error</code> / <code>moved</code></td>\n</tr>\n<tr>\n<td>Formitable</td>\n<td><code>created</code> / <code>accepted</code> / <code>cancelled</code> / <code>failed</code> / <code>expired</code></td>\n</tr>\n<tr>\n<td>Resdiary</td>\n<td><code>Unconfirmed</code> / <code>Booked</code> / <code>Confirmed</code> / <code>Closed</code> / <code>Cancelled</code> / <code>Wait</code> / <code>Declined</code> / <code>Bumped</code> / <code>WaitListQueued</code> / <code>WaitListQueueDeclined</code> / <code>WaitListQueueAccepted</code> / <code>WaitListQueueReAdded</code> / <code>Locked</code> / <code>Expired</code></td>\n</tr>\n<tr>\n<td>BookEtBord</td>\n<td><code>temporary</code> / <code>created</code> / <code>arrived</code> / <code>payed</code> / <code>completed</code> / <code>cancelled</code> / <code>deleted</code> / <code>noshow</code></td>\n</tr>\n<tr>\n<td>Couvert</td>\n<td><code>booked</code> / <code>seated</code> / <code>completed</code> / <code>cancelled</code> / <code>no-show</code> / <code>waitlisted</code></td>\n</tr>\n<tr>\n<td>Zenchef</td>\n<td><code>waiting</code> / <code>waiting_customer</code> / <code>confirmed</code> / <code>canceled</code> / <code>refused</code> / <code>arrived</code> / <code>seated</code> / <code>over</code> / <code>no_shown</code></td>\n</tr>\n<tr>\n<td>Guestplan</td>\n<td><code>active</code></td>\n</tr>\n<tr>\n<td>resOS</td>\n<td><code>request</code> / <code>declined</code> / <code>approved</code> / <code>arrived</code> / <code>seated</code> / <code>left</code> / <code>no_show</code> / <code>canceled</code> / <code>waitlist</code></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Note:</strong> integration names are case-sensitive and must match exactly as written above - <code>resOS</code> and <code>Resdiary</code> in particular.</p>\n<h3 id=\"response-fields\"><strong>Response Fields</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Table Booking ID</td>\n<td><code>string</code></td>\n<td><code>4LZ5mgZsezQcwvVsA6UC</code></td>\n</tr>\n<tr>\n<td>start</td>\n<td>When Table Booking starts</td>\n<td><code>string</code></td>\n<td><code>2024-05-28T00:00:00Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When Table Booking ends. Can be <code>null</code> for certain booking sources that don't support end times.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>2024-05-28T01:00:00Z</code></td>\n</tr>\n<tr>\n<td>tableBookingIntegration</td>\n<td>Options:  <br /><code>EasyTableBooking</code> / <code>DinnerBooking</code> / <code>Formitable</code> / <code>BookEtBord</code></td>\n<td><code>string</code></td>\n<td><code>EasyTableBooking</code></td>\n</tr>\n<tr>\n<td>externalBookingID</td>\n<td>External booking ID from the integration system</td>\n<td><code>string</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>durationInMinutes</td>\n<td>Duration of the booking in minutes. Can be <code>null</code> for certain booking sources that don't support end times.</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>60</code></td>\n</tr>\n<tr>\n<td>status</td>\n<td>Table Booking Status.  <br />  <br />Note: See the Table above with the list of possible status, according to <code>tableBookingIntegration</code></td>\n<td><code>string</code></td>\n<td><code>ACTIVE</code></td>\n</tr>\n<tr>\n<td>numberOfGuests</td>\n<td>Number of guests for the booking</td>\n<td><code>number</code></td>\n<td><code>12</code></td>\n</tr>\n<tr>\n<td>numberOfBookings</td>\n<td>How many bookings this record represents. <code>1</code> for a normal single booking; higher when one record stands for several reservations, as with Guestplan's aggregate occupancy slots.</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>walkIn</td>\n<td>Indicates whether the booking is a walk-in</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>placeToken</td>\n<td>Token representing the place of the booking</td>\n<td><code>string</code></td>\n<td><code>#1234FBTest</code></td>\n</tr>\n<tr>\n<td>employeeNote</td>\n<td>Note from the employee handling the booking</td>\n<td><code>string</code></td>\n<td><code>Test Note</code></td>\n</tr>\n<tr>\n<td>arrived</td>\n<td>Indicates whether the customer has arrived</td>\n<td><code>boolean</code></td>\n<td><code>False</code></td>\n</tr>\n<tr>\n<td>timeOfBooking</td>\n<td>Timestamp representing the time of the booking</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2024-05-28T00:00:00Z</code></td>\n</tr>\n<tr>\n<td>customerID</td>\n<td>ID of the customer</td>\n<td><code>string</code></td>\n<td><code>1234</code></td>\n</tr>\n<tr>\n<td>customerName</td>\n<td>Name of the customer</td>\n<td><code>string</code></td>\n<td><code>Foo</code></td>\n</tr>\n<tr>\n<td>customerEmail</td>\n<td>Email of the customer</td>\n<td><code>string</code></td>\n<td><code>test@example.com</code></td>\n</tr>\n<tr>\n<td>customerNote</td>\n<td>Note from the customer</td>\n<td><code>string</code></td>\n<td><code>Test Note</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Table Booking was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T16:19:41.998Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Table Booking was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T16:19:41.998Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","table-booking",":tableBookingID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"tableBookingID"}]}},"response":[{"id":"b47a21d3-6eba-40d2-baf1-13256ed19d5b","name":"Get table booking","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/table-booking/:tableBookingID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","table-booking",":tableBookingID"],"variable":[{"key":"tableBookingID","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"4LZ5mgZsezQcwvVsA6UC\",\n    \"start\": \"2026-03-12T18:30:00.000Z\",\n    \"end\": \"2026-03-12T20:30:00.000Z\",\n    \"tableBookingIntegration\": \"Resdiary\",\n    \"externalBookingID\": \"395318\",\n    \"durationInMinutes\": 120,\n    \"arrived\": true,\n    \"status\": \"Confirmed\",\n    \"numberOfGuests\": 4,\n    \"walkIn\": false,\n    \"customerID\": \"512089\",\n    \"customerName\": \"Sofie Krogh\",\n    \"customerEmail\": \"sofie.krogh@example.com\",\n    \"placeToken\": \"3725\",\n    \"numberOfBookings\": 1,\n    \"customerNote\": \"Vinduesbord, tak\",\n    \"employeeNote\": \"Fejrer fødselsdag 🎂\",\n    \"timeOfBooking\": \"2026-03-05T13:19:09.783Z\",\n    \"createTime\": \"2026-03-05T13:19:10.002Z\",\n    \"updateTime\": \"2026-03-12T18:34:21.118Z\"\n}"}],"_postman_id":"b423d676-c5fa-4c50-99ec-f0975c9bbf4e"},{"name":"Get table bookings","id":"64d2b395-6d69-4a3e-ab24-ee56f1206d46","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/table-booking?from=2024-05-26T00:00:00.000Z&to=2024-05-30T00:00:00.000Z","description":"<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>TableBookingIntegration</strong></th>\n<th><strong>Status</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>EasyTableBooking</td>\n<td><code>ACTIVE</code> / <code>CANCELLED</code> / <code>NOT_ARRIVED</code></td>\n</tr>\n<tr>\n<td>DinnerBooking</td>\n<td><code>current</code> / <code>waiting</code> / <code>deleted</code> / <code>no_show</code> / <code>payment_error</code> / <code>moved</code></td>\n</tr>\n<tr>\n<td>Formitable</td>\n<td><code>created</code> / <code>accepted</code> / <code>cancelled</code> / <code>failed</code> / <code>expired</code></td>\n</tr>\n<tr>\n<td>Resdiary</td>\n<td><code>Unconfirmed</code> / <code>Booked</code> / <code>Confirmed</code> / <code>Closed</code> / <code>Cancelled</code> / <code>Wait</code> / <code>Declined</code> / <code>Bumped</code> / <code>WaitListQueued</code> / <code>WaitListQueueDeclined</code> / <code>WaitListQueueAccepted</code> / <code>WaitListQueueReAdded</code> / <code>Locked</code> / <code>Expired</code></td>\n</tr>\n<tr>\n<td>BookEtBord</td>\n<td><code>temporary</code> / <code>created</code> / <code>arrived</code> / <code>payed</code> / <code>completed</code> / <code>cancelled</code> / <code>deleted</code> / <code>noshow</code></td>\n</tr>\n<tr>\n<td>Couvert</td>\n<td><code>booked</code> / <code>seated</code> / <code>completed</code> / <code>cancelled</code> / <code>no-show</code> / <code>waitlisted</code></td>\n</tr>\n<tr>\n<td>Zenchef</td>\n<td><code>waiting</code> / <code>waiting_customer</code> / <code>confirmed</code> / <code>canceled</code> / <code>refused</code> / <code>arrived</code> / <code>seated</code> / <code>over</code> / <code>no_shown</code></td>\n</tr>\n<tr>\n<td>Guestplan</td>\n<td><code>active</code></td>\n</tr>\n<tr>\n<td>resOS</td>\n<td><code>request</code> / <code>declined</code> / <code>approved</code> / <code>arrived</code> / <code>seated</code> / <code>left</code> / <code>no_show</code> / <code>canceled</code> / <code>waitlist</code></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Note:</strong> integration names are case-sensitive and must match exactly as written above - <code>resOS</code> and <code>Resdiary</code> in particular.</p>\n<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Param</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>from</td>\n<td>Yes</td>\n<td>Only get Table Bookings <strong>starting</strong> <em>on or after</em> this time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-07-01T00:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>to</td>\n<td>Yes</td>\n<td>Only get Table Bookings <strong>ending</strong> <em>before</em> this time. Note this filters on the booking's end, not its start, so a booking that starts inside the range but ends after <code>to</code> is <strong>not</strong> returned.</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-30T00:00:00.000Z</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\"><strong>Response Fields</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Table Booking ID</td>\n<td><code>string</code></td>\n<td><code>4LZ5mgZsezQcwvVsA6UC</code></td>\n</tr>\n<tr>\n<td>start</td>\n<td>When Table Booking starts</td>\n<td><code>string</code></td>\n<td><code>2024-05-28T00:00:00Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When Table Booking ends. Can be <code>null</code> for certain booking sources that don't support end times.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>2024-05-28T01:00:00Z</code></td>\n</tr>\n<tr>\n<td>tableBookingIntegration</td>\n<td>Options:  <br /><code>EasyTableBooking</code> / <code>DinnerBooking</code> / <code>Formitable</code> / <code>Resdiary</code> / <code>BookEtBord</code> / <code>Couvert</code> / <code>Zenchef</code> / <code>Guestplan</code> / <code>resOS</code></td>\n<td><code>string</code></td>\n<td><code>EasyTableBooking</code></td>\n</tr>\n<tr>\n<td>externalBookingID</td>\n<td>External booking ID from the integration system</td>\n<td><code>string</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>durationInMinutes</td>\n<td>Duration of the booking in minutes. Can be <code>null</code> for certain booking sources that don't support end times.</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>60</code></td>\n</tr>\n<tr>\n<td>status</td>\n<td>Table Booking Status.  <br />  <br />Note: See the Table above with the list of possible status, according to <code>tableBookingIntegration</code></td>\n<td><code>string</code></td>\n<td><code>ACTIVE</code></td>\n</tr>\n<tr>\n<td>numberOfGuests</td>\n<td>Number of guests for the booking</td>\n<td><code>number</code></td>\n<td><code>12</code></td>\n</tr>\n<tr>\n<td>numberOfBookings</td>\n<td>How many bookings this record represents. <code>1</code> for a normal single booking; higher when one record stands for several reservations, as with Guestplan's aggregate occupancy slots.</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>walkIn</td>\n<td>Indicates whether the booking is a walk-in</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>placeToken</td>\n<td>Token representing the place of the booking</td>\n<td><code>string</code></td>\n<td><code>#1234FBTest</code></td>\n</tr>\n<tr>\n<td>employeeNote</td>\n<td>Note from the employee handling the booking</td>\n<td><code>string</code></td>\n<td><code>Test Note</code></td>\n</tr>\n<tr>\n<td>arrived</td>\n<td>Indicates whether the customer has arrived</td>\n<td><code>boolean</code></td>\n<td><code>False</code></td>\n</tr>\n<tr>\n<td>timeOfBooking</td>\n<td>Timestamp representing the time of the booking</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2024-05-28T00:00:00Z</code></td>\n</tr>\n<tr>\n<td>customerID</td>\n<td>ID of the customer</td>\n<td><code>string</code></td>\n<td><code>1234</code></td>\n</tr>\n<tr>\n<td>customerName</td>\n<td>Name of the customer</td>\n<td><code>string</code></td>\n<td><code>Foo</code></td>\n</tr>\n<tr>\n<td>customerEmail</td>\n<td>Email of the customer</td>\n<td><code>string</code></td>\n<td><code>test@example.com</code></td>\n</tr>\n<tr>\n<td>customerNote</td>\n<td>Note from the customer</td>\n<td><code>string</code></td>\n<td><code>Test Note</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Table Booking was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T16:19:41.998Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Table Booking was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T16:19:41.998Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","table-booking"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[{"key":"from","value":"2024-05-26T00:00:00.000Z"},{"key":"to","value":"2024-05-30T00:00:00.000Z"}],"variable":[]}},"response":[{"id":"8981d442-ac48-48b5-badd-777a46f50fb5","name":"Get table bookings","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/table-booking?from=2024-05-26T00:00:00.000Z&to=2024-05-30T00:00:00.000Z","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","table-booking"],"query":[{"key":"from","value":"2024-05-26T00:00:00.000Z"},{"key":"to","value":"2024-05-30T00:00:00.000Z"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"4LZ5mgZsezQcwvVsA6UC\",\n        \"start\": \"2026-03-12T18:30:00.000Z\",\n        \"end\": \"2026-03-12T20:30:00.000Z\",\n        \"tableBookingIntegration\": \"Resdiary\",\n        \"externalBookingID\": \"395318\",\n        \"durationInMinutes\": 120,\n        \"arrived\": true,\n        \"status\": \"Confirmed\",\n        \"numberOfGuests\": 4,\n        \"walkIn\": false,\n        \"customerID\": \"512089\",\n        \"customerName\": \"Sofie Krogh\",\n        \"customerEmail\": \"sofie.krogh@example.com\",\n        \"placeToken\": \"3725\",\n        \"numberOfBookings\": 1,\n        \"customerNote\": \"Vinduesbord, tak\",\n        \"employeeNote\": \"Fejrer fødselsdag 🎂\",\n        \"timeOfBooking\": \"2026-03-05T13:19:09.783Z\",\n        \"createTime\": \"2026-03-05T13:19:10.002Z\",\n        \"updateTime\": \"2026-03-12T18:34:21.118Z\"\n    }\n]"}],"_postman_id":"64d2b395-6d69-4a3e-ab24-ee56f1206d46"},{"name":"Delete table booking","id":"7648c24f-8f0a-4d14-9ebd-1e52f7c6b832","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"DELETE","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/table-booking/:tableBookingID","description":"<h2 id=\"this-delete-is-permanent\">This delete is permanent</h2>\n<p>The table booking document is <strong>removed from the database</strong>. There is no soft-delete flag, no <code>deletedOn</code> timestamp, and no way to restore it through the API or the UI. Returns <code>204</code> with no body.</p>\n<p>If you need the record to stop counting but stay recoverable, do not call this endpoint.</p>\n","urlObject":{"path":["companies","COMPANY_ID","table-booking",":tableBookingID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"tableBookingID"}]}},"response":[{"id":"fc04c07a-a987-42fe-9764-9f43032a8600","name":"Delete table booking","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/table-booking/:tableBookingID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","table-booking",":tableBookingID"],"variable":[{"key":"tableBookingID","value":""}]}},"status":"No Content","code":204,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null}],"_postman_id":"7648c24f-8f0a-4d14-9ebd-1e52f7c6b832"}],"id":"925486f0-b3a5-4766-862f-3ab083c3e0a6","_postman_id":"925486f0-b3a5-4766-862f-3ab083c3e0a6","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}}},{"name":"Employees","item":[{"name":"Create employee","id":"f7f72bc2-c3ce-4aec-90bd-77f1d488c458","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"firstname\": \"API\",\n    \"lastname\": \"Test\",\n    \"email\": \"test2@example.com\",\n    \"phone\": \"12345678\",\n    \"roles\": [\n        \"roleID\"\n    ],\n    \"departments\": [\n        \"departmentID\"\n    ],\n    \"ssn\": \"010190-1234\",\n    \"birthdate\": \"1990-01-01\",\n    \"street\": \"Sankt Peders Stræde 27\",\n    \"city\": \"København K\",\n    \"zip\": \"1453\",\n    \"employmentDate\": \"2026-10-01\",\n    \"bankAccount\": {\n        \"registrationNumber\": \"0040\",\n        \"accountNumber\": \"0123456789\"\n    },\n    \"taxCard\": \"primary\",\n    \"wage\": {\n        \"amount\": 150,\n        \"type\": \"hourly\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees","description":"<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>firstname</code></td>\n<td>Yes</td>\n<td>The first name of the employee</td>\n<td><code>string</code></td>\n<td><code>Foo</code></td>\n</tr>\n<tr>\n<td><code>lastname</code></td>\n<td>Yes</td>\n<td>The last name of the employee</td>\n<td><code>string</code></td>\n<td><code>Bar</code></td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>Yes</td>\n<td>The email of the employee. This is also the email at which they'll receive their invite to Workfeed</td>\n<td><code>string</code></td>\n<td><code>test@example.com</code></td>\n</tr>\n<tr>\n<td><code>phone</code></td>\n<td>Yes</td>\n<td>The phone number of the employee</td>\n<td><code>string</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td><code>roles</code></td>\n<td>Yes</td>\n<td>The roles to assign the new employee</td>\n<td><code>string[]</code></td>\n<td><code>[\"roleID1\", \"roleID2\"]</code></td>\n</tr>\n<tr>\n<td><code>departments</code></td>\n<td>Yes</td>\n<td>The departments to assign the new employee</td>\n<td><code>string[]</code></td>\n<td><code>[\"departmentID1\"]</code></td>\n</tr>\n<tr>\n<td><code>deletedOn</code></td>\n<td>No</td>\n<td>The date and time when the employee was or will be soft-deleted</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2026-01-20T12:42:02.000Z</code></td>\n</tr>\n<tr>\n<td><code>ssn</code></td>\n<td>No</td>\n<td>The employee's social security number (CPR number in Denmark). Stored exactly as sent; the format is not checked, except with <code>addToIntegrations</code>, which requires 10 digits without a hyphen. <code>null</code> is the same as leaving it out.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>010190-1234</code></td>\n</tr>\n<tr>\n<td><code>birthdate</code></td>\n<td>No</td>\n<td>The employee's birthdate. Must be a real calendar date between <code>1900-01-01</code> and today. <code>null</code> is the same as leaving it out.</td>\n<td><code>yyyy-MM-dd</code> <code>string</code> / <code>null</code></td>\n<td><code>1990-01-01</code></td>\n</tr>\n<tr>\n<td><code>street</code></td>\n<td>No</td>\n<td>The employee's street address. <code>null</code> is the same as leaving it out.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>Sankt Peders Stræde 27</code></td>\n</tr>\n<tr>\n<td><code>city</code></td>\n<td>No</td>\n<td>The employee's city. <code>null</code> is the same as leaving it out.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>København K</code></td>\n</tr>\n<tr>\n<td><code>zip</code></td>\n<td>No</td>\n<td>The employee's postal code. <code>null</code> is the same as leaving it out.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>1453</code></td>\n</tr>\n<tr>\n<td><code>employmentDate</code></td>\n<td>No</td>\n<td>The employee's first day of employment. Must be a real calendar date. <code>null</code> is the same as leaving it out.</td>\n<td><code>yyyy-MM-dd</code> <code>string</code> / <code>null</code></td>\n<td><code>2026-10-01</code></td>\n</tr>\n<tr>\n<td><code>bankAccount</code></td>\n<td>No</td>\n<td>The employee's Danish bank account. <code>null</code> is the same as leaving it out.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"registrationNumber\": \"0040\", \"accountNumber\": \"0123456789\"}</code></td>\n</tr>\n<tr>\n<td><code>bankAccount.registrationNumber</code></td>\n<td>Yes, if <code>bankAccount</code> is sent</td>\n<td>The 4-digit registration number (reg.nr.). Must be a <code>string</code>, so leading zeros are kept. Spaces and hyphens are removed.</td>\n<td><code>string</code></td>\n<td><code>0040</code></td>\n</tr>\n<tr>\n<td><code>bankAccount.accountNumber</code></td>\n<td>Yes, if <code>bankAccount</code> is sent</td>\n<td>The account number, 1 to 10 digits. Must be a <code>string</code>. Spaces and hyphens are removed.</td>\n<td><code>string</code></td>\n<td><code>0123456789</code></td>\n</tr>\n<tr>\n<td><code>taxCard</code></td>\n<td>No</td>\n<td>The employee's Danish tax card. Options: <code>\"primary\"</code> (hovedkort) / <code>\"secondary\"</code> (bikort). <code>null</code> is the same as leaving it out.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>primary</code></td>\n</tr>\n<tr>\n<td><code>wage</code></td>\n<td>No</td>\n<td>The employee's wage. To change it later, see <em>Changing a wage</em> under Update employee. <code>null</code> is the same as leaving it out.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"amount\": 150, \"type\": \"hourly\"}</code></td>\n</tr>\n<tr>\n<td><code>wage.amount</code></td>\n<td>Yes, if <code>wage</code> is sent</td>\n<td>Amount per hour when <code>wage.type</code> is <code>hourly</code>, per month when it is <code>monthly</code>. <code>0</code> or more.</td>\n<td><code>number</code></td>\n<td><code>150</code></td>\n</tr>\n<tr>\n<td><code>wage.type</code></td>\n<td>Yes, if <code>wage</code> is sent</td>\n<td>Options: <code>\"hourly\"</code> / <code>\"monthly\"</code></td>\n<td><code>string</code></td>\n<td><code>hourly</code></td>\n</tr>\n<tr>\n<td><code>addToIntegrations</code></td>\n<td>No</td>\n<td><code>true</code> also creates the employee in the company's payroll system (Zenegy or Salary.dk). See <em>Adding the employee to payroll</em> below. <code>false</code>, <code>null</code> or leaving it out creates the employee in Workfeed only.</td>\n<td><code>boolean</code> / <code>null</code></td>\n<td><code>true</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"adding-the-employee-to-payroll\">Adding the employee to payroll</h3>\n<p>With <code>\"addToIntegrations\": true</code>, Workfeed also creates the employee in the company's payroll system. The request returns <code>400</code> and creates nothing unless:</p>\n<ul>\n<li>the company has exactly one Zenegy or Salary.dk integration</li>\n<li><code>ssn</code> is 10 digits without a hyphen</li>\n<li><code>street</code>, <code>city</code> and <code>zip</code> are not empty</li>\n<li>for Salary.dk: <code>bankAccount</code> and <code>taxCard</code> are sent</li>\n</ul>\n<p>Payroll gets <code>employmentDate</code> as the start date, or the first day of the current month when it is left out.</p>\n<p>The <code>201</code> confirms the employee was created in Workfeed. The payroll system is updated shortly after, and the API does not report the outcome of that step.</p>\n<p><code>addToIntegrations</code> can only be used when creating an employee.</p>\n<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>New Employee ID</td>\n<td><code>string</code></td>\n<td><code>J9QAIiTG0nRC1OsC5YvHfLWdDHn1</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","employees"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"1eee2039-1e13-49cd-94c5-8fbe6b9894ce","name":"Create employee","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"firstname\": \"API\",\n    \"lastname\": \"Test\",\n    \"email\": \"test2@example.com\",\n    \"phone\": \"12345678\",\n    \"roles\": [\n        \"hLbEKIPTlMh3ehotXl0w\"\n    ],\n    \"departments\": [\n        \"PKHaOSgFA4uguOqmLfWv\"\n    ],\n    \"ssn\": \"010190-1234\",\n    \"birthdate\": \"1990-01-01\",\n    \"wage\": {\n        \"amount\": 150,\n        \"type\": \"hourly\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\"\n}"},{"id":"340944e9-b360-baf5-99d9-d7fd7fb05cb2","name":"Invalid birthdate","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"firstname\": \"API\",\n    \"lastname\": \"Test\",\n    \"email\": \"test2@example.com\",\n    \"phone\": \"12345678\",\n    \"roles\": [\n        \"hLbEKIPTlMh3ehotXl0w\"\n    ],\n    \"departments\": [\n        \"PKHaOSgFA4uguOqmLfWv\"\n    ],\n    \"birthdate\": \"1990-02-31\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Invalid birthdate: expected a date in yyyy-MM-dd format between 1900-01-01 and today, or null\""},{"id":"45c28e7c-eb1b-2572-2397-da5c6183ddd7","name":"addToIntegrations with an invalid ssn","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"firstname\": \"Freja\",\n    \"lastname\": \"Lindqvist\",\n    \"email\": \"freja@bistronord.dk\",\n    \"phone\": \"20304050\",\n    \"roles\": [\n        \"hLbEKIPTlMh3ehotXl0w\"\n    ],\n    \"departments\": [\n        \"PKHaOSgFA4uguOqmLfWv\"\n    ],\n    \"ssn\": \"180496-1234\",\n    \"street\": \"Sankt Peders Stræde 27\",\n    \"city\": \"København K\",\n    \"zip\": \"1453\",\n    \"addToIntegrations\": true\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Invalid ssn: addToIntegrations requires 10 digits without a hyphen\""},{"id":"e923eb08-e12f-115f-e501-62f17a79875b","name":"addToIntegrations without a payroll integration","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"firstname\": \"Freja\",\n    \"lastname\": \"Lindqvist\",\n    \"email\": \"freja@bistronord.dk\",\n    \"phone\": \"20304050\",\n    \"roles\": [\n        \"hLbEKIPTlMh3ehotXl0w\"\n    ],\n    \"departments\": [\n        \"PKHaOSgFA4uguOqmLfWv\"\n    ],\n    \"ssn\": \"1804961234\",\n    \"street\": \"Sankt Peders Stræde 27\",\n    \"city\": \"København K\",\n    \"zip\": \"1453\",\n    \"addToIntegrations\": true\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"addToIntegrations requires exactly one Zenegy or Salary.dk integration, found 0\""}],"_postman_id":"f7f72bc2-c3ce-4aec-90bd-77f1d488c458"},{"name":"Update employee","id":"8c7fc854-efbe-417f-8b0c-81a86aff0f6a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"firstname\": \"API\",\n    \"lastname\": \"Test\",\n    \"phone\": \"12345678\",\n    \"roles\": [\n        \"roleID1\",\n        \"roleID2\",\n        \"roleID3\"\n    ],\n    \"departments\": [\n        \"departmentID\"\n    ],\n    \"email\": \"test@example.com\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees/:employeeID","description":"<p><strong>Note:</strong> If you don't want to update a specific field, do not send it in the body.</p>\n<p><strong>Note:</strong> Only the fields listed under Request Fields can be updated. Any other property in the body - including <code>accessLevel</code> and <code>customFields</code> - is <strong>ignored</strong>: send it alongside a field that <em>is</em> updatable and the request returns <code>200</code> with the updatable field applied and the rest dropped, with no warning. Send a body containing <strong>only</strong> non-updatable fields and you get <code>400 \"No properties to update were provided\"</code>; an empty body gives <code>400 \"Body data, cannot be empty\"</code>.</p>\n<p><strong>Note:</strong> <code>addToIntegrations</code> can only be used when creating an employee. <code>\"addToIntegrations\": true</code> on update returns <code>400</code> and nothing is updated; <code>false</code> and <code>null</code> are ignored.</p>\n<p><strong>Note:</strong> Clearing a field with <code>null</code> clears it in Workfeed only. If the employee is in a payroll system, the old value stays there (for example <code>ssn</code>, the address fields, <code>employmentDate</code>, <code>bankAccount</code> and <code>taxCard</code>). Change it in the payroll system too.</p>\n<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>firstname</code></td>\n<td>No</td>\n<td>The first name of the employee</td>\n<td><code>string</code></td>\n<td><code>Foo</code></td>\n</tr>\n<tr>\n<td><code>lastname</code></td>\n<td>No</td>\n<td>The last name of the employee</td>\n<td><code>string</code></td>\n<td><code>Bar</code></td>\n</tr>\n<tr>\n<td><code>email</code></td>\n<td>No</td>\n<td>The email of the employee. This is also the email at which they'll receive their invite to Workfeed</td>\n<td><code>string</code></td>\n<td><code>test@example.com</code></td>\n</tr>\n<tr>\n<td><code>phone</code></td>\n<td>No</td>\n<td>The phone number of the employee</td>\n<td><code>string</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td><code>roles</code></td>\n<td>No</td>\n<td>The roles to assign the new employee</td>\n<td><code>string[]</code></td>\n<td><code>[\"roleID1\", \"roleID2\"]</code></td>\n</tr>\n<tr>\n<td><code>departments</code></td>\n<td>No</td>\n<td>The departments to assign the new employee</td>\n<td><code>string[]</code></td>\n<td><code>[\"departmentID1\"]</code></td>\n</tr>\n<tr>\n<td><code>deletedOn</code></td>\n<td>No</td>\n<td>The date and time when the employee was or will be soft-deleted. It is not possible to un-delete an employee after they've been deleted. That can only be done via the UI.</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2026-01-20T12:42:02.000Z</code></td>\n</tr>\n<tr>\n<td><code>ssn</code></td>\n<td>No</td>\n<td>The employee's social security number (CPR number in Denmark). Stored exactly as sent; the format is not checked. <code>null</code> clears it.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>010190-1234</code></td>\n</tr>\n<tr>\n<td><code>birthdate</code></td>\n<td>No</td>\n<td>The employee's birthdate. Must be a real calendar date between <code>1900-01-01</code> and today. <code>null</code> clears it.</td>\n<td><code>yyyy-MM-dd</code> <code>string</code> / <code>null</code></td>\n<td><code>1990-01-01</code></td>\n</tr>\n<tr>\n<td><code>street</code></td>\n<td>No</td>\n<td>The employee's street address. <code>null</code> or <code>\"\"</code> clears it.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>Sankt Peders Stræde 27</code></td>\n</tr>\n<tr>\n<td><code>city</code></td>\n<td>No</td>\n<td>The employee's city. <code>null</code> or <code>\"\"</code> clears it.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>København K</code></td>\n</tr>\n<tr>\n<td><code>zip</code></td>\n<td>No</td>\n<td>The employee's postal code. <code>null</code> or <code>\"\"</code> clears it.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>1453</code></td>\n</tr>\n<tr>\n<td><code>employmentDate</code></td>\n<td>No</td>\n<td>The employee's first day of employment. Must be a real calendar date. <code>null</code> clears it.</td>\n<td><code>yyyy-MM-dd</code> <code>string</code> / <code>null</code></td>\n<td><code>2026-10-01</code></td>\n</tr>\n<tr>\n<td><code>bankAccount</code></td>\n<td>No</td>\n<td>The employee's Danish bank account. Send both fields; <code>null</code> clears it.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"registrationNumber\": \"0040\", \"accountNumber\": \"0123456789\"}</code></td>\n</tr>\n<tr>\n<td><code>bankAccount.registrationNumber</code></td>\n<td>Yes, if <code>bankAccount</code> is sent</td>\n<td>The 4-digit registration number (reg.nr.). Must be a <code>string</code>, so leading zeros are kept. Spaces and hyphens are removed.</td>\n<td><code>string</code></td>\n<td><code>0040</code></td>\n</tr>\n<tr>\n<td><code>bankAccount.accountNumber</code></td>\n<td>Yes, if <code>bankAccount</code> is sent</td>\n<td>The account number, 1 to 10 digits. Must be a <code>string</code>. Spaces and hyphens are removed.</td>\n<td><code>string</code></td>\n<td><code>0123456789</code></td>\n</tr>\n<tr>\n<td><code>taxCard</code></td>\n<td>No</td>\n<td>The employee's Danish tax card. Options: <code>\"primary\"</code> (hovedkort) / <code>\"secondary\"</code> (bikort). <code>null</code> clears it.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>primary</code></td>\n</tr>\n<tr>\n<td><code>wage</code></td>\n<td>No</td>\n<td>A new wage and the day it applies from. See <em>Changing a wage</em> below. <code>null</code> is ignored.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"amount\": 185, \"type\": \"hourly\", \"effectiveFrom\": \"2026-11-01\"}</code></td>\n</tr>\n<tr>\n<td><code>wage.amount</code></td>\n<td>Yes, if <code>wage</code> is sent</td>\n<td>Amount per hour when <code>wage.type</code> is <code>hourly</code>, per month when it is <code>monthly</code>. <code>0</code> or more.</td>\n<td><code>number</code></td>\n<td><code>185</code></td>\n</tr>\n<tr>\n<td><code>wage.type</code></td>\n<td>Yes, if <code>wage</code> is sent</td>\n<td>Options: <code>\"hourly\"</code> / <code>\"monthly\"</code></td>\n<td><code>string</code></td>\n<td><code>hourly</code></td>\n</tr>\n<tr>\n<td><code>wage.effectiveFrom</code></td>\n<td>Yes, if <code>wage</code> is sent</td>\n<td>The first day the new wage applies. <code>1900-01-01</code> or later.</td>\n<td><code>yyyy-MM-dd</code> <code>string</code></td>\n<td><code>2026-11-01</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"changing-a-wage\">Changing a wage</h3>\n<p>Workfeed keeps a wage history. Send <code>wage</code> with <code>effectiveFrom</code>, and the current wage ends the day before <code>effectiveFrom</code> while the new one starts on it.</p>\n<ul>\n<li><strong>Same day as the latest wage starts:</strong> replaces that wage, for corrections.</li>\n<li><strong>Before the latest wage starts:</strong> <code>400</code>. Earlier history can only be changed in Workfeed.</li>\n<li><strong>The employee already has this wage on <code>effectiveFrom</code>:</strong> nothing changes and the request returns <code>200</code>. It is safe to send the same wage on every sync.</li>\n<li><strong>The latest wage has an end date:</strong> <code>effectiveFrom</code> can be at most the day after it; later returns <code>400</code>. A change before the end date keeps that end date.</li>\n<li><strong>Monthly wages</strong> keep the calculation method set in Workfeed.</li>\n</ul>\n<p>The <code>wage</code> in the response is the one in effect today, so a wage that starts in the future shows from that day.</p>\n<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Employee ID</td>\n<td><code>string</code></td>\n<td><code>J9QAIiTG0nRC1OsC5YvHfLWdDHn1</code></td>\n</tr>\n<tr>\n<td>firstname</td>\n<td>The first name of the employee</td>\n<td><code>string</code></td>\n<td><code>API 2</code></td>\n</tr>\n<tr>\n<td>lastname</td>\n<td>The last name of the employee</td>\n<td><code>string</code></td>\n<td><code>Test 2</code></td>\n</tr>\n<tr>\n<td>email</td>\n<td>The email of the employee. This is also the email at which they'll receive their invite to Workfeed</td>\n<td><code>string</code></td>\n<td><code>test2@example.com</code></td>\n</tr>\n<tr>\n<td>phone</td>\n<td>The phone number of the employee</td>\n<td><code>string</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>birthdate</td>\n<td>The birthdate of the employee</td>\n<td>An <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> (only the date part)  <br /><code>null</code> if no birthdate.</td>\n<td><code>2025-09-25</code></td>\n</tr>\n<tr>\n<td>employmentDate</td>\n<td>The employee's first day of employment.  <br /><code>null</code> if not set.</td>\n<td><code>yyyy-MM-dd</code> <code>string</code> / <code>null</code></td>\n<td><code>2024-08-19</code></td>\n</tr>\n<tr>\n<td><code>roleIDs</code></td>\n<td>The roles to assign the new employee</td>\n<td><code>string[]</code></td>\n<td><code>[\"hLbEKIPTlMh3ehotXl0w\"]</code></td>\n</tr>\n<tr>\n<td><code>departmentIDs</code></td>\n<td>The departments to assign the new employee</td>\n<td><code>string[]</code></td>\n<td><code>[\"PKHaOSgFA4uguOqmLfWv\"]</code></td>\n</tr>\n<tr>\n<td>primaryDepartmentID</td>\n<td>Employee Primary Department. Which means it will auto assign the Employee to the Department Shifts</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>street</td>\n<td>The Street of the employee</td>\n<td><code>string</code></td>\n<td><code>\"\"</code></td>\n</tr>\n<tr>\n<td>city</td>\n<td>The City of the employee</td>\n<td><code>string</code></td>\n<td><code>\"\"</code></td>\n</tr>\n<tr>\n<td>zip</td>\n<td>The Zip Code of the employee</td>\n<td><code>string</code></td>\n<td><code>\"\"</code></td>\n</tr>\n<tr>\n<td>accessLevel</td>\n<td>Options:  <br /><code>employee</code> / <code>admin</code></td>\n<td><code>string</code></td>\n<td><code>employee</code></td>\n</tr>\n<tr>\n<td>wage</td>\n<td>Employee Wage Object</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>wage.amount</td>\n<td>Amount by Hour when <code>wage.type</code> is set to hourly. Otherwise it represents Amount by Month</td>\n<td><code>number</code></td>\n<td><code>20</code></td>\n</tr>\n<tr>\n<td>wage.type</td>\n<td>Options:  <br /><code>\"hourly\"</code> / <code>\"monthly\"</code></td>\n<td><code>string</code></td>\n<td><code>monthly</code></td>\n</tr>\n<tr>\n<td>minHours</td>\n<td>Employee Minimum <strong>Weekly</strong> Working Hours</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>maxHours</td>\n<td>Employee Maximum <strong>Weekly</strong> Working Hours</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>isDeleted</td>\n<td>If Employee was deleted</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>deletedOn</td>\n<td>When the employee was or will be soft-deleted</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> / <code>null</code></td>\n<td><code>2026-01-20T12:42:02.000Z</code></td>\n</tr>\n<tr>\n<td>ssn</td>\n<td>The employee's social security number (CPR number in Denmark), exactly as it was sent. <code>\"\"</code> (empty string) when none is set; some older employees return <code>null</code> instead.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>010190-1234</code></td>\n</tr>\n<tr>\n<td>bankAccount</td>\n<td>The employee's Danish bank account.  <br /><code>null</code> if not set.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{...}</code></td>\n</tr>\n<tr>\n<td>bankAccount.registrationNumber</td>\n<td>The 4-digit registration number (reg.nr.)</td>\n<td><code>string</code></td>\n<td><code>0040</code></td>\n</tr>\n<tr>\n<td>bankAccount.accountNumber</td>\n<td>The account number</td>\n<td><code>string</code></td>\n<td><code>0123456789</code></td>\n</tr>\n<tr>\n<td>taxCard</td>\n<td>Options:  <br /><code>primary</code> / <code>secondary</code>  <br /><code>null</code> if not set.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>primary</code></td>\n</tr>\n<tr>\n<td>imageURL</td>\n<td>Employee Image URL</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>whistleblowerUnit</td>\n<td>Whether the employee belongs to the company's whistleblower unit</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>customFields</td>\n<td>The company's custom fields for this employee, keyed by custom field ID. Values are <code>string</code>, a <code>yyyy-MM-dd</code> date, <code>string[]</code>, or <code>null</code>.</td>\n<td><code>object</code></td>\n<td><code>{\"nJ2xw0kFq\": \"Kitchen\"}</code></td>\n</tr>\n<tr>\n<td>emergencyContacts</td>\n<td>The employee's emergency contacts. Empty array if none are set.</td>\n<td><code>Array of Objects</code></td>\n<td><code>[{...}]</code></td>\n</tr>\n<tr>\n<td>emergencyContacts[].name</td>\n<td>Contact name</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>Jane Doe</code></td>\n</tr>\n<tr>\n<td>emergencyContacts[].phone</td>\n<td>Contact phone number</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Employee was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T18:22:45.695Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Employee was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T18:34:37.191Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","employees",":employeeID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"id":"fe098312-1e82-4b29-9857-6bb5a573a17d","description":{"content":"<p>Employee ID</p>\n","type":"text/plain"},"type":"string","value":"","key":"employeeID"}]}},"response":[{"id":"a6844cc7-60a7-4427-b3d0-b7b96cd8593c","name":"Update employee","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"firstname\": \"API 2\",\n    \"lastname\": \"Test 2\"\n    \n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees/:employeeID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","employees",":employeeID"],"variable":[{"key":"employeeID","value":"J9QAIiTG0nRC1OsC5YvHfLWdDHn1","type":"string"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"firstname\": \"Freja\",\n    \"lastname\": \"Lindqvist\",\n    \"email\": \"freja@bistronord.dk\",\n    \"phone\": \"20304050\",\n    \"birthdate\": \"1996-04-18\",\n    \"employmentDate\": \"2024-08-19\",\n    \"roleIDs\": [\n        \"hLbEKIPTlMh3ehotXl0w\"\n    ],\n    \"departmentIDs\": [\n        \"PKHaOSgFA4uguOqmLfWv\"\n    ],\n    \"primaryDepartmentID\": \"PKHaOSgFA4uguOqmLfWv\",\n    \"street\": \"Sankt Peders Stræde 27\",\n    \"city\": \"København K\",\n    \"zip\": \"1453\",\n    \"accessLevel\": \"employee\",\n    \"wage\": {\n        \"amount\": 175,\n        \"type\": \"hourly\"\n    },\n    \"minHours\": 16,\n    \"maxHours\": 37,\n    \"isDeleted\": false,\n    \"deletedOn\": null,\n    \"ssn\": \"180496-1234\",\n    \"bankAccount\": {\n        \"registrationNumber\": \"0040\",\n        \"accountNumber\": \"0123456789\"\n    },\n    \"taxCard\": \"primary\",\n    \"imageURL\": \"https://storage.googleapis.com/workfeed/employees/freja.jpg\",\n    \"whistleblowerUnit\": false,\n    \"customFields\": {\n        \"nJ2xw0kFqLm4Tb8R\": \"Allergy training 2025\",\n        \"pQ7vZc3XdRt9WmKa\": [\n            \"Bar\",\n            \"Terrace\"\n        ]\n    },\n    \"emergencyContacts\": [\n        {\n            \"name\": \"Astrid Lindqvist\",\n            \"phone\": \"31415926\"\n        },\n        {\n            \"name\": null,\n            \"phone\": \"22114488\"\n        }\n    ],\n    \"createTime\": \"2024-08-19T07:41:02.118Z\",\n    \"updateTime\": \"2026-02-27T09:15:44.903Z\"\n}"},{"id":"3224ba10-6182-abdd-28c9-4a937eab2990","name":"Only non-updatable fields sent","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"accessLevel\": \"admin\",\n    \"customFields\": {\n        \"x\": \"y\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees/:employeeID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","employees",":employeeID"],"variable":[{"key":"employeeID","value":"J9QAIiTG0nRC1OsC5YvHfLWdDHn1","type":"string"}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"No properties to update were provided\""},{"id":"f0dc0a82-4ca2-4338-fbb1-a9168fa3842f","name":"Empty body","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees/:employeeID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","employees",":employeeID"],"variable":[{"key":"employeeID","value":"J9QAIiTG0nRC1OsC5YvHfLWdDHn1","type":"string"}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Body data, cannot be empty\""},{"id":"e02b97ee-1290-f3d9-4568-c44d1ad1b10c","name":"Wage without effectiveFrom","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"wage\": {\n        \"amount\": 185,\n        \"type\": \"hourly\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees/:employeeID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","employees",":employeeID"],"variable":[{"key":"employeeID","value":"J9QAIiTG0nRC1OsC5YvHfLWdDHn1","type":"string"}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"wage.effectiveFrom is required when updating a wage\""},{"id":"c7f4576b-1f28-ba4e-0056-6cee6cfa14b2","name":"Wage before the latest wage","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"wage\": {\n        \"amount\": 185,\n        \"type\": \"hourly\",\n        \"effectiveFrom\": \"2026-02-01\"\n    }\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees/:employeeID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","employees",":employeeID"],"variable":[{"key":"employeeID","value":"J9QAIiTG0nRC1OsC5YvHfLWdDHn1","type":"string"}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Invalid wage.effectiveFrom: the latest wage starts 2026-03-01, so earlier changes must be made in Workfeed\""},{"id":"29c9181f-dfd4-ce69-f118-33f5cab48866","name":"addToIntegrations on update","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"addToIntegrations\": true\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees/:employeeID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","employees",":employeeID"],"variable":[{"key":"employeeID","value":"J9QAIiTG0nRC1OsC5YvHfLWdDHn1","type":"string"}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"addToIntegrations can only be set when creating an employee\""}],"_postman_id":"8c7fc854-efbe-417f-8b0c-81a86aff0f6a"},{"name":"Get employee","event":[{"listen":"test","script":{"id":"c75cc279-4425-409a-baed-4c9af80b4411","exec":["var template = `","    <table bgcolor=\"#FFFFFF\">","        <tr>","            <th>Name</th>","            <th>Id</th>","            <th>Deleted</th>","            <th>Roles</th>","            <!--","                <th>Create time</th>","                <th>Update time</th>","            -->","                 ","        </tr>","","        {{#each response}}","            {{#unless isDeleted}}","                <tr>","                    <td>{{firstname}} {{lastname}}</td>","                    <td>{{id}}</td>","                    <td>{{isDeleted}}</td>","                    <td> <ol>","                        {{#each roleIDs}}","                            <li>{{this}}</li>","                        {{/each}}","                        </ol>","                    </td>","                    <!--","                        <td>{{createTime}}</td>","                        <td>{{updateTime}}</td>","                    -->","                </tr>","            {{/unless}}","        {{/each}}","    </table>","`;","","// Set visualizer","pm.visualizer.set(template, {","    // Pass the response body parsed as JSON as `data`","    response: pm.response.json()","});"],"type":"text/javascript"}}],"id":"6cb310d0-1593-4ae0-afaa-b893acb68c50","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees/:employeeID","description":"<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Employee ID</td>\n<td><code>string</code></td>\n<td><code>J9QAIiTG0nRC1OsC5YvHfLWdDHn1</code></td>\n</tr>\n<tr>\n<td>firstname</td>\n<td>The first name of the employee</td>\n<td><code>string</code></td>\n<td><code>API 2</code></td>\n</tr>\n<tr>\n<td>lastname</td>\n<td>The last name of the employee</td>\n<td><code>string</code></td>\n<td><code>Test 2</code></td>\n</tr>\n<tr>\n<td>email</td>\n<td>The email of the employee. This is also the email at which they'll receive their invite to Workfeed</td>\n<td><code>string</code></td>\n<td><code>test2@example.com</code></td>\n</tr>\n<tr>\n<td>phone</td>\n<td>The phone number of the employee</td>\n<td><code>string</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>birthdate</td>\n<td>The birthdate of the employee</td>\n<td>An <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> (only the date part)  <br /><code>null</code> if no birthdate.</td>\n<td><code>2025-09-25</code></td>\n</tr>\n<tr>\n<td>employmentDate</td>\n<td>The employee's first day of employment.  <br /><code>null</code> if not set.</td>\n<td><code>yyyy-MM-dd</code> <code>string</code> / <code>null</code></td>\n<td><code>2024-08-19</code></td>\n</tr>\n<tr>\n<td><code>roleIDs</code></td>\n<td>The roles to assign the new employee</td>\n<td><code>string[]</code></td>\n<td><code>[\"hLbEKIPTlMh3ehotXl0w\"]</code></td>\n</tr>\n<tr>\n<td><code>departmentIDs</code></td>\n<td>The departments to assign the new employee</td>\n<td><code>string[]</code></td>\n<td><code>[\"PKHaOSgFA4uguOqmLfWv\"]</code></td>\n</tr>\n<tr>\n<td>primaryDepartmentID</td>\n<td>Employee Primary Department. Which means it will auto assign the Employee to the Department Shifts</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>street</td>\n<td>The Street of the employee</td>\n<td><code>string</code></td>\n<td><code>\"\"</code></td>\n</tr>\n<tr>\n<td>city</td>\n<td>The City of the employee</td>\n<td><code>string</code></td>\n<td><code>\"\"</code></td>\n</tr>\n<tr>\n<td>zip</td>\n<td>The Zip Code of the employee</td>\n<td><code>string</code></td>\n<td><code>\"\"</code></td>\n</tr>\n<tr>\n<td>accessLevel</td>\n<td>Options:  <br /><code>employee</code> / <code>admin</code></td>\n<td><code>string</code></td>\n<td><code>employee</code></td>\n</tr>\n<tr>\n<td>wage</td>\n<td>Employee Wage Object</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>wage.amount</td>\n<td>Amount by Hour when <code>wage.type</code> is set to hourly. Otherwise it represents Amount by Month</td>\n<td><code>number</code></td>\n<td><code>20</code></td>\n</tr>\n<tr>\n<td>wage.type</td>\n<td>Options:  <br /><code>\"hourly\"</code> / <code>\"monthly\"</code></td>\n<td><code>string</code></td>\n<td><code>monthly</code></td>\n</tr>\n<tr>\n<td>minHours</td>\n<td>Employee Minimum <strong>Weekly</strong> Working Hours</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>maxHours</td>\n<td>Employee Maximum <strong>Weekly</strong> Working Hours</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>isDeleted</td>\n<td>If Employee was deleted</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>deletedOn</td>\n<td>When the employee was or will be soft-deleted.  <br /><code>null</code> if no deletion has happened or is pending.</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> / <code>null</code></td>\n<td><code>2026-01-20T12:42:02.000Z</code></td>\n</tr>\n<tr>\n<td>ssn</td>\n<td>The employee's social security number (CPR number in Denmark), exactly as it was sent. <code>\"\"</code> (empty string) when none is set; some older employees return <code>null</code> instead.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>010190-1234</code></td>\n</tr>\n<tr>\n<td>bankAccount</td>\n<td>The employee's Danish bank account.  <br /><code>null</code> if not set.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{...}</code></td>\n</tr>\n<tr>\n<td>bankAccount.registrationNumber</td>\n<td>The 4-digit registration number (reg.nr.)</td>\n<td><code>string</code></td>\n<td><code>0040</code></td>\n</tr>\n<tr>\n<td>bankAccount.accountNumber</td>\n<td>The account number</td>\n<td><code>string</code></td>\n<td><code>0123456789</code></td>\n</tr>\n<tr>\n<td>taxCard</td>\n<td>Options:  <br /><code>primary</code> / <code>secondary</code>  <br /><code>null</code> if not set.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>primary</code></td>\n</tr>\n<tr>\n<td>imageURL</td>\n<td>Employee Image URL</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>whistleblowerUnit</td>\n<td>Whether the employee belongs to the company's whistleblower unit</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>customFields</td>\n<td>The company's custom fields for this employee, keyed by custom field ID. Values are <code>string</code>, a <code>yyyy-MM-dd</code> date, <code>string[]</code>, or <code>null</code>.</td>\n<td><code>object</code></td>\n<td><code>{\"nJ2xw0kFq\": \"Kitchen\"}</code></td>\n</tr>\n<tr>\n<td>emergencyContacts</td>\n<td>The employee's emergency contacts. Empty array if none are set.</td>\n<td><code>Array of Objects</code></td>\n<td><code>[{...}]</code></td>\n</tr>\n<tr>\n<td>emergencyContacts[].name</td>\n<td>Contact name</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>Jane Doe</code></td>\n</tr>\n<tr>\n<td>emergencyContacts[].phone</td>\n<td>Contact phone number</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Employee was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T18:22:45.695Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Employee was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T18:34:37.191</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","employees",":employeeID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"id":"2a6a4a26-84c6-4cfe-997f-404819a1c04a","description":{"content":"<p>Employee ID</p>\n","type":"text/plain"},"type":"any","value":"","key":"employeeID"}]}},"response":[{"id":"8046be07-6a69-47b8-a50b-7fe6e5bc27ab","name":"Get employee","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees/:employeeID","protocol":"https","host":["europe-west1-production-eu-327a3","cloudfunctions","net"],"path":["api","companies","COMPANY_ID","employees",":employeeID"],"variable":[{"key":"employeeID","value":"J9QAIiTG0nRC1OsC5YvHfLWdDHn1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"firstname\": \"Freja\",\n    \"lastname\": \"Lindqvist\",\n    \"email\": \"freja@bistronord.dk\",\n    \"phone\": \"20304050\",\n    \"birthdate\": \"1996-04-18\",\n    \"employmentDate\": \"2024-08-19\",\n    \"roleIDs\": [\n        \"hLbEKIPTlMh3ehotXl0w\"\n    ],\n    \"departmentIDs\": [\n        \"PKHaOSgFA4uguOqmLfWv\"\n    ],\n    \"primaryDepartmentID\": \"PKHaOSgFA4uguOqmLfWv\",\n    \"street\": \"Sankt Peders Stræde 27\",\n    \"city\": \"København K\",\n    \"zip\": \"1453\",\n    \"accessLevel\": \"employee\",\n    \"wage\": {\n        \"amount\": 175,\n        \"type\": \"hourly\"\n    },\n    \"minHours\": 16,\n    \"maxHours\": 37,\n    \"isDeleted\": false,\n    \"deletedOn\": null,\n    \"ssn\": \"180496-1234\",\n    \"bankAccount\": {\n        \"registrationNumber\": \"0040\",\n        \"accountNumber\": \"0123456789\"\n    },\n    \"taxCard\": \"primary\",\n    \"imageURL\": \"https://storage.googleapis.com/workfeed/employees/freja.jpg\",\n    \"whistleblowerUnit\": false,\n    \"customFields\": {\n        \"nJ2xw0kFqLm4Tb8R\": \"Allergy training 2025\",\n        \"pQ7vZc3XdRt9WmKa\": [\n            \"Bar\",\n            \"Terrace\"\n        ]\n    },\n    \"emergencyContacts\": [\n        {\n            \"name\": \"Astrid Lindqvist\",\n            \"phone\": \"31415926\"\n        },\n        {\n            \"name\": null,\n            \"phone\": \"22114488\"\n        }\n    ],\n    \"createTime\": \"2024-08-19T07:41:02.118Z\",\n    \"updateTime\": \"2026-02-27T09:15:44.903Z\"\n}"}],"_postman_id":"6cb310d0-1593-4ae0-afaa-b893acb68c50"},{"name":"Get employees","event":[{"listen":"test","script":{"id":"feec7235-17fa-425c-a90d-cc052ce0237a","exec":["var template = `","    <table bgcolor=\"#FFFFFF\">","        <tr>","            <th>Name</th>","            <th>Id</th>","            <th>Deleted</th>","            <th>Roles</th>","            <!--","                <th>Create time</th>","                <th>Update time</th>","            -->","                 ","        </tr>","","        {{#each response}}","            {{#unless isDeleted}}","                <tr>","                    <td>{{firstname}} {{lastname}}</td>","                    <td>{{id}}</td>","                    <td>{{isDeleted}}</td>","                    <td> <ol>","                        {{#each roleIDs}}","                            <li>{{this}}</li>","                        {{/each}}","                        </ol>","                    </td>","                    <!--","                        <td>{{createTime}}</td>","                        <td>{{updateTime}}</td>","                    -->","                </tr>","            {{/unless}}","        {{/each}}","    </table>","`;","","// Set visualizer","pm.visualizer.set(template, {","    // Pass the response body parsed as JSON as `data`","    response: pm.response.json()","});"],"type":"text/javascript","packages":{}}}],"id":"c64c11ad-608d-45da-b258-d8ac05a68679","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees","description":"<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Employee ID</td>\n<td><code>string</code></td>\n<td><code>J9QAIiTG0nRC1OsC5YvHfLWdDHn1</code></td>\n</tr>\n<tr>\n<td>firstname</td>\n<td>The first name of the employee</td>\n<td><code>string</code></td>\n<td><code>API 2</code></td>\n</tr>\n<tr>\n<td>lastname</td>\n<td>The last name of the employee</td>\n<td><code>string</code></td>\n<td><code>Test 2</code></td>\n</tr>\n<tr>\n<td>email</td>\n<td>The email of the employee. This is also the email at which they'll receive their invite to Workfeed</td>\n<td><code>string</code></td>\n<td><code>test2@example.com</code></td>\n</tr>\n<tr>\n<td>phone</td>\n<td>The phone number of the employee</td>\n<td><code>string</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>birthdate</td>\n<td>The birthdate of the employee</td>\n<td>An <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> (only the date part)  <br /><code>null</code> if no birthdate.</td>\n<td><code>2025-09-25</code></td>\n</tr>\n<tr>\n<td>employmentDate</td>\n<td>The employee's first day of employment.  <br /><code>null</code> if not set.</td>\n<td><code>yyyy-MM-dd</code> <code>string</code> / <code>null</code></td>\n<td><code>2024-08-19</code></td>\n</tr>\n<tr>\n<td><code>roleIDs</code></td>\n<td>The roles to assign the new employee</td>\n<td><code>string[]</code></td>\n<td><code>[\"hLbEKIPTlMh3ehotXl0w\"]</code></td>\n</tr>\n<tr>\n<td><code>departmentIDs</code></td>\n<td>The departments to assign the new employee</td>\n<td><code>string[]</code></td>\n<td><code>[\"PKHaOSgFA4uguOqmLfWv\"]</code></td>\n</tr>\n<tr>\n<td>primaryDepartmentID</td>\n<td>Employee Primary Department. Which means it will auto assign the Employee to the Department Shifts</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>street</td>\n<td>The Street of the employee</td>\n<td><code>string</code></td>\n<td><code>\"\"</code></td>\n</tr>\n<tr>\n<td>city</td>\n<td>The City of the employee</td>\n<td><code>string</code></td>\n<td><code>\"\"</code></td>\n</tr>\n<tr>\n<td>zip</td>\n<td>The Zip Code of the employee</td>\n<td><code>string</code></td>\n<td><code>\"\"</code></td>\n</tr>\n<tr>\n<td>accessLevel</td>\n<td>Options:  <br /><code>employee</code> / <code>admin</code></td>\n<td><code>string</code></td>\n<td><code>employee</code></td>\n</tr>\n<tr>\n<td>wage</td>\n<td>Employee Wage Object</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>wage.amount</td>\n<td>Amount by Hour when <code>wage.type</code> is set to hourly. Otherwise it represents Amount by Month</td>\n<td><code>number</code></td>\n<td><code>20</code></td>\n</tr>\n<tr>\n<td>wage.type</td>\n<td>Options:  <br /><code>\"hourly\"</code> / <code>\"monthly\"</code></td>\n<td><code>string</code></td>\n<td><code>monthly</code></td>\n</tr>\n<tr>\n<td>minHours</td>\n<td>Employee Minimum <strong>Weekly</strong> Working Hours</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>maxHours</td>\n<td>Employee Maximum <strong>Weekly</strong> Working Hours</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>isDeleted</td>\n<td>If Employee was deleted</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>deletedOn</td>\n<td>When the employee was or will be soft-deleted.  <br /><code>null</code> if no deletion has happened or is pending.</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> / <code>null</code></td>\n<td><code>2026-01-20T12:42:02.000Z</code></td>\n</tr>\n<tr>\n<td>ssn</td>\n<td>The employee's social security number (CPR number in Denmark), exactly as it was sent. <code>\"\"</code> (empty string) when none is set; some older employees return <code>null</code> instead.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>010190-1234</code></td>\n</tr>\n<tr>\n<td>bankAccount</td>\n<td>The employee's Danish bank account.  <br /><code>null</code> if not set.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{...}</code></td>\n</tr>\n<tr>\n<td>bankAccount.registrationNumber</td>\n<td>The 4-digit registration number (reg.nr.)</td>\n<td><code>string</code></td>\n<td><code>0040</code></td>\n</tr>\n<tr>\n<td>bankAccount.accountNumber</td>\n<td>The account number</td>\n<td><code>string</code></td>\n<td><code>0123456789</code></td>\n</tr>\n<tr>\n<td>taxCard</td>\n<td>Options:  <br /><code>primary</code> / <code>secondary</code>  <br /><code>null</code> if not set.</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>primary</code></td>\n</tr>\n<tr>\n<td>imageURL</td>\n<td>Employee Image URL</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>whistleblowerUnit</td>\n<td>Whether the employee belongs to the company's whistleblower unit</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>customFields</td>\n<td>The company's custom fields for this employee, keyed by custom field ID. Values are <code>string</code>, a <code>yyyy-MM-dd</code> date, <code>string[]</code>, or <code>null</code>.</td>\n<td><code>object</code></td>\n<td><code>{\"nJ2xw0kFq\": \"Kitchen\"}</code></td>\n</tr>\n<tr>\n<td>emergencyContacts</td>\n<td>The employee's emergency contacts. Empty array if none are set.</td>\n<td><code>Array of Objects</code></td>\n<td><code>[{...}]</code></td>\n</tr>\n<tr>\n<td>emergencyContacts[].name</td>\n<td>Contact name</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>Jane Doe</code></td>\n</tr>\n<tr>\n<td>emergencyContacts[].phone</td>\n<td>Contact phone number</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>12345678</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Employee was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T18:22:45.695Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Employee was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-28T18:34:37.191</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","employees"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"d9a17fd0-4e10-4918-a8c6-d75ff70bebc9","name":"Get employees","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/employees"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n        \"firstname\": \"Freja\",\n        \"lastname\": \"Lindqvist\",\n        \"email\": \"freja@bistronord.dk\",\n        \"phone\": \"20304050\",\n        \"birthdate\": \"1996-04-18\",\n        \"employmentDate\": \"2024-08-19\",\n        \"roleIDs\": [\n            \"hLbEKIPTlMh3ehotXl0w\"\n        ],\n        \"departmentIDs\": [\n            \"PKHaOSgFA4uguOqmLfWv\"\n        ],\n        \"primaryDepartmentID\": \"PKHaOSgFA4uguOqmLfWv\",\n        \"street\": \"Sankt Peders Stræde 27\",\n        \"city\": \"København K\",\n        \"zip\": \"1453\",\n        \"accessLevel\": \"employee\",\n        \"wage\": {\n            \"amount\": 175,\n            \"type\": \"hourly\"\n        },\n        \"minHours\": 16,\n        \"maxHours\": 37,\n        \"isDeleted\": false,\n        \"deletedOn\": null,\n        \"ssn\": \"180496-1234\",\n        \"bankAccount\": {\n            \"registrationNumber\": \"0040\",\n            \"accountNumber\": \"0123456789\"\n        },\n        \"taxCard\": \"primary\",\n        \"imageURL\": \"https://storage.googleapis.com/workfeed/employees/freja.jpg\",\n        \"whistleblowerUnit\": false,\n        \"customFields\": {\n            \"nJ2xw0kFqLm4Tb8R\": \"Allergy training 2025\",\n            \"pQ7vZc3XdRt9WmKa\": [\n                \"Bar\",\n                \"Terrace\"\n            ]\n        },\n        \"emergencyContacts\": [\n            {\n                \"name\": \"Astrid Lindqvist\",\n                \"phone\": \"31415926\"\n            },\n            {\n                \"name\": null,\n                \"phone\": \"22114488\"\n            }\n        ],\n        \"createTime\": \"2024-08-19T07:41:02.118Z\",\n        \"updateTime\": \"2026-02-27T09:15:44.903Z\"\n    },\n    {\n        \"id\": \"Lp3XvNq8ZmRtKd2WbYfCa5Hj9Gs1\",\n        \"firstname\": \"Mikkel\",\n        \"lastname\": \"Sørensen\",\n        \"email\": \"mikkel@bistronord.dk\",\n        \"phone\": \"26374859\",\n        \"birthdate\": null,\n        \"employmentDate\": null,\n        \"roleIDs\": [\n            \"Rj4WmZq7NpXvTb2LdKcE\"\n        ],\n        \"departmentIDs\": [\n            \"Nv8QrTb3LmXkPd2ZfYaW\"\n        ],\n        \"primaryDepartmentID\": \"Nv8QrTb3LmXkPd2ZfYaW\",\n        \"street\": \"\",\n        \"city\": \"\",\n        \"zip\": \"\",\n        \"accessLevel\": \"admin\",\n        \"wage\": {\n            \"amount\": 32000,\n            \"type\": \"monthly\"\n        },\n        \"minHours\": null,\n        \"maxHours\": null,\n        \"isDeleted\": false,\n        \"deletedOn\": null,\n        \"ssn\": null,\n        \"bankAccount\": null,\n        \"taxCard\": null,\n        \"imageURL\": null,\n        \"whistleblowerUnit\": true,\n        \"customFields\": {},\n        \"emergencyContacts\": [],\n        \"createTime\": \"2023-11-02T12:00:00.000Z\",\n        \"updateTime\": \"2026-01-14T08:22:19.441Z\"\n    }\n]"}],"_postman_id":"c64c11ad-608d-45da-b258-d8ac05a68679"}],"id":"7fd3d275-7a9a-4bf6-8340-7b9651e8019c","_postman_id":"7fd3d275-7a9a-4bf6-8340-7b9651e8019c","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}}},{"name":"Departments","item":[{"name":"Get departments","id":"653e4576-d5d7-4d06-a5a5-397453b0b00b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments","description":"<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Department ID</td>\n<td><code>string</code></td>\n<td><code>PKHaOSgFA4uguOqmLfWv</code></td>\n</tr>\n<tr>\n<td>name</td>\n<td>Department Name</td>\n<td><code>string</code></td>\n<td><code>API Testing Account😎</code></td>\n</tr>\n<tr>\n<td>isDeleted</td>\n<td>Check if the Department was deleted</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When the Department was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When the Department was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","departments"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"5c36470c-b91b-4111-8f83-cdc48ea0e1c6","name":"Get departments","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"PKHaOSgFA4uguOqmLfWv\",\n        \"name\": \"API Testing Account 😎\",\n        \"isDeleted\": false,\n        \"createTime\": \"2023-10-25T09:43:06.650Z\",\n        \"updateTime\": \"2023-10-25T09:43:06.650Z\"\n    }\n]"}],"_postman_id":"653e4576-d5d7-4d06-a5a5-397453b0b00b"},{"name":"Get departments daily","id":"b7e35f94-6d10-4840-9e8e-cf5518e54dee","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/daily?from=2023-12-20&to=2024-12-21","description":"<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Param</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>from</td>\n<td>Yes</td>\n<td>Only get Daily Notes starting <em>on or after</em> this time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-07-01T00:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>to</td>\n<td>Yes</td>\n<td>Only get Daily Notes starting <em>before</em> this time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-30T00:00:00.000Z</code></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Note:</strong> the returned array can contain <code>null</code> elements for days that have no stored data - guard for that when iterating.</p>\n<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Daily Note ID, represents the day of the Note</td>\n<td><code>string</code></td>\n<td><code>2023-12-21</code></td>\n</tr>\n<tr>\n<td>note</td>\n<td>Daily Note</td>\n<td><code>object</code></td>\n<td></td>\n</tr>\n<tr>\n<td>note.message</td>\n<td>Note message</td>\n<td><code>string</code></td>\n<td><code>Test</code></td>\n</tr>\n<tr>\n<td>note.senderID</td>\n<td>Employee that created the Note</td>\n<td><code>string</code></td>\n<td><code>sEx78CyrI2M9RDfsN99BL78BUKx2</code></td>\n</tr>\n<tr>\n<td>note.time</td>\n<td>Daily Note Time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>manualRevenue</td>\n<td>Manual Revenue inserted</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>additionalLaborCost</td>\n<td>Manually entered extra labor cost for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>targets</td>\n<td>The day's targets, or <code>null</code> if none are set</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>targets.sales</td>\n<td>Sales target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>12000</code></td>\n</tr>\n<tr>\n<td>targets.laborPercentage</td>\n<td>Labor-percentage target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>28</code></td>\n</tr>\n<tr>\n<td>targets.laborCost</td>\n<td>Labor-cost target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>3400</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When the Daily Note was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When the Daily Note was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","departments",":departmentID","daily"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[{"key":"from","value":"2023-12-20"},{"key":"to","value":"2024-12-21"}],"variable":[{"description":{"content":"<p>Department Id</p>\n","type":"text/plain"},"type":"any","value":"","key":"departmentID"}]}},"response":[{"id":"7fdfd4f1-0346-4986-8134-7dce305b04c4","name":"Get departments daily","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/daily?from=2023-07-01T00:00:00.000Z&to=2023-08-02T00:00:00.000Z","protocol":"https","host":["europe-west1-production-eu-327a3","cloudfunctions","net"],"path":["api","companies","COMPANY_ID","departments",":departmentID","daily"],"query":[{"key":"from","value":"2023-07-01T00:00:00.000Z"},{"key":"to","value":"2023-08-02T00:00:00.000Z"}],"variable":[{"key":"departmentID","value":"","description":"Department Id"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"2026-03-12\",\n        \"note\": null,\n        \"manualRevenue\": 4200,\n        \"additionalLaborCost\": 750,\n        \"targets\": {\n            \"sales\": 42000,\n            \"laborPercentage\": 26,\n            \"laborCost\": 10920\n        },\n        \"createTime\": \"2026-09-03T13:05:57.003Z\",\n        \"updateTime\": \"2026-09-03T13:05:57.003Z\"\n    }\n]"}],"_postman_id":"b7e35f94-6d10-4840-9e8e-cf5518e54dee"},{"name":"Get daily note","id":"0ce5f204-4bc9-4edc-98e6-f0d8ae1dad78","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/daily/:dailyID","description":"<p><strong>Note:</strong> returns <code>200</code> with a body of <code>null</code> when the department has no data stored for that day.</p>\n<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Daily Note ID, represents the day of the Note</td>\n<td><code>string</code></td>\n<td><code>2023-12-21</code></td>\n</tr>\n<tr>\n<td>note</td>\n<td>Daily Note</td>\n<td><code>object</code></td>\n<td></td>\n</tr>\n<tr>\n<td>note.message</td>\n<td>Note message</td>\n<td><code>string</code></td>\n<td><code>Test</code></td>\n</tr>\n<tr>\n<td>note.senderID</td>\n<td>Employee that created the Note</td>\n<td><code>string</code></td>\n<td><code>sEx78CyrI2M9RDfsN99BL78BUKx2</code></td>\n</tr>\n<tr>\n<td>note.time</td>\n<td>Daily Note Time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>manualRevenue</td>\n<td>Manual Revenue inserted</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>additionalLaborCost</td>\n<td>Manually entered extra labor cost for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>targets</td>\n<td>The day's targets, or <code>null</code> if none are set</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>targets.sales</td>\n<td>Sales target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>12000</code></td>\n</tr>\n<tr>\n<td>targets.laborPercentage</td>\n<td>Labor-percentage target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>28</code></td>\n</tr>\n<tr>\n<td>targets.laborCost</td>\n<td>Labor-cost target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>3400</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When the Daily Note was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When the Daily Note was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","departments",":departmentID","daily",":dailyID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"id":"6ce23f09-d9b7-4679-9fa9-147358a2ce6c","description":{"content":"<p>Department Id</p>\n","type":"text/plain"},"type":"any","value":"","key":"departmentID"},{"id":"7f9d7c55-fbd0-423e-8c6c-cbf230940ef7","description":{"content":"<p>Daily Id</p>\n","type":"text/plain"},"type":"any","value":"","key":"dailyID"}]}},"response":[{"id":"dc9541da-a635-42d7-af85-1a28a63aaa83","name":"Get daily note","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/daily/:dailyID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","departments",":departmentID","daily",":dailyID"],"variable":[{"key":"departmentID","value":"","description":"Department Id"},{"key":"dailyID","value":"","description":"Daily Id"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"2026-03-12\",\n    \"note\": null,\n    \"manualRevenue\": 4200,\n    \"additionalLaborCost\": 750,\n    \"targets\": {\n        \"sales\": 42000,\n        \"laborPercentage\": 26,\n        \"laborCost\": 10920\n    },\n    \"createTime\": \"2026-09-03T13:05:57.003Z\",\n    \"updateTime\": \"2026-09-03T13:05:57.003Z\"\n}"}],"_postman_id":"0ce5f204-4bc9-4edc-98e6-f0d8ae1dad78"},{"name":"Create Department","id":"00d6b320-09b2-4c25-ad55-d112bd25289a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Department Test\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments","description":"<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>Yes</td>\n<td>Department Name</td>\n<td><code>string</code></td>\n<td><code>\"Department Test\"</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Department ID</td>\n<td><code>string</code></td>\n<td><code>LaanR96PA3AzZ3eMG0Wb</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","departments"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"2f934ea5-90a3-43ca-90b5-d6bbc0fb19ee","name":"Create Department","originalRequest":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Department Test\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"LaanR96PA3AzZ3eMG0Wb\"\n}"}],"_postman_id":"00d6b320-09b2-4c25-ad55-d112bd25289a"},{"name":"Update Department","id":"067b56e9-30e3-41be-8c1f-845be9b33682","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Department Test\",\n    \"isDeleted\": true\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID","description":"<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>No</td>\n<td>Department Name</td>\n<td><code>string</code></td>\n<td><code>\"Department Test\"</code></td>\n</tr>\n<tr>\n<td>isDeleted</td>\n<td>No</td>\n<td>Check if the Department was deleted</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Department ID</td>\n<td><code>string</code></td>\n<td><code>LaanR96PA3AzZ3eMG0Wb</code></td>\n</tr>\n<tr>\n<td>name</td>\n<td>Department Name</td>\n<td><code>string</code></td>\n<td><code>Department Test</code></td>\n</tr>\n<tr>\n<td>isDeleted</td>\n<td>Is Department Deleted</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Department was Created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2024-02-23T17:00:57.472Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Department was Updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2024-02-23T17:00:57.472Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","departments",":departmentID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"departmentID"}]}},"response":[{"id":"d26a3cb2-bf66-47cb-a468-801aeeb18f80","name":"Update Department","originalRequest":{"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Department Test\",\n    \"isDeleted\": true\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","departments",":departmentID"],"variable":[{"key":"departmentID","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"LaanR96PA3AzZ3eMG0Wb\",\n    \"name\": \"Department Test\",\n    \"isDeleted\": true,\n    \"createTime\": \"2024-02-23T17:00:57.472Z\",\n    \"updateTime\": \"2024-02-23T17:02:14.952Z\"\n}"}],"_postman_id":"067b56e9-30e3-41be-8c1f-845be9b33682"},{"name":"Get department stats","id":"577c5b23-cb1a-fa3e-dbea-91a5518e1d75","request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/stats?from=2026-07-01&to=2026-07-31","description":"<p>Per-day labor and revenue stats for one department.</p>\n<p>This is <strong>not</strong> the same as <em>Get departments daily</em> - that endpoint returns the stored day document (notes, manual revenue, targets), while this one returns the <strong>calculated</strong> figures for each day.</p>\n<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Param</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>from</td>\n<td>Yes</td>\n<td>First day of the range, <strong>inclusive</strong>. Interpreted in the company's time zone.</td>\n<td><code>yyyy-MM-dd</code></td>\n<td><code>2026-07-01</code></td>\n</tr>\n<tr>\n<td>to</td>\n<td>Yes</td>\n<td>Last day of the range, <strong>inclusive</strong>. Must be on or after <code>from</code>. The range may span at most <strong>31 days</strong>.</td>\n<td><code>yyyy-MM-dd</code></td>\n<td><code>2026-07-31</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<p>Returns one object per day in the range.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>date</td>\n<td>The calendar day, in the company's time zone</td>\n<td><code>yyyy-MM-dd</code></td>\n<td><code>2026-07-14</code></td>\n</tr>\n<tr>\n<td>laborCost</td>\n<td>Total labor cost for the day: shift pay including dynamic supplements, plus percentage-based extra costs, plus any manually entered extra cost</td>\n<td><code>number</code></td>\n<td><code>4210.75</code></td>\n</tr>\n<tr>\n<td>revenue</td>\n<td>Manual revenue plus POS revenue for the day</td>\n<td><code>number</code></td>\n<td><code>18400</code></td>\n</tr>\n<tr>\n<td>laborPercentage</td>\n<td><code>laborCost / revenue * 100</code>. When <code>revenue</code> is <code>0</code> the ratio has no value and this is <code>null</code> - which is not the same as <code>0</code>. The field is always present.</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>22.89</code></td>\n</tr>\n<tr>\n<td>targets</td>\n<td>The day's targets, or <code>null</code> if none are set</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>targets.sales</td>\n<td>Sales target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>20000</code></td>\n</tr>\n<tr>\n<td>targets.laborPercentage</td>\n<td>Labor-percentage target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>25</code></td>\n</tr>\n<tr>\n<td>targets.laborCost</td>\n<td>Labor-cost target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>5000</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"use-this-for-total-labor-cost\">Use this for total labor cost</h3>\n<p>Per-shift <code>grossPay</code> is <code>0</code> for monthly-paid employees, so summing <code>grossPay</code> across shifts <strong>understates</strong> labor cost. Use this endpoint's <code>laborCost</code> instead.</p>\n<h3 id=\"errors\">Errors</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Code</th>\n<th>When</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>400</code></td>\n<td><code>from</code> or <code>to</code> missing, not <code>yyyy-MM-dd</code>, not a real calendar date (e.g. <code>2026-02-31</code>), <code>to</code> before <code>from</code>, or a range longer than 31 days</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>The department does not exist</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","departments",":departmentID","stats"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[{"key":"from","value":"2026-07-01"},{"key":"to","value":"2026-07-31"}],"variable":[{"type":"any","value":"","key":"departmentID"}]}},"response":[{"id":"77f7e1fb-5ca3-9208-e370-73c1b0268d67","name":"Get department stats","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/stats?from=2026-07-01&to=2026-07-31","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","departments",":departmentID","stats"],"query":[{"value":"2026-07-01","key":"from"},{"value":"2026-07-31","key":"to"}],"variable":[{"value":"","key":"departmentID"}]},"description":"Per-day labor and revenue stats for one department.\n\nThis is **not** the same as *Get departments daily* - that endpoint returns the stored day document (notes, manual revenue, targets), while this one returns the **calculated** figures for each day.\n\n### Request Fields\n\n| **Param** | **Required** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- | --- |\n| from | Yes | First day of the range, **inclusive**. Interpreted in the company's time zone. | `yyyy-MM-dd` | `2026-07-01` |\n| to | Yes | Last day of the range, **inclusive**. Must be on or after `from`. The range may span at most **31 days**. | `yyyy-MM-dd` | `2026-07-31` |\n\n### Response Fields\n\nReturns one object per day in the range.\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| date | The calendar day, in the company's time zone | `yyyy-MM-dd` | `2026-07-14` |\n| laborCost | Total labor cost for the day: shift pay including dynamic supplements, plus percentage-based extra costs, plus any manually entered extra cost | `number` | `4210.75` |\n| revenue | Manual revenue plus POS revenue for the day | `number` | `18400` |\n| laborPercentage | `laborCost / revenue * 100`. When `revenue` is `0` the ratio has no value and this is `null` - which is not the same as `0`. The field is always present. | `number` / `null` | `22.89` |\n| targets | The day's targets, or `null` if none are set | `object` / `null` | `null` |\n| targets.sales | Sales target for the day | `number` / `null` | `20000` |\n| targets.laborPercentage | Labor-percentage target for the day | `number` / `null` | `25` |\n| targets.laborCost | Labor-cost target for the day | `number` / `null` | `5000` |\n\n### Use this for total labor cost\n\nPer-shift `grossPay` is `0` for monthly-paid employees, so summing `grossPay` across shifts **understates** labor cost. Use this endpoint's `laborCost` instead.\n\n### Errors\n\n| Code | When |\n| --- | --- |\n| `400` | `from` or `to` missing, not `yyyy-MM-dd`, not a real calendar date (e.g. `2026-02-31`), `to` before `from`, or a range longer than 31 days |\n| `404` | The department does not exist |"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"[\n    {\n        \"date\": \"2026-03-12\",\n        \"laborCost\": 10480.25,\n        \"revenue\": 41200,\n        \"laborPercentage\": 25.44,\n        \"targets\": {\n            \"sales\": 42000,\n            \"laborPercentage\": 26,\n            \"laborCost\": 10920\n        }\n    },\n    {\n        \"date\": \"2026-03-13\",\n        \"laborCost\": 9130.5,\n        \"revenue\": 38650,\n        \"laborPercentage\": 23.62,\n        \"targets\": null\n    },\n    {\n        \"date\": \"2026-03-14\",\n        \"laborCost\": 0,\n        \"revenue\": 0,\n        \"laborPercentage\": null,\n        \"targets\": null\n    }\n]"},{"id":"59523c19-8835-da0d-de14-f6ff7a590672","name":"Range longer than 31 days","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/stats?from=2026-07-01&to=2026-07-31","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","departments",":departmentID","stats"],"query":[{"value":"2026-07-01","key":"from"},{"value":"2026-07-31","key":"to"}],"variable":[{"value":"","key":"departmentID"}]},"description":"Per-day labor and revenue stats for one department.\n\nThis is **not** the same as *Get departments daily* - that endpoint returns the stored day document (notes, manual revenue, targets), while this one returns the **calculated** figures for each day.\n\n### Request Fields\n\n| **Param** | **Required** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- | --- |\n| from | Yes | First day of the range, **inclusive**. Interpreted in the company's time zone. | `yyyy-MM-dd` | `2026-07-01` |\n| to | Yes | Last day of the range, **inclusive**. Must be on or after `from`. The range may span at most **31 days**. | `yyyy-MM-dd` | `2026-07-31` |\n\n### Response Fields\n\nReturns one object per day in the range.\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| date | The calendar day, in the company's time zone | `yyyy-MM-dd` | `2026-07-14` |\n| laborCost | Total labor cost for the day: shift pay including dynamic supplements, plus percentage-based extra costs, plus any manually entered extra cost | `number` | `4210.75` |\n| revenue | Manual revenue plus POS revenue for the day | `number` | `18400` |\n| laborPercentage | `laborCost / revenue * 100`. When `revenue` is `0` the ratio has no value and this is `null` - which is not the same as `0`. The field is always present. | `number` / `null` | `22.89` |\n| targets | The day's targets, or `null` if none are set | `object` / `null` | `null` |\n| targets.sales | Sales target for the day | `number` / `null` | `20000` |\n| targets.laborPercentage | Labor-percentage target for the day | `number` / `null` | `25` |\n| targets.laborCost | Labor-cost target for the day | `number` / `null` | `5000` |\n\n### Use this for total labor cost\n\nPer-shift `grossPay` is `0` for monthly-paid employees, so summing `grossPay` across shifts **understates** labor cost. Use this endpoint's `laborCost` instead.\n\n### Errors\n\n| Code | When |\n| --- | --- |\n| `400` | `from` or `to` missing, not `yyyy-MM-dd`, not a real calendar date (e.g. `2026-02-31`), `to` before `from`, or a range longer than 31 days |\n| `404` | The department does not exist |"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"Date range must be at most 31 days"},{"id":"210d7e83-587f-a5bf-a7bb-2a6fd8a856b7","name":"Department not found","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/stats?from=2026-07-01&to=2026-07-31","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","departments",":departmentID","stats"],"query":[{"value":"2026-07-01","key":"from"},{"value":"2026-07-31","key":"to"}],"variable":[{"value":"","key":"departmentID"}]},"description":"Per-day labor and revenue stats for one department.\n\nThis is **not** the same as *Get departments daily* - that endpoint returns the stored day document (notes, manual revenue, targets), while this one returns the **calculated** figures for each day.\n\n### Request Fields\n\n| **Param** | **Required** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- | --- |\n| from | Yes | First day of the range, **inclusive**. Interpreted in the company's time zone. | `yyyy-MM-dd` | `2026-07-01` |\n| to | Yes | Last day of the range, **inclusive**. Must be on or after `from`. The range may span at most **31 days**. | `yyyy-MM-dd` | `2026-07-31` |\n\n### Response Fields\n\nReturns one object per day in the range.\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| date | The calendar day, in the company's time zone | `yyyy-MM-dd` | `2026-07-14` |\n| laborCost | Total labor cost for the day: shift pay including dynamic supplements, plus percentage-based extra costs, plus any manually entered extra cost | `number` | `4210.75` |\n| revenue | Manual revenue plus POS revenue for the day | `number` | `18400` |\n| laborPercentage | `laborCost / revenue * 100`. When `revenue` is `0` the ratio has no value and this is `null` - which is not the same as `0`. The field is always present. | `number` / `null` | `22.89` |\n| targets | The day's targets, or `null` if none are set | `object` / `null` | `null` |\n| targets.sales | Sales target for the day | `number` / `null` | `20000` |\n| targets.laborPercentage | Labor-percentage target for the day | `number` / `null` | `25` |\n| targets.laborCost | Labor-cost target for the day | `number` / `null` | `5000` |\n\n### Use this for total labor cost\n\nPer-shift `grossPay` is `0` for monthly-paid employees, so summing `grossPay` across shifts **understates** labor cost. Use this endpoint's `laborCost` instead.\n\n### Errors\n\n| Code | When |\n| --- | --- |\n| `400` | `from` or `to` missing, not `yyyy-MM-dd`, not a real calendar date (e.g. `2026-02-31`), `to` before `from`, or a range longer than 31 days |\n| `404` | The department does not exist |"},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"Department not found"}],"_postman_id":"577c5b23-cb1a-fa3e-dbea-91a5518e1d75"},{"name":"Update department daily","id":"3d40c0c7-5213-5d93-9d7d-3c8402b8328a","request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"targets\": {\n        \"sales\": 42000,\n        \"laborPercentage\": 26,\n        \"laborCost\": 10920\n    },\n    \"additionalLaborCost\": 750,\n    \"manualRevenue\": 4200\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/daily/:dailyID","description":"<p>Writes targets and extra costs for a single day in a department.</p>\n<p><code>:dailyID</code> is the date, as <code>yyyy-MM-dd</code>, in the company's time zone - the same identifier <em>Get daily note</em> uses. The day is created if it does not exist yet.</p>\n<h3 id=\"request-fields\">Request Fields</h3>\n<p>Every field is optional; send only what you want to change.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>targets</td>\n<td>No</td>\n<td>The day's targets. Any subset of the three keys below.</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>{\"sales\": 20000}</code></td>\n</tr>\n<tr>\n<td>targets.sales</td>\n<td>No</td>\n<td>Sales target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>20000</code></td>\n</tr>\n<tr>\n<td>targets.laborPercentage</td>\n<td>No</td>\n<td>Labor-percentage target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>25</code></td>\n</tr>\n<tr>\n<td>targets.laborCost</td>\n<td>No</td>\n<td>Labor-cost target for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>5000</code></td>\n</tr>\n<tr>\n<td>additionalLaborCost</td>\n<td>No</td>\n<td>Manually entered extra labor cost for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>750</code></td>\n</tr>\n<tr>\n<td>manualRevenue</td>\n<td>No</td>\n<td>Manually entered revenue for the day</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>18400</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"merge-semantics\">Merge semantics</h3>\n<p>The write <strong>merges</strong> into the existing day:</p>\n<ul>\n<li>A field you omit is left untouched.</li>\n<li><code>additionalLaborCost</code> and <code>manualRevenue</code> are cleared by sending them as <code>null</code>.</li>\n<li>Individual keys <strong>inside</strong> <code>targets</code> are cleared by sending them as <code>null</code> - e.g. <code>{\"targets\": {\"sales\": null}}</code> clears the sales target and leaves <code>laborPercentage</code> and <code>laborCost</code> in place.</li>\n<li><code>targets</code> itself cannot be nulled: <code>{\"targets\": null}</code> returns <code>400 \"Invalid targets: Invalid data format\"</code>. Clear the individual keys instead.</li>\n<li>An empty body returns <code>400 \"Body data, cannot be empty\"</code>.</li>\n</ul>\n<h3 id=\"response-fields\">Response Fields</h3>\n<p>Returns <code>200</code> with the updated day, in the same shape as <em>Get daily note</em>.</p>\n<h3 id=\"errors\">Errors</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Code</th>\n<th>When</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>400</code></td>\n<td><code>:dailyID</code> is not a valid <code>yyyy-MM-dd</code> date, or the body fails validation</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>The department does not exist</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","departments",":departmentID","daily",":dailyID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"departmentID"},{"type":"any","value":"","key":"dailyID"}]}},"response":[{"id":"0bc5de8c-047c-b67d-4e79-b3d070672277","name":"Update department daily","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"targets\": {\n        \"sales\": 42000,\n        \"laborPercentage\": 26,\n        \"laborCost\": 10920\n    },\n    \"additionalLaborCost\": 750,\n    \"manualRevenue\": 4200\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/daily/:dailyID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","departments",":departmentID","daily",":dailyID"],"variable":[{"value":"","key":"departmentID"},{"value":"","key":"dailyID"}]},"description":"Writes targets and extra costs for a single day in a department.\n\n`:dailyID` is the date, as `yyyy-MM-dd`, in the company's time zone - the same identifier *Get daily note* uses. The day is created if it does not exist yet.\n\n### Request Fields\n\nEvery field is optional; send only what you want to change.\n\n| **Body** | **Required** | **Description** | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| targets | No | The day's targets. Any subset of the three keys below. | `object` / `null` | `{\"sales\": 20000}` |\n| targets.sales | No | Sales target for the day | `number` / `null` | `20000` |\n| targets.laborPercentage | No | Labor-percentage target for the day | `number` / `null` | `25` |\n| targets.laborCost | No | Labor-cost target for the day | `number` / `null` | `5000` |\n| additionalLaborCost | No | Manually entered extra labor cost for the day | `number` / `null` | `750` |\n| manualRevenue | No | Manually entered revenue for the day | `number` / `null` | `18400` |\n\n### Merge semantics\n\nThe write **merges** into the existing day:\n\n*   A field you omit is left untouched.\n*   `additionalLaborCost` and `manualRevenue` are cleared by sending them as `null`.\n*   Individual keys **inside** `targets` are cleared by sending them as `null` - e.g. `{\"targets\": {\"sales\": null}}` clears the sales target and leaves `laborPercentage` and `laborCost` in place.\n*   `targets` itself cannot be nulled: `{\"targets\": null}` returns `400 \"Invalid targets: Invalid data format\"`. Clear the individual keys instead.\n*   An empty body returns `400 \"Body data, cannot be empty\"`.\n\n### Response Fields\n\nReturns `200` with the updated day, in the same shape as *Get daily note*.\n\n### Errors\n\n| Code | When |\n| --- | --- |\n| `400` | `:dailyID` is not a valid `yyyy-MM-dd` date, or the body fails validation |\n| `404` | The department does not exist |"},"status":"OK","code":200,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"2026-03-12\",\n    \"note\": {\n        \"senderID\": \"Lp3XvNq8ZmRtKd2WbYfCa5Hj9Gs1\",\n        \"message\": \"Two large groups booked for the evening 🍷\",\n        \"time\": \"2026-03-11T16:42:12.375Z\"\n    },\n    \"manualRevenue\": 4200,\n    \"additionalLaborCost\": 750,\n    \"targets\": {\n        \"sales\": 42000,\n        \"laborPercentage\": 26,\n        \"laborCost\": 10920\n    },\n    \"createTime\": \"2026-03-01T00:45:18.115Z\",\n    \"updateTime\": \"2026-03-11T16:42:12.573Z\"\n}"},{"id":"de6231da-69ae-9176-117d-33499f9afb8c","name":"targets cannot be nulled","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"targets\": {\n        \"sales\": 42000,\n        \"laborPercentage\": 26,\n        \"laborCost\": 10920\n    },\n    \"additionalLaborCost\": 750,\n    \"manualRevenue\": 4200\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/daily/:dailyID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","departments",":departmentID","daily",":dailyID"],"variable":[{"value":"","key":"departmentID"},{"value":"","key":"dailyID"}]},"description":"Writes targets and extra costs for a single day in a department.\n\n`:dailyID` is the date, as `yyyy-MM-dd`, in the company's time zone - the same identifier *Get daily note* uses. The day is created if it does not exist yet.\n\n### Request Fields\n\nEvery field is optional; send only what you want to change.\n\n| **Body** | **Required** | **Description** | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| targets | No | The day's targets. Any subset of the three keys below. | `object` / `null` | `{\"sales\": 20000}` |\n| targets.sales | No | Sales target for the day | `number` / `null` | `20000` |\n| targets.laborPercentage | No | Labor-percentage target for the day | `number` / `null` | `25` |\n| targets.laborCost | No | Labor-cost target for the day | `number` / `null` | `5000` |\n| additionalLaborCost | No | Manually entered extra labor cost for the day | `number` / `null` | `750` |\n| manualRevenue | No | Manually entered revenue for the day | `number` / `null` | `18400` |\n\n### Merge semantics\n\nThe write **merges** into the existing day:\n\n*   A field you omit is left untouched.\n*   `additionalLaborCost` and `manualRevenue` are cleared by sending them as `null`.\n*   Individual keys **inside** `targets` are cleared by sending them as `null` - e.g. `{\"targets\": {\"sales\": null}}` clears the sales target and leaves `laborPercentage` and `laborCost` in place.\n*   `targets` itself cannot be nulled: `{\"targets\": null}` returns `400 \"Invalid targets: Invalid data format\"`. Clear the individual keys instead.\n*   An empty body returns `400 \"Body data, cannot be empty\"`.\n\n### Response Fields\n\nReturns `200` with the updated day, in the same shape as *Get daily note*.\n\n### Errors\n\n| Code | When |\n| --- | --- |\n| `400` | `:dailyID` is not a valid `yyyy-MM-dd` date, or the body fails validation |\n| `404` | The department does not exist |"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"Invalid targets: Invalid data format"},{"id":"abd10e90-87db-8f22-0ade-55a4b985f789","name":"Empty body","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"targets\": {\n        \"sales\": 42000,\n        \"laborPercentage\": 26,\n        \"laborCost\": 10920\n    },\n    \"additionalLaborCost\": 750,\n    \"manualRevenue\": 4200\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/departments/:departmentID/daily/:dailyID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","departments",":departmentID","daily",":dailyID"],"variable":[{"value":"","key":"departmentID"},{"value":"","key":"dailyID"}]},"description":"Writes targets and extra costs for a single day in a department.\n\n`:dailyID` is the date, as `yyyy-MM-dd`, in the company's time zone - the same identifier *Get daily note* uses. The day is created if it does not exist yet.\n\n### Request Fields\n\nEvery field is optional; send only what you want to change.\n\n| **Body** | **Required** | **Description** | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| targets | No | The day's targets. Any subset of the three keys below. | `object` / `null` | `{\"sales\": 20000}` |\n| targets.sales | No | Sales target for the day | `number` / `null` | `20000` |\n| targets.laborPercentage | No | Labor-percentage target for the day | `number` / `null` | `25` |\n| targets.laborCost | No | Labor-cost target for the day | `number` / `null` | `5000` |\n| additionalLaborCost | No | Manually entered extra labor cost for the day | `number` / `null` | `750` |\n| manualRevenue | No | Manually entered revenue for the day | `number` / `null` | `18400` |\n\n### Merge semantics\n\nThe write **merges** into the existing day:\n\n*   A field you omit is left untouched.\n*   `additionalLaborCost` and `manualRevenue` are cleared by sending them as `null`.\n*   Individual keys **inside** `targets` are cleared by sending them as `null` - e.g. `{\"targets\": {\"sales\": null}}` clears the sales target and leaves `laborPercentage` and `laborCost` in place.\n*   `targets` itself cannot be nulled: `{\"targets\": null}` returns `400 \"Invalid targets: Invalid data format\"`. Clear the individual keys instead.\n*   An empty body returns `400 \"Body data, cannot be empty\"`.\n\n### Response Fields\n\nReturns `200` with the updated day, in the same shape as *Get daily note*.\n\n### Errors\n\n| Code | When |\n| --- | --- |\n| `400` | `:dailyID` is not a valid `yyyy-MM-dd` date, or the body fails validation |\n| `404` | The department does not exist |"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"Body data, cannot be empty"}],"_postman_id":"3d40c0c7-5213-5d93-9d7d-3c8402b8328a"}],"id":"97f1a306-598a-40ae-9f50-d9986e147737","_postman_id":"97f1a306-598a-40ae-9f50-d9986e147737","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}}},{"name":"Leaves","item":[{"name":"Create leave","id":"a9c17938-abef-4d55-99ee-0f07d4fc3953","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves","description":"<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th><strong>Required</strong></th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>start</td>\n<td>Yes</td>\n<td>When Leave starts.  <br />  <br /><em>NB: Must be midnight in company time zone.</em></td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>Yes</td>\n<td>When Leave ends.  <br />  <br /><em>NB: Must be midnight in company time zone.</em></td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T12:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>type</td>\n<td>Yes</td>\n<td>ID of the Leave Type.</td>\n<td><code>string</code>  <br />  <br />Either one of the default leave types <code>\"sick\"</code>, <code>\"holiday\"</code>, and <code>\"comp_time\"</code> <em><strong>OR</strong></em> the ID of a custom leave type.</td>\n<td><code>holiday</code></td>\n</tr>\n<tr>\n<td>unpaid</td>\n<td>Yes</td>\n<td>Whether the Leave is Paid or Unpaid  <br />  <br /><em>NB: Leaves with type</em> <code>comp_time</code> <em>must be paid</em></td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>employeeID</td>\n<td>Yes</td>\n<td>Employee associated to the Leave</td>\n<td><code>string</code></td>\n<td><code>sEx78CyrI2M9RDfsN99BL78BUKx2</code></td>\n</tr>\n<tr>\n<td>note</td>\n<td>No</td>\n<td>Leave Note</td>\n<td><code>string</code></td>\n<td><code>Leave note 📝</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>ID of created Leave</td>\n<td><code>string</code></td>\n<td>{ \"id\": \"\" }</td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}},"urlObject":{"path":["companies","COMPANY_ID","leaves"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"cb6b211b-cb46-4ad7-aed6-f51f49122828","name":"Create leave","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"start\": \"2025-03-15T19:00:00.000Z\",\n    \"end\": \"2025-03-15T19:00:00.000Z\",\n    \"employeeID\": \"EMPLOYEE_ID\",\n    \"type\": \"holiday\",\n    \"unpaid\": false,\n    \"note\": \"Leave note 📝\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"LEAVE_ID\"\n}"}],"_postman_id":"a9c17938-abef-4d55-99ee-0f07d4fc3953"},{"name":"Get Leave","id":"1e6e4423-4964-4854-8641-ef5cbdfb155d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/:leaveID","description":"<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Leave ID</td>\n<td><code>string</code></td>\n<td><code>2023-12-21</code></td>\n</tr>\n<tr>\n<td>start</td>\n<td>When Leave starts</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When Leave ends</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T12:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>employeeID</td>\n<td>Employee associated to the Shift</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>sEx78CyrI2M9RDfsN99BL78BUKx2</code></td>\n</tr>\n<tr>\n<td>allDay</td>\n<td>Is Leave all day?</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>note</td>\n<td>Leave Note</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>unpaid</td>\n<td>Is Leave Paid or Unpaid ?</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>leaveRequestID</td>\n<td>Request ID</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>leaveType</td>\n<td>Leave Type</td>\n<td><code>object</code></td>\n<td></td>\n</tr>\n<tr>\n<td>leaveType.id</td>\n<td>Leave Type ID</td>\n<td><code>string</code></td>\n<td><code>holiday</code></td>\n</tr>\n<tr>\n<td>leaveType.emoji</td>\n<td>Leave Type Emoji</td>\n<td><code>string</code></td>\n<td><code>🌴</code></td>\n</tr>\n<tr>\n<td>leaveType.name</td>\n<td>Leave Type Name</td>\n<td><code>string</code></td>\n<td><code>shared.holiday</code></td>\n</tr>\n<tr>\n<td>leaveType.color</td>\n<td>Leave Type Color</td>\n<td><code>string</code> in HEX format</td>\n<td><code>#07BE62</code></td>\n</tr>\n<tr>\n<td>leaveType.isDeleted</td>\n<td>Is Leave Type deleted ?</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When the Daily Note was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When the Daily Note was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td>2023-10-25T09:43:06.650Z</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","leaves",":leaveID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"id":"ba582aa3-40b8-411b-9856-60ad1ad19b76","description":{"content":"<p>Leave ID</p>\n","type":"text/plain"},"type":"any","value":"","key":"leaveID"}]}},"response":[{"id":"5f827f3b-a6b6-47bb-a1ec-21a5fa338ea3","name":"Get Leave","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/:leaveID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","leaves",":leaveID"],"variable":[{"key":"leaveID","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"5PmKd2WvRt7LqXn3ZbYc\",\n    \"start\": \"2026-03-15T23:00:00.000Z\",\n    \"end\": \"2026-03-17T23:00:00.000Z\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"allDay\": true,\n    \"note\": \"Skiferie\",\n    \"unpaid\": false,\n    \"leaveRequestID\": null,\n    \"leaveType\": {\n        \"id\": \"holiday\",\n        \"emoji\": \"🌴\",\n        \"name\": \"shared.holiday\",\n        \"color\": \"#07BE62\",\n        \"isDeleted\": false\n    },\n    \"createTime\": \"2026-09-03T13:06:32.262Z\",\n    \"updateTime\": \"2026-09-03T13:06:32.262Z\"\n}"}],"_postman_id":"1e6e4423-4964-4854-8641-ef5cbdfb155d"},{"name":"Get Leaves","id":"b766e6aa-42e3-46e5-9b62-4647eacd7dfe","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/?from&to","description":"<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Param</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>from</td>\n<td>Yes</td>\n<td>Start of the range to search.</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-07-01T00:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>to</td>\n<td>Yes</td>\n<td>End of the range to search.</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-30T00:00:00.000Z</code></td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Note:</strong> <code>from</code>/<code>to</code> match any Leave that <strong>overlaps</strong> the range, not only Leaves that start inside it. A Leave running 1-31 July is returned for a range of 10-12 July.\n| employeeIDs | No | Filter by one or more employee IDs. Repeat the param to pass multiple values. | <code>string</code> (repeatable) | <code>&amp;employeeIDs=abc&amp;employeeIDs=def</code> |\n| typeIDs | No | Filter by one or more leave type IDs. Accepts standard types (<code>holiday</code>, <code>sick</code>, <code>comp_time</code>) and custom leave type IDs. Returns <code>400</code> if an invalid ID is provided. Repeat the param to pass multiple values. | <code>string</code> (repeatable) | <code>&amp;typeIDs=holiday&amp;typeIDs=sick</code> |\n| includeDeleted | No | Include leaves whose leave type has been deleted. Defaults to <code>true</code>. | <code>\"true\"</code> | <code>\"false\"</code> | <code>false</code> |</p>\n<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Leave ID</td>\n<td><code>string</code></td>\n<td><code>2023-12-21</code></td>\n</tr>\n<tr>\n<td>start</td>\n<td>When Leave starts</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When Leave ends</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T12:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>employeeID</td>\n<td>Employee associated to the Leave</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>sEx78CyrI2M9RDfsN99BL78BUKx2</code></td>\n</tr>\n<tr>\n<td>allDay</td>\n<td>Is Leave all day?</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>note</td>\n<td>Leave Note</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>unpaid</td>\n<td>Is Leave Paid or Unpaid?</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>leaveRequestID</td>\n<td>Request ID</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>leaveType</td>\n<td>Leave Type</td>\n<td><code>object</code></td>\n<td></td>\n</tr>\n<tr>\n<td>leaveType.id</td>\n<td>Leave Type ID</td>\n<td><code>string</code></td>\n<td><code>holiday</code></td>\n</tr>\n<tr>\n<td>leaveType.emoji</td>\n<td>Leave Type Emoji</td>\n<td><code>string</code></td>\n<td><code>🌴</code></td>\n</tr>\n<tr>\n<td>leaveType.name</td>\n<td>Leave Type Name</td>\n<td><code>string</code></td>\n<td><code>shared.holiday</code></td>\n</tr>\n<tr>\n<td>leaveType.color</td>\n<td>Leave Type Color</td>\n<td><code>string</code> in HEX format</td>\n<td><code>#07BE62</code></td>\n</tr>\n<tr>\n<td>leaveType.isDeleted</td>\n<td>Is Leave Type deleted?</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When the Leave was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When the Leave was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","leaves",""],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[{"key":"from","value":null},{"key":"to","value":null}],"variable":[]}},"response":[{"id":"a0a8088a-8d2b-4446-92d6-7b744b2c96e7","name":"Get Leaves","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/?from&to","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","leaves",""],"query":[{"key":"from","value":null},{"key":"to","value":null}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"5PmKd2WvRt7LqXn3ZbYc\",\n        \"start\": \"2026-03-15T23:00:00.000Z\",\n        \"end\": \"2026-03-17T23:00:00.000Z\",\n        \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n        \"allDay\": true,\n        \"note\": \"Skiferie\",\n        \"unpaid\": false,\n        \"leaveRequestID\": null,\n        \"leaveType\": {\n            \"id\": \"holiday\",\n            \"emoji\": \"🌴\",\n            \"name\": \"shared.holiday\",\n            \"color\": \"#07BE62\",\n            \"isDeleted\": false\n        },\n        \"createTime\": \"2026-09-03T13:06:32.262Z\",\n        \"updateTime\": \"2026-09-03T13:06:32.262Z\"\n    }\n]"}],"_postman_id":"b766e6aa-42e3-46e5-9b62-4647eacd7dfe"},{"name":"Update leave","id":"b1cf5dc0-6320-442f-b5b4-0cc166f51ff4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/:leaveID","description":"<p><strong>Note:</strong> two pairs of fields must be sent together. If you send <code>start</code> you must also send <code>end</code>, and if you send <code>type</code> you must also send <code>unpaid</code> - sending one without its partner returns <code>400</code>. Every field is otherwise optional.</p>\n<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>start</td>\n<td>When Leave starts.  <br />  <br /><em>NB: Must be midnight in company time zone.</em></td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When Leave ends.  <br />  <br /><em>NB: Must be midnight in company time zone.</em></td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T12:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>type</td>\n<td>ID of the Leave Type.</td>\n<td><code>string</code>  <br />  <br />Either one of the default leave types <code>\"sick\"</code>, <code>\"holiday\"</code>, and <code>\"comp_time\"</code> <em><strong>OR</strong></em> the ID of a custom leave type.</td>\n<td><code>holiday</code></td>\n</tr>\n<tr>\n<td>unpaid</td>\n<td>Whether the Leave is Paid or Unpaid  <br />  <br /><em>NB: Leaves with type</em> <code>comp_time</code> <em>must be paid</em></td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>employeeID</td>\n<td>Employee associated to the Leave</td>\n<td><code>string</code></td>\n<td><code>sEx78CyrI2M9RDfsN99BL78BUKx2</code></td>\n</tr>\n<tr>\n<td>note</td>\n<td>Leave Note</td>\n<td><code>string</code></td>\n<td><code>Leave note 📝</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<p>See <a href=\"https://docs.workfeed.io/#1e6e4423-4964-4854-8641-ef5cbdfb155d\">Get Leave endpoint</a>.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}},"urlObject":{"path":["companies","COMPANY_ID","leaves",":leaveID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"leaveID"}]}},"response":[{"id":"23f2cbe7-75fd-46eb-9067-a82897eca009","name":"Update leave","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"start\": \"2025-03-15T19:00:00.000Z\",\n    \"end\": \"2025-03-15T19:00:00.000Z\",\n    \"employeeID\": \"EMPLOYEE_ID\",\n    \"type\": \"holiday\",\n    \"unpaid\": false,\n    \"note\": \"Leave note 📝\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/:leaveID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","leaves",":leaveID"],"variable":[{"key":"leaveID","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"LEAVE_ID\",\n    \"start\": \"2025-03-14T19:00:00.000Z\",\n    \"end\": \"2025-04-14T19:00:00.000Z\",\n    \"employeeID\": \"EMPLOYEE_ID\",\n    \"allDay\": true,\n    \"note\": \"Leave note 📝\",\n    \"unpaid\": false,\n    \"leaveRequestID\": null,\n    \"leaveType\": {\n        \"id\": \"holiday\",\n        \"emoji\": \"🌴\",\n        \"name\": \"shared.holiday\",\n        \"color\": \"#07BE62\",\n        \"isDeleted\": false\n    },\n    \"createTime\": \"2025-03-09T09:46:24.567Z\",\n    \"updateTime\": \"2025-03-09T10:00:57.871Z\"\n}"},{"id":"75c5d8ab-405e-fd50-4ca4-ef0af210c226","name":"start without end","originalRequest":{"method":"PUT","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/:leaveID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","leaves",":leaveID"],"variable":[{"key":"leaveID","value":""}]},"description":"**Note:** two pairs of fields must be sent together. If you send `start` you must also send `end`, and if you send `type` you must also send `unpaid` - sending one without its partner returns `400`. Every field is otherwise optional.\n\n### Request Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| start | When Leave starts.  <br>  <br>_NB: Must be midnight in company time zone._ | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-25T09:43:06.650Z` |\n| end | When Leave ends.  <br>  <br>_NB: Must be midnight in company time zone._ | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-25T12:43:06.650Z` |\n| type | ID of the Leave Type. | `string`  <br>  <br>Either one of the default leave types `\"sick\"`, `\"holiday\"`, and `\"comp_time\"` _**OR**_ the ID of a custom leave type. | `holiday` |\n| unpaid | Whether the Leave is Paid or Unpaid  <br>  <br>_NB: Leaves with type_ `comp_time` _must be paid_ | `boolean` | `true` |\n| employeeID | Employee associated to the Leave | `string` | `sEx78CyrI2M9RDfsN99BL78BUKx2` |\n| note | Leave Note | `string` | `Leave note 📝` |\n\n### Response Fields\n\nSee [Get Leave endpoint](https://docs.workfeed.io/#1e6e4423-4964-4854-8641-ef5cbdfb155d)."},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Both start and end must be provided if one is provided\""},{"id":"db5fe60b-c9d9-bfb6-c436-c302697c5f20","name":"type without unpaid","originalRequest":{"method":"PUT","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/:leaveID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","leaves",":leaveID"],"variable":[{"key":"leaveID","value":""}]},"description":"**Note:** two pairs of fields must be sent together. If you send `start` you must also send `end`, and if you send `type` you must also send `unpaid` - sending one without its partner returns `400`. Every field is otherwise optional.\n\n### Request Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| start | When Leave starts.  <br>  <br>_NB: Must be midnight in company time zone._ | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-25T09:43:06.650Z` |\n| end | When Leave ends.  <br>  <br>_NB: Must be midnight in company time zone._ | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-25T12:43:06.650Z` |\n| type | ID of the Leave Type. | `string`  <br>  <br>Either one of the default leave types `\"sick\"`, `\"holiday\"`, and `\"comp_time\"` _**OR**_ the ID of a custom leave type. | `holiday` |\n| unpaid | Whether the Leave is Paid or Unpaid  <br>  <br>_NB: Leaves with type_ `comp_time` _must be paid_ | `boolean` | `true` |\n| employeeID | Employee associated to the Leave | `string` | `sEx78CyrI2M9RDfsN99BL78BUKx2` |\n| note | Leave Note | `string` | `Leave note 📝` |\n\n### Response Fields\n\nSee [Get Leave endpoint](https://docs.workfeed.io/#1e6e4423-4964-4854-8641-ef5cbdfb155d)."},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Both type and unpaid must be provided if one is provided\""},{"id":"4ba22f30-8b11-f728-42f9-d18613cea0c5","name":"Comp time marked unpaid","originalRequest":{"method":"PUT","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/:leaveID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","leaves",":leaveID"],"variable":[{"key":"leaveID","value":""}]},"description":"**Note:** two pairs of fields must be sent together. If you send `start` you must also send `end`, and if you send `type` you must also send `unpaid` - sending one without its partner returns `400`. Every field is otherwise optional.\n\n### Request Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| start | When Leave starts.  <br>  <br>_NB: Must be midnight in company time zone._ | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-25T09:43:06.650Z` |\n| end | When Leave ends.  <br>  <br>_NB: Must be midnight in company time zone._ | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-25T12:43:06.650Z` |\n| type | ID of the Leave Type. | `string`  <br>  <br>Either one of the default leave types `\"sick\"`, `\"holiday\"`, and `\"comp_time\"` _**OR**_ the ID of a custom leave type. | `holiday` |\n| unpaid | Whether the Leave is Paid or Unpaid  <br>  <br>_NB: Leaves with type_ `comp_time` _must be paid_ | `boolean` | `true` |\n| employeeID | Employee associated to the Leave | `string` | `sEx78CyrI2M9RDfsN99BL78BUKx2` |\n| note | Leave Note | `string` | `Leave note 📝` |\n\n### Response Fields\n\nSee [Get Leave endpoint](https://docs.workfeed.io/#1e6e4423-4964-4854-8641-ef5cbdfb155d)."},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Comp time must be paid\""}],"_postman_id":"b1cf5dc0-6320-442f-b5b4-0cc166f51ff4"},{"name":"Delete leave","id":"d36ed713-8570-4510-893e-8dc175c39a40","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/:leaveID","description":"<h2 id=\"this-delete-is-permanent\">This delete is permanent</h2>\n<p>The leave document is <strong>removed from the database</strong>. There is no soft-delete flag, no <code>deletedOn</code> timestamp, and no way to restore it through the API or the UI. Returns <code>204</code> with no body.</p>\n<p>If you need the record to stop counting but stay recoverable, do not call this endpoint.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}},"urlObject":{"path":["companies","COMPANY_ID","leaves",":leaveID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"leaveID"}]}},"response":[{"id":"eac3223a-ceba-439e-884c-b627190cbe13","name":"Delete leave","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/leaves/:leaveID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","leaves",":leaveID"],"variable":[{"key":"leaveID","value":""}]}},"status":"No Content","code":204,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":null}],"_postman_id":"d36ed713-8570-4510-893e-8dc175c39a40"}],"id":"67360baa-93aa-47b4-b432-7c6aa711da21","_postman_id":"67360baa-93aa-47b4-b432-7c6aa711da21","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}}},{"name":"Roles","item":[{"name":"Get roles","id":"3ab1ea41-32ba-4bd4-8d4b-3c78323567ec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/roles","description":"<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Role ID</td>\n<td><code>string</code></td>\n<td><code>hLbEKIPTlMh3ehotXl0w</code></td>\n</tr>\n<tr>\n<td>name</td>\n<td>Role Name</td>\n<td><code>string</code></td>\n<td><code>Role 1</code></td>\n</tr>\n<tr>\n<td>departmentID</td>\n<td>Department linked to the Role</td>\n<td><code>string</code></td>\n<td><code>PKHaOSgFA4uguOqmLfWv</code></td>\n</tr>\n<tr>\n<td>color</td>\n<td>Role color</td>\n<td><code>string</code></td>\n<td><code>role_color_1</code></td>\n</tr>\n<tr>\n<td>isDeleted</td>\n<td>Check if the Role was deleted</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When the Role was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:35.666Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When the Role was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:35.666Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","roles"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"08d67c07-0121-49f2-ad35-6985563e79d5","name":"Get roles","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/roles"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"hLbEKIPTlMh3ehotXl0w\",\n        \"name\": \"Role 1\",\n        \"departmentID\": \"PKHaOSgFA4uguOqmLfWv\",\n        \"isDeleted\": false,\n        \"color\": \"role_color_1\",\n        \"createTime\": \"2023-10-25T09:43:35.666Z\",\n        \"updateTime\": \"2023-10-25T09:43:35.666Z\"\n    }\n]"}],"_postman_id":"3ab1ea41-32ba-4bd4-8d4b-3c78323567ec"},{"name":"Create Role","id":"7293fccd-9baf-40a8-910c-0ebf8ddd8cb3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Role Test\",\n    \"departmentID\": \"PUTUCPpzdAzqcMxhfJZK\",\n    \"color\": \"role_color_1\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/roles","description":"<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>true</td>\n<td>Role Name</td>\n<td><code>string</code></td>\n<td><code>Role Test</code></td>\n</tr>\n<tr>\n<td>departmentID</td>\n<td>true</td>\n<td>Department ID</td>\n<td><code>string</code></td>\n<td><code>PUTUCPpzdAzqcMxhfJZK</code></td>\n</tr>\n<tr>\n<td>color</td>\n<td>false</td>\n<td>Role color  <br /><code>Options:</code>  <br />\"role_color_{number}\"  <br />number range = 1-21</td>\n<td><code>string</code></td>\n<td><code>role_color_1</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Role ID</td>\n<td><code>string</code></td>\n<td><code>hLbEKIPTlMh3ehotXl0w</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","roles"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"2acd9923-0358-418b-afb2-fe6755671dcb","name":"Create roles","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"API-KEY","type":"text"},{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"Role Test\",\n    \"departmentID\": \"PUTUCPpzdAzqcMxhfJZK\",\n    \"color\": \"role_color_1\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/roles"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"LRhJzE8cEFFTev6G1ez5\"\n}"}],"_postman_id":"7293fccd-9baf-40a8-910c-0ebf8ddd8cb3"},{"name":"Update Role","id":"50e80a58-66fd-471c-aa48-6fe70e776269","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":false},"method":"PUT","header":[],"body":{"mode":"raw","raw":"{\n    \"name\": \"Role Test\",\n    \"color\": \"role_color_1\",\n    \"isDeleted\": true\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/roles/:roleID","description":"<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>name</td>\n<td>false</td>\n<td>Role Name</td>\n<td><code>string</code></td>\n<td><code>Role Test</code></td>\n</tr>\n<tr>\n<td>isDeleted</td>\n<td>false</td>\n<td>Check if Role was deleted</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>color</td>\n<td>false</td>\n<td>Role color  <br /><code>Options:</code>  <br />\"role_color_{number}\"  <br />number range = 1-21</td>\n<td><code>string</code></td>\n<td><code>role_color_1</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Role ID</td>\n<td><code>string</code></td>\n<td><code>LRhJzE8cEFFTev6G1ez5</code></td>\n</tr>\n<tr>\n<td>name</td>\n<td>Role Name</td>\n<td><code>string</code></td>\n<td><code>Role Test</code></td>\n</tr>\n<tr>\n<td>departmentID</td>\n<td>Department linked to the Role</td>\n<td><code>string</code></td>\n<td><code>PKHaOSgFA4uguOqmLfWv</code></td>\n</tr>\n<tr>\n<td>color</td>\n<td>Role color</td>\n<td><code>string</code></td>\n<td><code>role_color_1</code></td>\n</tr>\n<tr>\n<td>isDeleted</td>\n<td>Check if the Role was deleted</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When the Role was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:35.666Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When the Role was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:35.666Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","roles",":roleID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"type":"any","value":"","key":"roleID"}]}},"response":[{"id":"d03208ff-3236-41dd-9c2d-2f7c39b2bcc7","name":"Update roles","originalRequest":{"method":"PUT","header":[{"key":"Authorization","value":"API-KEY","type":"text"},{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"name\": \"Role Test\",\n    \"color\": \"role_color_1\",\n    \"isDeleted\": true\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/roles/:roleID","protocol":"https","host":["europe-west1-production-eu-327a3","cloudfunctions","net"],"path":["api","companies","COMPANY_ID","roles",":roleID"],"variable":[{"key":"roleID","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"LRhJzE8cEFFTev6G1ez5\",\n    \"name\": \"Role Test\",\n    \"departmentID\": \"PUTUCPpzdAzqcMxhfJZK\",\n    \"isDeleted\": true,\n    \"color\": \"role_color_1\",\n    \"createTime\": \"2024-02-23T16:53:39.788Z\",\n    \"updateTime\": \"2024-03-04T11:42:11.566Z\"\n}"}],"_postman_id":"50e80a58-66fd-471c-aa48-6fe70e776269"}],"id":"6dc8920b-9a55-40d5-86ba-f756ddf7e36e","_postman_id":"6dc8920b-9a55-40d5-86ba-f756ddf7e36e","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}}},{"name":"Availability","item":[{"name":"Create availability","id":"9463454c-e948-80c2-436f-2069591168df","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"start\": \"2026-05-06T00:00:00+02:00\",\n    \"end\": \"2026-05-07T00:00:00+02:00\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"type\": \"NO_WORK\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability","description":"<p>Creates an availability: an employee's wish to work (<code>WORK</code>) or not work (<code>NO_WORK</code>) during a window.</p>\n<h3 id=\"rules-for-start-and-end\">Rules for <code>start</code> and <code>end</code></h3>\n<ul>\n<li>ISO 8601 with seconds and an explicit offset or <code>Z</code>: <code>2026-05-06T08:00:00+02:00</code> or <code>2026-05-06T06:00:00.000Z</code>. A timestamp without an offset is rejected with <code>400</code>, unlike most other endpoints. Responses always use UTC.</li>\n<li><code>start</code> must be before <code>end</code>.</li>\n<li><code>end</code> must be on the same calendar day as <code>start</code>, or on the next day no later than <code>start</code>'s time of day, <strong>in the company's time zone</strong>. Allowed: 08:00-16:00, a night 22:00-06:00, 08:00-08:00 the next day (also across a daylight-saving change, when that is 23 or 25 hours), and a whole day midnight to midnight. Rejected: 08:00 to 08:01 the next day.</li>\n</ul>\n<h3 id=\"one-availability-per-employee-per-day\">One availability per employee per day</h3>\n<p>Days are calendar days in the company's time zone. An availability occupies every day its window touches; <code>end</code> is exclusive, so one ending exactly at midnight does not occupy the next day. Creating an availability, or moving one with <a href=\"https://docs.workfeed.io/#bcb26bbc-7f79-0d3a-3c3e-fe8f618282dc\">Update availability</a>, onto a day the employee already has one for returns <code>409</code> with the ids of the availabilities in the way, even when the two windows don't overlap in time (08:00-10:00 and 14:00-16:00 on the same day conflict, and a night 22:00-06:00 occupies both days).</p>\n<p>To change an employee's availability for a day, update the existing one rather than delete and create it. Find it with <a href=\"https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2\">Get availabilities</a> filtered by <code>employeeID</code>, or create and, on <code>409</code>, update the id in <code>conflictIDs</code>. There is no idempotency key: a create retried after a timeout returns <code>409</code> carrying the id the first attempt created.</p>\n<p>The API does not return the company's time zone. The <code>400</code> for a window that is too long names it (<code>company time zone: Europe/Copenhagen</code>).</p>\n<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th><strong>Required</strong></th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>start</td>\n<td>Yes</td>\n<td>When the availability starts</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> with seconds and an offset or <code>Z</code></td>\n<td><code>2026-05-06T08:00:00+02:00</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>Yes</td>\n<td>When the availability ends (exclusive)</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> with seconds and an offset or <code>Z</code></td>\n<td><code>2026-05-06T16:00:00+02:00</code></td>\n</tr>\n<tr>\n<td>employeeID</td>\n<td>Yes</td>\n<td>Employee the availability belongs to</td>\n<td><code>string</code></td>\n<td><code>J9QAIiTG0nRC1OsC5YvHfLWdDHn1</code></td>\n</tr>\n<tr>\n<td>type</td>\n<td>Yes</td>\n<td>Whether the employee wants to work</td>\n<td><code>\"WORK\"</code> or <code>\"NO_WORK\"</code></td>\n<td><code>\"NO_WORK\"</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>ID of the created availability</td>\n<td><code>string</code></td>\n<td><code>Vb3kQ9sLmT2xRw8NpY4c</code></td>\n</tr>\n</tbody>\n</table>\n</div><p><code>409</code> returns an object, not a string like the other errors: <code>{\"error\": \"…\", \"conflictIDs\": [\"…\"]}</code>, where <code>conflictIDs</code> holds the ids of the availabilities already on those days.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}},"urlObject":{"path":["companies","COMPANY_ID","availability"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"30c44469-b2f9-aae9-77b5-59005a780b52","name":"Create availability","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"start\": \"2026-05-06T00:00:00+02:00\",\n    \"end\": \"2026-05-07T00:00:00+02:00\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"type\": \"NO_WORK\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability","description":"Creates an availability: an employee's wish to work (`WORK`) or not work (`NO_WORK`) during a window.\n\n### Rules for `start` and `end`\n\n*   ISO 8601 with seconds and an explicit offset or `Z`: `2026-05-06T08:00:00+02:00` or `2026-05-06T06:00:00.000Z`. A timestamp without an offset is rejected with `400`, unlike most other endpoints. Responses always use UTC.\n*   `start` must be before `end`.\n*   `end` must be on the same calendar day as `start`, or on the next day no later than `start`'s time of day, **in the company's time zone**. Allowed: 08:00-16:00, a night 22:00-06:00, 08:00-08:00 the next day (also across a daylight-saving change, when that is 23 or 25 hours), and a whole day midnight to midnight. Rejected: 08:00 to 08:01 the next day.\n\n### One availability per employee per day\n\nDays are calendar days in the company's time zone. An availability occupies every day its window touches; `end` is exclusive, so one ending exactly at midnight does not occupy the next day. Creating an availability, or moving one with [Update availability](https://docs.workfeed.io/#bcb26bbc-7f79-0d3a-3c3e-fe8f618282dc), onto a day the employee already has one for returns `409` with the ids of the availabilities in the way, even when the two windows don't overlap in time (08:00-10:00 and 14:00-16:00 on the same day conflict, and a night 22:00-06:00 occupies both days).\n\nTo change an employee's availability for a day, update the existing one rather than delete and create it. Find it with [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2) filtered by `employeeID`, or create and, on `409`, update the id in `conflictIDs`. There is no idempotency key: a create retried after a timeout returns `409` carrying the id the first attempt created.\n\nThe API does not return the company's time zone. The `400` for a window that is too long names it (`company time zone: Europe/Copenhagen`).\n\n### Request Fields\n\n| Body | **Required** | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| start | Yes | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | Yes | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Yes | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Yes | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| id | ID of the created availability | `string` | `Vb3kQ9sLmT2xRw8NpY4c` |\n\n`409` returns an object, not a string like the other errors: `{\"error\": \"…\", \"conflictIDs\": [\"…\"]}`, where `conflictIDs` holds the ids of the availabilities already on those days."},"status":"Created","code":201,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"Vb3kQ9sLmT2xRw8NpY4c\"\n}"},{"id":"a70aa364-07d8-8c43-9b1a-089863cd5d29","name":"Day already taken","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"start\": \"2026-05-06T00:00:00+02:00\",\n    \"end\": \"2026-05-07T00:00:00+02:00\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"type\": \"NO_WORK\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability","description":"Creates an availability: an employee's wish to work (`WORK`) or not work (`NO_WORK`) during a window.\n\n### Rules for `start` and `end`\n\n*   ISO 8601 with seconds and an explicit offset or `Z`: `2026-05-06T08:00:00+02:00` or `2026-05-06T06:00:00.000Z`. A timestamp without an offset is rejected with `400`, unlike most other endpoints. Responses always use UTC.\n*   `start` must be before `end`.\n*   `end` must be on the same calendar day as `start`, or on the next day no later than `start`'s time of day, **in the company's time zone**. Allowed: 08:00-16:00, a night 22:00-06:00, 08:00-08:00 the next day (also across a daylight-saving change, when that is 23 or 25 hours), and a whole day midnight to midnight. Rejected: 08:00 to 08:01 the next day.\n\n### One availability per employee per day\n\nDays are calendar days in the company's time zone. An availability occupies every day its window touches; `end` is exclusive, so one ending exactly at midnight does not occupy the next day. Creating an availability, or moving one with [Update availability](https://docs.workfeed.io/#bcb26bbc-7f79-0d3a-3c3e-fe8f618282dc), onto a day the employee already has one for returns `409` with the ids of the availabilities in the way, even when the two windows don't overlap in time (08:00-10:00 and 14:00-16:00 on the same day conflict, and a night 22:00-06:00 occupies both days).\n\nTo change an employee's availability for a day, update the existing one rather than delete and create it. Find it with [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2) filtered by `employeeID`, or create and, on `409`, update the id in `conflictIDs`. There is no idempotency key: a create retried after a timeout returns `409` carrying the id the first attempt created.\n\nThe API does not return the company's time zone. The `400` for a window that is too long names it (`company time zone: Europe/Copenhagen`).\n\n### Request Fields\n\n| Body | **Required** | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| start | Yes | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | Yes | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Yes | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Yes | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| id | ID of the created availability | `string` | `Vb3kQ9sLmT2xRw8NpY4c` |\n\n`409` returns an object, not a string like the other errors: `{\"error\": \"…\", \"conflictIDs\": [\"…\"]}`, where `conflictIDs` holds the ids of the availabilities already on those days."},"status":"Conflict","code":409,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"An employee can have at most one availability per day. The listed availabilities already cover this window or day.\",\n    \"conflictIDs\": [\n        \"Vb3kQ9sLmT2xRw8NpY4c\"\n    ]\n}"},{"id":"42d01d75-f564-45d1-95cd-e394076581d8","name":"No offset on start","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"start\": \"2026-05-06T00:00:00+02:00\",\n    \"end\": \"2026-05-07T00:00:00+02:00\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"type\": \"NO_WORK\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability","description":"Creates an availability: an employee's wish to work (`WORK`) or not work (`NO_WORK`) during a window.\n\n### Rules for `start` and `end`\n\n*   ISO 8601 with seconds and an explicit offset or `Z`: `2026-05-06T08:00:00+02:00` or `2026-05-06T06:00:00.000Z`. A timestamp without an offset is rejected with `400`, unlike most other endpoints. Responses always use UTC.\n*   `start` must be before `end`.\n*   `end` must be on the same calendar day as `start`, or on the next day no later than `start`'s time of day, **in the company's time zone**. Allowed: 08:00-16:00, a night 22:00-06:00, 08:00-08:00 the next day (also across a daylight-saving change, when that is 23 or 25 hours), and a whole day midnight to midnight. Rejected: 08:00 to 08:01 the next day.\n\n### One availability per employee per day\n\nDays are calendar days in the company's time zone. An availability occupies every day its window touches; `end` is exclusive, so one ending exactly at midnight does not occupy the next day. Creating an availability, or moving one with [Update availability](https://docs.workfeed.io/#bcb26bbc-7f79-0d3a-3c3e-fe8f618282dc), onto a day the employee already has one for returns `409` with the ids of the availabilities in the way, even when the two windows don't overlap in time (08:00-10:00 and 14:00-16:00 on the same day conflict, and a night 22:00-06:00 occupies both days).\n\nTo change an employee's availability for a day, update the existing one rather than delete and create it. Find it with [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2) filtered by `employeeID`, or create and, on `409`, update the id in `conflictIDs`. There is no idempotency key: a create retried after a timeout returns `409` carrying the id the first attempt created.\n\nThe API does not return the company's time zone. The `400` for a window that is too long names it (`company time zone: Europe/Copenhagen`).\n\n### Request Fields\n\n| Body | **Required** | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| start | Yes | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | Yes | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Yes | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Yes | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| id | ID of the created availability | `string` | `Vb3kQ9sLmT2xRw8NpY4c` |\n\n`409` returns an object, not a string like the other errors: `{\"error\": \"…\", \"conflictIDs\": [\"…\"]}`, where `conflictIDs` holds the ids of the availabilities already on those days."},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"\"Invalid start: expected a UTC offset or 'Z'\""},{"id":"71f11e5c-586d-f110-9d30-4f37e392e73f","name":"Longer than start's time of day on the next day","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"start\": \"2026-05-06T00:00:00+02:00\",\n    \"end\": \"2026-05-07T00:00:00+02:00\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"type\": \"NO_WORK\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability","description":"Creates an availability: an employee's wish to work (`WORK`) or not work (`NO_WORK`) during a window.\n\n### Rules for `start` and `end`\n\n*   ISO 8601 with seconds and an explicit offset or `Z`: `2026-05-06T08:00:00+02:00` or `2026-05-06T06:00:00.000Z`. A timestamp without an offset is rejected with `400`, unlike most other endpoints. Responses always use UTC.\n*   `start` must be before `end`.\n*   `end` must be on the same calendar day as `start`, or on the next day no later than `start`'s time of day, **in the company's time zone**. Allowed: 08:00-16:00, a night 22:00-06:00, 08:00-08:00 the next day (also across a daylight-saving change, when that is 23 or 25 hours), and a whole day midnight to midnight. Rejected: 08:00 to 08:01 the next day.\n\n### One availability per employee per day\n\nDays are calendar days in the company's time zone. An availability occupies every day its window touches; `end` is exclusive, so one ending exactly at midnight does not occupy the next day. Creating an availability, or moving one with [Update availability](https://docs.workfeed.io/#bcb26bbc-7f79-0d3a-3c3e-fe8f618282dc), onto a day the employee already has one for returns `409` with the ids of the availabilities in the way, even when the two windows don't overlap in time (08:00-10:00 and 14:00-16:00 on the same day conflict, and a night 22:00-06:00 occupies both days).\n\nTo change an employee's availability for a day, update the existing one rather than delete and create it. Find it with [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2) filtered by `employeeID`, or create and, on `409`, update the id in `conflictIDs`. There is no idempotency key: a create retried after a timeout returns `409` carrying the id the first attempt created.\n\nThe API does not return the company's time zone. The `400` for a window that is too long names it (`company time zone: Europe/Copenhagen`).\n\n### Request Fields\n\n| Body | **Required** | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| start | Yes | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | Yes | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Yes | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Yes | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| id | ID of the created availability | `string` | `Vb3kQ9sLmT2xRw8NpY4c` |\n\n`409` returns an object, not a string like the other errors: `{\"error\": \"…\", \"conflictIDs\": [\"…\"]}`, where `conflictIDs` holds the ids of the availabilities already on those days."},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"\"end must fall on start's day, or on the next day no later than start's time of day (company time zone: Europe/Copenhagen)\""},{"id":"924f4620-bc5d-26b1-1bad-2111ef60901a","name":"start after end","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"start\": \"2026-05-06T00:00:00+02:00\",\n    \"end\": \"2026-05-07T00:00:00+02:00\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"type\": \"NO_WORK\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability","description":"Creates an availability: an employee's wish to work (`WORK`) or not work (`NO_WORK`) during a window.\n\n### Rules for `start` and `end`\n\n*   ISO 8601 with seconds and an explicit offset or `Z`: `2026-05-06T08:00:00+02:00` or `2026-05-06T06:00:00.000Z`. A timestamp without an offset is rejected with `400`, unlike most other endpoints. Responses always use UTC.\n*   `start` must be before `end`.\n*   `end` must be on the same calendar day as `start`, or on the next day no later than `start`'s time of day, **in the company's time zone**. Allowed: 08:00-16:00, a night 22:00-06:00, 08:00-08:00 the next day (also across a daylight-saving change, when that is 23 or 25 hours), and a whole day midnight to midnight. Rejected: 08:00 to 08:01 the next day.\n\n### One availability per employee per day\n\nDays are calendar days in the company's time zone. An availability occupies every day its window touches; `end` is exclusive, so one ending exactly at midnight does not occupy the next day. Creating an availability, or moving one with [Update availability](https://docs.workfeed.io/#bcb26bbc-7f79-0d3a-3c3e-fe8f618282dc), onto a day the employee already has one for returns `409` with the ids of the availabilities in the way, even when the two windows don't overlap in time (08:00-10:00 and 14:00-16:00 on the same day conflict, and a night 22:00-06:00 occupies both days).\n\nTo change an employee's availability for a day, update the existing one rather than delete and create it. Find it with [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2) filtered by `employeeID`, or create and, on `409`, update the id in `conflictIDs`. There is no idempotency key: a create retried after a timeout returns `409` carrying the id the first attempt created.\n\nThe API does not return the company's time zone. The `400` for a window that is too long names it (`company time zone: Europe/Copenhagen`).\n\n### Request Fields\n\n| Body | **Required** | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| start | Yes | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | Yes | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Yes | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Yes | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| id | ID of the created availability | `string` | `Vb3kQ9sLmT2xRw8NpY4c` |\n\n`409` returns an object, not a string like the other errors: `{\"error\": \"…\", \"conflictIDs\": [\"…\"]}`, where `conflictIDs` holds the ids of the availabilities already on those days."},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"\"start must be before end\""},{"id":"bc97c968-a3d8-afb4-803c-7cb6e7e43014","name":"Unknown employeeID","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"start\": \"2026-05-06T00:00:00+02:00\",\n    \"end\": \"2026-05-07T00:00:00+02:00\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"type\": \"NO_WORK\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability","description":"Creates an availability: an employee's wish to work (`WORK`) or not work (`NO_WORK`) during a window.\n\n### Rules for `start` and `end`\n\n*   ISO 8601 with seconds and an explicit offset or `Z`: `2026-05-06T08:00:00+02:00` or `2026-05-06T06:00:00.000Z`. A timestamp without an offset is rejected with `400`, unlike most other endpoints. Responses always use UTC.\n*   `start` must be before `end`.\n*   `end` must be on the same calendar day as `start`, or on the next day no later than `start`'s time of day, **in the company's time zone**. Allowed: 08:00-16:00, a night 22:00-06:00, 08:00-08:00 the next day (also across a daylight-saving change, when that is 23 or 25 hours), and a whole day midnight to midnight. Rejected: 08:00 to 08:01 the next day.\n\n### One availability per employee per day\n\nDays are calendar days in the company's time zone. An availability occupies every day its window touches; `end` is exclusive, so one ending exactly at midnight does not occupy the next day. Creating an availability, or moving one with [Update availability](https://docs.workfeed.io/#bcb26bbc-7f79-0d3a-3c3e-fe8f618282dc), onto a day the employee already has one for returns `409` with the ids of the availabilities in the way, even when the two windows don't overlap in time (08:00-10:00 and 14:00-16:00 on the same day conflict, and a night 22:00-06:00 occupies both days).\n\nTo change an employee's availability for a day, update the existing one rather than delete and create it. Find it with [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2) filtered by `employeeID`, or create and, on `409`, update the id in `conflictIDs`. There is no idempotency key: a create retried after a timeout returns `409` carrying the id the first attempt created.\n\nThe API does not return the company's time zone. The `400` for a window that is too long names it (`company time zone: Europe/Copenhagen`).\n\n### Request Fields\n\n| Body | **Required** | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| start | Yes | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | Yes | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Yes | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Yes | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| id | ID of the created availability | `string` | `Vb3kQ9sLmT2xRw8NpY4c` |\n\n`409` returns an object, not a string like the other errors: `{\"error\": \"…\", \"conflictIDs\": [\"…\"]}`, where `conflictIDs` holds the ids of the availabilities already on those days."},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"\"Invalid employeeID: employee not found\""},{"id":"9d43f257-86ae-4b43-4ff0-9cfeb89533fe","name":"Invalid type","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"start\": \"2026-05-06T00:00:00+02:00\",\n    \"end\": \"2026-05-07T00:00:00+02:00\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"type\": \"NO_WORK\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability","description":"Creates an availability: an employee's wish to work (`WORK`) or not work (`NO_WORK`) during a window.\n\n### Rules for `start` and `end`\n\n*   ISO 8601 with seconds and an explicit offset or `Z`: `2026-05-06T08:00:00+02:00` or `2026-05-06T06:00:00.000Z`. A timestamp without an offset is rejected with `400`, unlike most other endpoints. Responses always use UTC.\n*   `start` must be before `end`.\n*   `end` must be on the same calendar day as `start`, or on the next day no later than `start`'s time of day, **in the company's time zone**. Allowed: 08:00-16:00, a night 22:00-06:00, 08:00-08:00 the next day (also across a daylight-saving change, when that is 23 or 25 hours), and a whole day midnight to midnight. Rejected: 08:00 to 08:01 the next day.\n\n### One availability per employee per day\n\nDays are calendar days in the company's time zone. An availability occupies every day its window touches; `end` is exclusive, so one ending exactly at midnight does not occupy the next day. Creating an availability, or moving one with [Update availability](https://docs.workfeed.io/#bcb26bbc-7f79-0d3a-3c3e-fe8f618282dc), onto a day the employee already has one for returns `409` with the ids of the availabilities in the way, even when the two windows don't overlap in time (08:00-10:00 and 14:00-16:00 on the same day conflict, and a night 22:00-06:00 occupies both days).\n\nTo change an employee's availability for a day, update the existing one rather than delete and create it. Find it with [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2) filtered by `employeeID`, or create and, on `409`, update the id in `conflictIDs`. There is no idempotency key: a create retried after a timeout returns `409` carrying the id the first attempt created.\n\nThe API does not return the company's time zone. The `400` for a window that is too long names it (`company time zone: Europe/Copenhagen`).\n\n### Request Fields\n\n| Body | **Required** | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- | --- |\n| start | Yes | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | Yes | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Yes | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Yes | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| id | ID of the created availability | `string` | `Vb3kQ9sLmT2xRw8NpY4c` |\n\n`409` returns an object, not a string like the other errors: `{\"error\": \"…\", \"conflictIDs\": [\"…\"]}`, where `conflictIDs` holds the ids of the availabilities already on those days."},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"\"Invalid type: expected 'WORK' or 'NO_WORK'\""}],"_postman_id":"9463454c-e948-80c2-436f-2069591168df"},{"name":"Get availability","id":"6ae7f0d5-d1e4-8650-6952-3ea516d2c01d","request":{"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","description":"<p>Returns one availability. <code>404</code> <code>\"Availability not found\"</code> when there is none with that id.</p>\n<h3 id=\"response-fields\">Response Fields</h3>\n<p>See <a href=\"https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2\">Get availabilities</a>.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}},"urlObject":{"path":["companies","COMPANY_ID","availability",":availabilityID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"id":"d5c5b733-1691-4d56-afce-877c7545b6b5","description":{"content":"<p>Availability ID</p>\n","type":"text/plain"},"type":"any","value":"Vb3kQ9sLmT2xRw8NpY4c","key":"availabilityID"}]}},"response":[{"id":"9d02f2ad-d7f2-4bc5-9006-bf5ef23729a3","name":"Get availability","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability",":availabilityID"],"variable":[{"id":"d5c5b733-1691-4d56-afce-877c7545b6b5","key":"availabilityID","value":"Vb3kQ9sLmT2xRw8NpY4c","description":"Availability ID"}]},"description":"Returns one availability. `404` `\"Availability not found\"` when there is none with that id.\n\n### Response Fields\n\nSee [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2)."},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"Vb3kQ9sLmT2xRw8NpY4c\",\n    \"start\": \"2026-05-05T22:00:00.000Z\",\n    \"end\": \"2026-05-06T22:00:00.000Z\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"type\": \"NO_WORK\",\n    \"createTime\": \"2026-04-28T09:12:44.518Z\",\n    \"updateTime\": \"2026-04-28T09:12:44.518Z\"\n}"},{"id":"3f91c8f8-51d7-ac4b-a590-0cb14ed5a053","name":"Not found","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability",":availabilityID"],"variable":[{"id":"d5c5b733-1691-4d56-afce-877c7545b6b5","key":"availabilityID","value":"Vb3kQ9sLmT2xRw8NpY4c","description":"Availability ID"}]},"description":"Returns one availability. `404` `\"Availability not found\"` when there is none with that id.\n\n### Response Fields\n\nSee [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2)."},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"\"Availability not found\""}],"_postman_id":"6ae7f0d5-d1e4-8650-6952-3ea516d2c01d"},{"name":"Update availability","id":"bcb26bbc-7f79-0d3a-3c3e-fe8f618282dc","request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"type\": \"WORK\"\n}","options":{"raw":{"language":"json"}}},"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","description":"<p>Send only the fields you want to change. <code>start</code> and <code>end</code> must be sent together; one without the other returns <code>400</code>. A body with none of the fields below (for example only a misspelt <code>employeeId</code>) returns <code>400</code> <code>\"No valid data provided\"</code>.</p>\n<p>The rules on <code>start</code>/<code>end</code> and the one-per-day limit are on <a href=\"https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df\">Create availability</a>. Changing only <code>type</code> never conflicts; moving the window or changing <code>employeeID</code> returns <code>409</code> as on <a href=\"https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df\">Create availability</a>.</p>\n<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>start</td>\n<td>When the availability starts</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> with seconds and an offset or <code>Z</code></td>\n<td><code>2026-05-06T08:00:00+02:00</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When the availability ends (exclusive)</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code> with seconds and an offset or <code>Z</code></td>\n<td><code>2026-05-06T16:00:00+02:00</code></td>\n</tr>\n<tr>\n<td>employeeID</td>\n<td>Employee the availability belongs to</td>\n<td><code>string</code></td>\n<td><code>J9QAIiTG0nRC1OsC5YvHfLWdDHn1</code></td>\n</tr>\n<tr>\n<td>type</td>\n<td>Whether the employee wants to work</td>\n<td><code>\"WORK\"</code> or <code>\"NO_WORK\"</code></td>\n<td><code>\"NO_WORK\"</code></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"response-fields\">Response Fields</h3>\n<p><code>200</code> with the full updated availability. See <a href=\"https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2\">Get availabilities</a>.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}},"urlObject":{"path":["companies","COMPANY_ID","availability",":availabilityID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"id":"fec04fdd-1714-4dff-9b4a-19be55cc204f","description":{"content":"<p>Availability ID</p>\n","type":"text/plain"},"type":"any","value":"Vb3kQ9sLmT2xRw8NpY4c","key":"availabilityID"}]}},"response":[{"id":"cc1d9d5c-a00a-1b94-e8cd-0fc0e55edb71","name":"Update availability","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"type\": \"WORK\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability",":availabilityID"],"variable":[{"id":"fec04fdd-1714-4dff-9b4a-19be55cc204f","key":"availabilityID","value":"Vb3kQ9sLmT2xRw8NpY4c","description":"Availability ID"}]},"description":"Send only the fields you want to change. `start` and `end` must be sent together; one without the other returns `400`. A body with none of the fields below (for example only a misspelt `employeeId`) returns `400` `\"No valid data provided\"`.\n\nThe rules on `start`/`end` and the one-per-day limit are on [Create availability](https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df). Changing only `type` never conflicts; moving the window or changing `employeeID` returns `409` as on [Create availability](https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df).\n\n### Request Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| start | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n`200` with the full updated availability. See [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2)."},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{\n    \"id\": \"Vb3kQ9sLmT2xRw8NpY4c\",\n    \"start\": \"2026-05-05T22:00:00.000Z\",\n    \"end\": \"2026-05-06T22:00:00.000Z\",\n    \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n    \"type\": \"WORK\",\n    \"createTime\": \"2026-04-28T09:12:44.518Z\",\n    \"updateTime\": \"2026-04-30T14:02:09.771Z\"\n}"},{"id":"9a411fcf-7da9-415f-2695-aa4b81d11713","name":"start without end","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"type\": \"WORK\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability",":availabilityID"],"variable":[{"id":"fec04fdd-1714-4dff-9b4a-19be55cc204f","key":"availabilityID","value":"Vb3kQ9sLmT2xRw8NpY4c","description":"Availability ID"}]},"description":"Send only the fields you want to change. `start` and `end` must be sent together; one without the other returns `400`. A body with none of the fields below (for example only a misspelt `employeeId`) returns `400` `\"No valid data provided\"`.\n\nThe rules on `start`/`end` and the one-per-day limit are on [Create availability](https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df). Changing only `type` never conflicts; moving the window or changing `employeeID` returns `409` as on [Create availability](https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df).\n\n### Request Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| start | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n`200` with the full updated availability. See [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2)."},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"\"Both start and end must be provided if one is provided\""},{"id":"478010de-b6bc-9291-dab4-a61878799e31","name":"No recognised field","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"type\": \"WORK\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability",":availabilityID"],"variable":[{"id":"fec04fdd-1714-4dff-9b4a-19be55cc204f","key":"availabilityID","value":"Vb3kQ9sLmT2xRw8NpY4c","description":"Availability ID"}]},"description":"Send only the fields you want to change. `start` and `end` must be sent together; one without the other returns `400`. A body with none of the fields below (for example only a misspelt `employeeId`) returns `400` `\"No valid data provided\"`.\n\nThe rules on `start`/`end` and the one-per-day limit are on [Create availability](https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df). Changing only `type` never conflicts; moving the window or changing `employeeID` returns `409` as on [Create availability](https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df).\n\n### Request Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| start | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n`200` with the full updated availability. See [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2)."},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"}],"cookie":[],"responseTime":null,"body":"\"No valid data provided\""},{"id":"fa5336a9-9e71-25f6-272a-6440d4f5bfff","name":"Moved onto a taken day","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"type\": \"WORK\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability",":availabilityID"],"variable":[{"id":"fec04fdd-1714-4dff-9b4a-19be55cc204f","key":"availabilityID","value":"Vb3kQ9sLmT2xRw8NpY4c","description":"Availability ID"}]},"description":"Send only the fields you want to change. `start` and `end` must be sent together; one without the other returns `400`. A body with none of the fields below (for example only a misspelt `employeeId`) returns `400` `\"No valid data provided\"`.\n\nThe rules on `start`/`end` and the one-per-day limit are on [Create availability](https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df). Changing only `type` never conflicts; moving the window or changing `employeeID` returns `409` as on [Create availability](https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df).\n\n### Request Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| start | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n`200` with the full updated availability. See [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2)."},"status":"Conflict","code":409,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"{\n    \"error\": \"An employee can have at most one availability per day. The listed availabilities already cover this window or day.\",\n    \"conflictIDs\": [\n        \"q7XhN2cRkP5sW9mTzL3e\"\n    ]\n}"},{"id":"53697640-ce2d-d03b-e62a-d02138258db8","name":"Not found","originalRequest":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"type\": \"WORK\"\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability",":availabilityID"],"variable":[{"id":"fec04fdd-1714-4dff-9b4a-19be55cc204f","key":"availabilityID","value":"Vb3kQ9sLmT2xRw8NpY4c","description":"Availability ID"}]},"description":"Send only the fields you want to change. `start` and `end` must be sent together; one without the other returns `400`. A body with none of the fields below (for example only a misspelt `employeeId`) returns `400` `\"No valid data provided\"`.\n\nThe rules on `start`/`end` and the one-per-day limit are on [Create availability](https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df). Changing only `type` never conflicts; moving the window or changing `employeeID` returns `409` as on [Create availability](https://docs.workfeed.io/#9463454c-e948-80c2-436f-2069591168df).\n\n### Request Fields\n\n| Body | Description | **Type / Format** | **Example** |\n| --- | --- | --- | --- |\n| start | When the availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T08:00:00+02:00` |\n| end | When the availability ends (exclusive) | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` with seconds and an offset or `Z` | `2026-05-06T16:00:00+02:00` |\n| employeeID | Employee the availability belongs to | `string` | `J9QAIiTG0nRC1OsC5YvHfLWdDHn1` |\n| type | Whether the employee wants to work | `\"WORK\"` or `\"NO_WORK\"` | `\"NO_WORK\"` |\n\n### Response Fields\n\n`200` with the full updated availability. See [Get availabilities](https://docs.workfeed.io/#139d6886-e1a8-4aca-8f0b-4813bd46c6f2)."},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"\"Availability not found\""}],"_postman_id":"bcb26bbc-7f79-0d3a-3c3e-fe8f618282dc"},{"name":"Delete availability","id":"c615c2c6-626a-21d6-6022-7df29f09d560","request":{"method":"DELETE","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","description":"<h2 id=\"this-delete-is-permanent\">This delete is permanent</h2>\n<p>The availability is <strong>removed from the database</strong>. There is no soft-delete flag and no way to restore it through the API or the app. Returns <code>204</code> with no body; <code>404</code> if there is none with that id.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}},"urlObject":{"path":["companies","COMPANY_ID","availability",":availabilityID"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[{"id":"4af20d3b-ce3f-4a1a-a5c6-819c0c93f44a","description":{"content":"<p>Availability ID</p>\n","type":"text/plain"},"type":"any","value":"Vb3kQ9sLmT2xRw8NpY4c","key":"availabilityID"}]}},"response":[{"id":"e1a2c724-e814-ee1c-26fd-770bbbbaa3a5","name":"Delete availability","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability",":availabilityID"],"variable":[{"id":"4af20d3b-ce3f-4a1a-a5c6-819c0c93f44a","key":"availabilityID","value":"Vb3kQ9sLmT2xRw8NpY4c","description":"Availability ID"}]},"description":"## This delete is permanent\n\nThe availability is **removed from the database**. There is no soft-delete flag and no way to restore it through the API or the app. Returns `204` with no body; `404` if there is none with that id."},"status":"No Content","code":204,"_postman_previewlanguage":null,"header":[],"cookie":[],"responseTime":null,"body":""},{"id":"db1c0ccc-7fbd-7fae-40ca-9207970bd8f9","name":"Not found","originalRequest":{"method":"DELETE","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability/:availabilityID","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability",":availabilityID"],"variable":[{"id":"4af20d3b-ce3f-4a1a-a5c6-819c0c93f44a","key":"availabilityID","value":"Vb3kQ9sLmT2xRw8NpY4c","description":"Availability ID"}]},"description":"## This delete is permanent\n\nThe availability is **removed from the database**. There is no soft-delete flag and no way to restore it through the API or the app. Returns `204` with no body; `404` if there is none with that id."},"status":"Not Found","code":404,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"}],"cookie":[],"responseTime":null,"body":"\"Availability not found\""}],"_postman_id":"c615c2c6-626a-21d6-6022-7df29f09d560"},{"name":"Get availabilities","id":"139d6886-e1a8-4aca-8f0b-4813bd46c6f2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability?from=2025-01-01T00:00:00.000Z&to=2026-01-01T00:00:00.000Z","description":"<h3 id=\"request-fields\">Request Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Param</strong></th>\n<th><strong>Required</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>from</code></td>\n<td>Yes</td>\n<td>Only get availabilities starting <em>on or after</em> this time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2022-04-07T22:00:00.000Z</code></td>\n</tr>\n<tr>\n<td><code>to</code></td>\n<td>Yes</td>\n<td>Only get availabilities ending <em>before</em> this time</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2022-04-10T22:00:00.000Z</code></td>\n</tr>\n<tr>\n<td><code>employeeID</code></td>\n<td>No</td>\n<td>If present, only get availability of the employee with this id</td>\n<td><code>string</code></td>\n<td><code>j1TznpqVtLN0nmgPfK476U5fn2O2</code></td>\n</tr>\n<tr>\n<td><code>type</code></td>\n<td>No</td>\n<td>If present, only get availability of <code>type</code></td>\n<td><code>string</code> /  <br />[\"WORK\", \"NO_WORK\"]</td>\n<td><code>\"WORK\"</code></td>\n</tr>\n</tbody>\n</table>\n</div><p>Returns availabilities that lie entirely inside the range: <code>start</code> at or after <code>from</code>, and <code>end</code> strictly before <code>to</code>. A record ending exactly at <code>to</code> is not returned, so a whole-day availability for 6 May (ending 7 May 00:00) is missed by <code>to=2026-05-07T00:00:00Z</code>. Use the following midnight, or add a second.</p>\n<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Body</strong></th>\n<th><strong>Description</strong></th>\n<th><strong>Type / format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>id</td>\n<td>Availability ID</td>\n<td><code>string</code></td>\n<td><code>Trcu7MKFomu5y5zv1B8G</code></td>\n</tr>\n<tr>\n<td>start</td>\n<td>When Availability starts</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T08:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>end</td>\n<td>When Availability ends</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-23T16:00:00.000Z</code></td>\n</tr>\n<tr>\n<td>employeeID</td>\n<td>Employee the availability belongs to</td>\n<td><code>string</code></td>\n<td><code>j1TznpqVtLN0nmgPfK476U5fn2O2</code></td>\n</tr>\n<tr>\n<td>type</td>\n<td>Type of availability</td>\n<td><code>string</code> /  <br />[\"WORK\", \"NO_WORK\"]</td>\n<td><code>\"WORK\"</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When Availability was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:10:30.336Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When Availability was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-27T09:10:30.336Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","availability"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[{"description":{"content":"<p>Date to query from</p>\n","type":"text/plain"},"key":"from","value":"2025-01-01T00:00:00.000Z"},{"description":{"content":"<p>Date (ISO String) to query to</p>\n","type":"text/plain"},"key":"to","value":"2026-01-01T00:00:00.000Z"},{"disabled":true,"description":{"content":"<p>Employee ID</p>\n","type":"text/plain"},"key":"employeeID","value":""},{"disabled":true,"description":{"content":"<p>Type of availability to query</p>\n","type":"text/plain"},"key":"type","value":"WORK"}],"variable":[]}},"response":[{"id":"b5acdf6e-1363-49ba-8ad6-aa85451bd4d0","name":"By date range","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability?from=2025-01-01T00:00:00.000Z&to=2026-01-01T00:00:00.000Z","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability"],"query":[{"key":"from","value":"2025-01-01T00:00:00.000Z","description":"Date (ISO String) to query from"},{"key":"to","value":"2026-01-01T00:00:00.000Z","description":"Date (ISO String) to query to"},{"key":"employeeID","value":"2gpytsnr0MZIFJsqpFCTLZVbzpw2","description":"Employee ID","disabled":true},{"key":"type","value":"WORK","description":"Type of availability to query","type":"text","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":null,"header":[{"key":"x-powered-by","value":"Express"},{"key":"content-type","value":"application/json; charset=utf-8"},{"key":"etag","value":"W/\"562-Wgm7FljfwYYEpwRKZMrNITU3gAk\""},{"key":"function-execution-id","value":"1l9c59gnnmas"},{"key":"x-cloud-trace-context","value":"4537ef04ca19aa8f43d458b01ca74c55;o=1"},{"key":"date","value":"Tue, 14 Oct 2025 11:54:02 GMT"},{"key":"server","value":"Google Frontend"},{"key":"Content-Length","value":"1378"},{"key":"Alt-Svc","value":"h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"id\": \"Vb3kQ9sLmT2xRw8NpY4c\",\n        \"start\": \"2026-05-05T22:00:00.000Z\",\n        \"end\": \"2026-05-06T22:00:00.000Z\",\n        \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n        \"type\": \"NO_WORK\",\n        \"createTime\": \"2026-04-28T09:12:44.518Z\",\n        \"updateTime\": \"2026-04-28T09:12:44.518Z\"\n    },\n    {\n        \"id\": \"Lp8dWq3ZvB6nHs1KxR0t\",\n        \"start\": \"2026-05-07T20:00:00.000Z\",\n        \"end\": \"2026-05-08T04:00:00.000Z\",\n        \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n        \"type\": \"WORK\",\n        \"createTime\": \"2026-04-28T09:13:02.104Z\",\n        \"updateTime\": \"2026-04-28T09:13:02.104Z\"\n    },\n    {\n        \"id\": \"Hc4TnYb9Mw2QeJ7uGa5s\",\n        \"start\": \"2026-05-09T06:00:00.000Z\",\n        \"end\": \"2026-05-09T14:00:00.000Z\",\n        \"employeeID\": \"J9QAIiTG0nRC1OsC5YvHfLWdDHn1\",\n        \"type\": \"WORK\",\n        \"createTime\": \"2026-04-29T16:40:18.332Z\",\n        \"updateTime\": \"2026-04-29T16:40:18.332Z\"\n    }\n]"},{"id":"944d392b-5344-6e00-5283-36276532acaa","name":"Missing to","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability?from=2025-01-01T00:00:00.000Z&to=2026-01-01T00:00:00.000Z","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability"],"query":[{"key":"from","value":"2025-01-01T00:00:00.000Z","description":"Date to query from"},{"key":"to","value":"2026-01-01T00:00:00.000Z","description":"Date (ISO String) to query to"},{"key":"employeeID","value":"","description":"Employee ID","disabled":true},{"key":"type","value":"WORK","description":"Type of availability to query","type":"text","disabled":true}]},"description":"### Request Fields\n\n| **Param** | **Required** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- | --- |\n| `from` | Yes | Only get availabilities starting _on or after_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2022-04-07T22:00:00.000Z` |\n| `to` | Yes | Only get availabilities ending _before_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2022-04-10T22:00:00.000Z` |\n| `employeeID` | No | If present, only get availability of the employee with this id | `string` | `j1TznpqVtLN0nmgPfK476U5fn2O2` |\n| `type` | No | If present, only get availability of `type` | `string` /  <br>\\[\"WORK\", \"NO_WORK\"\\] | `\"WORK\"` |\n\nReturns availabilities that lie entirely inside the range: `start` at or after `from`, and `end` strictly before `to`. A record ending exactly at `to` is not returned, so a whole-day availability for 6 May (ending 7 May 00:00) is missed by `to=2026-05-07T00:00:00Z`. Use the following midnight, or add a second.\n\n### Response Fields\n\n| **Body** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- |\n| id | Availability ID | `string` | `Trcu7MKFomu5y5zv1B8G` |\n| start | When Availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T08:00:00.000Z` |\n| end | When Availability ends | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T16:00:00.000Z` |\n| employeeID | Employee the availability belongs to | `string` | `j1TznpqVtLN0nmgPfK476U5fn2O2` |\n| type | Type of availability | `string` /  <br>\\[\"WORK\", \"NO_WORK\"\\] | `\"WORK\"` |\n| createTime | When Availability was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |\n| updateTime | When Availability was updated | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"value":"application/json; charset=utf-8","key":"Content-Type"}],"cookie":[],"responseTime":null,"body":"\"Query param to is missing\""},{"id":"47007f96-a0d1-ea03-3841-1465bd7cf7be","name":"Invalid type","originalRequest":{"auth":{"type":"apikey","apikey":{"value":"","key":"Authorization"}},"method":"GET","header":[],"url":{"raw":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/availability?from=2025-01-01T00:00:00.000Z&to=2026-01-01T00:00:00.000Z","host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"path":["companies","COMPANY_ID","availability"],"query":[{"key":"from","value":"2025-01-01T00:00:00.000Z","description":"Date to query from"},{"key":"to","value":"2026-01-01T00:00:00.000Z","description":"Date (ISO String) to query to"},{"key":"employeeID","value":"","description":"Employee ID","disabled":true},{"key":"type","value":"WORK","description":"Type of availability to query","type":"text","disabled":true}]},"description":"### Request Fields\n\n| **Param** | **Required** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- | --- |\n| `from` | Yes | Only get availabilities starting _on or after_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2022-04-07T22:00:00.000Z` |\n| `to` | Yes | Only get availabilities ending _before_ this time | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2022-04-10T22:00:00.000Z` |\n| `employeeID` | No | If present, only get availability of the employee with this id | `string` | `j1TznpqVtLN0nmgPfK476U5fn2O2` |\n| `type` | No | If present, only get availability of `type` | `string` /  <br>\\[\"WORK\", \"NO_WORK\"\\] | `\"WORK\"` |\n\nReturns availabilities that lie entirely inside the range: `start` at or after `from`, and `end` strictly before `to`. A record ending exactly at `to` is not returned, so a whole-day availability for 6 May (ending 7 May 00:00) is missed by `to=2026-05-07T00:00:00Z`. Use the following midnight, or add a second.\n\n### Response Fields\n\n| **Body** | **Description** | **Type / format** | **Example** |\n| --- | --- | --- | --- |\n| id | Availability ID | `string` | `Trcu7MKFomu5y5zv1B8G` |\n| start | When Availability starts | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T08:00:00.000Z` |\n| end | When Availability ends | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-23T16:00:00.000Z` |\n| employeeID | Employee the availability belongs to | `string` | `j1TznpqVtLN0nmgPfK476U5fn2O2` |\n| type | Type of availability | `string` /  <br>\\[\"WORK\", \"NO_WORK\"\\] | `\"WORK\"` |\n| createTime | When Availability was created | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |\n| updateTime | When Availability was updated | an [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) encoded `string` | `2023-10-27T09:10:30.336Z` |"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":[{"key":"Content-Type","value":"application/json; charset=utf-8"}],"cookie":[],"responseTime":null,"body":"\"Invalid type: expected 'NO_WORK' or 'WORK'\""}],"_postman_id":"139d6886-e1a8-4aca-8f0b-4813bd46c6f2"}],"id":"f52ef4f5-cb00-0f9e-854a-f840211300eb","description":"<p>An availability is an employee's wish to work (<code>WORK</code>) or not work (<code>NO_WORK</code>) during a window.</p>\n","_postman_id":"f52ef4f5-cb00-0f9e-854a-f840211300eb","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]},"isInherited":true,"source":{"_postman_id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","id":"59bfbd79-56b8-4afc-ba02-aaa84928a576","name":"Workfeed API (prod)","type":"collection"}}},{"name":"Get settings","id":"b74780ec-66d2-4841-b253-6e8bd1cc3356","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/settings","description":"<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>salaryPeriodStartDate</td>\n<td>Day of the month that the salary period / cycle starts.  <br />It’s only a <code>number</code> when <code>payPeriodSetting.frequency</code> is set to monthly</td>\n<td><code>number</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>payPeriodSetting</td>\n<td>Pay Period Setting</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>payPeriodSetting.startDate</td>\n<td>First date of a salary period / cycle</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>payPeriodSetting.frequency</td>\n<td>Options:  <br /><code>\"weekly\"</code> / <code>\"biweekly\"</code> / <code>\"monthly\"</code></td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>shiftBreak</td>\n<td>The company’s default shift break rules that applies to all shifts except for those with a custom break</td>\n<td><code>object</code></td>\n<td></td>\n</tr>\n<tr>\n<td>shiftBreak.breakDuration</td>\n<td>Duration in Hours</td>\n<td><code>number</code></td>\n<td><code>1</code></td>\n</tr>\n<tr>\n<td>shiftBreak.shiftLengthInterval</td>\n<td>Interval after which a break should be applied in hours</td>\n<td><code>number</code></td>\n<td><code>2</code></td>\n</tr>\n<tr>\n<td>shiftBreak.breakType</td>\n<td>Whether breaks stack incrementally or are fixed. <code>\"incremental\"</code> adds breaks as shift length increases, while <code>\"fixed\"</code> applies a single break after the interval</td>\n<td><code>string</code></td>\n<td><code>\"incremental\"</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When the Settings was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When the Settings was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","settings"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[],"variable":[]}},"response":[{"id":"46331eb1-d7a2-4ed6-9e83-4cdafcbccc0d","name":"Get settings","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/settings"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"salaryPeriodStartDate\": null,\n    \"payPeriodSetting\": null,\n    \"shiftBreak\": null,\n    \"createTime\": null,\n    \"updateTime\": null\n}"}],"_postman_id":"b74780ec-66d2-4841-b253-6e8bd1cc3356"},{"name":"Get salary supplements","id":"0816e270-b20e-467f-a175-d7607e5adbeb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":false},"method":"GET","header":[],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/salary-supplements?Test","description":"<p><strong>Note:</strong> <code>duration</code> bounds the period in which the supplement applies. Both bounds are calendar days in <code>yyyy-MM-dd</code>, interpreted in the company's time zone, and both are inclusive. A <code>null</code> bound means open-ended in that direction.</p>\n<h3 id=\"response-fields\">Response Fields</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Body</th>\n<th>Description</th>\n<th><strong>Type / Format</strong></th>\n<th><strong>Example</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>add</td>\n<td><code>add.amount</code> represents the fixed amount that is the supplement’s value. <strong>Example:</strong> An amount of 2.5 would mean that an employee normally making $10 per hour would make $12.5 per hour in the supplement’s overlapping duration.  <br />  <br /><code>add.multiplier</code> represents the factor that should be multiplied onto the base wage of the employee when calculating the supplement’s value. <strong>Example:</strong> A multiplier of 1.5 would mean that an employee normally making $10 per hour would make $15 per hour in the supplement’s overlapping duration.</td>\n<td><code>object</code></td>\n<td></td>\n</tr>\n<tr>\n<td>add.multiplier or add.amount</td>\n<td>if <code>add.type</code> is set to <code>\"MULTIPLY\"</code> use <code>multiplier</code>. if <code>add.type</code> is set to <code>\"ADD\"</code> use <code>amount</code></td>\n<td><code>number</code></td>\n<td><code>1.5</code></td>\n</tr>\n<tr>\n<td>add.type</td>\n<td>Options: <code>\"MULTIPLY\"</code> / <code>\"ADD\"</code></td>\n<td><code>string</code></td>\n<td><code>MULTIPLY</code></td>\n</tr>\n<tr>\n<td>code</td>\n<td>External / Custom supplement identifier that will be sent to supported payroll providers when exporting</td>\n<td><code>string</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>duration</td>\n<td>The period in which the supplement applies. The key is always present; each bound is <code>null</code> when open-ended.</td>\n<td><code>object</code></td>\n<td></td>\n</tr>\n<tr>\n<td>duration.start</td>\n<td>First day the supplement applies, inclusive. <code>null</code> means there is no start bound.</td>\n<td><code>yyyy-MM-dd</code> <code>string</code> / <code>null</code></td>\n<td><code>2026-03-01</code></td>\n</tr>\n<tr>\n<td>duration.end</td>\n<td>Last day the supplement applies, inclusive. <code>null</code> means there is no end bound.</td>\n<td><code>yyyy-MM-dd</code> <code>string</code> / <code>null</code></td>\n<td><code>2026-03-31</code></td>\n</tr>\n<tr>\n<td>roles</td>\n<td>The supplement will only be added to shifts with these roles  <br />  <br /><strong>Note:</strong> An empty array means all roles</td>\n<td><code>string[]</code></td>\n<td><code>[\"Rk7pAsiwcyMHuUYYQhKL\"]</code></td>\n</tr>\n<tr>\n<td>name</td>\n<td>Supplement name</td>\n<td><code>string</code></td>\n<td><code>Evening shift supplement</code></td>\n</tr>\n<tr>\n<td>employees</td>\n<td>The supplement will only be added to shifts with these employees.  <br />  <br /><strong>Note:</strong> An empty array means all employees</td>\n<td><code>string[]</code></td>\n<td><code>[]</code></td>\n</tr>\n<tr>\n<td>type</td>\n<td>Always <code>\"salary\"</code> on this endpoint. Flex supplements (extra hours rather than extra pay) exist in the product but are not returned here.</td>\n<td><code>string</code></td>\n<td><code>salary</code></td>\n</tr>\n<tr>\n<td>when</td>\n<td><code>when.start</code> and <code>when.end</code> represent the minutes of the day that this supplement is applied. <strong>Example:</strong> A start of 1140 and an end of 1380 means that the supplement will be applied to shifts taking place between 19 (1140/60) and 23 (1380/60). If a shift goes from 17 to 21, then this supplement would be applied for two hours.  <br />  <br />  <br /><code>when.overtime</code> represents the amount of hours worked before this supplements starts to be applied.  <br /><strong>Example:</strong> An overtime of 8 means that the employee gets their normal wage for the first 8 hours of their shift, and for any amount of time more than 8 hours, the supplement is applied</td>\n<td><code>object</code></td>\n<td></td>\n</tr>\n<tr>\n<td>when.start or when.overtime</td>\n<td>if <code>when.type</code> is set to <code>\"TIME_OF_DAY\"</code> use <code>start</code> &amp; <code>end</code>. if <code>add.type</code> is set to <code>\"OVERTIME\"</code> use only <code>overtime</code></td>\n<td><code>number</code></td>\n<td><code>0</code></td>\n</tr>\n<tr>\n<td>when.end or when.overtime</td>\n<td>if <code>when.type</code> is set to <code>\"TIME_OF_DAY\"</code> use <code>start</code> &amp; <code>end</code>. if <code>add.type</code> is set to <code>\"OVERTIME\"</code> use only <code>overtime</code></td>\n<td><code>number</code></td>\n<td><code>1440</code></td>\n</tr>\n<tr>\n<td>when.type</td>\n<td>Options: <code>TIME_OF_DAY</code> / <code>OVERTIME</code></td>\n<td><code>string</code></td>\n<td><code>TIME_OF_DAY</code></td>\n</tr>\n<tr>\n<td>id</td>\n<td>Salary Supplement ID</td>\n<td><code>string</code></td>\n<td><code>RkSiKGGoAI0uS0CnyDBm</code></td>\n</tr>\n<tr>\n<td>weekdays</td>\n<td>What Weekdays does the Salary Supplement apply. If Holidays is set this field will be null</td>\n<td><code>object</code> / <code>null</code></td>\n<td></td>\n</tr>\n<tr>\n<td>weekdays.shared.monday</td>\n<td>Monday</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>weekdays.shared.tuesday</td>\n<td>Tuesday</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>weekdays.shared.wednesday</td>\n<td>Wednesday</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>weekdays.shared.thursday</td>\n<td>Thursday</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>weekdays.shared.friday</td>\n<td>Friday</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>weekdays.shared.saturday</td>\n<td>Saturday</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>weekdays.shared.sunday</td>\n<td>Sunday</td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>appliedOnHoliday</td>\n<td>Whether a weekday supplement also applies on public holidays. Always present when <code>weekdays</code> is set, and not sent for holiday supplements.</td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>holidays</td>\n<td>What Holidays does the Salary Supplement apply. If Weekdays is set this field will be null.  <br />  <br />Holiday boolean values are going to differ depending on which country you selected in the UI</td>\n<td><code>object</code> / <code>null</code></td>\n<td><code>null</code></td>\n</tr>\n<tr>\n<td>holidays.good-friday</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>holidays.ascension-day</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>holidays.whit-monday</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>holidays.easter-monday</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>holidays.great-prayer-day</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>holidays.whit-sunday</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>holidays.easter-sunday</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>holidays.new-years-day</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>holidays.maundy-thursday</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>holidays.boxing-day</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>false</code></td>\n</tr>\n<tr>\n<td>holidays.christmas-day</td>\n<td></td>\n<td><code>boolean</code></td>\n<td><code>true</code></td>\n</tr>\n<tr>\n<td>createTime</td>\n<td>When the Salary Supplement was created</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n<tr>\n<td>updateTime</td>\n<td>When the Salary Supplement was updated</td>\n<td>an <a href=\"https://en.wikipedia.org/wiki/ISO_8601\">ISO 8601</a> encoded <code>string</code></td>\n<td><code>2023-10-25T09:43:06.650Z</code></td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["companies","COMPANY_ID","salary-supplements"],"host":["https://europe-west1-production-eu-327a3.cloudfunctions.net/api"],"query":[{"key":"Test","value":null}],"variable":[]}},"response":[{"id":"b862bc33-a28c-4a40-bc57-af6cea066cee","name":"Get salary supplements","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"API-KEY","type":"text"}],"url":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api/companies/COMPANY_ID/salary-supplements"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"add\": {\n            \"amount\": 25,\n            \"type\": \"ADD\"\n        },\n        \"code\": \"1541\",\n        \"roles\": [\n            \"Rk7pAsiwcyMHuUYYQhKL\",\n            \"Lq50rQxZ1n9odyBKDZ6e\"\n        ],\n        \"name\": \"Evening shift supplement\",\n        \"id\": \"RkSiKGGoAI0uS0CnyDBm\",\n        \"employees\": [],\n        \"type\": \"salary\",\n        \"when\": {\n            \"start\": 1020,\n            \"end\": 1440,\n            \"type\": \"TIME_OF_DAY\"\n        },\n        \"duration\": {\n            \"start\": \"2026-03-01\",\n            \"end\": \"2026-03-31\"\n        },\n        \"weekdays\": {\n            \"shared.monday\": true,\n            \"shared.tuesday\": true,\n            \"shared.wednesday\": true,\n            \"shared.thursday\": true,\n            \"shared.friday\": true,\n            \"shared.saturday\": false,\n            \"shared.sunday\": false\n        },\n        \"holidays\": null,\n        \"appliedOnHoliday\": false,\n        \"createTime\": \"2023-11-10T14:21:15.965Z\",\n        \"updateTime\": \"2023-11-10T14:54:02.144Z\"\n    },\n    {\n        \"add\": {\n            \"multiplier\": 1.5,\n            \"type\": \"MULTIPLY\"\n        },\n        \"code\": null,\n        \"roles\": [],\n        \"name\": \"Public holiday supplement\",\n        \"id\": \"e3tH8K52bskZ3vV6m5eM\",\n        \"employees\": [],\n        \"type\": \"salary\",\n        \"when\": {\n            \"overtime\": 0,\n            \"type\": \"OVERTIME\"\n        },\n        \"duration\": {\n            \"start\": null,\n            \"end\": null\n        },\n        \"weekdays\": null,\n        \"holidays\": {\n            \"holidays.new-years-day\": true,\n            \"holidays.maundy-thursday\": true,\n            \"holidays.good-friday\": true,\n            \"holidays.easter-sunday\": true,\n            \"holidays.easter-monday\": true,\n            \"holidays.great-prayer-day\": true,\n            \"holidays.ascension-day\": true,\n            \"holidays.whit-sunday\": true,\n            \"holidays.whit-monday\": true,\n            \"holidays.christmas-day\": true,\n            \"holidays.boxing-day\": true\n        },\n        \"createTime\": \"2023-11-10T14:22:37.938Z\",\n        \"updateTime\": \"2023-11-10T14:23:15.051Z\"\n    }\n]"}],"_postman_id":"0816e270-b20e-467f-a175-d7607e5adbeb"}],"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"API_KEY"}]}},"event":[{"listen":"prerequest","script":{"id":"315bb47b-83f3-48f4-b288-53b8ee17a3cf","type":"text/javascript","requests":{},"exec":[""]}},{"listen":"test","script":{"id":"b2fca44f-db9f-41cc-9104-c8f79cfe988c","type":"text/javascript","requests":{},"exec":[""]}}],"variable":[{"key":"baseURL","value":"https://europe-west1-production-eu-327a3.cloudfunctions.net/api"},{"key":"companyID","value":"COMPANY_ID"},{"key":"apiKey","value":"API_KEY"}]}