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

# List your bots



## OpenAPI

````yaml https://vooi-api-app.fly.dev/swagger/json get /bots
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:
  /bots:
    get:
      tags:
        - Bots
      summary: List your bots
      operationId: BotController_getBots
      parameters: []
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BotDto'
      security:
        - bearer: []
components:
  schemas:
    BotDto:
      type: object
      properties:
        config:
          description: >-
            Bot configuration, applied by the runner on its next poll; null when
            the stored configuration no longer matches the current schema and
            the bot must be recreated.
          anyOf:
            - type: object
              properties:
                categories:
                  description: Asset classes to trade; omit to trade every category
                  minItems: 1
                  type: array
                  items:
                    type: string
                    enum:
                      - commodities
                      - crypto
                      - etf-index
                      - forex
                      - pre-ipo
                      - stocks-asia
                      - stocks-us
                    description: Asset class of the market
                exchanges:
                  minItems: 2
                  type: array
                  items:
                    type: string
                    enum:
                      - aster
                      - binance
                      - bybit
                      - extended
                      - gate
                      - hyperliquid
                      - lighter
                      - mexc
                      - ondo
                      - robinhood
                    description: Supported perpetual exchange
                  description: >-
                    Venues the pair legs may be opened on; each pair uses two of
                    them
                leverage:
                  type: integer
                  exclusiveMinimum: 0
                  maximum: 9007199254740991
                  description: Leverage per leg, capped by each market limit
                  example: 2
                maxHoldHours:
                  default: 24
                  description: >-
                    Longest time to hold a pair before closing it even while the
                    spread still pays; low for frequent rolls, high for carry
                  type: number
                  exclusiveMinimum: 0
                maxRoundTripCostBps:
                  type: number
                  exclusiveMinimum: 0
                  description: >-
                    Most a round trip (entry plus exit, fees and book crossing)
                    may cost, in basis points of the notional; pairs are ranked
                    by expected funding over the hold minus this cost
                  example: 12
                notionalUsd:
                  type: number
                  exclusiveMinimum: 0
                  description: Notional per leg in USD
                  example: 500
                requiredExchange:
                  description: >-
                    Venue one leg of every pair must be on; omit to let any two
                    venues pair up
                  type: string
                  enum:
                    - aster
                    - binance
                    - bybit
                    - extended
                    - gate
                    - hyperliquid
                    - lighter
                    - mexc
                    - ondo
                    - robinhood
              required:
                - exchanges
                - leverage
                - maxRoundTripCostBps
                - notionalUsd
              additionalProperties: false
              title: BotConfig
            - type: 'null'
        createdAt:
          description: When the bot was created.
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
        id:
          description: Bot identifier.
          example: '12'
          type: string
          pattern: ^[1-9]\d*$
        lastError:
          description: Why the bot halted, or null when it has never halted.
          type:
            - string
            - 'null'
        state:
          description: >-
            What the runner is doing with this bot: the pair it holds and the
            order it waits on; null while the bot is flat, has never run, or its
            stored state no longer matches the current schema.
          anyOf:
            - type: object
              properties:
                asset:
                  type: string
                  description: Coin the pair trades, as the scanner names it
                baseQuantity:
                  type: string
                  description: Size of each leg in base units
                closeAttempts:
                  default: 0
                  description: >-
                    Exit orders submitted for this pair so far; after three
                    unfilled limits the exit crosses at market
                  type: integer
                  minimum: 0
                  maximum: 9007199254740991
                limitLeg:
                  type: string
                  enum:
                    - long
                    - short
                  description: >-
                    Which leg rests as a post-only limit; the other hedges at
                    market
                long:
                  type: object
                  properties:
                    baseSymbol:
                      type: string
                      description: Base symbol on this venue
                    exchange:
                      type: string
                      enum:
                        - aster
                        - binance
                        - bybit
                        - extended
                        - gate
                        - hyperliquid
                        - lighter
                        - mexc
                        - ondo
                        - robinhood
                      description: Supported perpetual exchange
                    marketId:
                      type: string
                      description: Venue-specific market identifier
                    quoteSymbol:
                      type: string
                      description: Quote symbol on this venue
                  required:
                    - baseSymbol
                    - exchange
                    - marketId
                    - quoteSymbol
                  title: BotStateLeg
                  description: Leg bought
                openedAt:
                  type: string
                  format: date-time
                  pattern: >-
                    ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                  description: >-
                    When the bot committed to the pair, just before the entry
                    order; the hold clock
                orderId:
                  anyOf:
                    - type: string
                      format: uuid
                      pattern: >-
                        ^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$
                    - type: 'null'
                  description: >-
                    Arbitrage order the bot waits on; null only in states left
                    by an older runner, which halt on load
                phase:
                  type: string
                  enum:
                    - closing
                    - holding
                    - opening
                  description: >-
                    opening — entry order working; holding — both legs open;
                    closing — exit order working
                short:
                  type: object
                  properties:
                    baseSymbol:
                      type: string
                      description: Base symbol on this venue
                    exchange:
                      type: string
                      enum:
                        - aster
                        - binance
                        - bybit
                        - extended
                        - gate
                        - hyperliquid
                        - lighter
                        - mexc
                        - ondo
                        - robinhood
                      description: Supported perpetual exchange
                    marketId:
                      type: string
                      description: Venue-specific market identifier
                    quoteSymbol:
                      type: string
                      description: Quote symbol on this venue
                  required:
                    - baseSymbol
                    - exchange
                    - marketId
                    - quoteSymbol
                  title: BotStateLeg
                  description: Leg sold
                submittedAt:
                  type: string
                  format: date-time
                  pattern: >-
                    ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
                  description: When the current order was submitted
              required:
                - asset
                - baseQuantity
                - limitLeg
                - long
                - openedAt
                - orderId
                - phase
                - short
                - submittedAt
              title: BotState
            - type: 'null'
        status:
          type: string
          enum:
            - halted
            - not_started
            - running
          description: >-
            running — the bot executes scheduled ticks. not_started — it has
            never been started, or you stopped it. halted — it hit a state it
            will not act on and stopped itself; `lastError` says which.
        updatedAt:
          description: When the bot last changed.
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
      required:
        - config
        - createdAt
        - id
        - lastError
        - state
        - status
        - updatedAt
      title: Bot
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http

````

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