Check In to Shift
POST {{base_url}}/api/v3/shifts/{{SHIFT_ID}}/check_in
Required scope: shifts:write
Checks the runner in to an operator-owned shift. Requires admin credentials. The optional flags record whether the runner has cash and a hotbag. The operation is idempotent: retrying it preserves the original check-in timestamp.
Request body
Section titled “Request body”{ "cash": false, "hotbag": true}Examples
Section titled “Examples”curl --request POST '${base_url}/api/v3/shifts/550e8400-e29b-41d4-a716-446655440000/check_in' \ --header 'Content-Type: application/json' \ --data '{ "cash": false, "hotbag": true}'const response = await fetch("${base_url}/api/v3/shifts/550e8400-e29b-41d4-a716-446655440000/check_in", { "method": "POST", "headers": { "Content-Type": "application/json" }, "body": "{\n \"cash\": false,\n \"hotbag\": true\n}"})const data = await response.json()import requests
response = requests.request( "POST", "${base_url}/api/v3/shifts/550e8400-e29b-41d4-a716-446655440000/check_in", headers={ 'Content-Type': 'application/json'}, data="{\n \"cash\": false,\n \"hotbag\": true\n}",)response.raise_for_status()Saved responses
Section titled “Saved responses”{ "type": "error", "message": "Shift not found", "status": 404}{ "type": "success", "data": { "id": "550e8400-e29b-41d4-a716-446655440000", "checked_in": "2026-10-20T13:02:00.000Z", "cash": false, "hotbag": true }}{ "type": "success", "data": { "id": "550e8400-e29b-41d4-a716-446655440000", "checked_in": "2026-10-20T13:02:00.000Z", "cash": false, "hotbag": true }}{ "type": "error", "message": "cash must be a boolean", "status": 400}
