REST API Access Guide

Naposledy overené: 11. októbra 2026

1. What's included

PRO workspaces can issue a one-time API access key to call ShiftScheduler's built-in REST endpoints directly. The key authenticates requests to the same server-side routes that power the web application, so you always receive normalized JSON responses.

Integračné kľúče môžu spravovať iba administrátori priestoru. Organizácia musí mať aspoň jednu platenú licenciu na vytvorenie alebo použitie REST API kľúča; samotná skúšobná doba nestačí. Kľúče majú v rámci svojho priestoru práva administrátora.

2. Generating the API access key

  1. Sign in and open Settings → API access for REST clients.
  2. Click Generate new key.
  3. Copy the one-time value that appears in the dialog. The plaintext key is never shown again.
  4. Store it securely (we recommend a secrets manager). You can revoke or regenerate the key at any time from the same screen.

Only one API access key can exist per workspace. Regenerating a key immediately invalidates the previous value.

3. Authentication

All API requests must include the key in the Authorization header using the Bearer scheme:

curl https://shiftscheduler.ai/api/persons \
  -H "Authorization: Bearer <YOUR_API_ACCESS_KEY>"

Pri komunikácii medzi servermi posielajte Bearer kľúč bez cookies relácie prehliadača. Platná relácia má prednosť a použije vlastné oprávnenia. JSON telo vyžaduje Content-Type: application/json; požiadavka bez tela túto hlavičku nepotrebuje.

Chyby overenia vracajú 401. Platný kľúč bez plateného prístupu vracia 403. Oprávnenia a limity licencií môžu tiež vracať 403; konflikty 409 a neplatné vstupy zvyčajne 400. Chyby obsahujú reťazec error. Platená licencia neobchádza limity osôb v celej organizácii.

  • The key encodes your workspace ID, so every request is scoped to your workspace automatically.
  • API keys have workspace-wide access and are intended only for server-to-server use. Never expose a key in browser or mobile-app code.
  • Requests are not currently subject to a per-key rate limit, so apply appropriate rate limiting in your integration.

Getting locations

Use the REST API access key—not an MCP key or webhook secret. The response is a JSON object whose locations property is the array of locations; it is not a bare array.

curl https://shiftscheduler.ai/api/locations \
  -H "Authorization: Bearer <YOUR_API_ACCESS_KEY>" \
  -H "Accept: application/json"
{
  "locations": [
    {
      "id": "66f01234567890abcdef1234",
      "title": "Ward A",
      "sortOrder": 1,
      "weeklyTemplate": []
    }
  ]
}

Collection reads use matching envelopes: persons, locations , or shifts. A missing, invalid, revoked, or regenerated key returns 401 with a JSON error message.

4. Supported endpoints

The following endpoints accept bearer authentication. Payloads use camelCase fields, and responses always return the normalized ShiftScheduler shape.

| Metóda | Endpoint | Poznámky |
| --- | --- | --- |
| GET, POST | `/api/persons` | Vypísať alebo vytvoriť osoby. |
| GET, PUT, DELETE | `/api/persons/{id}` | Načítať, čiastočne upraviť alebo vymazať osobu a súvisiace záznamy. |
| POST | `/api/persons/reorder` | Zmeniť poradie pomocou orderedIds; nie je dostupné pri abecednom radení. |
| POST | `/api/persons/{id}/access` | Spravovať prístup pomocou action: invite, cancel-invite alebo revoke. Pozvánky odosielajú e-mail. |
| GET, POST | `/api/locations` | Vypísať alebo vytvoriť pracoviská. |
| GET, PUT, DELETE | `/api/locations/{id}` | Načítať, upraviť alebo vymazať pracovisko a jeho zmeny. |
| POST | `/api/locations/reorder` | Zmeniť poradie pomocou orderedIds; nie je dostupné pri abecednom radení. |
| GET, POST | `/api/shift-templates` | Vypísať alebo vytvoriť šablóny pracovného priestoru. |
| GET, PUT, DELETE | `/api/shift-templates/{id}` | Načítať, upraviť alebo vymazať šablónu; odkazy môžu vymazaniu zabrániť (409). |
| POST | `/api/shift-templates/{id}` | Zobraziť dopad úpravy šablóny bez uloženia. |
| GET, PUT, DELETE | `/api/location-day-schedules` | GET: locationIds/locationId, from, to. PUT: locationId, date, slots. DELETE: parametre locationId a date. |
| GET, POST, DELETE | `/api/shifts` | GET: locationId, personId, date, from, to. POST: vytvoriť. DELETE: JSON telo s id. |
| PUT | `/api/shifts/{id}` | Čiastočne upraviť zmenu. |
| GET, DELETE | `/api/schedule-draft` | Načítať zdieľaný koncept; includeChanges=true pridá bezpečné popisy zmien. DELETE zahodí celý koncept. |
| POST | `/api/schedule-draft/publish` | Atomicky zverejniť všetky čakajúce zmeny. |
| GET, PUT | `/api/person-preferences` | GET: personIds/personId, from, to. PUT: personId, date, preference; prázdna hodnota preferenciu vymaže. |
| GET, POST | `/api/timeoff/requests` | GET: status (predvolené requested; archived zahŕňa approved/rejected). POST: personId, date, typeId; časy sa preberajú zo šablóny. |
| PUT | `/api/timeoff/requests/{id}` | Upraviť poznámku/dátum alebo action: approve/reject. Šablónu ani časy nemožno meniť. |
| GET | `/api/timeoff/allowances` | Načítať dostupné zostatky voľna. |
| GET, POST | `/api/timeoff/grants` | GET vyžaduje personId. POST: personId, typeId, hours, voliteľne note. |
| DELETE | `/api/timeoff/grants/{id}` | Stornovať prídel; auditný záznam zostane do vymazania osoby. |
| GET | `/api/overview` | Prehľad s voliteľnými dátumami start/end. |
| GET, PUT | `/api/workspace/ai-settings` | Načítať pravidlá AI; PUT nahradí rules alebo vykoná podporovanú akciu pravidla. |
| PATCH | `/api/workspace/rules/reset-interpretation` | Resetovať interpretáciu pravidla pomocou ruleId. |

Polia odpovedí sa líšia: persons, locations, shifts, schedules, preferences (s quotas), data (šablóny a žiadosti o voľno), grants (so summary) alebo allowances. Nejde o samostatné polia bez obálky. Líšia sa aj odpovede zápisových operácií.

Iba POST /api/shifts, DELETE /api/shifts, PUT /api/location-day-schedules, PUT /api/person-preferences a POST /api/timeoff/requests prijímajú obálku { items: [...] }.

Výsledky dávky zachovávajú poradie a obsahujú successCount, failureCount, mutationCount a results. Prijatá dávka vracia HTTP 200, aj keď niektoré alebo všetky položky zlyhajú. Kontrolujte ok a status jednotlivých výsledkov; samotné HTTP 200 neznamená úspech.

Time Off responses include createdAt, the daily request order, and approval or rejection audit references. Queue order spans pending, approved, and rejected requests for the same calendar day.

If Draft Schedule is enabled for the workspace, API shift reads and regular-shift writes use the shared working schedule. Writes do not notify members or emit shift webhooks until the draft is published. Publishing applies every pending change together; deleting the draft discards it in full. Time Off operations remain immediate, and API keys have admin-equivalent permission to publish or discard.

To review the shared draft without exposing raw shift snapshots, call GET /api/schedule-draft?includeChanges=true. The optional changes array contains the operation type, document ID, label, and localized history descriptor parameters for each pending shift, ordered by schedule date.

Filtering shifts

GET /api/shifts accepts optional locationId, personId, from , and to query parameters to refine the list. Provide a single date to fetch everything on/after or on/before that day, or pass both to limit results to a window. When no filters are provided, you receive every shift in the workspace.

5. Creating data

Write endpoints accept the same payloads the web app uses internally. The examples below demonstrate how to create each entity with typical fields.

Zmeny osôb, pracovísk alebo šablón zneplatnia interpretácie pravidiel AI. Vymazanie osôb či pracovísk vymaže súvisiace údaje rozpisu. Úpravy šablón môžu vyžadovať voľby propagácie; najprv zobrazte dopad. Zápisy skúšajte v testovacom priestore.

Create a person

curl -X POST https://shiftscheduler.ai/api/persons \
  -H "Authorization: Bearer <YOUR_API_ACCESS_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
        "name": "Jordan Weaver",
        "invited": false
      }'

Set invited=true to trigger an email invitation. The server sanitises any membership payload before persisting.

To add someone without inviting them yet, omit invited (or set it to false) and skip the membership block—the person will be created without any access assigned.

Membership settings require invited=true and a valid email. The optional membership.role may be admin, manager , or member; it defaults to member. Supplying membership settings without requesting an invitation returns a validation error.

Responses include the normalised membership snapshot (status, invite email, and timestamps) so you can confirm what was persisted.

Create a location

curl -X POST https://shiftscheduler.ai/api/locations \
  -H "Authorization: Bearer <YOUR_API_ACCESS_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
        "title": "Ward A",
        "weeklyTemplate": []
      }'

Create a shift

curl -X POST https://shiftscheduler.ai/api/shifts \
  -H "Authorization: Bearer <YOUR_API_ACCESS_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
        "location": "LOCATION_ID",
        "person": "PERSON_ID",
        "date": "2026-10-20",
        "startTime": "09:00",
        "endTime": "17:00",
        "note": "Internal workshop prep and handoff"
      }'