---
title: "Get Internal Integration Camera Stream"
method: GET
path: "/internal/integrations/{integration_id}/cameras/{device_id}/stream"
tags: ["integrations"]
---

# Get Internal Integration Camera Stream

`GET /internal/integrations/{integration_id}/cameras/{device_id}/stream`

## Request

- Base URL: `https://api.verdun.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.verdun.ai/internal/integrations/{integration_id}/cameras/{device_id}/stream`
- Auth: API key in header `X-API-Key`

## Path parameters

- `integration_id` string, required
- `device_id` string, required

## Response `200`

Successful Response

- StreamGrantResponse: A short-lived authorization for the internal HLS->RTSP bridge. THE BODY CARRIES A LIVE CREDENTIAL. `url` embeds the provider's streaming token as a query parameter (so does every segment URL inside the playlist it returns), which is the entire purpose of the endpoint. It is served only on the internal shared-API-key route, is never logged, never written to a row, and never recorded in an activity-log entry.
  - `url` string, required: Short-lived HLS playlist URL for this camera. CONTAINS A CREDENTIAL (the provider's streaming token, as a query parameter) — internal callers only. Never log it and never surface it to an operator.
  - `expires_at` string, date-time, required: UTC instant at which the embedded credential expires. The caller must obtain a fresh grant before this; the value is the token's real expiry, so a grant issued from a cached token reports the time remaining on that token rather than a full TTL.
  - `transport` string, nullable: How the bridge pulls. Absent = `url` (ffmpeg opens `url`). `avertx_osp`: `url` is the recorder's AvertX relay base URL and the bridge speaks the recorder's OSP WebSocket using `cookies` and `stream_token`.
  - `cookies` object, nullable: AvertX only. The recorder relay session cookies. A LIVE CREDENTIAL, exactly like `url` for Verkada: never log it.
  - `stream_token` string, nullable: AvertX only. The per-camera OSP stream token (StartStream authToken). A LIVE CREDENTIAL.
  - `stream_name` string, nullable: AvertX only. The recorder stream to request (its logicalName); `low` is the 720x480 H.264 sub-stream.
  - `camera_id` string, nullable: AvertX only. The recorder-side camera UUID (the OSP cameraId); the second half of the device id.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/verdun/apis/verdun-api.md) - [All operations](https://skmtc.dev/verdun/apis/verdun-api/llms.txt) - [OpenAPI document](https://skmtc.dev/verdun/apis/verdun-api/revisions/a19366be50a3?raw)
