Open a WebRTC signaling session for a video feed
GET/projects/{projectId}/entities/{entityId}/videoFeeds/{videoFeedId}/signaling
Base URL: https://api.tinkermode.com
Upgrades the connection to a WebSocket and opens a WebRTC signaling session for the video feed. The server first sends an offer bundle containing the SDP offer and ICE servers, then relays ICE candidates bidirectionally between the browser and the camera.
Message flow:
- Server → Client:
{ "type": "offer", "sdpOffer": ..., "iceServers": [...] } - Server → Client:
{ "type": "iceCandidate", "candidate": ... }(trickled, ongoing) - Client → Server:
{ "type": "answer", "sdpAnswer": ... } - Client → Server:
{ "type": "iceCandidate", "candidate": ... }(trickled, ongoing)
In error cases:
- 503
SIGNALING_SERVER_CONNECTION_FAILED- Failed to establish a signaling connection to the camera.
Authentication
This endpoint does not require authentication.
Path parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
projectId | integer | Yes | The unique ID for a specified project. | |
entityId | string | Yes | Entity ID (unique within project) | |
videoFeedId | string | Yes | The unique ID for a specified video feed. |
Query parameters
| Name | Type | Required | Constraints | Description |
|---|---|---|---|---|
authToken | string | Yes | Authentication token. |
Responses
200 The requested signaling is returned in the response body.
401 Authorization is required to access this resource.
Content type: application/json
| Property | Type | Required | Constraints | Description |
|---|---|---|---|---|
data | object | No | read-only (server-generated) | Any relevant data related to error. |
reason | string | Yes | read-only (server-generated) | Reason of error. |
403 Request failed because of denied permission.
Content type: application/json
| Property | Type | Required | Constraints | Description |
|---|---|---|---|---|
data | object | No | read-only (server-generated) | Any relevant data related to error. |
reason | string | Yes | read-only (server-generated) | Reason of error. |
404 The requested signaling does not exist or is not accessible.
Content type: application/json
| Property | Type | Required | Constraints | Description |
|---|---|---|---|---|
data | object | No | read-only (server-generated) | Any relevant data related to error. |
reason | string | Yes | read-only (server-generated) | Reason of error. |
429 Request failed because of rate limit.
Content type: application/json
| Property | Type | Required | Constraints | Description |
|---|---|---|---|---|
data | object | No | read-only (server-generated) | Any relevant data related to error. |
reason | string | Yes | read-only (server-generated) | Reason of error. |
500 An unexpected error has occurred.
Content type: application/json
| Property | Type | Required | Constraints | Description |
|---|---|---|---|---|
data | object | No | read-only (server-generated) | Any relevant data related to error. |
reason | string | Yes | read-only (server-generated) | Reason of error. |
503 The service is temporarily unavailable.
Content type: application/json
| Property | Type | Required | Constraints | Description |
|---|---|---|---|---|
data | object | No | read-only (server-generated) | Any relevant data related to error. |
reason | string | Yes | read-only (server-generated) | Reason of error. |