MoQT draft-23 Error Codes
MoQT draft-23 assigns 74 code points across 4 registries — Session Termination, REQUEST_ERROR, PUBLISH_DONE and Stream Reset — plus 3 Object Status values, which are a separate family and are never counted with the rest. Of the 74, 70 are assignments and 4 are reserved.
Every row below was read out of draft-ietf-moq-transport-23 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.
What changed since draft-22
Section titled “What changed since draft-22”Added
0x200INVALID_STREAM_HEADER(Session Termination)0x201MALFORMED_OBJECT(Session Termination)0x202INVALID_OBJECT_STATUS(Session Termination)0x203TRUNCATED_OBJECT(Session Termination)0x300MALFORMED_MESSAGE(Session Termination)0x301INVALID_FIELD(Session Termination)0x302INVALID_TRACK_NAMESPACE(Session Termination)0x303UNEXPECTED_MESSAGE(Session Termination)0x304ROLE_VIOLATION(Session Termination)0x305INVALID_PARAMETER(Session Termination)0x306CLOSED_CONTROL_STREAM(Session Termination)0x400DELTA_ENCODING_OVERFLOW(Session Termination)0x401FIELD_LENGTH_EXCEEDED(Session Termination)0xAUNAVAILABLE(REQUEST_ERROR)0x7EXPIRED_AUTH_TOKEN(PUBLISH_DONE)
Renamed
0x6MALFORMED_KEY_VALUE— wasKEY_VALUE_FORMATTING_ERRORin draft-22 (Session Termination)
Removed
0x30PREFIX_OVERLAP(REQUEST_ERROR)0x6UNKNOWN_OBJECT_STATUS(Stream Reset)
draft-23 adds the Error Detail Types registry, listed below and counted on its own.
Session Termination Error Codes
Section titled “Session Termination Error Codes”draft-23 registers 34 code points in §16.12.1, and defines each one in §12.2.
| Code | Name | Description | Defined in |
|---|---|---|---|
0x0 | NO_ERROR | The session is being terminated without an error. | §12.2 |
0x1 | INTERNAL_ERROR | An implementation specific error occurred. | §12.2 |
0x2 | UNAUTHORIZED | The client is not authorized to establish a session. | §12.2 |
0x3 | PROTOCOL_VIOLATION | The remote endpoint performed an action that was disallowed by the specification and no more specific code applies. | §12.2 |
0x4 | INVALID_REQUEST_ID | The endpoint received a Request ID with an incorrect least significant bit for the sender, or a duplicate Request ID. See Section 6.4.2.1. | §12.2 |
0x5 | DUPLICATE_TRACK_ALIAS | The endpoint attempted to use a Track Alias that was already in use. | §12.2 |
0x6 | MALFORMED_KEY_VALUE | A Key-Value-Pair (Figure 4), such as a Setup Option or a Property, has a Value that does not match the definition of its Type. | §12.2 |
0x8 | INVALID_PATH | The PATH parameter was used by a server, on a WebTransport session, or the server does not support the path. | §12.2 |
0x9 | MALFORMED_PATH | The PATH parameter does not conform to the rules in Section 9.1.2. | §12.2 |
0x10 | GOAWAY_TIMEOUT | The session was closed because the peer took too long to close the session in response to a GOAWAY (Section 9.2) message. See session migration (Section 6.6.1). | §12.2 |
0x11 | CONTROL_MESSAGE_TIMEOUT | The session was closed because the peer took too long to respond to a control message. | §12.2 |
0x12 | DATA_STREAM_TIMEOUT | The session was closed because the peer took too long to send data expected on an open Data Stream (see Section 11). This includes fields of a stream header or an object header within a data stream. If an endpoint times out waiting for a new object header on an open subgroup stream, it MAY send a STOP_SENDING on that stream or terminate the subscription. | §12.2 |
0x13 | AUTH_TOKEN_CACHE_OVERFLOW | The Session limit Section 9.1.3 of the size of all registered Authorization tokens has been exceeded. | §12.2 |
0x14 | DUPLICATE_AUTH_TOKEN_ALIAS | Authorization Token attempted to register an Alias that was in use (see Section 8.9). | §12.2 |
0x16 | MALFORMED_AUTH_TOKEN | Invalid Auth Token serialization (see Section 8.9). | §12.2 |
0x17 | UNKNOWN_AUTH_TOKEN_ALIAS | No registered token found for the provided Alias (see Section 8.9). | §12.2 |
0x18 | EXPIRED_AUTH_TOKEN | Authorization token has expired (Section 8.9). | §12.2 |
0x19 | INVALID_AUTHORITY | The specified AUTHORITY does not correspond to this server or cannot be used in this context. | §12.2 |
0x1A | MALFORMED_AUTHORITY | The AUTHORITY value is syntactically invalid. | §12.2 |
0x1B | TOO_MANY_REQUEST_UPDATES | The endpoint received a REQUEST_UPDATE that exceeded the per-stream limit communicated via the MAX_REQUEST_UPDATES Setup Option (Section 9.1.7). | §12.2 |
0x200 | INVALID_STREAM_HEADER | A data stream or datagram has an unknown type or invalid Type Flags. | §12.2 |
0x201 | MALFORMED_OBJECT | The serialization of an Object on a data stream or in a datagram cannot be decoded, for example a flag references a prior Object that does not exist. | §12.2 |
0x202 | INVALID_OBJECT_STATUS | An Object has an invalid Object Status, or has Properties when its status is not Normal. | §12.2 |
0x203 | TRUNCATED_OBJECT | A data stream ended with a FIN in the middle of an Object. | §12.2 |
0x300 | MALFORMED_MESSAGE | A control message cannot be parsed or is missing a required element, for example its length does not match its contents. | §12.2 |
0x301 | INVALID_FIELD | A control message was parsed, but a field has a value that is not allowed. | §12.2 |
0x302 | INVALID_TRACK_NAMESPACE | A Track Namespace does not conform to Section 8.7. | §12.2 |
0x303 | UNEXPECTED_MESSAGE | A control message of an unknown type was received, or a message was received on the wrong stream, in the wrong order, or more times than allowed. | §12.2 |
0x304 | ROLE_VIOLATION | The peer sent a message or field that is not allowed for its role, for example a server receiving a non-empty New Session URI. | §12.2 |
0x305 | INVALID_PARAMETER | A Message Parameter (Section 9.19) is unknown, duplicated, not allowed in the message, or has a value outside its allowed range. | §12.2 |
0x306 | CLOSED_CONTROL_STREAM | The peer closed the control stream (Section 6.3). | §12.2 |
0x400 | DELTA_ENCODING_OVERFLOW | A value decoded from a delta encoding is less than 0 or greater than 2^64 - 1. | §12.2 |
0x401 | FIELD_LENGTH_EXCEEDED | A field or structure is longer than its maximum allowed length. | §12.2 |
0x7f * N + 0x9D | Reserved for greasing | Reserved — the draft assigns no meaning to this range. | §16.12.1 |
34 code points from table-20 of draft-23 (§16.12.1. Session Termination Error Codes).
REQUEST_ERROR Codes
Section titled “REQUEST_ERROR Codes”draft-23 registers 19 code points in §16.12.2, and defines each one in §12.3.
| Code | Name | Description | Defined in |
|---|---|---|---|
0x0 | INTERNAL_ERROR | An implementation specific or generic error occurred. | §12.3 |
0x1 | UNAUTHORIZED | The subscriber is not authorized to perform the requested action on the given track. This might be retryable if the authorization token is not yet valid. | §12.3 |
0x2 | TIMEOUT | The subscription could not be completed before an implementation specific timeout. For example, a relay could not establish an upstream subscription within the timeout. | §12.3 |
0x3 | NOT_SUPPORTED | The endpoint does not support the type of request. | §12.3 |
0x4 | MALFORMED_AUTH_TOKEN | Invalid Auth Token serialization during registration (see Section 8.9). | §12.3 |
0x5 | EXPIRED_AUTH_TOKEN | Authorization token has expired (Section 8.9). | §12.3 |
0x6 | GOING_AWAY | The endpoint has received a GOAWAY and MAY reject new requests. | §12.3 |
0x9 | EXCESSIVE_LOAD | The responder is overloaded and cannot process the request at this time. The sender SHOULD use the Retry Interval to indicate when the request can be retried. | §12.3 |
0xA | UNAVAILABLE | The responder cannot fulfill this request at this time, but might be able to later; for example, a relay lacks stream credit to forward it upstream (see Section 7.4). The sender SHOULD use the Retry Interval to indicate when the request can be retried. | §12.3 |
0x10 | DOES_NOT_EXIST | The track or namespace is not available at the publisher. | §12.3 |
0x11 | INVALID_RANGE | In response to SUBSCRIBE or FETCH, specified Filter or range of Locations cannot be satisfied. | §12.3 |
0x12 | MALFORMED_TRACK | In response to a FETCH, a relay publisher detected the track was malformed (see Section 12.1). | §12.3 |
0x20 | UNINTERESTED | The subscriber is not interested in the track or namespace. | §12.3 |
0x31 | NAMESPACE_TOO_LARGE | In response to SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS, the namespace prefix matches more publishers than the relay is willing to enumerate. | §12.3 |
0x33 | UNSUPPORTED_EXTENSION | The track contains a Mandatory Track Property (see Section 3.7) that the endpoint does not understand. The UNSUPPORTED_PROPERTY Error Detail (Section 9.4.2.2) identifies which property. | §12.3 |
0x34 | REDIRECT | The request cannot be fulfilled by this endpoint, but could succeed at the location specified in the REDIRECT Error Detail (Section 9.4.2.1). The requester SHOULD establish a new session to the provided URI (if present) and retry the request using the Redirect target. A Retry Interval of 0 indicates the original request SHOULD NOT be retried as sent; it does not prevent the requester from following a Redirect to a different URI or Redirect target. This error code can appear in response to SUBSCRIBE, FETCH, TRACK_STATUS, PUBLISH, PUBLISH_NAMESPACE, SUBSCRIBE_NAMESPACE, and SUBSCRIBE_TRACKS. Relays are not required to follow redirects from upstream and MAY forward a REDIRECT response to matching downstream requests. A relay MAY cache a REDIRECT response for up to Retry Interval milliseconds and use it to respond to subsequent matching requests without forwarding them upstream. | §12.3 |
0x35 | CONFLICTING_FILTERS | In response to SUBSCRIBE_TRACKS, the filter parameters conflict among too many subscribers to aggregate the subscription upstream or otherwise efficiently service it. | §12.3 |
0x36 | INVALID_FILTER | A filter parameter is invalid. | §12.3 |
0x7f * N + 0x9D | Reserved for greasing | Reserved — the draft assigns no meaning to this range. | §16.12.2 |
19 code points from table-21 of draft-23 (§16.12.2. REQUEST_ERROR Codes).
PUBLISH_DONE Codes
Section titled “PUBLISH_DONE Codes”draft-23 registers 11 code points in §16.12.3, and defines each one in §12.4.
| Code | Name | Description | Defined in |
|---|---|---|---|
0x0 | INTERNAL_ERROR | An implementation specific or generic error occurred. | §12.4 |
0x1 | UNAUTHORIZED | The subscriber is no longer authorized to subscribe to the given track. | §12.4 |
0x2 | TRACK_ENDED | The track is no longer being published. | §12.4 |
0x4 | GOING_AWAY | The subscriber or publisher issued a GOAWAY message. | §12.4 |
0x5 | TOO_FAR_BEHIND | The publisher's queue of objects to be sent to the given subscriber exceeds its implementation defined limit. | §12.4 |
0x6 | EXPIRED | The publisher reached the timeout specified in SUBSCRIBE_OK. | §12.4 |
0x7 | EXPIRED_AUTH_TOKEN | The authorization token that authorized the subscription has expired (see Section 9.9). | §12.4 |
0x8 | UPDATE_FAILED | REQUEST_UPDATE failed on this subscription (see Section 9.5). | §12.4 |
0x9 | EXCESSIVE_LOAD | The publisher is overloaded and is terminating the subscription. | §12.4 |
0x12 | MALFORMED_TRACK | A relay publisher detected that the track was malformed (see Section 12.1). | §12.4 |
0x7f * N + 0x9D | Reserved for greasing | Reserved — the draft assigns no meaning to this range. | §16.12.3 |
11 code points from table-22 of draft-23 (§16.12.3. PUBLISH_DONE Codes).
Stream Reset Error Codes
Section titled “Stream Reset Error Codes”draft-23 registers 10 code points in §16.12.4, and defines each one in §12.5.
| Code | Name | Description | Defined in |
|---|---|---|---|
0x0 | INTERNAL_ERROR | An implementation specific error. | §12.5 |
0x1 | CANCELLED | The stream was cancelled by either endpoint. For Subscriptions, PUBLISH_DONE (Section 9.9) may have a more detailed status code. | §12.5 |
0x2 | DELIVERY_TIMEOUT | A delivery timeout (Section 5.2) was exceeded for this stream. | §12.5 |
0x3 | SESSION_CLOSED | The session is being closed. | §12.5 |
0x4 | GOING_AWAY | The endpoint is rejecting this request because it has sent or received a GOAWAY. | §12.5 |
0x5 | TOO_FAR_BEHIND | The corresponding subscription has exceeded the publisher's resource limits and is being terminated (see Section 5.2). | §12.5 |
0x7 | EXPIRED_AUTH_TOKEN | The authorization token for the request has expired. | §12.5 |
0x9 | EXCESSIVE_LOAD | The endpoint is overloaded and is resetting this stream. | §12.5 |
0x12 | MALFORMED_TRACK | A relay publisher detected that the track was malformed (see Section 12.1). | §12.5 |
0x7f * N + 0x9D | Reserved for greasing | Reserved — the draft assigns no meaning to this range. | §16.12.4 |
10 code points from table-23 of draft-23 (§16.12.4. Stream Reset Error Codes).
Error Detail Types
Section titled “Error Detail Types”
A REQUEST_ERROR can carry Error Details alongside its code, each identified by
one of these types. Receivers ignore types they don't know. They are a separate family from
the error codes, so their 3 code points are never added to the 74 above.
| Code | Name | Description | Defined in |
|---|---|---|---|
0x01 | REDIRECT | The REDIRECT Error Detail directs the requester to retry a request at a different URI and/or for a different Full Track Name. It accompanies Error Code REDIRECT and MUST be present when the Error Code is REDIRECT. An endpoint that receives a REQUEST_ERROR with Error Code REDIRECT and no REDIRECT Error Detail MUST close the session with MALFORMED_MESSAGE. | §9.4.2.1 |
0x02 | UNSUPPORTED_PROPERTY | The UNSUPPORTED_PROPERTY Error Detail (Type 0x02) contains the Property Type (vi64) of a Mandatory Track Property (Section 3.7) that the sender does not understand. It accompanies Error Code UNSUPPORTED_EXTENSION. A sender that rejects a request with UNSUPPORTED_EXTENSION SHOULD include one UNSUPPORTED_PROPERTY Error Detail for each Mandatory Track Property it does not understand. Multiple instances of this type are allowed. A Relay that propagates UNSUPPORTED_EXTENSION downstream SHOULD include the UNSUPPORTED_PROPERTY Error Details it received. | §9.4.2.2 |
0x7f * N + 0x9D | Reserved for greasing | Reserved — the draft assigns no meaning to this range. | §13 |
3 code points from table-19 of draft-23 (§16.11. Error Detail Types).
Object Status
Section titled “Object Status”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 3 values are never added to the 74 above. In draft-23 it is printed as an IANA registry.
| Code | Name | Description | Payload |
|---|---|---|---|
0x0 | Normal | = Normal object. This status is implicit for any non-zero length object. Zero-length objects explicitly encode the Normal status. | yes |
0x3 | End of Group | = Indicates End of Group. Indicates that no objects with the specified Group ID and the Object ID that is greater than or equal to the one specified exist in the group identified by the Group ID. | no |
0x4 | End of Track | = Indicates End of Track. Indicates that no objects with the Location that is equal to or greater than the one specified exist. | no |
Payload rule: An Object MUST have an empty payload unless its Object Status value is registered as permitting a payload in the Object Status registry (Section 16.9).
Where these numbers come from
Section titled “Where these numbers come from”
The code points, names and registry membership come from
crates/moqtap-codec/tools/registries/draft-23.json, a committed extraction of
draft-ietf-moq-transport-23
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: 203e55504db185384e9c9bcc06ca551ab4b53437cb8b1061f9d1d52983e879b5. The descriptions and section links on this page are
read from spec-sources/draft-23.html in this site's repository, whose hash matches — the two inputs are provably the same document.
Read draft-23 section by section, or go to the draft-23 control message types.
Error codes in other drafts
Section titled “Error codes in other drafts”moqtap covers drafts 07 through 23.
- draft-23 — 74 codes
- draft-22 — 61 codes
- draft-21 — 61 codes
- 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
All MoQT error codes, draft by draft · Control message types