Skip to content

MoQT draft-20 Error Codes

MoQT draft-20 assigns 61 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 61, 57 are assignments and 4 are reserved.

Every row below was read out of draft-ietf-moq-transport-20 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.

Removed

  • 0x15 VERSION_NEGOTIATION_FAILED (Session Termination)
  • 0x32 INVALID_JOINING_REQUEST_ID (REQUEST_ERROR)
  • 0x3 SUBSCRIPTION_ENDED (PUBLISH_DONE)

draft-20 registers 21 code points in §15.11.1, and defines each one in §3.5.

Code Name Description Defined in
0x0 NO_ERROR The session is being terminated without an error. §3.5
0x1 INTERNAL_ERROR An implementation specific error occurred. §3.5
0x2 UNAUTHORIZED The client is not authorized to establish a session. §3.5
0x3 PROTOCOL_VIOLATION The remote endpoint performed an action that was disallowed by the specification. §3.5
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 10.1. §3.5
0x5 DUPLICATE_TRACK_ALIAS The endpoint attempted to use a Track Alias that was already in use. §3.5
0x6 KEY_VALUE_FORMATTING_ERROR The key-value pair has a formatting error. §3.5
0x8 INVALID_PATH The PATH parameter was used by a server, on a WebTransport session, or the server does not support the path. §3.5
0x9 MALFORMED_PATH The PATH parameter does not conform to the rules in Section 10.3.1.2. §3.5
0x10 GOAWAY_TIMEOUT The session was closed because the peer took too long to close the session in response to a GOAWAY (Section 10.4) message. See session migration (Section 3.6). §3.5
0x11 CONTROL_MESSAGE_TIMEOUT The session was closed because the peer took too long to respond to a control message. §3.5
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. §3.5
0x13 AUTH_TOKEN_CACHE_OVERFLOW The Session limit Section 10.3.1.3 of the size of all registered Authorization tokens has been exceeded. §3.5
0x14 DUPLICATE_AUTH_TOKEN_ALIAS Authorization Token attempted to register an Alias that was in use (see Section 10.2.2). §3.5
0x16 MALFORMED_AUTH_TOKEN Invalid Auth Token serialization during registration (see Section 10.2.2). §3.5
0x17 UNKNOWN_AUTH_TOKEN_ALIAS No registered token found for the provided Alias (see Section 10.2.2). §3.5
0x18 EXPIRED_AUTH_TOKEN Authorization token has expired (Section 10.2.2). §3.5
0x19 INVALID_AUTHORITY The specified AUTHORITY does not correspond to this server or cannot be used in this context. §3.5
0x1A MALFORMED_AUTHORITY The AUTHORITY value is syntactically invalid. §3.5
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 10.3.1.7). §3.5
0x7f * N + 0x9D Reserved for greasing Reserved — the draft assigns no meaning to this range. §15.11.1

21 code points from table-18 of draft-20 (§15.11.1. Session Termination Error Codes).

draft-20 registers 19 code points in §15.11.2, and defines each one in §10.6.

Code Name Description Defined in
0x0 INTERNAL_ERROR An implementation specific or generic error occurred. §10.6
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. §10.6
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. §10.6
0x3 NOT_SUPPORTED The endpoint does not support the type of request. §10.6
0x4 MALFORMED_AUTH_TOKEN Invalid Auth Token serialization during registration (see Section 10.2.2). §10.6
0x5 EXPIRED_AUTH_TOKEN Authorization token has expired (Section 10.2.2). §10.6
0x6 GOING_AWAY The endpoint has received a GOAWAY and MAY reject new requests. §10.6
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. §10.6
0x10 DOES_NOT_EXIST The track or namespace is not available at the publisher. §10.6
0x11 INVALID_RANGE In response to SUBSCRIBE or FETCH, specified Filter or range of Locations cannot be satisfied. §10.6
0x12 MALFORMED_TRACK In response to a FETCH, a relay publisher detected the track was malformed (see Section 2.4.2). §10.6
0x20 UNINTERESTED The subscriber is not interested in the track or namespace. §10.6
0x30 PREFIX_OVERLAP In response to SUBSCRIBE_NAMESPACE or SUBSCRIBE_TRACKS, the namespace prefix shares a common prefix with another subscription of the same type in the same session. SUBSCRIBE_NAMESPACE and SUBSCRIBE_TRACKS have independent overlap spaces, so a SUBSCRIBE_NAMESPACE and a SUBSCRIBE_TRACKS may share the same prefix. §10.6
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. §10.6
0x33 UNSUPPORTED_EXTENSION The track contains a Mandatory Track Property (see Section 2.5.1) that the endpoint does not understand. §10.6
0x34 REDIRECT The request cannot be fulfilled by this endpoint, but could succeed at the location specified in the Redirect structure. 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. §10.6
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. §10.6
0x36 INVALID_FILTER A filter parameter is invalid. §10.6
0x7f * N + 0x9D Reserved for greasing Reserved — the draft assigns no meaning to this range. §15.11.2

19 code points from table-19 of draft-20 (§15.11.2. REQUEST_ERROR Codes).

draft-20 registers 10 code points in §15.11.3, and defines each one in §10.12.

Code Name Description Defined in
0x0 INTERNAL_ERROR An implementation specific or generic error occurred. §10.12
0x1 UNAUTHORIZED The subscriber is no longer authorized to subscribe to the given track. §10.12
0x2 TRACK_ENDED The track is no longer being published. §10.12
0x4 GOING_AWAY The subscriber or publisher issued a GOAWAY message. §10.12
0x5 TOO_FAR_BEHIND The publisher's queue of objects to be sent to the given subscriber exceeds its implementation defined limit. §10.12
0x6 EXPIRED The publisher reached the timeout specified in SUBSCRIBE_OK. §10.12
0x8 UPDATE_FAILED REQUEST_UPDATE failed on this subscription (see Section 10.9). §10.12
0x9 EXCESSIVE_LOAD The publisher is overloaded and is terminating the subscription. §10.12
0x12 MALFORMED_TRACK A relay publisher detected that the track was malformed (see Section 2.4.2). §10.12
0x7f * N + 0x9D Reserved for greasing Reserved — the draft assigns no meaning to this range. §15.11.3

10 code points from table-20 of draft-20 (§15.11.3. PUBLISH_DONE Codes).

draft-20 registers 11 code points in §15.11.4, and defines each one in §3.3.4.

Code Name Description Defined in
0x0 INTERNAL_ERROR An implementation specific error. §3.3.4
0x1 CANCELLED The stream was cancelled by either endpoint. For Subscriptions, PUBLISH_DONE (Section 10.12) may have a more detailed status code. §3.3.4
0x2 DELIVERY_TIMEOUT A delivery timeout (Section 8) was exceeded for this stream. §3.3.4
0x3 SESSION_CLOSED The session is being closed. §3.3.4
0x4 GOING_AWAY The endpoint is rejecting this request because it has sent or received a GOAWAY. §3.3.4
0x5 TOO_FAR_BEHIND The corresponding subscription has exceeded the publisher's resource limits and is being terminated (see Section 8). §3.3.4
0x6 UNKNOWN_OBJECT_STATUS In response to a FETCH, the publisher is unable to determine the status of the next Object in the requested range. §3.3.4
0x7 EXPIRED_AUTH_TOKEN The authorization token for the request has expired. §3.3.4
0x9 EXCESSIVE_LOAD The endpoint is overloaded and is resetting this stream. §3.3.4
0x12 MALFORMED_TRACK A relay publisher detected that the track was malformed (see Section 2.4.2). §3.3.4
0x7f * N + 0x9D Reserved for greasing Reserved — the draft assigns no meaning to this range. §15.11.4

11 code points from table-21 of draft-20 (§15.11.4. Stream Reset Error Codes).

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 61 above. In draft-20 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 15.9).

The code points, names and registry membership come from crates/moqtap-codec/tools/registries/draft-20.json, a committed extraction of draft-ietf-moq-transport-20 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: 34c65c01b9420f45a3b95d0618b8d0bcde80b7b8b6295f43fd4bc1c8bca85c83. The descriptions and section links on this page are read from spec-sources/draft-20.html in this site's repository, whose hash matches — the two inputs are provably the same document.

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

moqtap covers drafts 07 through 20.

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