Access
Taps, presence and credentials — the gate rail. One `tap` write serves a school gate and a stadium door.
47 endpoints
bearer driver_app beneficiary_app pass_app pass_web admin_web device credential
Query parameters Name Type Constraints statusstring | null optional in_stock assigned active suspended lost damaged retiredschoolstring | null optional — qstring | null optional max length 100 batchstring | null optional max length 50 colorstring | null optional max length 50
Response Returns { "data": [BandRow ] } with meta.next_cursor for the next page.
Field Type Constraints idstring (uuid) required — serial_numberstring required — earth_codestring | null required — batch_numberstring | null required — colorstring | null required — band_type_idstring | null required — typestring | null required — band_typeany required — statusstring required — event_idstring | null required — wearerstring | null required — student_idstring | null required — account_idstring | null required — wallet_idstring | null required — school_idstring | null required — school_namestring | null required — assigned_atstring | null required — expires_atstring | null required — created_atstring (date-time) required —
bearer driver_app beneficiary_app admin_web pass_web access.band_manage device credential
Request body Field Type Constraints serial_numberstring required max length 64 earth_codestring | null optional max length 32 batch_numberstring | null optional max length 64 colorstring | null optional max length 32 band_type_idstring | null optional — school_idstring (uuid) optional — expires_atstring | null optional —
Response Returns { "data": BandWrite }.
Field Type Constraints idstring (uuid) required — serial_numberstring required — earth_codestring | null required — batch_numberstring | null required — colorstring | null required — band_type_idstring | null required — statusstring required — student_idstring | null required — account_idstring | null required — wallet_idstring | null required — assigned_atstring | null required — expires_atstring | null required — event_idstring | null required —
bearer driver_app beneficiary_app pass_app pass_web admin_web device credential
Query parameters Name Type Constraints schoolstring | null optional —
Response Returns { "data": [BandType ] } with meta.next_cursor for the next page.
Field Type Constraints idstring (uuid) required — namestring required —
bearer driver_app beneficiary_app pass_app admin_web access.band_manage device credential
Request body Field Type Constraints serial_numberstring required max length 64 student_idstring | null optional — account_idstring | null optional — wallet_idstring | null optional —
Response Returns { "data": BandWrite }.
Field Type Constraints idstring (uuid) required — serial_numberstring required — earth_codestring | null required — batch_numberstring | null required — colorstring | null required — band_type_idstring | null required — statusstring required — student_idstring | null required — account_idstring | null required — wallet_idstring | null required — assigned_atstring | null required — expires_atstring | null required — event_idstring | null required —
bearer driver_app beneficiary_app admin_web pass_web access.band_manage device credential
A factory shipment, in one call.
Answers per serial rather than with a count, because the operator is holding the spreadsheet the list came from and needs to know WHICH rows to look at. Re-sending the same list is safe: every serial comes back duplicate, nothing 409s, and the shipment is not half-registered.
Request body Field Type Constraints serial_numbersstring | null[] required min items 1 · max items 2000 batch_numberstring | null optional max length 64 colorstring | null optional max length 32 band_type_idstring | null optional — school_idstring (uuid) optional — event_idstring | null optional — expires_atstring | null optional —
Response Returns { "data": BandBulkIntake }.
Field Type Constraints registeredinteger required — duplicateinteger required — invalidinteger required — resultsobject[] required —
bearer driver_app beneficiary_app pass_app pass_web admin_web device credential
Path parameters Name Type Notes serialstring
Response Returns { "data": BandDetail }.
Field Type Constraints idstring (uuid) required — serial_numberstring required — earth_codestring | null required — batch_numberstring | null required — colorstring | null required — band_type_idstring | null required — statusstring required — student_idstring | null required — account_idstring | null required — wallet_idstring | null required — assigned_atstring | null required — expires_atstring | null required — tagsobject[] required — wearerany required — walletany required —
POST
/v3/band/{serial}/replace
#
bearer driver_app beneficiary_app pass_app admin_web access.band_manage device credential
a dead wristband swapped for a live one (Cloud9 3).
The wearer and their wallet come off the band being replaced, never off the request: naming them would let a caller point the balance at somebody else. One transaction, so a failure leaves the guest with the working band they already had rather than two dead ones and a balance they cannot spend.
Path parameters Name Type Notes serialstring
Request body Field Type Constraints serial_numberstring required max length 64 reasonstring required lost damaged
Response Returns { "data": BandWrite }.
Field Type Constraints idstring (uuid) required — serial_numberstring required — earth_codestring | null required — batch_numberstring | null required — colorstring | null required — band_type_idstring | null required — statusstring required — student_idstring | null required — account_idstring | null required — wallet_idstring | null required — assigned_atstring | null required — expires_atstring | null required — event_idstring | null required —
POST
/v3/band/{serial}/status
#
bearer driver_app beneficiary_app pass_app admin_web access.band_manage device credential
Path parameters Name Type Notes serialstring
Request body Field Type Constraints statusstring required in_stock assigned active suspended lost damaged retired
Response Returns { "data": BandWrite }.
Field Type Constraints idstring (uuid) required — serial_numberstring required — earth_codestring | null required — batch_numberstring | null required — colorstring | null required — band_type_idstring | null required — statusstring required — student_idstring | null required — account_idstring | null required — wallet_idstring | null required — assigned_atstring | null required — expires_atstring | null required — event_idstring | null required —
POST
/v3/device/heartbeat
#
bearer driver_app beneficiary_app pass_app device credential
Request body Field Type Constraints serial_numberstring required max length 64 battery_pctinteger | null optional min 0 · max 100 signal_strengthinteger | null optional min 0 · max 10 firmwarestring | null optional max length 64 data_used_bytesinteger | null optional min 0 sim_presentboolean | null optional — recorded_atstring (date-time) required —
Response Returns { "data": HeartbeatAck }.
Field Type Constraints okboolean required — presencestring required online low_batterynext_heartbeat_secondsinteger required —
POST
/v3/portal/band-type
#
bearer admin_web access.band_manage device credential
Request body Field Type Constraints namestring required max length 80 school_idstring (uuid) optional —
Response Returns { "data": BandType }.
Field Type Constraints idstring (uuid) required — namestring required —
DELETE
/v3/portal/band-type/{id}
#
bearer admin_web access.band_manage device credential
Path parameters Response Returns { "data": Deleted }.
Field Type Constraints deletedboolean required —
PATCH
/v3/portal/band-type/{id}
#
bearer admin_web access.band_manage device credential
Path parameters Request body Field Type Constraints namestring required max length 80
Response Returns { "data": BandType }.
Field Type Constraints idstring (uuid) required — namestring required —
PATCH
/v3/portal/band/{id}
#
bearer admin_web access.band_manage device credential
Path parameters Request body Field Type Constraints band_type_idstring | null optional — school_idstring (uuid) optional — statusstring optional in_stock assigned active suspended lost damaged retired
Response Returns { "data": BandEdited }.
Field Type Constraints idstring (uuid) required — serial_numberstring required — earth_codestring | null required — batch_numberstring | null required — colorstring | null required — band_type_idstring | null required — statusstring required — student_idstring | null required — account_idstring | null required — wallet_idstring | null required — assigned_atstring | null required — expires_atstring | null required — school_idstring | null required — school_namestring | null required —
POST
/v3/portal/band/{serial}/school
#
bearer admin_web access.band_manage device credential
Path parameters Name Type Notes serialstring
Request body Field Type Constraints school_idstring (uuid) required —
Response Returns { "data": BandAssignedToSchool }.
Field Type Constraints idstring (uuid) required — serial_numberstring required — earth_codestring | null required — batch_numberstring | null required — colorstring | null required — band_type_idstring | null required — statusstring required — student_idstring | null required — account_idstring | null required — wallet_idstring | null required — assigned_atstring | null required — expires_atstring | null required — tagsobject[] required — wearerany required — walletany required — school_idstring (uuid) required — school_namestring required —
bearer admin_web device credential
Query parameters Name Type Constraints statusstring | null optional provisioned approved maintenance retired blockedkindstring | null optional scanner onboard_unit pos gatezone_idstring | null optional — qstring | null optional max length 120 schoolstring | null optional — batch_numberstring | null optional max length 64 cursorstring | null optional max length 200 per_pageinteger | null optional min 1 · max 500
Response Returns { "data": [WebDevice ] } with meta.next_cursor for the next page.
Field Type Constraints idstring (uuid) required — namestring | null required — serial_numberstring required — batch_numberstring | null required — kindstring required — statusstring required — zoneany required — schoolany required — imeistring | null required — sim_msisdnstring | null required — sim_presentboolean | null required — battery_pctinteger | null required — signal_strengthinteger | null required — firmwarestring | null required — data_used_bytesinteger | null required — presencestring required — last_seen_atstring | null required — row_versioninteger required —
bearer admin_web access.device_manage device credential
Request body Field Type Constraints namestring required max length 120 serial_numberstring required max length 64 kindstring | null optional scanner onboard_unit pos gate mobile browserzone_idstring | null optional — school_idstring | null optional — imeistring | null optional max length 32 sim_msisdnstring | null optional max length 20 firmwarestring | null optional max length 64 batch_numberstring | null optional max length 80
Response Returns { "data": WebDevice }.
Field Type Constraints idstring (uuid) required — namestring | null required — serial_numberstring required — batch_numberstring | null required — kindstring required — statusstring required — zoneany required — schoolany required — imeistring | null required — sim_msisdnstring | null required — sim_presentboolean | null required — battery_pctinteger | null required — signal_strengthinteger | null required — firmwarestring | null required — data_used_bytesinteger | null required — presencestring required — last_seen_atstring | null required — row_versioninteger required —
GET
/v3/portal/device/batch-numbers
#
bearer admin_web device credential
Response An array of string.
PATCH
/v3/portal/device/bulk/school
#
bearer admin_web access.device_manage device credential
Request body Field Type Constraints device_idsstring (uuid) [] required min items 1 · max items 500 school_idstring (uuid) required —
Response Returns { "data": [WebDevice ] } with meta.next_cursor for the next page.
Field Type Constraints idstring (uuid) required — namestring | null required — serial_numberstring required — batch_numberstring | null required — kindstring required — statusstring required — zoneany required — schoolany required — imeistring | null required — sim_msisdnstring | null required — sim_presentboolean | null required — battery_pctinteger | null required — signal_strengthinteger | null required — firmwarestring | null required — data_used_bytesinteger | null required — presencestring required — last_seen_atstring | null required — row_versioninteger required —
GET
/v3/portal/device/stats
#
bearer admin_web device credential
Response Returns { "data": WebDeviceStats }.
Field Type Constraints total_wearablesinteger required — wearables_assignedinteger required — total_scannersinteger required — scanners_assignedinteger required —
PATCH
/v3/portal/device/{id}
#
bearer admin_web access.device_manage device credential
Path parameters Request body Field Type Constraints update_maskstring[] required min items 1 · max items 7 expected_row_versioninteger required min 1 namestring | null optional max length 120 kindstring | null optional scanner onboard_unit pos gate mobile browserstatusstring | null optional provisioned approved maintenance retired blockedzone_idstring | null optional — imeistring | null optional max length 32 sim_msisdnstring | null optional max length 20 firmwarestring | null optional max length 64
Response Returns { "data": WebDevice }.
Field Type Constraints idstring (uuid) required — namestring | null required — serial_numberstring required — batch_numberstring | null required — kindstring required — statusstring required — zoneany required — schoolany required — imeistring | null required — sim_msisdnstring | null required — sim_presentboolean | null required — battery_pctinteger | null required — signal_strengthinteger | null required — firmwarestring | null required — data_used_bytesinteger | null required — presencestring required — last_seen_atstring | null required — row_versioninteger required —
POST
/v3/portal/device/{id}/airtime
#
bearer admin_web money.adjust device idempotency credential
Path parameters Request body Field Type Constraints amount_minorinteger required min 1 · max 100000000 currencystring required min length 3 · max length 3
Response Returns { "data": … }; this endpoint's payload is not yet
pinned to a named shape.
GET
/v3/portal/device/{id}/history
#
bearer admin_web device credential
Path parameters Query parameters Name Type Constraints fromstring required — tostring required — cursorstring | null optional max length 200 per_pageinteger | null optional min 1 · max 500
Response Returns { "data": [DeviceHistoryEntry ] }.
Field Type Constraints idstring (uuid) required — kindstring required — changesobject required — actor_user_idstring | null required — atstring (date-time) required —
PATCH
/v3/portal/device/{id}/school
#
bearer admin_web access.device_manage device credential
Path parameters Request body Field Type Constraints school_idstring (uuid) required —
Response Returns { "data": WebDevice }.
Field Type Constraints idstring (uuid) required — namestring | null required — serial_numberstring required — batch_numberstring | null required — kindstring required — statusstring required — zoneany required — schoolany required — imeistring | null required — sim_msisdnstring | null required — sim_presentboolean | null required — battery_pctinteger | null required — signal_strengthinteger | null required — firmwarestring | null required — data_used_bytesinteger | null required — presencestring required — last_seen_atstring | null required — row_versioninteger required —
POST
/v3/portal/pickup/confirm
#
bearer admin_web access.tap_manual device credential
Request body Field Type Constraints codestring required min length 4 · max length 12 student_idstring (uuid) required — zone_idstring | null optional — outcomestring | null optional released declined
Response Returns { "data": Ack }.
Field Type Constraints okboolean required —
POST
/v3/portal/pickup/validate
#
bearer admin_web access.tap_manual device credential
Request body Field Type Constraints codestring required min length 4 · max length 12
Response Returns { "data": PickupValidation }.
Field Type Constraints studentobject required — student. idstring (uuid) required — student. namestring required — student. gradestring | null required — student. photoany required — guardianobject required — guardian. account_idstring (uuid) required — guardian. namestring required — guardian. phonestring | null required — guardian. relationshipstring | null required —
bearer admin_web device credential
Query parameters Name Type Constraints kindstring | null optional school gate bus canteen library office event other +2 more exclude_kindstring | null optional school gate bus canteen library office event other +2 more qstring | null optional max length 120 cursorstring | null optional max length 200 per_pageinteger | null optional min 1 · max 500
Response Returns { "data": [WebZone ] } with meta.next_cursor for the next page.
Field Type Constraints idstring (uuid) required — parent_zone_idstring | null required — namestring required — kindstring required — statusstring required — descriptionstring | null required — metadataobject required — centroidany required — geofence_radius_minteger | null required — occupancyinteger required — assigneesobject[] required — chargesobject[] required — vehicleany required — row_versioninteger required —
bearer admin_web settings.manage device credential
Request body Field Type Constraints namestring required max length 120 kindstring | null optional school gate bus canteen library office cocurricular otherdescriptionstring | null optional max length 300 parent_zone_idstring | null optional — centroid_latnumber | null optional min -90 · max 90 centroid_lngnumber | null optional min -180 · max 180 geofence_radius_minteger | null optional min 10 · max 10000 metadataarray | null optional max items 20
Response Returns { "data": WebZone }.
Field Type Constraints idstring (uuid) required — parent_zone_idstring | null required — namestring required — kindstring required — statusstring required — descriptionstring | null required — metadataobject required — centroidany required — geofence_radius_minteger | null required — occupancyinteger required — assigneesobject[] required — chargesobject[] required — vehicleany required — row_versioninteger required —
PATCH
/v3/portal/zone/{id}
#
bearer admin_web settings.manage device credential
Path parameters Request body Field Type Constraints update_maskstring[] required min items 1 · max items 9 expected_row_versioninteger required min 1 namestring | null optional max length 120 kindstring | null optional school gate bus canteen library office event other +2 more statusstring | null optional active suspended archiveddescriptionstring | null optional max length 300 parent_zone_idstring | null optional — centroid_latnumber | null optional min -90 · max 90 centroid_lngnumber | null optional min -180 · max 180 geofence_radius_minteger | null optional min 10 · max 10000 metadataarray | null optional max items 20
Response Returns { "data": WebZone }.
Field Type Constraints idstring (uuid) required — parent_zone_idstring | null required — namestring required — kindstring required — statusstring required — descriptionstring | null required — metadataobject required — centroidany required — geofence_radius_minteger | null required — occupancyinteger required — assigneesobject[] required — chargesobject[] required — vehicleany required — row_versioninteger required —
PUT
/v3/portal/zone/{id}/access-mode
#
bearer admin_web settings.manage device credential
the explicit open|rostered flip (admin judgment; reach.md §3.4).
Path parameters Request body Field Type Constraints access_modestring required open rostered
Response Returns { "data": AccessModeSet }.
Field Type Constraints zone_idstring (uuid) required — access_modestring required —
GET
/v3/portal/zone/{id}/profile
#
bearer admin_web device credential
The location profile (SP-8, terra-api §11.7): meal periods + the priced menu as ONE document-shaped read over TYPED rows (0090). The projections and writes live ON the models (databases are classes) — this controller only orchestrates.
Path parameters Response Returns { "data": ZoneProfile }.
Field Type Constraints periodsobject[] required — menu_itemsobject[] required —
PUT
/v3/portal/zone/{id}/profile
#
bearer admin_web settings.manage device credential
PUT replaces each PROVIDED collection wholesale — the config card saves the whole form; an omitted collection is untouched.
Path parameters Request body Field Type Constraints periodsobject[] optional max items 12 menu_itemsobject[] optional max items 200
Response Returns { "data": ZoneProfile }.
Field Type Constraints periodsobject[] required — menu_itemsobject[] required —
GET
/v3/portal/zone/{id}/roster
#
bearer admin_web device credential
the zone's members (provenance visible) + rules + mode.
Path parameters Response Returns { "data": WebRoster }.
Field Type Constraints zone_idstring (uuid) required — access_modestring required — membersobject[] required — rulesobject[] required —
POST
/v3/portal/zone/{id}/roster/member
#
bearer admin_web settings.manage device credential
a hand-picked member (via='manual').
Path parameters Request body Field Type Constraints student_idstring (uuid) optional — account_idstring (uuid) optional —
Response Returns { "data": Written }.
Field Type Constraints idstring (uuid) required —
DELETE
/v3/portal/zone/{id}/roster/member/{memberId}
#
bearer admin_web settings.manage device credential
manual members only (rule rows belong to their rule).
Path parameters Name Type Notes idstring memberIdstring
Response Returns { "data": Deleted }.
Field Type Constraints deletedboolean required —
POST
/v3/portal/zone/{id}/roster/rule
#
bearer admin_web settings.manage device credential
label-based auto-enrollment; the projector materializes.
Path parameters Request body Field Type Constraints tag_idsstring (uuid) [] required min items 1 · max items 8
Response Returns { "data": … }; this endpoint's payload is not yet
pinned to a named shape.
DELETE
/v3/portal/zone/{id}/roster/rule/{ruleId}
#
bearer admin_web settings.manage device credential
its members cascade; the projector re-covers survivors.
Path parameters Name Type Notes idstring ruleIdstring
Response Returns { "data": Deleted }.
Field Type Constraints deletedboolean required —
GET
/v3/portal/zone/{id}/service-log
#
bearer admin_web device credential
Path parameters Query parameters Name Type Constraints kindstring | null optional fuel maintenancefromstring | null optional — tostring | null optional — cursorstring | null optional max length 200 per_pageinteger | null optional min 1 · max 500
Response Returns { "data": [ServiceLog ] } with meta.next_cursor for the next page.
Field Type Constraints idstring (uuid) required — kindstring required — occurred_onstring | null required — amount_minorinteger | null required — currencystring | null required — quantity_litersnumber | null required — odometer_kminteger | null required — descriptionstring | null required —
POST
/v3/portal/zone/{id}/service-log
#
bearer admin_web transport.plan device credential
Path parameters Request body Field Type Constraints kindstring required fuel maintenanceoccurred_onstring required — amount_minorinteger | null optional min 0 · max -9223372036854775808 currencystring | null optional min length 3 · max length 3 quantity_litersnumber | null optional min 0 · max 99999 odometer_kminteger | null optional min 0 descriptionstring | null optional max length 500 metadataarray | null optional max items 20
Response Returns { "data": ServiceLog }.
Field Type Constraints idstring (uuid) required — kindstring required — occurred_onstring | null required — amount_minorinteger | null required — currencystring | null required — quantity_litersnumber | null required — odometer_kminteger | null required — descriptionstring | null required —
DELETE
/v3/portal/zone/{id}/service-log/{logId}
#
bearer admin_web transport.plan device credential
Path parameters Name Type Notes idstring logIdstring
Response Returns { "data": Deleted }.
Field Type Constraints deletedboolean required —
PATCH
/v3/portal/zone/{id}/service-log/{logId}
#
bearer admin_web transport.plan device credential
Path parameters Name Type Notes idstring logIdstring
Request body Field Type Constraints update_maskstring[] required min items 1 · max items 8 kindstring | null optional fuel maintenanceoccurred_onstring | null optional — amount_minorinteger | null optional min 0 · max -9223372036854775808 currencystring | null optional min length 3 · max length 3 quantity_litersnumber | null optional min 0 · max 99999 odometer_kminteger | null optional min 0 descriptionstring | null optional max length 500 metadataarray | null optional max items 20
Response Returns { "data": ServiceLog }.
Field Type Constraints idstring (uuid) required — kindstring required — occurred_onstring | null required — amount_minorinteger | null required — currencystring | null required — quantity_litersnumber | null required — odometer_kminteger | null required — descriptionstring | null required —
PUT
/v3/portal/zone/{id}/vehicle
#
bearer admin_web settings.manage device credential
The real fleet record (0115) — capacity/fuel_type/fuel_consumption live on `vehicles`, not zones.metadata. Required the first time (a new bus), partial-edit-friendly after that (WebVehicleService).
Path parameters Request body Field Type Constraints capacityinteger | null optional min 1 · max 999 fuel_typestring | null optional petrol diesel electric hybridfuel_consumption_km_per_lnumber | null optional min 3 · max 12
Response Returns { "data": VehicleFields }.
Field Type Constraints zone_idstring (uuid) required — capacityinteger | null required — fuel_typestring | null required — fuel_consumption_km_per_lnumber | null required —
bearer beneficiary_app parent_app device credential
Query parameters Name Type Constraints studentsstring required max length 8000
Response Returns { "data": [PresenceEntry ] } with meta.next_cursor for the next page.
Field Type Constraints student_idstring required — statestring required present away nonepathobject[] optional — sincestring | null optional — last_zoneobject optional — last_zone. idstring required — last_zone. namestring | null optional — last_seenstring | null optional —
POST
/v3/student/{id}/pickup-code
#
bearer beneficiary_app parent_app admin_web device credential
Path parameters Request body Field Type Constraints account_idstring | null optional —
Response Returns { "data": PickupCodeMinted }.
Field Type Constraints codestring required — expires_atstring (date-time) required —
bearer driver_app beneficiary_app pass_app device credential
Request body Field Type Constraints client_event_idstring (uuid) required — zone_idstring (uuid) required — device_idstring | null optional — band_serialstring | null optional max length 64 student_idstring | null optional — directionstring required check_in check_outmethodstring required nfc manual qroccurred_atstring (date-time) required — pickup_codestring | null optional max length 10
Response Returns { "data": TapVerdict }.
Field Type Constraints resultstring required allowed denied noopreasonstring optional — detailstring optional — holderstring optional — admitsstring[] optional — chargeobject optional — charge. transaction_idstring (uuid) required — charge. amountobject required — charge. balance_afterobject required —
bearer driver_app beneficiary_app pass_app device credential gzip
Offline outbox drain: PER-ITEM results — one poisoned item never sinks the batch (§7.3). The cap is `terra.batch.max_items`, the same number bootstrap advertises to the apps. Items process sequentially (each tap is its own transaction), so a max-size reconnect drain is bounded by a TIME BUDGET instead of item count: past the budget the loop stops and the response carries only the processed prefix — an omitted item has no result, which the app's drain already reads as "keep & retry next cycle". Worst-case latency is capped; no tap is ever dropped.
Items are applied in occurred_at ORDER, not the order the array happened to arrive in (0136). Presence is a fold over a sequence, so applying a check-out before the check-in it follows leaves the holder inside forever — and the array order is whatever the handset's outbox produced after its own retries, which is not a guarantee anybody made. Sorting is one usort and removes the whole class.
The time budget then truncates the LATEST taps rather than an arbitrary suffix, which is the right half to re-drain: the oldest facts land first and the newest come back next cycle.
The REPLY still comes back in the order the caller sent, though. Applying in time order is ours to decide; re-ordering somebody's array under them is not, and a client lining results up by position would silently read the wrong verdict against the wrong tap. Results are collected against each item's original index and sorted back before they go out.
Headers Header Notes Content-Encodingoptional Optional request-body compression; compressed cap 1 MB, decompressed cap 10 MB.
Request body Field Type Constraints tapsarray required min items 1 · max items 500
Response Returns { "data": TapBatch }.
POST
/v3/tap/{event}/undo
#
bearer driver_app beneficiary_app pass_app admin_web access.undo device credential
reverse a mis-tap by its access-event id. Idempotent by construction — a replay returns the same compensating facts.
Path parameters Response Returns { "data": … }; this endpoint's payload is not yet
pinned to a named shape.
GET
/v3/zone/{id}/occupancy
#
bearer driver_app beneficiary_app pass_app pass_web admin_web device credential
Path parameters Response Returns { "data": Occupancy }.
Field Type Constraints zone_idstring (uuid) required — namestring required — containerobject required — container. idstring (uuid) required — container. namestring required — open_sessionsinteger required — as_ofstring required —