> ## 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 multi exchange

> Create a group of exchanges linked by a shared multiId.
Each order is stored with status NEW and initialized asynchronously.
Quotes are resolved internally — no quoteId required.



## OpenAPI

````yaml https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/multi
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/multi:
    post:
      tags:
        - Exchanges
      summary: Create multi exchange
      description: |-
        Create a group of exchanges linked by a shared multiId.
        Each order is stored with status NEW and initialized asynchronously.
        Quotes are resolved internally — no quoteId required.
      operationId: CreateMultiExchange
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultiExchangeRequest'
      responses:
        '200':
          description: Multi exchange created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultiExchangeCreateResult'
        '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:
    MultiExchangeRequest:
      properties:
        orders:
          items:
            $ref: '#/components/schemas/MultiOrderItem'
          type: array
          minItems: 1
          maxItems: 50
      required:
        - orders
      type: object
      additionalProperties: false
    MultiExchangeCreateResult:
      description: >-
        Response for POST /exchanges/multi — per-item envelope, some may be
        errors
      properties:
        multiId:
          type: string
        orders:
          items:
            $ref: '#/components/schemas/MultiOrderResult'
          type: array
      required:
        - multiId
        - orders
      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
    MultiOrderItem:
      description: |-
        A single order within a multi exchange batch.
        Quotes are resolved internally — no quoteId required.
      properties:
        from:
          type: string
          description: >-
            Token ID from which the swap is initiated. Must be a MongoDB
            ObjectId (24-char hex string).

            Use GET /v2/tokens to look up token IDs.
          example: 6689b73ec90e45f3b3e51564
          minLength: 24
          maxLength: 24
        to:
          type: string
          description: >-
            Token ID to which the swap is directed. Must be a MongoDB ObjectId
            (24-char hex string).

            Use GET /v2/tokens to look up token IDs.
          example: 6689b73ec90e45f3b3e51558
          minLength: 24
          maxLength: 24
        amount:
          type: number
          format: double
          description: Input amount
        addressTo:
          type: string
          description: Destination wallet address
          minLength: 1
          maxLength: 200
        anonymous:
          type: boolean
          description: Use anonymous (private) routing
        destinationTag:
          type: string
          description: Destination tag / memo (e.g. for XRP, XLM)
          maxLength: 64
        useXmr:
          type: boolean
          description: Force XMR as the anonymous bridge token
        walletInfo:
          type: string
          description: Wallet info string
          maxLength: 256
        filters:
          $ref: '#/components/schemas/QuoteFilters'
          description: Provider filters
      required:
        - from
        - to
        - amount
        - addressTo
      type: object
      additionalProperties: false
    MultiOrderResult:
      description: Per-item result envelope — mirrors GraphQL OrderWithErrorResult
      properties:
        order:
          $ref: '#/components/schemas/Order'
        error:
          $ref: '#/components/schemas/MultiOrderError'
      type: object
      additionalProperties: false
    FieldErrors:
      properties: {}
      type: object
      additionalProperties:
        properties:
          value: {}
          message:
            type: string
        required:
          - message
        type: object
    QuoteFilters:
      properties:
        onlySwaps:
          items:
            type: string
          type: array
        rotatePayoutWallets:
          type: boolean
        deviationThreshold:
          type: number
          format: double
        rotationLookback:
          type: number
          format: double
        inLeg:
          $ref: '#/components/schemas/LegFilter'
        outLeg:
          $ref: '#/components/schemas/LegFilter'
      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
    MultiOrderError:
      properties:
        message:
          type: string
        code:
          anyOf:
            - type: string
            - type: number
              format: double
      required:
        - message
      type: object
      additionalProperties: false
    LegFilter:
      properties:
        include:
          items:
            type: string
          type: array
        exclude:
          items:
            type: string
          type: array
      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
    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

````