---
title: "Connect a MoQ (Media over QUIC) leg (WebTransport extended-CONNECT, experimental)"
method: POST
path: "/legs/moq"
tags: ["Legs"]
---

# Connect a MoQ (Media over QUIC) leg (WebTransport extended-CONNECT, experimental)

`POST /legs/moq`

**Actual HTTP method: `CONNECT`** (HTTP/3 extended-CONNECT for WebTransport). OpenAPI 3.1 does not define `connect` as a path-item method, so this operation is documented under `post` with an `x-actual-method: CONNECT` extension. Standard HTTP clients (e.g. `curl -X POST`) will receive `405 Method Not Allowed` — use a WebTransport-capable HTTP/3 client.

**Experimental / PoC.** Upgrades an HTTP/3 extended-CONNECT request to a WebTransport session and creates an inbound MoQ leg. Reachable only over HTTP/3 on the MoQ listener (not on the regular HTTP/1.1 chi listener). Requires `MOQ_ENABLED=true` plus `MOQ_TLS_CERT_FILE` and `MOQ_TLS_KEY_FILE`. Speaks IETF draft-11 of moq-transport (via `mengelbart/moqtransport`); browser interop with draft-16 clients (moqtail, moq.dev) is not expected to work. Media is bidirectional within a single MoQ session per leg: the server publishes namespace `mix`/track `audio` (downlink, room mix) and subscribes to namespace `mic`/track `audio` (uplink, leg mic). Audio is Opus framed one frame per MoQ Object (LOC-style) at 48 kHz mono, 20 ms frames. Query parameters: `sample_rate` (only `48000` is accepted — the encoder/decoder are hard-wired to 48 kHz; default 48000); `room_id` to auto-add the leg to a room; `app_id` for event filtering; `webhook_url`/`webhook_secret` for per-leg event routing. X-* and P-* request headers (plus Authorization) are captured into the leg's `headers` map and surfaced on `LegView`. The leg goes straight to `connected` (no ringing/answer flow); no DTMF, no RTT, and event parity is limited to `leg.connected` / `leg.disconnected`.

## Response `200`

WebTransport extended-CONNECT accepted; MoQ session established (no JSON body — the response is the upgraded WebTransport session)

## Other responses

- `400` — Invalid query parameters or config
- `500` — Room create failure
- `503` — MoQ endpoint is not enabled (`MOQ_ENABLED=false`)

---

[API](https://skmtc.net/voiceblender/apis/voiceblender-api.md) · [All operations](https://skmtc.net/voiceblender/apis/voiceblender-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/voiceblender/voiceblender-api/versions/ad30827d3b57/schema)
