MoQT Error Codes
MoQT reports failure in several places, and each has its own numbering. A session ends with a
termination code. A request fails with a code in the message that rejects it. A subscription
finishes with a status. A data stream is reset with a reason. These are separate registries with
overlapping numbers — 0x2 means one thing in a session close and another in a request
rejection — so a code without its registry is ambiguous.
moqtap tracks all of them across drafts 07 through 20. The current draft, draft-20, assigns 61 code points across 4 registries: Session Termination, REQUEST_ERROR, PUBLISH_DONE and Stream Reset.
The registries, and when each existed
Section titled “The registries, and when each existed”
The registry set is not stable across the draft range. Drafts 07–14
gave each request message its own error registry; draft-15 merged them into a single REQUEST_ERROR registry. A blank cell means the draft has no such registry at all,
which is a different statement from a registry with no entries.
| Registry | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Session Termination Error Codes | 21 | 22 | 21 | 22 | 21 | 21 | 21 | 19 | 19 | 16 | 10 | 10 | 10 | 8 |
| SUBSCRIBE_ERROR Codes | · | · | · | · | · | · | 8 | 8 | 8 | 10 | 7 | 7 | 7 | 6 |
| SUBSCRIBE_DONE | · | · | · | · | · | · | · | 8 | 8 | 7 | 7 | 7 | 7 | 7 |
| ANNOUNCE_ERROR Codes | · | · | · | · | · | · | 7 | 7 | 7 | 8 | 5 | 5 | 5 | · |
| FETCH_ERROR Codes | · | · | · | · | · | · | 12 | 12 | 12 | 11 | 6 | 6 | 6 | · |
| SUBSCRIBE_ANNOUNCES_ERROR | · | · | · | · | · | · | · | · | 8 | 9 | 5 | 5 | 5 | · |
| Stream Reset Error Codes | 11 | 11 | 11 | 9 | 6 | 4 | 4 | 4 | 4 | 4 | · | · | · | · |
| PUBLISH_ERROR Codes | · | · | · | · | · | · | 5 | 5 | 5 | · | · | · | · | · |
| SUBSCRIBE_NAMESPACE_ERROR Codes | · | · | · | · | · | · | 8 | 8 | · | · | · | · | · | · |
| PUBLISH_DONE Codes | 10 | 11 | 11 | 11 | 9 | 9 | 8 | · | · | · | · | · | · | · |
| REQUEST_ERROR Codes | 19 | 20 | 19 | 17 | 13 | 13 | · | · | · | · | · | · | · | · |
Column headings are draft numbers, newest on the left. Each cell is the number of code points that draft's registry assigns, and links to it.
Codes per draft
Section titled “Codes per draft”| Draft | Registries | Code points | Described | Object Status |
|---|---|---|---|---|
| draft-20 | 4 | 61 | 57 | 3 |
| draft-19 | 4 | 64 | 60 | 3 |
| draft-18 | 4 | 62 | 58 | 3 |
| draft-17 | 4 | 59 | 55 | 3 |
| draft-16 | 4 | 49 | 49 | 3 |
| draft-15 | 4 | 47 | 47 | 4 |
| draft-14 | 8 | 73 | 73 | 4 |
| draft-13 | 8 | 71 | 71 | 4 |
| draft-12 | 8 | 71 | 71 | 4 |
| draft-11 | 7 | 65 | 65 | 4 |
| draft-10 | 6 | 40 | 40 | 5 |
| draft-09 | 6 | 40 | 40 | 5 |
| draft-08 | 6 | 40 | 40 | 5 |
| draft-07 | 3 | 21 | 21 | 5 |
Object Status is a second family of code points, counted on its own and never added to the code point total. It is the status a single Object carries, not the outcome of a request.
What changed, draft by draft
Section titled “What changed, draft by draft”Newest first. Each entry is the difference between that draft's registries and the one before it, computed by diffing the two extractions rather than read from a change log.
draft-19 → draft-20
Section titled “draft-19 → draft-20”- 3 removed: VERSION_NEGOTIATION_FAILED (0x15) in Session Termination, INVALID_JOINING_REQUEST_ID (0x32) in REQUEST_ERROR and SUBSCRIPTION_ENDED (0x3) in PUBLISH_DONE.
draft-18 → draft-19
Section titled “draft-18 → draft-19”- 3 code points added: TOO_MANY_REQUEST_UPDATES (0x1B) in Session Termination, CONFLICTING_FILTERS (0x35) in REQUEST_ERROR and INVALID_FILTER (0x36) in REQUEST_ERROR.
- 1 removed: DUPLICATE_SUBSCRIPTION (0x19) in REQUEST_ERROR.
draft-17 → draft-18
Section titled “draft-17 → draft-18”- 3 code points added: UNSUPPORTED_EXTENSION (0x33) in REQUEST_ERROR, REDIRECT (0x34) in REQUEST_ERROR and EXPIRED_AUTH_TOKEN (0x7) in Stream Reset.
- 1 renumbered: UNKNOWN_OBJECT_STATUS 0x4 → 0x6 in Stream Reset.
- 3 renamed: 0x5 EXPIRED → TOO_FAR_BEHIND in PUBLISH_DONE, 0x6 TOO_FAR_BEHIND → EXPIRED in PUBLISH_DONE and 0x4 UNKNOWN_OBJECT_STATUS → GOING_AWAY in Stream Reset.
- 1 removed: INVALID_REQUIRED_REQUEST_ID (0x7) in Session Termination.
draft-16 → draft-17
Section titled “draft-16 → draft-17”- 10 code points added.
- 1 renamed: 0x7 TOO_MANY_REQUESTS → INVALID_REQUIRED_REQUEST_ID in Session Termination.
draft-15 → draft-16
Section titled “draft-15 → draft-16”- 3 code points added: DUPLICATE_SUBSCRIPTION (0x19) in REQUEST_ERROR, UNKNOWN_OBJECT_STATUS (0x4) in Data Stream Reset and MALFORMED_TRACK (0x12) in Data Stream Reset.
- 1 renumbered: MALFORMED_TRACK 0x7 → 0x12 in PUBLISH_DONE.
- 1 removed: UNKNOWN_STATUS_IN_RANGE (0x33) in REQUEST_ERROR.
draft-14 → draft-15
Section titled “draft-14 → draft-15”- New registry: REQUEST_ERROR Codes.
- Dropped registries: SUBSCRIBE_ERROR Codes, PUBLISH_ERROR Codes, FETCH_ERROR Codes, ANNOUNCE_ERROR Codes and SUBSCRIBE_NAMESPACE_ERROR Codes.
- 14 code points added.
- 40 removed.
draft-13 → draft-14
Section titled “draft-13 → draft-14”- New registry: PUBLISH_DONE Codes.
- Dropped registry: SUBSCRIBE_DONE.
- 10 code points added.
- 8 removed.
draft-12 → draft-13
Section titled “draft-12 → draft-13”- New registry: SUBSCRIBE_NAMESPACE_ERROR.
- Dropped registry: SUBSCRIBE_ANNOUNCES_ERROR.
- 8 code points added.
- 8 removed.
draft-11 → draft-12
Section titled “draft-11 → draft-12”- New registry: PUBLISH_ERROR.
- 11 code points added.
- 1 renamed: 0x7 INVALID_JOINING_SUBSCRIBE_ID → INVALID_JOINING_REQUEST_ID in FETCH_ERROR.
- 5 removed: RETRY_TRACK_ALIAS (0x6) in SUBSCRIBE_ERROR, UNKNOWN_AUTH_TOKEN_ALIAS (0x11) in SUBSCRIBE_ERROR, UNKNOWN_AUTH_TOKEN_ALIAS (0x11) in FETCH_ERROR, UNKNOWN_AUTH_TOKEN_ALIAS (0x11) in ANNOUNCE_ERROR and UNKNOWN_AUTH_TOKEN_ALIAS (0x11) in SUBSCRIBE_ANNOUNCES_ERROR.
draft-10 → draft-11
Section titled “draft-10 → draft-11”- New registry: Closing Subgroup Streams.
- 25 code points added.
- 3 renamed: 0x4 DUPLICATE_TRACK_ALIAS → INVALID_REQUEST_ID in Termination, 0x5 PARAMETER_LENGTH_MISMATCH → DUPLICATE_TRACK_ALIAS in Termination and 0x6 TOO_MANY_SUBSCRIBES → KEY_VALUE_FORMATTING_ERROR in Termination.
draft-09 → draft-10
Section titled “draft-09 → draft-10”No change. The registries are identical.
draft-08 → draft-09
Section titled “draft-08 → draft-09”No change. The registries are identical.
draft-07 → draft-08
Section titled “draft-07 → draft-08”- New registries: ANNOUNCE_ERROR, FETCH_ERROR and SUBSCRIBE_ANNOUNCES_ERROR.
- 18 code points added.
- 1 renumbered: RETRY_TRACK_ALIAS 0x2 → 0x6 in SUBSCRIBE_ERROR.
- 12 renamed.
Where these numbers come from
Section titled “Where these numbers come from”
Every code point on these pages is extracted from the published draft, not transcribed. The
extraction lives at crates/moqtap-codec/tools/registries/draft-NN.json in the moqtap codec repository,
is committed alongside the crate, and is what the crate's conformance tests compare against its
own enums — in both directions, so a code the draft assigns and the codec refuses is as much a
failure as the reverse.
Each extraction records source_sha256, the SHA-256 of the rendered draft as bytes on
disk. The per-draft pages print that hash and confirm it against the frozen copy of the same
document this site serves at /spec/. All 14 drafts currently agree.
Every draft
Section titled “Every draft”- draft-20 — 61 codes
- draft-19 — 64 codes
- draft-18 — 62 codes
- draft-17 — 59 codes
- draft-16 — 49 codes
- draft-15 — 47 codes
- draft-14 — 73 codes
- draft-13 — 71 codes
- draft-12 — 71 codes
- draft-11 — 65 codes
- draft-10 — 40 codes
- draft-09 — 40 codes
- draft-08 — 40 codes
- draft-07 — 21 codes
Control message types by draft · The MoQT specification, section by section · How moqtap handles draft versions