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

# Prepare cancel withdrawal transaction

> Returns ABI-encoded calldata for cancelling a pending vault withdrawal order on the WithdrawQueue contract. Identify the vault by its BoringVault contract address and the order by its index in the WithdrawQueue. Only the original order owner can successfully submit this transaction — ownership is enforced on-chain via msg.sender.

To retrieve the required `orderIndex` parameter, call `GET /v2/amplify/withdrawalRequests` filtered by `userAddress` and `vaultAddress`; each returned item includes its `orderIndex`.



## OpenAPI

````yaml /v1.0.0/api-reference/openapi.yml get /v2/amplify/withdraw/cancel
openapi: 3.0.0
info:
  title: Paxos Labs API
  description: >
    Paxos Labs API V2.


    ---


    # API overview


    This document describes shared behavior and conventions for the Paxos Labs
    API (REST and GraphQL).


    <details>

    <summary><strong>Health check</strong></summary>


    A **health** endpoint is available for orchestrators (GitHub Actions, etc).


    | Item         |
    Details                                                                                
    |

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

    | **Path**     | `GET /health` (no version prefix; no API key or rate limit
    applied).                    |

    | **Response** | `200` with Terminus-style JSON when healthy; `503` when
    unhealthy (e.g. database down). |


    **Docker / healthcheck:** If your healthcheck uses `curl` (e.g. `curl -f
    http://localhost:3000/health`), ensure your image has curl installed. Base
    images like `node:bullseye-slim` or `node:alpine` do not—install it (e.g.
    `RUN apk add --no-cache curl` for Alpine).


    </details>


    <details>

    <summary><strong>GraphQL endpoint</strong></summary>


    A **GraphQL** API is available in addition to REST. Use it to query address
    book and vault data with a single request and flexible field selection.


    | Item                         |
    Details                                                              |

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

    | **Altair (interactive IDE)** |
    [https://api.paxoslabs.com/altair](https://api.paxoslabs.com/altair) |

    | **GraphQL endpoint**         | Same base URL with path `/graphql` for
    POST.                         |

    | **Authentication**           | Same as REST: send `x-api-key`
    header.                               |


    Open the Altair link in a browser to explore the schema and run queries.


    </details>


    <details>

    <summary><strong>Filter query parameter syntax</strong></summary>


    List endpoints that support a `filter` query parameter use a single string
    with **keys**, **operators**, and **combinators**. This keeps the number of
    query params small (AIP-160 style) while allowing flexible filtering.


    <details>

    <summary><strong>Operators</strong></summary>


    | Operator | Meaning    | Example            |

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

    | `=`      | Equals     | `chainId=1`        |

    | `!=`     | Not equals | `status!=REFUNDED` |


    </details>


    <details>

    <summary><strong>Combinators</strong></summary>


    | Combinator | Meaning                                      |
    Example                         |

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

    | `AND`      | All conditions must match (case-insensitive) | `chainId=1 AND
    name="Treasury"` |

    | `OR`       | Any condition may match (case-insensitive)   | `chainId=1 OR
    chainId=137`      |


    </details>


    <details>

    <summary><strong>Value formatting</strong></summary>


    | Type     | Use case                                  |
    Example                   |

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

    | Unquoted | Numbers, booleans, single-token values    | `chainId=1`,
    `valid=true` |

    | Quoted   | Strings with spaces or special characters | `name="Treasury
    Wallet"`  |

    | Escape   | Literal quote inside a quoted string      |
    `\"`                      |


    Allowed **keys** and **value types** (number, hex address, string, etc.) are
    defined per endpoint in the API docs and validated by the server.


    </details>


    <details>

    <summary><strong>Possible combinations (examples)</strong></summary>


    | Category              |
    Example                                             |

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

    | Single condition      |
    `chainId=1`                                         |

    | Single condition      |
    `status!=REFUNDED`                                  |

    | AND                   | `chainId=1 AND
    name="Treasury"`                     |

    | AND                   | `vaultAddress=0x123... AND
    chainId=1`               |

    | OR                    | `chainId=1 OR
    chainId=137`                          |

    | OR                    | `status=PENDING OR
    status=COMPLETE`                 |

    | Mixed AND and OR      | `chainId=1 AND (status=PENDING OR
    status=COMPLETE)` |

    | Equals and not-equals | `chainId=1 AND
    status!=REFUNDED`                    |

    | Equals and not-equals |
    `name!=""`                                          |


    Mixed AND and OR: AND has higher precedence; use parentheses for grouping.
    Without grouping, evaluation is left-to-right per implementation.


    </details>


    <details>

    <summary><strong>Implementation note</strong></summary>


    | Item      |
    Details                                                                   |

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

    | Location  |
    `src/common/utils/filter.util.ts`                                         |

    | Supported | `=`, `!=`, `AND`,
    `OR`                                                    |

    | Errors    | Invalid keys or value types return `400` with the standard
    error envelope |


    </details>


    </details>
  version: '2.0'
  contact: {}
servers:
  - url: https://api.paxoslabs.com/
    description: Production
security: []
tags: []
paths:
  /v2/amplify/withdraw/cancel:
    get:
      tags:
        - Withdraw
      summary: Prepare cancel withdrawal transaction
      description: >-
        Returns ABI-encoded calldata for cancelling a pending vault withdrawal
        order on the WithdrawQueue contract. Identify the vault by its
        BoringVault contract address and the order by its index in the
        WithdrawQueue. Only the original order owner can successfully submit
        this transaction — ownership is enforced on-chain via msg.sender.


        To retrieve the required `orderIndex` parameter, call `GET
        /v2/amplify/withdrawalRequests` filtered by `userAddress` and
        `vaultAddress`; each returned item includes its `orderIndex`.
      operationId: cancel
      parameters:
        - name: vaultAddress
          required: true
          in: query
          description: BoringVault contract address (0x + 40 hex chars)
          schema:
            example: '0xbbbb000000000000000000000000000000000001'
            type: string
        - name: orderIndex
          required: true
          in: query
          description: >-
            Index of the withdrawal order to cancel, in WithdrawQueue
            order-index units (decimal string). To retrieve a specific order
            index, call `GET /v2/amplify/withdrawalRequests` filtered by
            `userAddress` and `vaultAddress` — each returned item includes its
            `orderIndex`.
          schema:
            example: '42'
            type: string
        - name: chainId
          required: true
          in: query
          description: EVM chain ID
          schema:
            type: number
            example: 1
        - name: responseFormat
          required: false
          in: query
          description: >-
            Controls response fields. "encoded" (default): ABI-encoded calldata
            only. "full": calldata + ABI fragment, function name, args.
            "structured": ABI fragment, function name, args only.
          schema:
            enum:
              - encoded
              - full
              - structured
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PrepareCancelWithdrawResponseDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '404':
          description: Vault not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
      security:
        - api-key: []
components:
  schemas:
    PrepareCancelWithdrawResponseDto:
      type: object
      properties:
        transaction:
          $ref: '#/components/schemas/PreparedTransactionDto'
      required:
        - transaction
    ErrorResponseDto:
      type: object
      properties:
        error:
          description: Error object containing details
          allOf:
            - $ref: '#/components/schemas/ErrorObjectDto'
      required:
        - error
    PreparedTransactionDto:
      type: object
      properties:
        to:
          type: string
          description: Contract address to call
          example: '0xabcdef1234567890abcdef1234567890abcdef12'
        data:
          type: string
          description: >-
            ABI-encoded calldata (hex string). Present when responseFormat is
            "encoded" (default) or "full".
          example: 0x47e7ef24...
        value:
          type: string
          description: >-
            ETH value to send with the transaction (decimal string). Usually "0"
            for ERC-20 deposits.
          example: '0'
        abi:
          description: >-
            ABI fragment for the called function. Present when responseFormat is
            "full" or "structured".
          type: array
          items:
            type: string
        functionName:
          type: string
          description: >-
            Solidity function name. Present when responseFormat is "full" or
            "structured".
          example: deposit
        args:
          description: >-
            Positional arguments matching the ABI inputs. BigInt values are
            serialized as decimal strings. Present when responseFormat is "full"
            or "structured".
          type: array
          items:
            type: string
      required:
        - to
        - value
    ErrorObjectDto:
      type: object
      properties:
        code:
          type: number
          description: HTTP status code
          example: 400
        message:
          type: string
          description: Human-readable error message
          example: Invalid filter syntax.
        status:
          type: string
          description: Error status enum value
          enum:
            - UNKNOWN
            - INVALID_ARGUMENT
            - NOT_FOUND
            - PERMISSION_DENIED
            - UNAUTHENTICATED
            - RESOURCE_EXHAUSTED
            - INTERNAL
            - METHOD_NOT_ALLOWED
          example: INVALID_ARGUMENT
        details:
          description: Additional error details
          type: array
          items:
            $ref: '#/components/schemas/ErrorDetailDto'
      required:
        - code
        - message
        - status
    ErrorDetailDto:
      type: object
      properties:
        '@type':
          type: string
          description: Type URL identifying the error detail schema
          example: type.paxoslabs.dev/errors/BadRequest
        fieldViolations:
          description: Field-level violations for validation errors
          type: array
          items:
            $ref: '#/components/schemas/FieldViolationDto'
      required:
        - '@type'
    FieldViolationDto:
      type: object
      properties:
        field:
          type: string
          description: The field that caused the violation
          example: filter
        description:
          type: string
          description: Description of the violation
          example: vaultAddress 0x0x is an invalid hex address.
      required:
        - field
        - description
  securitySchemes:
    api-key:
      type: apiKey
      in: header
      name: x-api-key
      description: 'API key in format: pxl_<public_id>_<secret>'

````