GET /api/v1/time/deployments returns the deployment records for the
responders your organisation employs, so a payroll or timesheet system can read
worked time without anyone downloading a spreadsheet. It is read-only.
Access needs the ResponderHQ.Time.Read.All application permission, consented by your organisation's Microsoft Entra administrator. It is separate from the write permissions used by the other endpoints on this site, so a system that reads time cannot change any data.
Records are scoped to your own organisation: a responder appears only when your organisation is their employer. Times are returned in UTC, and durations are simply return time minus deploy time — no break, meal or award rules are applied, because those belong in your payroll system.
There is no "changed since" feed. Re-request the whole window each run and replace your copy of it — deployment records can be deleted, and a deletion is invisible to any incremental feed.
| item | type | mandatory | description | comments |
|---|---|---|---|---|
| from | datetime | yes | Start of the window, inclusive | ISO-8601 with an offset, e.g. 2026-08-01T00:00:00Z. Compared against the deploy time. |
| to | datetime | yes | End of the window, inclusive | The window must not exceed 93 days. A longer window is rejected rather than trimmed. |
| include_open | boolean | Include responders who are still deployed | Default false. An open record has no return time and no duration. | |
| include_work | boolean | Include work events as well as incidents | Default true. Each record also carries is_work_event so you can split them. | |
| validated_only | boolean | Only records an administrator has validated | Default false. Every record carries is_validated either way. | |
| limit | integer | Maximum records 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. |
| item | type | description | comments |
|---|---|---|---|
| deployment_id | integer | Unique id for the deployment record | Use it to match a record you have already imported |
| 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. Empty for any responder you have not given one, so pair it with email or responder_barcode rather than relying on it alone. |
| first_name / last_name / full_name | string | The responder's name | full_name may be empty on older records |
| string | The responder's email address | Usually the most reliable key for matching to a payroll record | |
| staff_type | string | Staff classification, where your organisation records one | Empty if your organisation does not use it |
| event_barcode / event_name / event_type | string | The event the responder was deployed to | Empty where a deployment carries no event |
| is_work_event | boolean | True for work, false for an incident | Lets you split the two without knowing our status codes |
| deploy_role | string | The role the responder was deployed into | Refer to your organisation's deployment roles |
| deploy_timestamp / return_timestamp | datetime | Start and end of the deployment | UTC. return_timestamp is empty while the responder is still deployed. |
| primary_deploy_timestamp | datetime | Start of the shift this record belongs to | Records sharing a value belong to one shift, if you group them |
| duration_hours | decimal | Return time minus deploy time, in hours | Empty while the deployment is open. No break or award rules applied. |
| is_open | boolean | True while the responder is still deployed | Only ever true when you ask for include_open |
| is_validated / validated_by / validated_timestamp | boolean / string / datetime | Whether an administrator has checked the times, who, and when | Your organisation decides whether unvalidated time is payable |
| responder_confirmed | boolean | Whether the responder confirmed their own times | Separate from administrator validation |
| cost_code / cost_code_description | string | The financial code that applied to this event at this time | Empty where your organisation has set no code covering it |
GET /api/v1/time/deployments?from=2026-08-01T00:00:00Z&to=2026-08-31T00:00:00Z&limit=500
Keep requesting with the cursor from the previous response until
next_cursor comes back empty. That is the end of the window.