---
search:
  tags:
    - Market Data
    - SEND
seo:
  description: >-
    Order book snapshots and absolute level updates for each subscribed ticker.
    Reference for the send operation on /ws in the WebSocket API.
sidebar:
  label: Stream Order Books
  badge: SEND
title: Stream Order Books
type: openapi-operation
---
Order book snapshots and absolute level updates for each subscribed ticker.

### Operation

- Action and channel: `SEND /ws`
- Operation ID: `sendOrderbookData`
- API reference: [SEND /ws](/api-reference/websocket/market-data/send-orderbook-data)
- Complete specification: [AsyncAPI (YAML)](/asyncapi.yml)
- Spec location (JSON Pointer): `#/operations/sendOrderbookData`

#### Authorization

- Credential: `UDX-Access-Key`, `UDX-Access-Timestamp`, `UDX-Access-Signature` headers on the WebSocket upgrade request
- Details: [Connecting](/reference/connecting?api=websocket) and [Authentication](/reference/authentication?api=websocket)

Upgrade headers schema:

```yaml
$ref: "#/components/schemas/WebSocketUpgradeHeaders"
```


#### Messages

##### Order Book Snapshot

Establish current book state for one market.

Payload schema:

```yaml
$ref: "#/components/schemas/InitialOrderbookSnapshotEnvelope"
```

Example: InitialOrderbookState

Initial book state

```json
{
  "type": "orderbook_snapshot",
  "sid": 7,
  "seq": 1,
  "msg": {
    "ticker": "UDX-EXAMPLE-MARKET-A",
    "bids": [
      [
        "0.45",
        "100"
      ]
    ],
    "asks": [
      [
        "0.47",
        "80"
      ]
    ]
  }
}
```

##### Order Book Update

Replace one or more visible price-level quantities for one market.

Payload schema:

```yaml
$ref: "#/components/schemas/OrderbookUpdateEnvelope"
```

Example: ReplaceAndRemoveLevels

Replace and remove levels

```json
{
  "type": "orderbook_update",
  "sid": 7,
  "seq": 2,
  "msg": {
    "ticker": "UDX-EXAMPLE-MARKET-A",
    "changes": [
      {
        "side": "buy",
        "price": "0.45",
        "quantity": "125"
      },
      {
        "side": "sell",
        "price": "0.47",
        "quantity": "0"
      }
    ]
  }
}
```

#### Errors

- permission_denied — The caller lacks required access.
- channel_unavailable — The channel's upstream source cannot serve the operation right now. Retry with backoff; the connection stays usable.
- internal_error — An unexpected failure left connection state safe to continue.

##### Error

Reject one command or end one subscription while leaving the connection usable.

Every server-side rejection is an error frame. One that echoes a command id answers that command and leaves every subscription intact. One that names a sid and carries no id is terminal for that subscription: no further frame arrives for it, the connection and every other subscription stay usable, and you resubscribe when the cause clears. A connection-fatal condition is reported with a WebSocket close frame instead.

Payload schema:

```yaml
$ref: "#/components/schemas/ErrorEnvelope"
```

Example: PermissionDenied

permission_denied

```json
{
  "id": 4,
  "type": "error",
  "msg": {
    "code": "permission_denied",
    "detail": "the trade scope is required to create a request for quote",
    "instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
  }
}
```

Example: ChannelUnavailable

channel_unavailable

```json
{
  "id": 4,
  "type": "error",
  "msg": {
    "code": "channel_unavailable",
    "detail": "current market data is unavailable",
    "instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
  }
}
```

Example: InternalError

internal_error

```json
{
  "id": 4,
  "type": "error",
  "msg": {
    "code": "internal_error",
    "detail": "WebSocket command failed",
    "instance": "urn:request-id:8f14e45f-ceea-4abc-a743-e89a34d3f6ef"
  }
}
```

Example: SubscriptionPermissionDenied

permission_denied

```json
{
  "type": "error",
  "sid": 7,
  "msg": {
    "code": "permission_denied",
    "detail": "the market is no longer visible to this member",
    "instance": "urn:request-id:4ecbe594-50fa-4b7a-950f-5ed74bb8372d"
  }
}
```

Example: SubscriptionChannelUnavailable

channel_unavailable

```json
{
  "type": "error",
  "sid": 7,
  "msg": {
    "code": "channel_unavailable",
    "detail": "current market data is unavailable for this subscription",
    "instance": "urn:request-id:4ecbe594-50fa-4b7a-950f-5ed74bb8372d"
  }
}
```

Example: SubscriptionInternalError

internal_error

```json
{
  "type": "error",
  "sid": 7,
  "msg": {
    "code": "internal_error",
    "detail": "the subscription could not be continued",
    "instance": "urn:request-id:4ecbe594-50fa-4b7a-950f-5ed74bb8372d"
  }
}
```

#### Referenced definitions

The references in the excerpts above resolve to these definitions in the complete specification.

##### `#/components/schemas/WebSocketUpgradeHeaders`

```yaml
type: object
additionalProperties: true
description: Headers required for authentication and version negotiation.
required:
  - UDX-Access-Key
  - UDX-Access-Timestamp
  - UDX-Access-Signature
  - Sec-WebSocket-Protocol
properties:
  UDX-Access-Key:
    type: string
    minLength: 1
    maxLength: 255
    description: Opaque API key ID.
  UDX-Access-Timestamp:
    type: string
    pattern: ^[0-9]{13}$
    maxLength: 13
    description: Unix time in milliseconds, within 30 seconds of server time.
  UDX-Access-Signature:
    type: string
    minLength: 1
    maxLength: 1024
    description: Standard-base64 RSA-PSS/SHA-256 signature with a 32-byte salt. Sign timestamp + "GET" + "/ws"; the upgrade request has no body hash and no idempotency key.
  Sec-WebSocket-Protocol:
    type: string
    const: udx.json.2026-08-11
    description: Negotiated dated WebSocket API version.
```

##### `#/components/schemas/InitialOrderbookSnapshotEnvelope`

```yaml
type: object
additionalProperties: false
description: Initial or server-recovery snapshot.
required:
  - type
  - sid
  - seq
  - msg
properties:
  type:
    type: string
    const: orderbook_snapshot
    description: Identifies a complete order book snapshot.
  sid:
    $ref: "#/components/schemas/SubscriptionId"
  seq:
    $ref: "#/components/schemas/SequenceNumber"
  msg:
    $ref: "#/components/schemas/OrderbookSnapshotPayload"
```

##### `#/components/schemas/SubscriptionId`

```yaml
type: integer
format: int64
minimum: 1
maximum: 9007199254740991
description: Exchange-assigned subscription ID whose lifetime is this WebSocket connection.
```

##### `#/components/schemas/SequenceNumber`

```yaml
type: integer
format: int64
minimum: 1
maximum: 9007199254740991
description: Gap-detection sequence local to one subscription. It starts at 1 and increments once per frame on that subscription.
```

##### `#/components/schemas/OrderbookSnapshotPayload`

```yaml
description: Complete visible L1, L2, or L3 order book state for one market.
anyOf:
  - $ref: "#/components/schemas/AggregatedOrderbookSnapshotPayload"
  - $ref: "#/components/schemas/L3OrderbookSnapshotPayload"
```

##### `#/components/schemas/AggregatedOrderbookSnapshotPayload`

```yaml
type: object
additionalProperties: false
description: Complete visible L1 or L2 aggregated order book state for one market.
required:
  - ticker
  - bids
  - asks
properties:
  ticker:
    $ref: "#/components/schemas/Ticker"
  bids:
    type: array
    description: Bid levels in best-first order as [price, quantity] pairs.
    items:
      $ref: "#/components/schemas/PriceLevel"
  asks:
    type: array
    description: Ask levels in best-first order as [price, quantity] pairs.
    items:
      $ref: "#/components/schemas/PriceLevel"
```

##### `#/components/schemas/Ticker`

```yaml
type: string
minLength: 1
maxLength: 128
description: A human-meaningful natural key naming a single-leg or multi-leg market.
example: UDX-EXAMPLE-MARKET
```

##### `#/components/schemas/PriceLevel`

```yaml
type: array
minItems: 2
maxItems: 2
description: A [price, quantity] pair of exact decimal strings.
items:
  - $ref: "#/components/schemas/FixedPointPrice"
  - $ref: "#/components/schemas/FixedPointQuantity"
additionalItems: false
```

##### `#/components/schemas/FixedPointPrice`

```yaml
type: string
pattern: ^[0-9]+(\.[0-9]{1,6})?$
maxLength: 24
description: YES-side price in dollars as an exact fixed-point decimal string with at most six decimal places.
```

##### `#/components/schemas/FixedPointQuantity`

```yaml
type: string
pattern: ^[0-9]+(\.[0-9]{1,2})?$
maxLength: 24
description: A quantity in contracts as a fixed-point decimal string.
example: "100"
```

##### `#/components/schemas/L3OrderbookSnapshotPayload`

```yaml
type: object
additionalProperties: false
description: Complete visible L3 order book state for one market, ordered by price then FIFO priority across the requested price-level depth.
required:
  - ticker
  - bids
  - asks
properties:
  ticker:
    $ref: "#/components/schemas/Ticker"
  bids:
    type: array
    description: Anonymous bid orders in best-price, FIFO order across the requested price-level depth.
    items:
      $ref: "#/components/schemas/L3OrderbookEntry"
  asks:
    type: array
    description: Anonymous ask orders in best-price, FIFO order across the requested price-level depth.
    items:
      $ref: "#/components/schemas/L3OrderbookEntry"
```

##### `#/components/schemas/L3OrderbookEntry`

```yaml
type: object
additionalProperties: false
description: One anonymous resting order. Array position is its price-time priority among the visible entries on that side.
required:
  - entry_id
  - price
  - quantity
properties:
  entry_id:
    type: string
    minLength: 1
    description: Stable market-data entry handle. It is deliberately not the exchange order ID returned to the order owner.
    example: "6820943174116859281"
  price:
    $ref: "#/components/schemas/FixedPointPrice"
  quantity:
    $ref: "#/components/schemas/FixedPointQuantity"
```

##### `#/components/schemas/OrderbookUpdateEnvelope`

```yaml
type: object
additionalProperties: false
description: Sequenced absolute L1, L2, or L3 changes for exactly one market.
required:
  - type
  - sid
  - seq
  - msg
properties:
  type:
    type: string
    const: orderbook_update
    description: Identifies an incremental order book update.
  sid:
    $ref: "#/components/schemas/SubscriptionId"
  seq:
    $ref: "#/components/schemas/SequenceNumber"
  msg:
    $ref: "#/components/schemas/OrderbookUpdatePayload"
```

##### `#/components/schemas/OrderbookUpdatePayload`

```yaml
description: One market's complete visible transition between book states.
anyOf:
  - $ref: "#/components/schemas/AggregatedOrderbookUpdatePayload"
  - $ref: "#/components/schemas/L3OrderbookUpdatePayload"
```

##### `#/components/schemas/AggregatedOrderbookUpdatePayload`

```yaml
type: object
additionalProperties: false
description: One market's complete visible L1 or L2 transition between aggregated book states.
required:
  - ticker
  - changes
properties:
  ticker:
    $ref: "#/components/schemas/Ticker"
  changes:
    type: array
    minItems: 1
    description: Absolute price-level replacements. Array order has no meaning; a zero quantity removes the level.
    items:
      $ref: "#/components/schemas/OrderbookChange"
```

##### `#/components/schemas/OrderbookChange`

```yaml
type: object
additionalProperties: false
description: Absolute replacement quantity for one YES-side price level.
required:
  - side
  - price
  - quantity
properties:
  side:
    $ref: "#/components/schemas/OrderSide"
  price:
    $ref: "#/components/schemas/FixedPointPrice"
  quantity:
    $ref: "#/components/schemas/FixedPointQuantity"
```

##### `#/components/schemas/OrderSide`

```yaml
type: string
enum:
  - buy
  - sell
description: Order side.
```

##### `#/components/schemas/L3OrderbookUpdatePayload`

```yaml
type: object
additionalProperties: false
description: One market's complete visible transition between L3 order-level book states.
required:
  - ticker
  - changes
properties:
  ticker:
    $ref: "#/components/schemas/Ticker"
  changes:
    type: array
    minItems: 1
    description: Ordered absolute entry mutations. Apply them in array order.
    items:
      $ref: "#/components/schemas/L3OrderbookChange"
```

##### `#/components/schemas/L3OrderbookChange`

```yaml
type: object
additionalProperties: false
description: One absolute mutation to an anonymous L3 order. Apply array entries in order; delete followed by add moves a stable entry to new priority.
required:
  - action
  - side
  - entry_id
  - price
  - quantity
properties:
  action:
    type: string
    enum:
      - add
      - update
      - delete
    description: add inserts at the back of its price level, update replaces quantity in place, and delete removes the entry.
  side:
    $ref: "#/components/schemas/OrderSide"
  entry_id:
    type: string
    minLength: 1
    description: Stable market-data entry handle. A priority reset retains this ID and is encoded as delete then add.
    example: "6820943174116859281"
  price:
    $ref: "#/components/schemas/FixedPointPrice"
  quantity:
    $ref: "#/components/schemas/FixedPointQuantity"
```

##### `#/components/schemas/ErrorEnvelope`

```yaml
oneOf:
  - $ref: "#/components/schemas/InvalidMessageCommandErrorEnvelope"
  - $ref: "#/components/schemas/CorrelatedCommandErrorEnvelope"
  - $ref: "#/components/schemas/SubscriptionConflictCommandErrorEnvelope"
  - $ref: "#/components/schemas/SubscriptionErrorEnvelope"
description: Every error frame the exchange sends. A frame with an id answers that command; a frame with a sid and no id ends that subscription.
```

##### `#/components/schemas/InvalidMessageCommandErrorEnvelope`

```yaml
type: object
additionalProperties: false
description: Invalid-message error.
required:
  - type
  - msg
properties:
  id:
    $ref: "#/components/schemas/CommandId"
  type:
    type: string
    const: error
    description: Identifies a rejected command.
  msg:
    $ref: "#/components/schemas/InvalidMessageErrorPayload"
```

##### `#/components/schemas/CommandId`

```yaml
type: integer
format: int64
minimum: 1
maximum: 9007199254740991
description: Client-assigned command correlation identifier, unique among commands in flight on this connection.
```

##### `#/components/schemas/InvalidMessageErrorPayload`

```yaml
type: object
additionalProperties: false
description: The JSON or common command envelope is invalid.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: invalid_message
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
  field:
    type: string
    minLength: 1
    maxLength: 255
    description: JSON path to the invalid field when one can be identified.
```

##### `#/components/schemas/ErrorDetail`

```yaml
type: string
minLength: 1
maxLength: 500
description: Human-readable occurrence detail that clients must not parse.
```

##### `#/components/schemas/ErrorInstance`

```yaml
type: string
format: uri-reference
pattern: ^urn:request-id:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
maxLength: 100
description: Request identifier for troubleshooting with exchange support.
```

##### `#/components/schemas/CorrelatedCommandErrorEnvelope`

```yaml
type: object
additionalProperties: false
description: Rejected command correlated by its trustworthy client identifier.
required:
  - id
  - type
  - msg
properties:
  id:
    $ref: "#/components/schemas/CommandId"
  type:
    type: string
    const: error
    description: Identifies a rejected command.
  sid:
    $ref: "#/components/schemas/SubscriptionId"
  msg:
    $ref: "#/components/schemas/CorrelatedCommandErrorPayload"
  rate_limit:
    type: object
    additionalProperties: false
    description: Present on rate_limit_exceeded and omitted for uncharged command failures, capacity failures, and unavailable admission.
    required:
      - bucket
      - capacity
      - refill_tokens_per_minute
      - remaining
      - full_after_ms
    properties:
      bucket:
        type: string
        enum:
          - read
          - write
          - cancel
        description: Shared member bucket consulted for this command.
      capacity:
        type: integer
        format: int64
        minimum: 1
        maximum: 10000000
        description: Maximum tokens held by the bucket.
      refill_tokens_per_minute:
        type: integer
        format: int64
        minimum: 1
        maximum: 10000000
        description: Tokens restored per minute.
      remaining:
        type: integer
        format: int64
        minimum: 0
        maximum: 10000000
        description: Tokens remaining after th decision.
      full_after_ms:
        type: integer
        format: int64
        minimum: 0
        maximum: 86400000
        description: Milliseconds until the bucket is full if no more work is admitted.
```

##### `#/components/schemas/CorrelatedCommandErrorPayload`

```yaml
oneOf:
  - $ref: "#/components/schemas/UnknownCommandErrorPayload"
  - $ref: "#/components/schemas/InvalidParamsErrorPayload"
  - $ref: "#/components/schemas/CommandIdInUseErrorPayload"
  - $ref: "#/components/schemas/MarketNotFoundErrorPayload"
  - $ref: "#/components/schemas/QuoteNotFoundErrorPayload"
  - $ref: "#/components/schemas/OrderNotFoundErrorPayload"
  - $ref: "#/components/schemas/PermissionDeniedErrorPayload"
  - $ref: "#/components/schemas/SubscriptionNotFoundErrorPayload"
  - $ref: "#/components/schemas/SubscriptionNotReadyErrorPayload"
  - $ref: "#/components/schemas/SnapshotInProgressErrorPayload"
  - $ref: "#/components/schemas/RateLimitExceededErrorPayload"
  - $ref: "#/components/schemas/CapacityExceededErrorPayload"
  - $ref: "#/components/schemas/AdmissionUnavailableErrorPayload"
  - $ref: "#/components/schemas/ChannelUnavailableErrorPayload"
  - $ref: "#/components/schemas/InternalErrorPayload"
description: Closed set of command errors that may optionally identify a sid.
```

##### `#/components/schemas/UnknownCommandErrorPayload`

```yaml
type: object
additionalProperties: false
description: The command is unsupported by the negotiated protocol version.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: unknown_command
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
```

##### `#/components/schemas/InvalidParamsErrorPayload`

```yaml
type: object
additionalProperties: false
description: Command params fail schema or semantic validation.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: invalid_params
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
  field:
    type: string
    minLength: 1
    maxLength: 255
    description: JSON path to the invalid param when one can be identified.
```

##### `#/components/schemas/CommandIdInUseErrorPayload`

```yaml
type: object
additionalProperties: false
description: Another command with the supplied identifier is still in flight.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: command_id_in_use
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
```

##### `#/components/schemas/MarketNotFoundErrorPayload`

```yaml
type: object
additionalProperties: false
description: The market is absent from the caller-visible market catalog.
required:
  - code
  - detail
  - instance
  - ticker
properties:
  code:
    type: string
    const: market_not_found
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
  ticker:
    $ref: "#/components/schemas/Ticker"
```

##### `#/components/schemas/QuoteNotFoundErrorPayload`

```yaml
type: object
additionalProperties: false
description: The addressed quote or RFQ is unknown, or is not the caller's to act on.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: quote_not_found
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
```

##### `#/components/schemas/OrderNotFoundErrorPayload`

```yaml
type: object
additionalProperties: false
description: The addressed order is unknown, or is not the caller's to act on.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: order_not_found
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
```

##### `#/components/schemas/PermissionDeniedErrorPayload`

```yaml
type: object
additionalProperties: false
description: The caller lacks required access.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: permission_denied
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
```

##### `#/components/schemas/SubscriptionNotFoundErrorPayload`

```yaml
type: object
additionalProperties: false
description: The subscription identifier is not active on this connection.
required:
  - code
  - detail
  - instance
  - sid
properties:
  code:
    type: string
    const: subscription_not_found
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
  sid:
    $ref: "#/components/schemas/SubscriptionId"
```

##### `#/components/schemas/SubscriptionNotReadyErrorPayload`

```yaml
type: object
additionalProperties: false
description: Current state is not yet established for the requested operation.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: subscription_not_ready
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
```

##### `#/components/schemas/SnapshotInProgressErrorPayload`

```yaml
type: object
additionalProperties: false
description: The subscription already has a snapshot command in flight.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: snapshot_in_progress
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
```

##### `#/components/schemas/RateLimitExceededErrorPayload`

```yaml
type: object
additionalProperties: false
description: A command rate limit was exceeded.
required:
  - code
  - detail
  - instance
  - retry_after_ms
properties:
  code:
    type: string
    const: rate_limit_exceeded
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
  retry_after_ms:
    type: integer
    format: int64
    minimum: 1
    maximum: 86400000
    description: Minimum delay in milliseconds before another attempt.
```

##### `#/components/schemas/CapacityExceededErrorPayload`

```yaml
type: object
additionalProperties: false
description: A standing-resource limit prevents command admission.
required:
  - code
  - detail
  - instance
  - scope
  - resource
  - limit
properties:
  code:
    type: string
    const: capacity_exceeded
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
  scope:
    type: string
    enum:
      - connection
      - member
      - process
    description: Boundary at which the standing-resource limit applies.
  resource:
    type: string
    enum:
      - in_flight_commands
      - active_subscriptions
      - market_data_streams
    description: Retained or concurrent resource that reached its limit.
  limit:
    type: integer
    format: int64
    minimum: 1
    maximum: 10000000
    description: Enforced maximum for the identified scope and resource.
```

##### `#/components/schemas/AdmissionUnavailableErrorPayload`

```yaml
type: object
additionalProperties: false
description: Shared admission policy or state is temporarily unavailable.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: admission_unavailable
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
```

##### `#/components/schemas/ChannelUnavailableErrorPayload`

```yaml
type: object
additionalProperties: false
description: The channel's upstream source cannot serve the operation right now. Retry with backoff; the connection stays usable.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: channel_unavailable
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
```

##### `#/components/schemas/InternalErrorPayload`

```yaml
type: object
additionalProperties: false
description: An unexpected failure left connection state safe to continue.
required:
  - code
  - detail
  - instance
properties:
  code:
    type: string
    const: internal_error
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
```

##### `#/components/schemas/SubscriptionConflictCommandErrorEnvelope`

```yaml
type: object
additionalProperties: false
description: Rejected subscribe command identifying the conflicting subscription.
required:
  - id
  - type
  - sid
  - msg
properties:
  id:
    $ref: "#/components/schemas/CommandId"
  type:
    type: string
    const: error
    description: Identifies a rejected command.
  sid:
    $ref: "#/components/schemas/SubscriptionId"
  msg:
    $ref: "#/components/schemas/SubscriptionConflictErrorPayload"
```

##### `#/components/schemas/SubscriptionConflictErrorPayload`

```yaml
type: object
additionalProperties: false
description: The ticker already belongs to the identified subscription.
required:
  - code
  - detail
  - instance
  - ticker
properties:
  code:
    type: string
    const: subscription_conflict
    description: Stable machine-readable error code.
  detail:
    $ref: "#/components/schemas/ErrorDetail"
  instance:
    $ref: "#/components/schemas/ErrorInstance"
  ticker:
    $ref: "#/components/schemas/Ticker"
```

##### `#/components/schemas/SubscriptionErrorEnvelope`

```yaml
type: object
additionalProperties: false
description: Terminal failure for one subscription.
required:
  - type
  - sid
  - msg
properties:
  type:
    type: string
    const: error
    description: Identifies an error frame.
  sid:
    $ref: "#/components/schemas/SubscriptionId"
  msg:
    oneOf:
      - $ref: "#/components/schemas/PermissionDeniedErrorPayload"
      - $ref: "#/components/schemas/ChannelUnavailableErrorPayload"
      - $ref: "#/components/schemas/InternalErrorPayload"
    description: Closed set of terminal subscription failures.
```
