---
title: "Create exchange"
method: POST
path: "/exchanges"
tags: ["Exchanges"]
---

# Create exchange

`POST /exchanges`

Create a new exchange (swap). Use `type: "private"` or `type: "standard"` for centralized exchanges or `type: "dex"` for decentralized exchanges.

## Request body

- ExchangeRequest — Request body for creating a new exchange
  - `addressTo` string, required — Destination wallet address where funds will be sent
  - `quoteId` string, required — Quote ID from a prior quote response. Amount, from token, to token, and swap provider are retrieved from the provided quote. For CEX exchanges, if the exchange fails with the chosen swap provider, it will fallback to the next best route.
  - `addressFrom` string — Source wallet address (required for DEX, ignored for CEX)
  - `refundAddress` string — Sender's wallet address for refunds if a fixed-rate swap fails. Required when the quote was created with fixed: true.
  - `refundExtraId` string — Memo/tag for refundAddress on memo-bearing chains (e.g. XRP DestinationTag, Stellar memo, TON comment). Ignored when the destination chain has no memo concept.
  - `signatures` SignatureObject[] — EIP-712 signatures for permit-based approvals (DEX only)
    - `signature` string, required
    - `key` string, required
    - `swapRequiredMetadata` RecordStringAny — Construct a type with a set of properties K of type T
  - `destinationTag` string — Destination tag / memo (e.g. for XRP, XLM)
  - `walletInfo` string — Wallet info string

## Response `200`

Exchange created

- OrderV2PublicResponse
  - `swapName` string, required
  - `fixed` boolean
  - `refundAddress` string
  - `houdiniId` string, required
  - `created` string, date-time, required
  - `modified` string, date-time
  - `depositAddress` string, required — The CEX deposit address where the user must send funds
  - `receiverAddress` string, required
  - `anonymous` boolean, required
  - `expires` string, date-time, required
  - `status` -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8, required — - **-2** Order is being initialized (label: INITIALIZING) - **-1** Order initialized (label: NEW) - **0** Waiting for deposit confirmation (label: WAITING) - **1** Deposit is being confirmed (label: CONFIRMING) - **2** Exchange is in progress (label: EXCHANGING) - **3** Order is going through anonymization (label: ANONYMIZING) - **4** Order completed successfully (label: FINISHED) - **5** Order has expired (label: EXPIRED) - **6** Order failed (label: FAILED) - **7** Order was refunded (label: REFUNDED) - **8** Order was deleted (label: DELETED)
  - `inAmount` number, double, required
  - `inSymbol` string, required
  - `outAmount` number, double, required
  - `outSymbol` string, required
  - `depositTag` string — Memo/tag required when depositing funds for assets that use one
  - `notified` boolean, required
  - `eta` number, double, required — ETA time, depending on swap
  - `inAmountUsd` number, double, required — USD value of the input amount at order creation time.
  - `outAmountUsd` number, double, required
  - `multiId` string, required
  - `inCreated` string, date-time, required
  - `id` string, required
  - `nonRefundable` boolean
  - `metadata` unknown
  - `isDex` boolean, required
  - `orderFinishedReceived` string, date-time, required
  - `actionRequired` boolean, required
  - `outToken` Token, required
    - `icon` string, required
    - `id` string, required
    - `address` string, nullable
    - `chain` string, required
    - `decimals` number, double
    - `symbol` string
    - `name` string
    - `created` string, date-time, required
    - `modified` string, date-time
    - `chainData` Chain, required
      - `icon` string, required
      - `addressValidation` string, required
      - `tokenAddressValidation` string, required
      - `id` string, required
      - `created` string, date-time, required
      - `modified` string, date-time
      - `name` string, required
      - `shortName` string, required
      - `memoNeeded` boolean, nullable
      - `hashUrl` string
      - `explorerUrl` string, required
      - `addressUrl` string, required
      - `priority` number, double
      - `kind` string, required
      - `chainId` number, double, nullable
      - `enabled` boolean, required
      - `shortNameV1` string, required
    - `description` string, nullable
    - `mainnet` boolean
    - `enabled` boolean
    - `unverified` boolean
    - `hasDex` boolean
    - `hasCex` boolean
    - `hasSelfPrivate` boolean — Indicates if token supports private (self-to-self) swaps. Stored field computed when token is saved. True when token has CEX support AND at least 2 enabled CEX swap provider mappings.
    - `cexTokenId` string
    - `rank` number, double, nullable
    - `cgId` string, nullable
    - `marketCapChange24h` number, double — 24h market cap change percentage from CoinGecko.
    - `circulatingSupply` number, double — Token circulating supply from CoinGecko.
    - `price` number, double, nullable
    - `marketCap` number, double, nullable
    - `volume` number, double, nullable
    - `fdv` number, double, nullable
    - `change` number, double, nullable
    - `priority` number, double, nullable
    - `warningMessage` string
  - `inToken` Token, required
    - `icon` string, required
    - `id` string, required
    - `address` string, nullable
    - `chain` string, required
    - `decimals` number, double
    - `symbol` string
    - `name` string
    - `created` string, date-time, required
    - `modified` string, date-time
    - `chainData` Chain, required
      - `icon` string, required
      - `addressValidation` string, required
      - `tokenAddressValidation` string, required
      - `id` string, required
      - `created` string, date-time, required
      - `modified` string, date-time
      - `name` string, required
      - `shortName` string, required
      - `memoNeeded` boolean, nullable
      - `hashUrl` string
      - `explorerUrl` string, required
      - `addressUrl` string, required
      - `priority` number, double
      - `kind` string, required
      - `chainId` number, double, nullable
      - `enabled` boolean, required
      - `shortNameV1` string, required
    - `description` string, nullable
    - `mainnet` boolean
    - `enabled` boolean
    - `unverified` boolean
    - `hasDex` boolean
    - `hasCex` boolean
    - `hasSelfPrivate` boolean — Indicates if token supports private (self-to-self) swaps. Stored field computed when token is saved. True when token has CEX support AND at least 2 enabled CEX swap provider mappings.
    - `cexTokenId` string
    - `rank` number, double, nullable
    - `cgId` string, nullable
    - `marketCapChange24h` number, double — 24h market cap change percentage from CoinGecko.
    - `circulatingSupply` number, double — Token circulating supply from CoinGecko.
    - `price` number, double, nullable
    - `marketCap` number, double, nullable
    - `volume` number, double, nullable
    - `fdv` number, double, nullable
    - `change` number, double, nullable
    - `priority` number, double, nullable
    - `warningMessage` string
  - `inStatus` 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10, required — - **0** New swap - **1** Waiting for confirmation - **2** Being confirmed - **3** Exchange in progress - **4** Sending to destination - **5** Swap completed - **6** Swap failed - **7** Swap refunded - **8** Verifying swap - **9** Swap expired - **10** Fallback mode
  - `outStatus` 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10, required — - **0** New swap - **1** Waiting for confirmation - **2** Being confirmed - **3** Exchange in progress - **4** Sending to destination - **5** Swap completed - **6** Swap failed - **7** Swap refunded - **8** Verifying swap - **9** Swap expired - **10** Fallback mode
  - `outTransactionOutHash` string, required
  - `displayStatus` 'WAITING_FOR_DEPOSIT' | 'DEPOSIT_DETECTED' | 'EXCHANGE_IN_PROGRESS' | 'SENDING_TO_INTERMEDIARY' | 'REACHED_INTERMEDIARY' | 'INITIATING_SECOND_EXCHANGE' | 'SECOND_EXCHANGE_IN_PROGRESS' | 'SENDING_TO_RECEIVER' | 'SWAP_COMPLETED' | 'EXPIRED' | 'FAILED' | 'REFUNDED' | 'DELETED', required
  - `receiverTag` string, nullable — Memo/tag required when receiving funds for assets that use one

## Other responses

- `422` — Validation Failed
- `500` — Internal Server Error

---

[API](https://skmtc.net/houdiniswap/apis/houdiniswap-backend.md) · [All operations](https://skmtc.net/houdiniswap/apis/houdiniswap-backend/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/houdiniswap/houdiniswap-backend/versions/2063dbc88d59/schema)
