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

# Post apiv1positionsbatch close all

> Close all open positions in a single batch ("panic close").

 Submits a MARKET reduce-only close for every open position owned by the
 caller, optionally filtered to one trading pair or a set of them, and to
 one side (LONG or SHORT). Best-effort and partial: each position closes
 independently and per-position failures are reported in `results` rather
 than aborting the batch. Each close draws one item from the
 risk-reduction rate limit (an empty call draws one).
 The first 100 are charged before anything is sent: over budget, the
 whole call is refused with 429 and nothing is closed. Past 100 open
 positions the rest are charged 100 at a time as the call reaches them,
 and those the budget does not cover are not sent: they come back in
 `results` with `RATE_LIMIT_EXCEEDED`, to be retried.



## OpenAPI

````yaml /proto-openapi/api/openapi.yaml post /api/v1/positions/batch-close-all
openapi: 3.0.3
info:
  title: Monaco Protocol API
  description: REST API for the Monaco Protocol hybrid CLOB exchange.
  version: 1.0.0
servers:
  - url: https://staging.apimonaco.xyz
    description: Staging server (Testnet)
security: []
tags:
  - name: AccountsService
  - name: ApplicationsService
  - name: AuthService
  - name: BuildercodeRewardsService
  - name: CopyTradingService
  - name: DelegatedAgentsService
  - name: FaucetService
  - name: FeesService
  - name: HealthService
  - name: ManagedMarketsService
    description: |-
      Wallet-authenticated maker assignments. The signed session must match both
       configured maker user and application. Owner IDs are process fences, never auth.
       Only wallet sessions are supported; delegated-agent sessions receive 403.
  - name: MarginAccountsService
    description: |-
      Current public isolated-margin semantics:
       - a user has one parent margin account per application scope
       - opening orders create or reuse isolated position buckets under that parent
       - parent account creation is handled internally by margin workflows
  - name: MarketService
  - name: OrderbookService
  - name: OrdersService
  - name: PositionsService
    description: |-
      Current public isolated-margin semantics:
       - positions link to a parent margin account and, when applicable, a bucket id
       - opening orders create or reuse isolated position buckets under the parent
       - users can open another isolated position by reusing the parent account with a different market bucket
  - name: PulseService
  - name: SweeperService
  - name: TraderCodeService
  - name: TradesService
  - name: WhitelistService
  - name: WithdrawalsService
paths:
  /api/v1/positions/batch-close-all:
    post:
      tags:
        - PositionsService
      description: |-
        Close all open positions in a single batch ("panic close").

         Submits a MARKET reduce-only close for every open position owned by the
         caller, optionally filtered to one trading pair or a set of them, and to
         one side (LONG or SHORT). Best-effort and partial: each position closes
         independently and per-position failures are reported in `results` rather
         than aborting the batch. Each close draws one item from the
         risk-reduction rate limit (an empty call draws one).
         The first 100 are charged before anything is sent: over budget, the
         whole call is refused with 429 and nothing is closed. Past 100 open
         positions the rest are charged 100 at a time as the call reaches them,
         and those the budget does not cover are not sent: they come back in
         `results` with `RATE_LIMIT_EXCEEDED`, to be retried.
      operationId: batch_close_all_positions
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BatchCloseAllRequest'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchCloseAllResponse'
        '429':
          description: >-
            Order rate limit exceeded — each call draws one item per open
            position it closes (at least 1) from the per-account risk-reduction
            budget it shares with cancels (and the budget the account family
            shares). Returned when the first 100 closes do not fit; positions
            past 100 that do not fit are reported per position as
            RATE_LIMIT_EXCEEDED instead. Retry after the interval in
            details.retryAfter
      security:
        - monacoSignature: []
        - monacoHttpSignature: []
components:
  schemas:
    BatchCloseAllRequest:
      type: object
      properties:
        tradingPairId:
          type: string
          description: |-
            Optional trading-pair filter. When set, only open positions on this
             trading pair are closed; otherwise every open position is closed. Cannot
             be combined with `trading_pair_ids`.
          nullable: true
          format: uuid
        slippageToleranceBps:
          type: integer
          description: >-
            Optional slippage tolerance (basis points) applied to each MARKET
            close.
          format: int32
          nullable: true
        tradingPairIds:
          maxItems: 256
          type: array
          items:
            type: string
            minLength: 1
            format: uuid
          description: >-
            Optional set of trading-pair UUIDs, at most 256. When non-empty,
            only
             open positions on one of these pairs are closed. An empty or omitted
             list applies no pair filter, so every open position is closed. Duplicate
             ids are ignored, and an id that matches no open position closes nothing.
             Cannot be combined with `trading_pair_id`. Delegated sessions must pass
             `trading_pair_id` or a non-empty `trading_pair_ids`.
          nullable: true
        side:
          type: string
          description: >-
            Optional side filter: LONG or SHORT (case-insensitive). When set,
            only
             open positions on that side are closed. It applies on top of the pair
             filter, and on its own does not meet the delegated-session pair
             requirement.
          nullable: true
      additionalProperties: false
    BatchCloseAllResponse:
      type: object
      properties:
        totalRequested:
          type: integer
          description: Number of open positions the batch attempted to close.
          format: int32
          nullable: true
        totalClosed:
          type: integer
          description: >-
            Number of positions whose close order was accepted by the matching
            engine
             (SUCCESS, PARTIAL, or PENDING).
          format: int32
          nullable: true
        totalFailed:
          type: integer
          description: >-
            Number of positions whose close failed (validation, lookup, or a
            rejected
             close order).
          format: int32
          nullable: true
        results:
          type: array
          items:
            $ref: '#/components/schemas/BatchCloseResult'
          nullable: true
    BatchCloseResult:
      type: object
      properties:
        positionId:
          type: string
          description: Position UUID this result is for.
          nullable: true
        closeOrderId:
          type: string
          description: Close order UUID. Present when the close order was accepted.
          nullable: true
        status:
          type: string
          description: 'Close outcome: SUCCESS, PARTIAL, or PENDING. Present when accepted.'
          nullable: true
        submittedQuantity:
          type: string
          description: Quantity submitted on the close order. Present when accepted.
          nullable: true
        error:
          allOf:
            - $ref: '#/components/schemas/BatchCloseError'
          description: Failure detail. Present when this position could not be closed.
          nullable: true
    BatchCloseError:
      type: object
      properties:
        code:
          type: string
          description: >-
            Machine-readable error code (e.g. POSITION_NOT_FOUND,
            INVALID_REQUEST,
             MATCHING_ENGINE_ERROR).
          nullable: true
        message:
          type: string
          description: Human-readable error message.
          nullable: true
  securitySchemes:
    monacoSignature:
      type: apiKey
      description: >-
        Ed25519 session-key request signing. Every authenticated request carries
        three headers: `X-Monaco-PublicKey` (64-char lowercase-hex session
        public key), `X-Monaco-Timestamp` (Unix milliseconds, within 30s of
        server time), and `X-Monaco-Signature` (hex ed25519 signature). The
        signature is over `METHOD\npath?query\ntimestamp_ms\nSHA256_hex(body)`,
        where the body hash is the SHA-256 of the empty byte string when there
        is no body. Obtain the session keypair from `POST
        /api/v1/auth/challenge` followed by `POST /api/v1/auth/verify`.
      name: X-Monaco-Signature
      in: header
    monacoHttpSignature:
      type: apiKey
      description: >-
        RFC 9421 Ed25519 session-key request signatures. Send Signature-Input,
        Signature, and Content-Digest together; never combine them with
        X-Monaco-* credentials. The monaco signature covers @method, @path,
        @query, and content-digest in that order, with created (Unix seconds
        within 30s of server time), keyid (registered lowercase-hex session
        public key), and alg=ed25519 parameters. Content-Digest uses RFC 9530
        sha-256 over the exact body bytes, including the empty body. Query
        coverage retains ordering and percent encoding. Timestamp freshness does
        not reject repeated identical requests; use endpoint idempotency where
        supported. Existing legacy signing remains supported during server-first
        migration; SDK RFC 9421 signing is opt-in. See
        https://docs.0xmonaco.com/reference/http-message-signatures for the
        complete profile and trust model.
      name: Signature
      in: header

````

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