Get free shifts (categorized)
GET {{baseUrl}}/shifts/free/categorized
Lists open shifts the driver could claim, pre-sorted into buckets. Source: models/shifts.ts categorizedFreeShifts().
Response fields:
hot— free shifts flagged as high-priority/urgent need.recommended— free shifts that don’t overlap the driver’s recent shift history and are suggested for them.all— every free shift available in the driver’s territory (deduped per retreat point, filtered to their transportation mode if the territory restricts shift roles).
Each entry is a Shift row (same shape as “Get upcoming shifts”).
Examples
Section titled “Examples”curl --request GET 'https://api.firstdelivery.com/api/shifts/free/categorized'const response = await fetch("https://api.firstdelivery.com/api/shifts/free/categorized", { "method": "GET", "headers": {}})const data = await response.json()import requests
response = requests.request( "GET", "https://api.firstdelivery.com/api/shifts/free/categorized", headers={},)response.raise_for_status()Saved responses
Section titled “Saved responses”{ "hot": [ { "id": "<shift-id-1>", "start": "2026-06-23T16:00:00.000Z", "stop": "2026-06-23T20:00:00.000Z", "retreat_point": "c1d2e3f4-1111-4a2b-9c3d-4e5f6a7b8c9d", "hourly_rate": 22, "length_hours": 4 } ], "recommended": [ { "id": "<shift-id-2>", "start": "2026-06-24T16:00:00.000Z", "stop": "2026-06-24T20:00:00.000Z", "retreat_point": "c1d2e3f4-1111-4a2b-9c3d-4e5f6a7b8c9d", "hourly_rate": 18, "length_hours": 4 } ], "all": [ { "id": "<shift-id-1>", "start": "2026-06-23T16:00:00.000Z", "stop": "2026-06-23T20:00:00.000Z", "hourly_rate": 22 }, { "id": "<shift-id-2>", "start": "2026-06-24T16:00:00.000Z", "stop": "2026-06-24T20:00:00.000Z", "hourly_rate": 18 } ]}
