---
title: Versioning
description: Pin dated REST and WebSocket API versions so contract changes are explicit and your integration behaves consistently over time.
---

UDX publishes dated REST and WebSocket contracts. For REST, send a `UDX-Version` request header with a `YYYY-MM-DD` value; every response echoes the applied `UDX-Version`. For WebSocket, select a `udx.json.YYYY-MM-DD` subprotocol during the HTTP Upgrade; that version remains fixed for the connection.

| Interface | Version selector | Selection lifetime |
| --- | --- | --- |
| REST | `UDX-Version` request header | One request |
| WebSocket | `Sec-WebSocket-Protocol` during the HTTP Upgrade | One connection |

## REST Versioning

Send a version published in the [OpenAPI specification](/openapi.yml):

```http
UDX-Version: <YYYY-MM-DD>
```

If you omit this header, UDX uses the oldest supported REST version. An integration that omits the header will not adopt a newer contract automatically.

Every response includes the applied `UDX-Version`. An unsupported value returns `400` and lists the supported versions.

Set `UDX-Version` explicitly after testing your integration against a contract. Review and test the new OpenAPI contract before changing versions.

## WebSocket Versioning

Select a subprotocol published in the [AsyncAPI specification](/asyncapi.yml) when opening the connection:

```http
Sec-WebSocket-Protocol: udx.json.<YYYY-MM-DD>
```

The selected subprotocol sets the command and message contract for that connection. WebSocket messages do not carry a version header. To change versions, close the connection and reconnect with another supported subprotocol.

Most WebSocket clients accept the subprotocol as a connection option. Use the exact value published in AsyncAPI.
