> ## 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.

# Submit a signed broker-approval action for the given exchange

> Body shape depends on `exchange`:
- **hyperliquid** → `{ exchange: "hyperliquid", pendingData: { action, nonce }, signature }`
- **lighter** → `{ exchange: "lighter", pendingData: { txInfo, txType }, signature }`
- **robinhood** → `{ exchange: "robinhood", pendingData: { txInfo, txType }, signature }`
- **aster** → `{ exchange: "aster", pendingData: { asterChain, builder, builderName, maxFeeRate, nonce, user }, signature }`

Pass the exact `pendingData` returned by POST /exchange/broker/prepare for that exchange, plus the wallet signature over its `signData`.



## OpenAPI

````yaml https://vooi-api-app.fly.dev/swagger/json post /exchange/broker/execute
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/broker/execute:
    post:
      tags:
        - Exchange / Broker
      summary: Submit a signed broker-approval action for the given exchange
      description: >-
        Body shape depends on `exchange`:

        - **hyperliquid** → `{ exchange: "hyperliquid", pendingData: { action,
        nonce }, signature }`

        - **lighter** → `{ exchange: "lighter", pendingData: { txInfo, txType },
        signature }`

        - **robinhood** → `{ exchange: "robinhood", pendingData: { txInfo,
        txType }, signature }`

        - **aster** → `{ exchange: "aster", pendingData: { asterChain, builder,
        builderName, maxFeeRate, nonce, user }, signature }`


        Pass the exact `pendingData` returned by POST /exchange/broker/prepare
        for that exchange, plus the wallet signature over its `signData`.
      operationId: ExchangeBrokerController_executeApproveBroker
      parameters: []
      requestBody:
        required: true
        description: >-
          Per-exchange execute payload. Use the variant whose `exchange` literal
          matches the prepare call.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExecuteApproveBrokerBodyDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExecuteApproveBrokerResponseDto'
        '503':
          description: ExchangeApiError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDTO'
      security:
        - bearer: []
components:
  schemas:
    ExecuteApproveBrokerBodyDto:
      oneOf:
        - $ref: '#/components/schemas/ExecuteAsterApproveBrokerBodyDto'
        - $ref: '#/components/schemas/ExecuteHyperliquidApproveBrokerBodyDto'
        - $ref: '#/components/schemas/ExecuteLighterApproveBrokerBodyDto'
        - $ref: '#/components/schemas/ExecuteRobinhoodApproveBrokerBodyDto'
      title: ExecuteApproveBrokerBody
      type: object
      discriminator:
        propertyName: exchange
        mapping:
          aster:
            $ref: '#/components/schemas/ExecuteAsterApproveBrokerBodyDto'
          hyperliquid:
            $ref: '#/components/schemas/ExecuteHyperliquidApproveBrokerBodyDto'
          lighter:
            $ref: '#/components/schemas/ExecuteLighterApproveBrokerBodyDto'
          robinhood:
            $ref: '#/components/schemas/ExecuteRobinhoodApproveBrokerBodyDto'
    ExecuteApproveBrokerResponseDto:
      type: object
      properties:
        status:
          type: string
          description: Approval status
          example: ok
          enum:
            - ok
      required:
        - status
      title: ExecuteApproveBrokerResponse
    ErrorResponseDTO:
      type: object
      properties:
        message:
          type: string
          example: 'Invalid order id: 123'
        statusCode:
          example: 503
          type: number
      required:
        - message
      title: ErrorResponse
    ExecuteAsterApproveBrokerBodyDto:
      type: object
      properties:
        exchange:
          type: string
          enum:
            - aster
        pendingData:
          type: object
          properties:
            asterChain:
              type: string
              description: Aster chain identifier (e.g. "Mainnet").
            builder:
              type: string
              description: Builder (broker) EVM address, lowercased.
            builderName:
              type: string
              description: Human-readable builder name (may be empty).
            maxFeeRate:
              type: string
              description: >-
                Maximum fee rate the builder may charge, as a decimal string
                (e.g. "0.0015").
            nonce:
              type: number
              description: Nonce (timestamp in microseconds) used for replay protection.
            user:
              type: string
              description: Aster master user address.
          required:
            - asterChain
            - builder
            - builderName
            - maxFeeRate
            - nonce
            - user
          title: AsterApproveBrokerPendingData
          description: >-
            The pendingData payload returned by POST /exchange/broker/prepare
            for Aster.
        signature:
          type: string
          description: >-
            Signature produced by the Aster master wallet over the EIP-712
            signData from prepare.
          example: 0xabcdef...
      required:
        - exchange
        - pendingData
        - signature
      title: ExecuteAsterApproveBrokerBody
    ExecuteHyperliquidApproveBrokerBodyDto:
      type: object
      properties:
        exchange:
          type: string
          enum:
            - hyperliquid
        pendingData:
          type: object
          properties:
            action:
              type: object
              propertyNames:
                type: string
              additionalProperties:
                $ref: '#/components/schemas/Json'
              description: >-
                Hyperliquid approveBuilderFee action to be replayed in the
                execute step.
            nonce:
              type: number
              description: Nonce (timestamp in ms) used for replay protection.
          required:
            - action
            - nonce
          title: HyperliquidApproveBrokerPendingData
          description: >-
            The pendingData payload returned by POST /exchange/broker/prepare
            for Hyperliquid.
        signature:
          type: string
          description: >-
            Signature produced by the main wallet over the EIP-712 signData from
            prepare.
          example: 0xabcdef...
      required:
        - exchange
        - pendingData
        - signature
      title: ExecuteHyperliquidApproveBrokerBody
    ExecuteLighterApproveBrokerBodyDto:
      type: object
      properties:
        exchange:
          type: string
          enum:
            - lighter
        pendingData:
          type: object
          properties:
            txInfo:
              type: string
              description: Serialized transaction info.
            txType:
              type: number
              description: Transaction type identifier.
          required:
            - txInfo
            - txType
          title: LighterApproveBrokerPendingData
          description: >-
            The pendingData payload returned by POST /exchange/broker/prepare
            for Lighter.
        signature:
          type: string
          description: >-
            Signature produced by the Ethereum wallet over the hex message
            signData from prepare.
          example: 0xabcdef...
      required:
        - exchange
        - pendingData
        - signature
      title: ExecuteLighterApproveBrokerBody
    ExecuteRobinhoodApproveBrokerBodyDto:
      type: object
      properties:
        exchange:
          type: string
          enum:
            - robinhood
        pendingData:
          type: object
          properties:
            txInfo:
              type: string
              description: Serialized transaction info.
            txType:
              type: number
              description: Transaction type identifier.
          required:
            - txInfo
            - txType
          title: LighterApproveBrokerPendingData
          description: >-
            The pendingData payload returned by POST /exchange/broker/prepare
            for Robinhood.
        signature:
          type: string
          description: >-
            Signature produced by the Ethereum wallet over the hex message
            signData from prepare.
          example: 0xabcdef...
      required:
        - exchange
        - pendingData
        - signature
      title: ExecuteRobinhoodApproveBrokerBody
    Json:
      description: Any JSON value
      title: Json
      anyOf:
        - type: string
        - type: number
        - type: boolean
        - type: 'null'
        - type: array
          items:
            $ref: '#/components/schemas/Json'
        - type: object
          propertyNames:
            type: string
          additionalProperties:
            $ref: '#/components/schemas/Json'
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http

````

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