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

# Create a new order



## OpenAPI

````yaml https://vooi-api-app.fly.dev/swagger/json post /exchange/orders
openapi: 3.1.0
info:
  title: VOOI API
  description: Unified perps API
  version: '1.0'
  contact: {}
servers:
  - url: https://perps-api.vooi.io
security: []
tags: []
paths:
  /exchange/orders:
    post:
      tags:
        - Exchange
      summary: Create a new order
      operationId: ExchangeController_createOrder
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateOrderBodyDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateOrderDto'
        '503':
          description: ExchangeApiError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDTO'
      security:
        - bearer: []
components:
  schemas:
    CreateOrderBodyDto:
      type: object
      properties:
        asset:
          type: string
          minLength: 1
          description: >-
            Asset identifier: base symbol (e.g. "ETH") or full pair (e.g.
            "ETHUSDC").
          example: ETH
        broker:
          description: >-
            Broker configuration. Hyperliquid: id is builder address, feeBps is
            builder fee. Lighter/Robinhood: id is integrator account index,
            feeBps is integrator fee (applies to both taker and maker). Aster:
            id is builder address, feeBps is builder fee in BPS. MEXC: id is the
            Broker_ID sent as the source header to attribute the order; feeBps
            is still required but has no effect, since MEXC charges no builder
            fee. On Hyperliquid, Lighter, and Robinhood the user must have
            pre-approved this builder/integrator on-chain (and feeBps must be ≤
            the approved cap); on Aster the approval is bundled into
            registration. Overridden by the broker settings (if any) of the
            broker the user is registered through: orders the venue executes as
            limit take the limitFeeBps of those settings, orders it executes as
            market take the marketFeeBps (trigger orders count as market on
            Hyperliquid, Aster and Ondo), and Lighter/Robinhood receive both as
            maker/taker fees.
          type: object
          properties:
            feeBps:
              type: string
              pattern: \d+(\.\d+)?
              description: Broker fee in bps
              example: '15'
            id:
              type: string
              description: Broker ID
              example: '123'
          required:
            - feeBps
            - id
          title: Broker
        clientOrderId:
          description: >-
            Your custom order identifier, forwarded to the exchange as-is (max
            32 characters on Binance). On Binance, when omitted, an id carrying
            the broker rebate tag is generated instead. Ignored on
            Lighter/Robinhood when placing orders with takeProfit or stopLoss.
          type: string
        exchange:
          type: string
          enum:
            - aster
            - binance
            - bybit
            - extended
            - gate
            - hyperliquid
            - lighter
            - mexc
            - ondo
            - robinhood
          description: Supported perpetual exchange
        normalizeParams:
          description: >-
            When true, forces normalization of parameters to match exchange
            requirements if possible.
          type: boolean
        price:
          description: Limit price (optional for market orders)
          example: '1850.50'
          type: string
          pattern: \d+(\.\d+)?
        reduceOnly:
          description: >-
            If true, order will only reduce existing position. Used for TP/SL
            orders
          example: true
          type: boolean
        side:
          type: string
          enum:
            - buy
            - sell
        size:
          type: string
          pattern: \d+(\.\d+)?
          description: Order size in base currency
          example: '0.001'
        stopLoss:
          description: >-
            Stop loss order configuration (combine with takeProfit for bracket
            orders, not supported on Aster)
          type: object
          properties:
            limitPrice:
              description: Limit price for order execution (omit for market execution)
              example: '1995.00'
              type: string
              pattern: \d+(\.\d+)?
            size:
              description: >-
                Position size to close, omit to use main order size (not
                supported on Lighter/Robinhood — child orders are always
                position-tied)
              example: '0.5'
              type: string
              pattern: \d+(\.\d+)?
            triggerPrice:
              type: string
              pattern: \d+(\.\d+)?
              description: Trigger price at which to activate this order
              example: '2000.00'
          required:
            - triggerPrice
          title: TakeProfitStopLoss
        takeProfit:
          description: >-
            Take profit order configuration (combine with stopLoss for bracket
            orders, not supported on Aster)
          type: object
          properties:
            limitPrice:
              description: Limit price for order execution (omit for market execution)
              example: '1995.00'
              type: string
              pattern: \d+(\.\d+)?
            size:
              description: >-
                Position size to close, omit to use main order size (not
                supported on Lighter/Robinhood — child orders are always
                position-tied)
              example: '0.5'
              type: string
              pattern: \d+(\.\d+)?
            triggerPrice:
              type: string
              pattern: \d+(\.\d+)?
              description: Trigger price at which to activate this order
              example: '2000.00'
          required:
            - triggerPrice
          title: TakeProfitStopLoss
        timeInForce:
          description: >-
            Order time in force policy. gtc (Good-Till-Cancel) — order stays
            active until filled or manually canceled. ioc (Immediate-Or-Cancel)
            — fills immediately (fully or partially), unfilled remainder is
            canceled. fok (Fill-Or-Kill) — fills entirely and immediately or is
            canceled completely; supported only on Aster. alo (Add Liquidity
            Only) — order only adds liquidity as a maker; canceled if it would
            execute as taker. Defaults to gtc when omitted.
          example: gtc
          type: string
          enum:
            - gtc
            - ioc
            - fok
            - alo
        trigger:
          description: Optional trigger configuration for stop-loss or take-profit orders
          type: object
          properties:
            price:
              type: string
              pattern: \d+(\.\d+)?
              description: Trigger price at which the order will be activated
              example: '1800.00'
            type:
              type: string
              enum:
                - sl
                - tp
              description: 'Trigger type: sl (stop-loss) or tp (take-profit)'
              example: sl
          required:
            - price
            - type
      required:
        - asset
        - exchange
        - side
        - size
      title: CreateOrder
    CreateOrderDto:
      type: object
      properties:
        status:
          type: string
          description: Order status
          example: ok
          enum:
            - ok
      required:
        - status
      title: CreateOrder
    ErrorResponseDTO:
      type: object
      properties:
        message:
          type: string
          example: 'Invalid order id: 123'
        statusCode:
          example: 503
          type: number
      required:
        - message
      title: ErrorResponse
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.