Create channel

POST
/channels

Create new reusable deposit channel for one of your end users in one crypto currency.

The channel's addresses are permanently bound to that end user, so a channel that already exists for the combination of endUser.reference, currency and wallet returns 409. Converted funds are credited to the wallet identified by walletId.

Authorization

Bearer
headerAuthorizationBearer <JWT>

OAuth access token.

Header Parameters

Idempotency-Key*string

It helps prevent duplicates in your POST requests. We recommend using a UUID for the key, however you may use any other unique identifier you choose.

Length1 <= length <= 64
X-Volt-Api-Version*1

Version of the API used. Currently, version 1 is the only version.

Value in1

Request Body

application/json
  1. body
currency*string

Crypto currency the end user will pay in.

Value in"USDC""EURC""USDT"
walletId*string

Identifier of the wallet the channel's converted funds are credited to.

Formatuuid
endUser*|

The end user the channel belongs to. Regulation requires their identity when the channel is created, because every deposit on the channel's addresses is attributed to them. Fields belonging to the other variant are rejected.

device?

Device used to call the endpoint for channel creation.

communication*

Partner communication settings.

Response Body

Created - The channel was created, returning channel details.

application/json
  1. response

A channel as returned in the list. The single-item read and the creation response carry the same addresses extended with qrCode.

id*string

Identifier of the channel.

Formatuuid
endUser*|

The end user the channel belongs to, as captured at creation. Fields belonging to the other variant are omitted rather than rendered as null.

currency*string

Crypto currency the end user pays in.

Value in"USDC""EURC""USDT"
walletId*string

Identifier of the wallet the channel's converted funds are credited to.

Formatuuid
status*"OPEN"

Channel status.

Value in"OPEN"
addresses*array<>

One entry per network the channel is reachable on, the primary network first, then alphabetically by network.

createdAt*string

Date of channel creation.

Formatdate-time
updatedAt*|

Date of channel's last update.

Formatdate-time
curl -X POST 'https://stablecoins.sandbox.volt.io/channels' \  -H 'Idempotency-Key: 85136c79cbf9fe36bb9d05d0639c70c265c18d37' \  -H 'X-Volt-Api-Version: 1' \  -H 'Content-Type: application/json' \  -d '{  "currency": "USDC",  "walletId": "6a4f0c9e-2d1b-4c8a-9f3e-b7d2a1c4e5f6",  "endUser": {    "type": "INDIVIDUAL",    "reference": "user-8841",    "firstName": "John",    "lastName": "Doe",    "dateOfBirth": "1990-01-15",    "country": "DE"  },  "device": {    "ip": "203.0.113.7"  },  "communication": {    "notifications": {      "url": "https://example.com/webhooks/channels"    }  }}'
Example Response
{  "id": "9c2e6b4a-8f1d-4c3a-b5e7-d0a2c4e6f8b1",  "endUser": {    "type": "INDIVIDUAL",    "reference": "user-8841",    "firstName": "John",    "lastName": "Doe",    "dateOfBirth": "1990-01-15",    "country": "DE"  },  "currency": "USDC",  "walletId": "6a4f0c9e-2d1b-4c8a-9f3e-b7d2a1c4e5f6",  "status": "OPEN",  "addresses": [    {      "network": "ETHEREUM",      "address": "0x7b686317f8ed2c2bc3bbd060464f1939359a00e3",      "tag": null,      "uri": "ethereum:0x7b686317f8ed2c2bc3bbd060464f1939359a00e3",      "qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",      "isPrimary": true    },    {      "network": "SOLANA",      "address": "5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1",      "tag": null,      "uri": "solana:5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1",      "qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",      "isPrimary": false    }  ],  "createdAt": "2026-08-24T09:15:42+00:00",  "updatedAt": "2026-08-24T09:15:42+00:00"}