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

# Cancel Orders (Batch)

This endpoint cancels multiple orders by internal `orderIds` only. Send `{ "orderIds": [...] }` with at least one UUIDv4 order ID. This legacy endpoint has no documented maximum batch size, but all orders that resolve must belong to one market.

<Info>
  To cancel by either `orderIds` or `clientOrderIds`, use [Batch Cancel Orders (Combined)](/api-reference/trading/batch-cancel).
</Info>

## Authentication and delegation

Use a scoped API token with HMAC signing and the `trading` scope. To cancel for a partner sub-account, add `?onBehalfOf=<subProfileId>`; the target must belong to the authenticated partner and the token must also have `delegated_signing`. Include the query string in the HMAC-signed path.

## Results

* `200 OK` returns the cancelled order IDs.
* `207 Multi-Status` returns both `canceled` and normalized `failed` records.
* `400 Bad Request` with `Failed to cancel any orders` means every attempted cancellation failed.
* `404 Orders not found` means none of the supplied IDs resolved.

If some supplied IDs do not resolve but at least one does, missing IDs are omitted rather than returned as failures. All resolved orders must belong to the authenticated owner and to the same market.

Cancellation failures use `ORDER_NOT_FOUND` with `Order not found or already canceled`, or `UNKNOWN_ERROR` with `Failed to cancel order`. Cancellation remains available in `normal`, `post_only`, and `cancel_only`; `disabled` returns `425 Too Early`.


## OpenAPI

````yaml POST /orders/cancel-batch
openapi: 3.0.0
info:
  title: Limitless Exchange API
  description: >-

    # Limitless Exchange Trading API


    *Production-ready API for prediction market trading, portfolio management,
    and market data*


    > 🎯 **Quick Navigation**: [Authentication](#tag/authentication) |
    [Markets](#tag/markets) | [Trading](#tag/trading) |
    [Portfolio](#tag/portfolio)


    ---
      


    ## 🚀 Quick Start


    Choose your preferred programming language for complete end-to-end
    implementation:


    ### Overview


    The Limitless Exchange API offers both REST and WebSocket integration:


    **REST API (Trading)**:

    1. **🔐 Authentication**: Use API key for all programmatic access

    2. **📊 Fetch Market Data**: Get market info including venue contract
    addresses (once per market)

    3. **📋 Order Creation**: Build and sign orders using EIP-712 structured
    data

    4. **🚀 Order Submission**: Submit signed orders and receive confirmations


    **WebSocket API (Real-Time Data)**:

    1. **🔌 Connection**: Connect to `/markets` namespace for real-time updates

    2. **📊 Subscriptions**: Subscribe to market prices and position changes

    3. **📡 Events**: Handle live market data and transaction updates


    ### 🔐 Authentication for API Users


    > **⚠️ DEPRECATION NOTICE**: Cookie-based session authentication is
    deprecated and will be removed within weeks. Please migrate to API keys
    immediately.


    | Method | Header | Status |

    |--------|--------|--------|

    | **API Key** | `X-API-Key: lmts_...` | ✅ Required for programmatic access |

    | Cookie Session | `Cookie: limitless_session=...` | ⚠️ Deprecated (removal
    imminent) |


    **Getting an API Key**


    API keys can only be created via the Limitless Exchange UI:

    1. Log in to [limitless.exchange](https://limitless.exchange) using your
    wallet

    2. Click your profile menu (top right)

    3. Select "Api keys"

    4. Generate a new key


    **Using Your API Key**


    Include in all requests via the `X-API-Key` header:


    ```bash

    # REST API

    curl -H "X-API-Key: lmts_your_key_here"
    https://api.limitless.exchange/markets


    # WebSocket - pass X-API-Key header during connection handshake

    ```


    ### Migration from Cookie to API Key


    If you're currently using cookie-based authentication, migrate by:


    1. **Generate an API key** via the UI (profile menu → Api keys)

    2. **Replace cookie header** with API key header:


    ```diff

    # Before (deprecated)

    - Cookie: limitless_session=your_session_token


    # After

    + X-API-Key: lmts_your_key_here

    ```


    3. **Remove session management code** - no more login flow or cookie
    handling needed


    ### Important: Venue System for CLOB Markets


    CLOB markets use a **venue system** where each market is associated with
    specific contract addresses. Before placing orders:


    1. **Fetch market data once**: `GET /markets/:slug` returns venue
    information

    2. **Use venue.exchange**: This is the `verifyingContract` for EIP-712 order
    signing

    3. **Cache the venue**: Venue data is static per market - fetch once and
    reuse


    **Sample venue response:**

    ```json

    {
      "venue": {
        "exchange": "0xA1b2C3...",
        "adapter": "0xD4e5F6..."
      }
    }

    ```


    ### Required Approvals


    Before trading, set up token approvals based on order type:


    | Order Type | Market Type | Approve To |

    |------------|-------------|------------|

    | BUY | All CLOB | USDC → `venue.exchange` |

    | SELL | Simple CLOB | CT → `venue.exchange` |

    | SELL | NegRisk/Grouped | CT → `venue.exchange` AND `venue.adapter` |


    ### Checksummed Addresses


    All addresses must use **checksummed format** (EIP-55 mixed-case):

    - Authentication: `x-account` header

    - Orders: `maker` and `signer` fields

    - Example: `0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed`


    ### Implementation Guides


    **[🐍 Python Quick Start](#description/-python-quick-start)**

    - REST API: eth-account, requests, and web3.py libraries

    - WebSocket: python-socketio, asyncio integration


    **[☕ Java Quick Start](#description/-java-quick-start)**  

    - REST API: Web3j, OkHttp3, and Jackson libraries


    **[📦 Node.js/TypeScript Quick
    Start](#description/-nodejs-typescript-quick-start)**

    - REST API: viem, ethers, and cross-fetch libraries

    - WebSocket: socket.io-client for real-time trading

    - Full TypeScript support with end-to-end examples


    **[🔌 WebSocket Integration](#description/-websocket-integration)**

    - Real-time market data and position updates

    - Production-ready Python client with authentication


    ---
      


    ## 🐍 Python Quick Start


    Complete end-to-end Python implementation for Limitless Exchange API
    integration.
      


    ### 🐍 Python E2E Order Creation Guide


    Complete Python implementation guide is being loaded from external
    documentation...


    **Guide Contents:**

    - 🔐 Complete authentication flow with eth-account

    - 📋 Order construction with Web3.py calculations

    - ✍️ EIP-712 structured data signing

    - 🚀 Order submission with requests library

    - ⚠️ Comprehensive error handling

    - 🛠️ Production deployment considerations


    *For the complete Python guide, ensure the file is available at
    docs/scripts-samples/python-e2e-order-creation.md*
        


    ## ☕ Java Quick Start


    Complete end-to-end Java implementation for Limitless Exchange API
    integration.
      


    ### ☕ Java E2E Order Creation Guide


    Complete Java enterprise implementation guide is being loaded from external
    documentation...


    **Guide Contents:**

    - 🔐 Complete authentication flow with Web3j

    - 📋 Order construction with BigInteger precision

    - ✍️ EIP-712 structured data signing

    - 🚀 Order submission with OkHttp3

    - ⚠️ Enterprise error handling patterns

    - 🏗️ Production Maven project structure


    *For the complete Java guide, ensure the file is available at
    docs/scripts-samples/java-e2e-order-creation.md*
        


    ## 📦 Node.js/TypeScript Quick Start


    Complete end-to-end Node.js/TypeScript implementation for trading and
    WebSocket subscriptions.
      


    ### 📦 Node.js/TypeScript Trading & WebSocket Guide


    Complete Node.js/TypeScript implementation guide is being loaded from
    external documentation...


    **Guide Contents:**

    - 🔐 **Authentication**: Wallet-based auth with ethers and viem

    - 📋 **Order Creation**: EIP-712 signing with viem WalletClient

    - 🚀 **Order Submission**: REST API integration with cross-fetch

    - 🔌 **WebSocket Subscriptions**: socket.io-client for real-time updates

    - 📊 **Market Data**: AMM prices and CLOB orderbook subscriptions

    - ⚠️ **Type Safety**: Full TypeScript support with proper types

    - 🛠️ **Production Ready**: Complete end-to-end working example


    **Key Features:**

    - **Combined Subscriptions**: Subscribe to both AMM and CLOB markets
    simultaneously

    - **Authentication Flow**: Complete wallet-based authentication with session
    management

    - **Trading Integration**: Place orders and receive real-time updates

    - **TypeScript First**: Type-safe implementation with proper interfaces


    *For the complete Node.js guide, ensure the file is available at
    docs/scripts-samples/node-socket-trading-and-subscribe.md*
        


    ## 🔌 WebSocket Integration


    Real-time market data and position updates using WebSocket connections.
      


    ### 🔌 WebSocket Real-Time Integration Guide


    Complete WebSocket implementation guide is being loaded from external
    documentation...


    **Guide Contents:**

    - 🔌 **WebSocket Connection**: python-socketio client with async support

    - 🔐 **Authentication**: JWT session cookie integration

    - 📊 **Market Subscriptions**: Real-time price updates and position changes

    - ⚡ **Event Handling**: Comprehensive event processing patterns

    - 🔄 **Auto-Reconnection**: Production-ready reconnection logic

    - 🛠️ **Error Recovery**: Robust error handling and fallback strategies


    **Key Features:**

    - **Public Mode**: Market price updates without authentication

    - **Authenticated Mode**: Full access to positions and transactions

    - **Multi-Market Support**: Subscribe to multiple markets simultaneously

    - **Production Ready**: Tested patterns for production deployment


    *For the complete WebSocket guide, ensure the file is available at
    docs/scripts-samples/python-socket-subscribe.md*
        
  version: '1.0'
  contact:
    name: API Support
    url: https://limitless.exchange
    email: hey@limitless.network
servers:
  - url: https://api.limitless.exchange
    description: Production API
security: []
tags:
  - name: Authentication
    description: User authentication and session management
  - name: Markets
    description: Browse, search, and analyze prediction markets
  - name: Market Navigation
    description: Navigation tree, market pages, and property filters
  - name: Trading
    description: Create, manage, and cancel orders
  - name: Portfolio
    description: Position tracking, trade history, and performance
  - name: Feed
    description: Public trading activity feeds
paths:
  /orders/cancel-batch:
    post:
      tags:
        - Trading
      summary: Cancel multiple orders in batch
      operationId: OrderController_cancelOrderBatch
      parameters:
        - name: onBehalfOf
          required: false
          in: query
          description: >-
            Partner sub-account profile ID. Requires delegated_signing in
            addition to trading.
          schema:
            type: integer
            minimum: 1
            example: 326
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeleteOrderBatchDto'
      responses:
        '200':
          description: All orders successfully cancelled
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CancelOrderBatchResponseDto'
        '207':
          description: Partial success - some orders cancelled, some failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CancelOrderBatchPartialResponse'
        '400':
          description: >-
            Orders from different markets, invalid order data, or no orders
            could be cancelled
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ValidationErrorResponse'
                  - $ref: '#/components/schemas/NestErrorResponse'
                  - $ref: '#/components/schemas/CancelOrderBatchAllFailedResponse'
        '401':
          description: User not authenticated or not the owner of all orders
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NestErrorResponse'
        '403':
          description: >-
            Missing trading or delegated_signing scope, or unauthorized
            delegation target
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/ErrorMessageResponse'
                  - $ref: '#/components/schemas/NestErrorResponse'
        '404':
          description: None of the supplied internal order IDs resolved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NestErrorResponse'
        '425':
          description: >-
            Cancellation is temporarily blocked because trading is disabled by
            maintenance mode.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TradingDisabledErrorResponse'
        '500':
          description: Unexpected batch cancellation failure
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessageResponse'
      security:
        - HmacAuth: []
components:
  schemas:
    DeleteOrderBatchDto:
      type: object
      properties:
        orderIds:
          type: array
          description: Array of order IDs to be cancelled in a single batch operation
          example:
            - 6f52b6d2-6c9e-4a5c-8a4f-28ab4b7ff203
            - 9e31c452-8a2b-42d1-b327-65f18d07dc96
          minItems: 1
          items:
            type: string
            format: uuid
            pattern: >-
              ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$
      additionalProperties: false
      required:
        - orderIds
    CancelOrderBatchResponseDto:
      type: object
      properties:
        message:
          type: string
          description: Confirmation message for the cancelled orders
          example: Orders canceled successfully
        canceled:
          type: array
          description: Array of successfully cancelled order IDs
          example:
            - 611badac-8dfc-48a0-b09e-59654adea1c5
          items:
            type: string
            format: uuid
        failed:
          description: Array of orders that failed to cancel with reasons
          type: array
          items:
            $ref: '#/components/schemas/CancelOrderFailure'
      required:
        - message
    CancelOrderBatchPartialResponse:
      type: object
      properties:
        message:
          type: string
          example: Orders canceled successfully
        canceled:
          type: array
          minItems: 1
          items:
            type: string
            format: uuid
        failed:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/CancelOrderFailure'
      required:
        - message
        - canceled
        - failed
    ValidationErrorResponse:
      type: object
      properties:
        message:
          type: array
          items:
            $ref: '#/components/schemas/ValidationErrorItem'
        error:
          type: string
          enum:
            - Bad Request
        statusCode:
          type: number
          enum:
            - 400
      additionalProperties: false
      required:
        - message
        - error
        - statusCode
    NestErrorResponse:
      type: object
      properties:
        message:
          type: string
        error:
          type: string
        statusCode:
          type: integer
      additionalProperties: false
      required:
        - message
        - error
        - statusCode
    CancelOrderBatchAllFailedResponse:
      type: object
      properties:
        message:
          type: string
          enum:
            - Failed to cancel any orders
        failed:
          minItems: 1
          type: array
          items:
            $ref: '#/components/schemas/CancelOrderFailure'
      additionalProperties: false
      required:
        - message
        - failed
    ErrorMessageResponse:
      type: object
      properties:
        message:
          type: string
      additionalProperties: false
      required:
        - message
    TradingDisabledErrorResponse:
      type: object
      properties:
        code:
          type: string
          enum:
            - trading_disabled
        message:
          type: string
          enum:
            - Trading is currently disabled.
        mode:
          type: string
          enum:
            - disabled
        resumeAt:
          type: string
          format: date-time
      additionalProperties: false
      required:
        - code
        - message
        - mode
    CancelOrderFailure:
      type: object
      properties:
        orderId:
          type: string
          description: Order ID that failed to cancel
          example: b53f0e4b-1529-45cc-ad39-e27f4c6eab5a
          format: uuid
        reason:
          type: string
          description: Error code indicating the reason for failure
          example: ORDER_NOT_FOUND
          enum:
            - ORDER_NOT_FOUND
            - UNKNOWN_ERROR
        message:
          type: string
          description: User-friendly error message
          example: Order not found or already canceled
      required:
        - orderId
        - reason
        - message
    ValidationErrorItem:
      type: object
      properties:
        field:
          type: string
          example: orderIds
        message:
          type: string
          example: orderIds should not be empty
      additionalProperties: false
      required:
        - field
        - message
  securitySchemes:
    HmacAuth:
      type: apiKey
      in: header
      name: lmts-api-key
      description: >-
        Scoped API token with HMAC-SHA256 signing. Requires three headers:
        lmts-api-key (token ID), lmts-timestamp (ISO-8601), lmts-signature
        (Base64-encoded HMAC). See Authentication docs for details.

````