Get a roster shift
Returns one roster shift.
Scope: attendance:read · Plan: Pro and Enterprise in live mode; every plan in test mode.
AuthorizationBearer <token>Send Authorization: Bearer <token> on every request. The token is one of:
| Prefix | What it is | Where it may be used |
|---|---|---|
agoo_sk_live_ | Secret key, live mode | Your servers only |
agoo_sk_test_ | Secret key, test mode | Your servers only |
agoo_pk_live_ | Publishable key, live mode | Browsers and apps: create pre-registrations and bookings, read public booking types (with their intake questions) and their free slots, read the visit types open for pre-registration with their public forms. Never lists people. |
agoo_pk_test_ | Publishable key, test mode | As above, in test mode |
Admins create keys in Console → Developers → API keys and choose each key's scopes. A key is shown once. Never put a secret key in a URL, a browser or a mobile app.
Scope: attendance:read
roster_shift_id*stringThe roster shift's ID.
^roster_shift_[0-7][0-9a-hjkmnp-tv-z]{25}$"roster_shift_01m5dk4qexa6kwfsr9nhy4r7w5"The roster shift.
application/json- response
A shift on a site's roster. A published shift with a change waiting shows its published values.
id*RosterShiftIdA roster shift ID (TypeID with the roster_shift prefix).
^roster_shift_[0-7][0-9a-hjkmnp-tv-z]{25}$"roster_shift_01m5dk4qexa6kwfsr9nhy4r7w5"site_id*SiteIdA site ID (TypeID with the site prefix).
^site_[0-7][0-9a-hjkmnp-tv-z]{25}$"site_01kjpt3yw0fz0v414608h9x65s"person_id*|Who works it; null for an open shift.
open*booleanNo one works it yet: once published, staff who can take it may ask for it.
on_date*stringThe local day it belongs to at its site (a night shift belongs to the evening it starts).
datestarts_at*stringdate-timeends_at*stringdate-timestart_time*stringLocal time at the site, HH:MM.
"20:00"end_time*stringLocal time at the site, HH:MM.
"08:00"shift_id*ShiftIdA shift ID (TypeID with the shift prefix).
^shift_[0-7][0-9a-hjkmnp-tv-z]{25}$"shift_01kn6pqfm0fmasbh61jnr3syze"name*string"Night gate"label*|"Main gate"colour*string"blue""teal""green""gold""amber""rose""violet""slate"break_kind*|Its break; null follows your organisation's standard day.
"none""paid""unpaid"nullbreak_minutes*integer|nullbreak_starts*|When the planned break starts, HH:MM.
note*|Shown to the person with the shift.
status*stringdraft: staff don't see it yet. cancelled: removed after it was published. removed: a draft taken off.
"draft""published""cancelled""removed"pending_change*booleanA change waits for the next publish.
removing*booleanIt will be removed at the next publish.
source*string"pattern""manual""import""swap""claim"published_at*|date-timecreated_at*stringdate-timeupdated_at*stringdate-timecurl -X GET 'https://api.agoo.ardent.africa/v1/roster-shifts/roster_shift_01m5dk4qexa6kwfsr9nhy4r7w5'{ "id": "roster_shift_01m5dk4qexa6kwfsr9nhy4r7w5", "site_id": "site_01m5h0fsfjj4dax85mkb6z3djr", "person_id": "person_01m50j6prqtcmm8yjekp0am4ge", "open": false, "on_date": "2026-11-04", "starts_at": "2026-11-04T20:00:00Z", "ends_at": "2026-11-05T08:00:00Z", "start_time": "20:00", "end_time": "08:00", "shift_id": "shift_01m5zwj3nby2d63x571ncmshhj", "name": "Night gate", "label": "Main gate", "colour": "violet", "break_kind": "paid", "break_minutes": 30, "break_starts": null, "note": null, "status": "published", "pending_change": false, "removing": false, "source": "pattern", "published_at": "2026-10-14T16:00:00Z", "created_at": "2026-10-12T10:00:00Z", "updated_at": "2026-10-14T16:00:00Z"}Add a roster shift POST
Adds a shift to a site's roster as a draft, from one of the site's shift templates (`GET /shifts`), with its own start and end when you give them. With no `person_id` it's an open shift. Staff see nothing until the site's roster is published (`POST /rosters/publish`), as in the Console. Rosters themselves are part of Growth and up (`plan_required` otherwise). **Scope:** `attendance:manage` · **Plan:** Pro and Enterprise in live mode; every plan in test mode.
Change a roster shift PATCH
Changes a draft at once, or a published shift as a change waiting for the next publish (`pending_change: true`; staff keep seeing the published shift until then). Move it to someone else (`person_id: null` makes it an open shift), to another day keeping its clock times, to another template (bringing its times), or give it its own times or note. **Scope:** `attendance:manage` · **Plan:** Pro and Enterprise in live mode; every plan in test mode.