Skip to content

MoQT draft-10 Error Codes

MoQT draft-10 assigns 40 code points across 6 registries — Termination, SUBSCRIBE_ERROR, SUBSCRIBE_DONE, FETCH_ERROR, ANNOUNCE_ERROR and SUBSCRIBE_ANNOUNCES_ERROR — plus 5 Object Status values, which are a separate family and are never counted with the rest. Of the 40, 40 are assignments and 0 are reserved.

Every row below was read out of draft-ietf-moq-transport-10 by the same extraction the moqtap Rust codec's conformance tests run against. Nothing here is transcribed by hand. The provenance section gives the hash of the document it came from.

No error, status or termination code changed between draft-09 and draft-10. The registries are identical.

The application MAY use any error message and SHOULD use a relevant code, as defined below:

Code Reason Normalized name Defined in
0x0 No Error NO_ERROR §3.4
0x1 Internal Error INTERNAL_ERROR §3.4
0x2 Unauthorized UNAUTHORIZED §3.4
0x3 Protocol Violation PROTOCOL_VIOLATION §3.4
0x4 Duplicate Track Alias DUPLICATE_TRACK_ALIAS §3.4
0x5 Parameter Length Mismatch PARAMETER_LENGTH_MISMATCH §3.4
0x6 Too Many Subscribes TOO_MANY_SUBSCRIBES §3.4
0x10 GOAWAY Timeout GOAWAY_TIMEOUT §3.4
0x11 Control Message Timeout CONTROL_MESSAGE_TIMEOUT §3.4
0x12 Data Stream Timeout DATA_STREAM_TIMEOUT §3.4

10 code points from table-1 of draft-10 (§3.4. Termination).

The application SHOULD use a relevant error code in SUBSCRIBE_ERROR, as defined below:

Code Reason Normalized name Defined in
0x0 Internal Error INTERNAL_ERROR §8.8
0x1 Unauthorized UNAUTHORIZED §8.8
0x2 Timeout TIMEOUT §8.8
0x3 Not Supported NOT_SUPPORTED §8.8
0x4 Track Does Not Exist TRACK_DOES_NOT_EXIST §8.8
0x5 Invalid Range INVALID_RANGE §8.8
0x6 Retry Track Alias RETRY_TRACK_ALIAS §8.8

7 code points from table-3 of draft-10 (§8.8. SUBSCRIBE_ERROR).

The application SHOULD use a relevant status code in SUBSCRIBE_DONE, as defined below:

Code Reason Normalized name Defined in
0x0 Internal Error INTERNAL_ERROR §8.11
0x1 Unauthorized UNAUTHORIZED §8.11
0x2 Track Ended TRACK_ENDED §8.11
0x3 Subscription Ended SUBSCRIPTION_ENDED §8.11
0x4 Going Away GOING_AWAY §8.11
0x5 Expired EXPIRED §8.11
0x6 Too Far Behind TOO_FAR_BEHIND §8.11

7 code points from table-4 of draft-10 (§8.11. SUBSCRIBE_DONE).

The application SHOULD use a relevant error code in FETCH_ERROR, as defined below:

Code Reason Normalized name Defined in
0x0 Internal Error INTERNAL_ERROR §8.14
0x1 Unauthorized UNAUTHORIZED §8.14
0x2 Timeout TIMEOUT §8.14
0x3 Not Supported NOT_SUPPORTED §8.14
0x4 Track Does Not Exist TRACK_DOES_NOT_EXIST §8.14
0x5 Invalid Range INVALID_RANGE §8.14

6 code points from table-5 of draft-10 (§8.14. FETCH_ERROR).

The application SHOULD use a relevant error code in ANNOUNCE_ERROR, as defined below:

Code Reason Normalized name Defined in
0x0 Internal Error INTERNAL_ERROR §8.20
0x1 Unauthorized UNAUTHORIZED §8.20
0x2 Timeout TIMEOUT §8.20
0x3 Not Supported NOT_SUPPORTED §8.20
0x4 Uninterested UNINTERESTED §8.20

5 code points from table-6 of draft-10 (§8.20. ANNOUNCE_ERROR).

The application SHOULD use a relevant error code in SUBSCRIBE_ANNOUNCES_ERROR, as defined below:

Code Reason Normalized name Defined in
0x0 Internal Error INTERNAL_ERROR §8.25
0x1 Unauthorized UNAUTHORIZED §8.25
0x2 Timeout TIMEOUT §8.25
0x3 Not Supported NOT_SUPPORTED §8.25
0x4 Namespace Prefix Unknown NAMESPACE_PREFIX_UNKNOWN §8.25

5 code points from table-7 of draft-10 (§8.25. SUBSCRIBE_ANNOUNCES_ERROR).

Object Status is a second family of code points and is counted on its own. It is the status a single Object carries, not the outcome of a request or a session, so its 5 values are never added to the 40 above. In draft-10 it has no IANA registry — the same code points are assigned as prose in the section that defines the field.

Code Name Description
0x0 NORMAL
0x1 OBJECT_DOES_NOT_EXIST
0x3 END_OF_GROUP
0x4 END_OF_TRACK_AND_GROUP
0x5 END_OF_TRACK

Payload rule: Any object with a status code other than zero MUST have an empty payload.

The code points, names and registry membership come from crates/moqtap-codec/tools/registries/draft-10.json, a committed extraction of draft-ietf-moq-transport-10 produced by crates/moqtap-codec/tools/extract-registries.py. The moqtap Rust codec's conformance tests read that same file and compare it against the crate's enums in both directions, so a code point this page shows and the codec refuses is a test failure, not a documentation drift.

That extraction records source_sha256, the SHA-256 of the rendered draft as bytes on disk: 9362ac6d25a9fcbeda57e28234114c8a75cc9515b4187d9cdd3745b0507dd8c3. The descriptions and section links on this page are read from spec-sources/draft-10.html in this site's repository, whose hash matches — the two inputs are provably the same document.

Read draft-10 section by section, or go to the draft-10 control message types.

moqtap covers drafts 07 through 20.

All MoQT error codes, draft by draft · Control message types