- Legion API
- Video Recordings
- Download recordings via signed URL
Download recordings via signed URL
const url = 'https://api.hopper.west.prod.govcloud.legion.picogrid.com/v3/video/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/recordings/download?end=example&expires=1769000060&org=2489E9AD-2EE2-8E00-8EC9-32D5F69181C0&sig=hkQx2Vv9pTzXcW1sYtR8uAqBdEfGhIjKlMnOpQrStUv&start=example';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.hopper.west.prod.govcloud.legion.picogrid.com/v3/video/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/recordings/download?end=example&expires=1769000060&org=2489E9AD-2EE2-8E00-8EC9-32D5F69181C0&sig=hkQx2Vv9pTzXcW1sYtR8uAqBdEfGhIjKlMnOpQrStUv&start=example'Streams a single MP4 (Content-Disposition: attachment) for the signed time range. Authenticated by the sig query parameter minted by the POST method on this path — no Authorization header — so browser navigations and download managers work directly.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”Example
1769000060Example
hkQx2Vv9pTzXcW1sYtR8uAqBdEfGhIjKlMnOpQrStUvResponses
Section titled “Responses”Concatenated MP4 download (video/mp4)
Reference to nil
object
Examplegenerated
{}Bad Request
object
object
Example
{ "code": 400, "details": [ { "Field": "organization_id", "Issue": "must be a valid UUID format" } ], "message": "Request cannot be processed due to invalid input", "status": "error", "timestamp": "2026-01-15T14:32:45Z", "trace_id": "req_2J9K8L7M6N5P4Q3R"}Unauthorized
object
object
Example
{ "code": 401, "details": [ { "Field": "authorization_header", "Issue": "Bearer token is expired or malformed" } ], "message": "Authentication credentials are missing or invalid", "status": "error", "timestamp": "2026-01-15T14:32:45Z", "trace_id": "req_2J9K8L7M6N5P4Q3R"}Forbidden
object
object
Example
{ "code": 403, "details": [ { "Field": "required_scope", "Issue": "requires 'orion:settings:write' scope, but token only has 'orion:settings:read'" } ], "message": "Access denied: insufficient permissions for this resource", "status": "error", "timestamp": "2026-01-15T14:32:45Z", "trace_id": "req_2J9K8L7M6N5P4Q3R"}Not Found
object
object
Example
{ "code": 404, "details": [ { "Field": "organization_id", "Issue": "organization with ID 'a1b2c3d4-e5f6-7890-abcd-ef1234567890' not found" } ], "message": "The requested resource could not be found", "status": "error", "timestamp": "2026-01-15T14:32:45Z", "trace_id": "req_2J9K8L7M6N5P4Q3R"}Internal Server Error
object
The category of the error
The HTTP status code
Additional details about the error
object
The field that caused the error
The specific issue with the field
A human-readable error message
The status of the response, always ‘error’ for error responses
The timestamp when the error occurred
A unique identifier for tracing the error
Example
{ "category": "server_error", "code": 500, "details": [ { "field": "field_name", "issue": "Field validation issue" } ], "message": "Internal Server Error", "status": "error", "timestamp": "2024-03-15T10:30:00Z", "trace_id": "b7c5e4d3-a2b1-4f0e-8d9c-1a2b3c4d5e6f"}Version 3.14.0 · commit 0771262
