Data Models
All IDs in this API are strings in UUID v4 format.
Timestamps are informational only and not guaranteed to be accurate.
All responses are valid JSON.
v1 vs v2 Field Naming: Version 1 responses include a legacy
idfield that duplicates the primary identifier (e.g., bothidandsession_idwill be present with the same value). Version 2 removes this redundantidfield in favor of explicit names likesession_id,lane_id, andbay_id.
SessionView
{
"session_id": "string (UUID)",
"lane_id": "string (UUID)",
"group_id": "string (UUID)",
"duration": "integer (minutes)",
"began_at": "string (ISO 8601 timestamp)",
"created_at": "string (ISO 8601 timestamp)",
"minutes_remaining": "number (decimal minutes)",
"enable_purchasing": "boolean"
}
began_atandminutes_remaining: Only populated after the session has started. These fields will be absent or null for sessions that have not yet begun.- All timestamps are in UTC timezone.
- v1 only: Includes additional
idfield (same value assession_id)
BayView
{
"bay_id": "string (UUID)",
"name": "string"
}
- v1 only: Includes additional
idfield (same value asbay_id)
GroupView
{
"id": "string (UUID)",
"name": "string"
}
Groups control which shooting programs and training routines are available to a session. Range staff configure groups in the SRA Master screen.
Which group should I use?
- Most ranges have a single "default" or "public" group that covers standard lane usage
- Call
GET /groupsto see what's available—if there's only one, use that - If multiple groups exist, coordinate with range staff to determine which group applies to POS-created sessions
- Once identified, you can hardcode the group ID or let staff select from a dropdown
Tip: Group IDs rarely change, but may be reset if the range reconfigures their system. Cache on startup and refresh daily.
LaneView
{
"lane_id": "string (UUID)",
"bay_id": "string (UUID)",
"readable_name": "string",
"is_accessible": "boolean",
"is_usable": "boolean"
}
readable_name: Display name for the laneis_accessible: Whether the lane is ADA/wheelchair-accessibleis_usable: Iffalse, the lane has errors that range staff must address via the SRA Control Screen- v1 only: Includes additional
idfield (same value aslane_id)
Error Response
{
"message": "Error description",
"trace_id": "string (UUID)"
}
HTTP Status Codes
| Code | Meaning |
|---|---|
200 | Success |
201 | Created (resource successfully created) |
202 | Accepted (async operations) |
204 | No Content (successful operation with no response body) |
400 | Bad Request (validation errors) |
401 | Unauthorized (missing or invalid authentication) |
404 | Not Found (resource not found) |
500 | Internal Server Error |
503 | Service Unavailable (range system temporarily unreachable) |
Note: For 5xx errors, please use a reasonable exponential backoff retry strategy. A
503indicates the range system is temporarily unavailable and should recover shortly.