Create and manage WebRTC streaming sessions via Cloudflare Calls with WHIP (ingest) and WHEP (playback) support for ultra-low latency.
| Method | Path | Summary |
|---|---|---|
POST | /webrtc/sessions | Create WebRTC session |
GET | /webrtc/sessions | List WebRTC sessions |
{% api-endpoint method=“POST” path=“/webrtc/sessions” /%}
Create a WebRTC session using Cloudflare Calls
Operation ID: createWebrtcSession
{% callout type=“info” title=“Cloudflare Calls” %} WebRTC sessions use Cloudflare Calls API for signaling. Supports both WHIP (publish) and WHEP (playback) modes. {% /callout %}
Content-Type: application/json
| Required
| Field | Type | Required | Description |
|---|---|---|---|
stream_id | string | Yes | Stream to connect to |
type | string | No | Default: "publish". Values: publish, playback |
sdp_offer | string | No | SDP offer for WebRTC negotiation |
WebRTC session created
| Field | Type | Required | Description |
|---|---|---|---|
sessionId | string | Yes | - |
streamId | string | Yes | - |
type | string | Yes | Values: publish, playback |
sdpAnswer | string | No | SDP answer for WebRTC negotiation |
iceServers | object[] | No | TURN/STUN server configuration |
status | string | Yes | Values: connecting, connected, closed |
createdAt | string (date-time) | Yes | - |
Missing stream_id
Stream not found
{% tabs %} {% tab label=“cURL” %}
curl -X POST 'https://api.wave.online/api/v1/webrtc/sessions' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"stream_id": "str_abc123",
"type": "publish"
}'
{% /tab %} {% tab label=“TypeScript” %}
import { WaveClient } from "@wave/sdk";
const client = new WaveClient({ apiKey: "your-api-key" });
const session = await client.webrtc.createSession({
streamId: "str_abc123",
type: "publish",
});
console.log(`Session: ${session.sessionId}, Status: ${session.status}`);
{% /tab %} {% tab label=“Python” %}
from wave_sdk import WaveClient
client = WaveClient(api_key="your-api-key")
session = client.webrtc.create_session(
stream_id="str_abc123",
type="publish"
)
print(f"Session: {session.session_id}, Status: {session.status}")
{% /tab %} {% /tabs %}
{% api-endpoint method=“GET” path=“/webrtc/sessions” /%}
List active WebRTC sessions
Operation ID: listWebrtcSessions
| Name | Type | Required | Description |
|---|---|---|---|
stream_id | string | No | Filter by stream ID |
type | string | No | Values: publish, playback |
status | string | No | Values: connecting, connected, closed |
List of WebRTC sessions
| Field | Type | Required | Description |
|---|---|---|---|
sessions | object[] | Yes | - |
{% tabs %} {% tab label=“cURL” %}
curl -X GET 'https://api.wave.online/api/v1/webrtc/sessions?stream_id=str_abc123&status=connected' \
-H 'Authorization: Bearer YOUR_API_KEY'
{% /tab %} {% tab label=“TypeScript” %}
import { WaveClient } from "@wave/sdk";
const client = new WaveClient({ apiKey: "your-api-key" });
const sessions = await client.webrtc.listSessions({
streamId: "str_abc123",
status: "connected",
});
console.log(sessions);
{% /tab %} {% /tabs %}