> ## Documentation Index
> Fetch the complete documentation index at: https://docs.houdiniswap.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create exchange

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



## OpenAPI

````yaml https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges
openapi: 3.0.0
info:
  title: houdiniswap-backend
  version: 2.1.1
  description: Houdiniswap Backend
  license:
    name: ISC
  contact: {}
servers:
  - url: https://api-partner.houdiniswap.com/v2
security: []
paths:
  /exchanges:
    post:
      tags:
        - Exchanges
      summary: Create exchange
      description: >-
        Create a new exchange (swap). Use `type: "private"` or `type:
        "standard"` for centralized exchanges or `type: "dex"` for decentralized
        exchanges.
      operationId: CreateExchange
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExchangeRequest'
      responses:
        '200':
          description: Exchange created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '422':
          description: Validation Failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - apiKey: []
components:
  schemas:
    ExchangeRequest:
      description: Request body for creating a new exchange
      properties:
        addressTo:
          type: string
          description: Destination wallet address where funds will be sent
          minLength: 1
          maxLength: 200
        quoteId:
          type: string
          description: >-
            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:
          type: string
          description: Source wallet address (required for DEX, ignored for CEX)
        refundAddress:
          type: string
          description: |-
            Sender's wallet address for refunds if a fixed-rate swap fails.
            Required when the quote was created with fixed: true.
          maxLength: 200
        signatures:
          items:
            $ref: '#/components/schemas/SignatureObject'
          type: array
          description: EIP-712 signatures for permit-based approvals (DEX only)
        destinationTag:
          type: string
          description: Destination tag / memo (e.g. for XRP, XLM)
          maxLength: 64
        walletInfo:
          type: string
          description: Wallet info string
          maxLength: 256
      required:
        - addressTo
        - quoteId
      type: object
      additionalProperties: false
    Order:
      properties:
        _id:
          $ref: '#/components/schemas/ObjectId'
        displayStatus:
          $ref: '#/components/schemas/DisplayStatus'
        statusLabel:
          type: string
          enum:
            - INITIALIZING
            - NEW
            - WAITING
            - CONFIRMING
            - EXCHANGING
            - ANONYMIZING
            - FINISHED
            - EXPIRED
            - FAILED
            - REFUNDED
            - DELETED
          nullable: false
        inStatusLabel:
          type: string
          enum:
            - NEW
            - WAITING
            - CONFIRMING
            - EXCHANGING
            - FINISHED
            - EXPIRED
            - FAILED
            - REFUNDED
            - SENDING
            - VERIFYING
            - FALLBACK
          nullable: false
        outStatusLabel:
          type: string
          enum:
            - NEW
            - WAITING
            - CONFIRMING
            - EXCHANGING
            - FINISHED
            - EXPIRED
            - FAILED
            - REFUNDED
            - SENDING
            - VERIFYING
            - FALLBACK
          nullable: false
        transactionHash:
          type: string
        hashUrl:
          type: string
        depositAddress:
          type: string
        depositTag:
          type: string
        id:
          type: string
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        houdiniId:
          type: string
        receiverAddress:
          type: string
        status:
          $ref: '#/components/schemas/OrderStatus'
        anonymous:
          type: boolean
        isX402:
          type: boolean
        x402PayerAddress:
          type: string
        expires:
          type: string
          format: date-time
        fixed:
          type: boolean
        validUntil:
          type: string
        refundAddress:
          type: string
        in:
          $ref: '#/components/schemas/ExchangeType'
          description: Exchange In
        inAmount:
          type: number
          format: double
        inSymbol:
          type: string
        inStatus:
          $ref: '#/components/schemas/Status'
        inCreated:
          type: string
          format: date-time
        inTransactionInHash:
          type: string
        outAmount:
          type: number
          format: double
        outAmountUsd:
          type: number
          format: double
        outSymbol:
          type: string
        outStatus:
          $ref: '#/components/schemas/Status'
        outTransactionOutHash:
          type: string
        receiverTag:
          type: string
        ffSetEmergency:
          type: boolean
        notified:
          type: boolean
        multiId:
          type: string
        ip:
          type: string
        widgetMode:
          type: boolean
        eta:
          type: number
          format: double
          description: ETA time, depending on swap
        inAmountUsd:
          type: number
          format: double
          description: Stable coin analitical data
        isDex:
          type: boolean
        metadata: {}
        inToken:
          $ref: '#/components/schemas/Token'
        outToken:
          $ref: '#/components/schemas/Token'
        orderFinishedReceived:
          type: string
          format: date-time
        actionRequired:
          type: boolean
        nonRefundable:
          type: boolean
        swapName:
          type: string
        statusValidated:
          type: boolean
      required:
        - displayStatus
        - statusLabel
        - inStatusLabel
        - transactionHash
        - hashUrl
        - depositAddress
        - _id
        - id
        - created
        - houdiniId
        - receiverAddress
        - status
        - anonymous
        - isX402
        - x402PayerAddress
        - expires
        - in
        - inAmount
        - inSymbol
        - inStatus
        - inCreated
        - inTransactionInHash
        - outAmount
        - outAmountUsd
        - outSymbol
        - outStatus
        - outTransactionOutHash
        - receiverTag
        - ffSetEmergency
        - notified
        - multiId
        - ip
        - widgetMode
        - eta
        - inAmountUsd
        - isDex
        - inToken
        - outToken
        - orderFinishedReceived
        - actionRequired
        - swapName
        - statusValidated
      type: object
      additionalProperties: false
    ValidationError:
      properties:
        message:
          type: string
        code:
          type: string
        requestId:
          type: string
        fields:
          $ref: '#/components/schemas/FieldErrors'
      required:
        - message
        - code
        - fields
      type: object
      additionalProperties: false
    ErrorResponse:
      properties:
        message:
          type: string
        code:
          type: string
        requestId:
          type: string
      required:
        - message
        - code
      type: object
      additionalProperties: false
    SignatureObject:
      properties:
        signature:
          type: string
        key:
          type: string
        swapRequiredMetadata:
          $ref: '#/components/schemas/Record_string.any_'
      required:
        - signature
        - key
      type: object
      additionalProperties: false
    ObjectId:
      type: string
      description: A class representation of the BSON ObjectId type.
    DisplayStatus:
      enum:
        - 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
      type: string
    OrderStatus:
      description: |-
        - **-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)
      enum:
        - -2
        - -1
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
        - 8
      type: number
    ExchangeType:
      type: string
      enum:
        - ch
        - cl
        - cn
        - el
        - le
        - se
        - ss
        - sz
        - sp
        - eb
        - nx
        - cc
        - qx
        - tc
        - sw
        - dl
        - ad
        - wh
        - cf
        - un
        - jp
        - mn
        - rd
        - ps
        - cs
        - kd
        - ct
        - zx
        - wc
        - su
        - bd
        - tt
        - sd
        - bg
        - ab
    Status:
      description: |-
        - **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
      enum:
        - 0
        - 1
        - 2
        - 3
        - 4
        - 5
        - 6
        - 7
        - 8
        - 9
        - 10
      type: number
    Token:
      properties:
        icon:
          type: string
        id:
          type: string
        address:
          type: string
          nullable: true
        chain:
          type: string
        decimals:
          type: number
          format: double
          default: 0
        symbol:
          type: string
          default: ''
        name:
          type: string
          default: ''
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        chainData:
          $ref: '#/components/schemas/Chain'
        description:
          type: string
          nullable: true
        mainnet:
          type: boolean
        enabled:
          type: boolean
        unverified:
          type: boolean
        hasDex:
          type: boolean
        hasCex:
          type: boolean
        hasSelfPrivate:
          type: boolean
          description: >-
            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:
          type: string
          default: ''
        rank:
          type: number
          format: double
          nullable: true
        cgId:
          type: string
          nullable: true
        marketCapChange24h:
          type: number
          format: double
        circulatingSupply:
          type: number
          format: double
        price:
          type: number
          format: double
          nullable: true
        marketCap:
          type: number
          format: double
          nullable: true
        volume:
          type: number
          format: double
          nullable: true
        fdv:
          type: number
          format: double
          nullable: true
        change:
          type: number
          format: double
          nullable: true
        priority:
          type: number
          format: double
          nullable: true
        warningMessage:
          type: string
        minMax:
          $ref: '#/components/schemas/TokenMinMax'
      required:
        - icon
        - id
        - chain
        - created
        - chainData
      type: object
      additionalProperties: false
    FieldErrors:
      properties: {}
      type: object
      additionalProperties:
        properties:
          value: {}
          message:
            type: string
        required:
          - message
        type: object
    Record_string.any_:
      properties: {}
      additionalProperties: {}
      type: object
      description: Construct a type with a set of properties K of type T
    Chain:
      properties:
        icon:
          type: string
        addressValidation:
          type: string
        tokenAddressValidation:
          type: string
        id:
          type: string
        created:
          type: string
          format: date-time
        modified:
          type: string
          format: date-time
        name:
          type: string
        shortName:
          type: string
        memoNeeded:
          type: boolean
          nullable: true
        hashUrl:
          type: string
        explorerUrl:
          type: string
        addressUrl:
          type: string
        priority:
          type: number
          format: double
        kind:
          type: string
        chainId:
          type: number
          format: double
          nullable: true
        enabled:
          type: boolean
        shortNameV1:
          type: string
      required:
        - icon
        - addressValidation
        - tokenAddressValidation
        - id
        - created
        - name
        - shortName
        - explorerUrl
        - addressUrl
        - kind
        - enabled
        - shortNameV1
      type: object
      additionalProperties: false
    TokenMinMax:
      properties:
        anon:
          items:
            type: number
            format: double
          type: array
        cex:
          items:
            type: number
            format: double
          type: array
        dex:
          items:
            type: number
            format: double
          type: array
      type: object
      additionalProperties: false
  securitySchemes:
    apiKey:
      type: apiKey
      name: Authorization
      in: header

````