GET /api/v1/time/standby returns the roster records (standby days)
for the responders your organisation employs — the same records as the roster
download spreadsheet in the web app, under the same column names. It is read-only.
Deployed time is the separate deployment time feed.
Access needs the ResponderHQ.Time.Read.All application permission, the same permission as the deployment time feed, consented by your organisation's Microsoft Entra administrator. Roster times cannot be modified by the API.
Records are scoped to your own organisation: a responder appears only when your organisation is their employer, whichever roster or region they are on. Roster times are local wall-clock times exactly as rostered, with no timezone. Rows that hold a vacant position with no responder are not returned.
There is no "changed since" feed. Re-request the whole window each run and replace your copy of it — roster rows are edited and deleted in place.
| item | type | mandatory | description | comments |
|---|---|---|---|---|
| from | date | yes | First roster date, inclusive | YYYY-MM-DD, e.g. 2026-08-01 |
| to | date | yes | Last roster date, inclusive | The window must not exceed 93 days. A longer window is rejected rather than trimmed. |
| roster | string | Only rows from the roster with this name | Optional. Without it every roster is returned, and each row carries its roster_name, so you do not need to know the roster names in advance. Case-insensitive, e.g. Fire Standby. | |
| validated_only | boolean | Only rows an administrator has validated | Default false. Every row carries is_validated either way. | |
| limit | integer | Maximum rows in one response | Default 500, maximum 5000. | |
| cursor | string | Marker for the next page | Pass back the next_cursor from the previous response, unchanged. Do not construct one. It is only valid for the same from/to window. |
| item | type | description | comments |
|---|---|---|---|
| roster_id | integer | Unique id for the roster row | Use it to match a row you have already imported. Never reused. |
| roster_name | string | The roster the row belongs to | For example Fire Standby |
| date | date | The rostered day | YYYY-MM-DD |
| region_id / region | integer / string | The region the roster row is in | |
| responder_barcode | string | The responder's id in Responder HQ | Matches fire_fighter_barcode on responders |
| org_uid | string | Your organisation's own id for the responder | The same value you set on responders. Null for any responder you have not given one. |
| first_name / last_name / email | string | The responder | Email is usually the most reliable key for matching to a payroll record |
| staff_type | string | Staff classification, where your organisation records one | Null if your organisation does not use it or has not set it |
| organisation | string | Who the responder works for | As the spreadsheet shows it: your own organisation's name for your staff, the contractor's name for contractor staff. |
| home_region_id / home_region | integer / string | The responder's home region | Compare with region to see whether they were rostered outside it |
| role | string | The role the responder was rostered into | Refer to your organisation's deployment roles |
| response_type | string | The response type rostered | Your organisation's own response type names |
| location | string | The rostered location | |
| vehicle | string | Callsign of the rostered vehicle | |
| oncall_start / oncall_finish | time | The on-call period | HH:MM local time, no timezone. Null when not rostered on call. A finish earlier than the start means it ends the next day. |
| active_start / active_finish | time | The active (working) period | HH:MM local time, no timezone. Null when not rostered active. |
| is_validated / validated_by / validated_timestamp | boolean / string / datetime | Whether an administrator has validated the row, who, and when | validated_by and validated_timestamp are only given on a validated row. validated_timestamp is UTC. |
| responder_confirmed | boolean | Whether the responder confirmed the row themselves | Separate from administrator validation |
GET /api/v1/time/standby?from=2026-08-01&to=2026-08-31&limit=500
Keep requesting with the cursor from the previous response until next_cursor comes back empty. That is the end of the window.