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

# Get submitOrder calldata

> Returns the TransitStation address, ABI-encoded `submitOrder(...)` calldata, and ETH `value` for a cross-chain Transit order.



## OpenAPI

````yaml /v1.0.0/api-reference/openapi.yml get /v1/transit/orders/quote
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: http://localhost:8500
    description: Local
  - url: https://api.paxoslabs.com/
    description: Production
security: []
tags: []
paths:
  /v1/transit/orders/quote:
    get:
      tags:
        - Transit
        - Transit
      summary: Get submitOrder calldata
      description: >-
        Returns the TransitStation address, ABI-encoded `submitOrder(...)`
        calldata, and ETH `value` for a cross-chain Transit order.
      operationId: getOrderQuote
      parameters:
        - name: userAddress
          required: true
          in: query
          description: >-
            User wallet address that receives the wantAsset on the destination
            chain.
          schema:
            example: '0x1234567890abcdef1234567890abcdef12345678'
            type: string
        - name: offerAmount
          required: true
          in: query
          description: >-
            Amount of `offerAsset` to send, in token base units (decimal
            string). Minimum order size is $35 USD. For example, with USDC (6
            decimals), the minimum is 35000000 base units.
          schema:
            example: '50000000'
            type: string
        - name: offerAsset
          required: true
          in: query
          description: Asset being offered (debited on the source chain).
          schema:
            example: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'
            type: string
        - name: wantAsset
          required: true
          in: query
          description: Asset desired (credited on the destination chain).
          schema:
            example: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'
            type: string
        - name: destinationChainId
          required: true
          in: query
          description: >-
            EVM chain ID of the destination chain. Server translates this to the
            destination chain EID.
          schema:
            example: 8453
            type: number
        - name: sourceChainId
          required: true
          in: query
          description: >-
            EVM chain ID of the source chain (where the transaction is
            submitted).
          schema:
            type: number
            example: 1
        - name: permitSignature
          required: false
          in: query
          description: >-
            EIP-2612 permit signature (65-byte hex, from the authorize step).
            Required when permitDeadline is provided.
          schema:
            example: 0xabc...
            type: string
        - name: permitDeadline
          required: false
          in: query
          description: >-
            Permit deadline as Unix timestamp. Required when permitSignature is
            provided.
          schema:
            example: 9999999999
            type: number
        - name: integratorFee
          required: false
          in: query
          description: >-
            Integrator fee charged on offerAsset in the asset's base units. For
            example, if the offerAsset is USDC, which has 6 decimals, provide a
            value of 10000 to charge a fee of $0.01. When provided,
            integratorFeeReceiver is required.
          schema:
            example: '10000'
            type: string
        - name: integratorFeeReceiver
          required: false
          in: query
          description: >-
            Address to receive the integrator fee. Required when integratorFee
            is provided.
          schema:
            example: '0x1234567890abcdef1234567890abcdef12345678'
            type: string
        - name: distributorCode
          required: false
          in: query
          description: >-
            Optional 32-byte hex code (0x + 64 hex chars) tagging the source of
            funds. Emitted on-chain with the order. When omitted, uses the
            organization's default distributor code if one is configured,
            otherwise defaults to the zero hash.
          schema:
            example: '0x0000000000000000000000000000000000000000000000000000000000000000'
            type: string
        - name: responseFormat
          required: false
          in: query
          description: >-
            Controls which fields appear in the transaction response. "encoded"
            (default): only ABI-encoded calldata. "full": encoded calldata plus
            ABI fragment, function name, and args. "structured": ABI fragment,
            function name, and args only (no encoded data).
          schema:
            enum:
              - encoded
              - full
              - structured
            type: string
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetOrderQuoteResponseDto'
        '400':
          description: Invalid request parameters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
        '404':
          description: No route found for the requested asset pair / chains
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponseDto'
      security:
        - {}
        - api-key: []
components:
  schemas:
    GetOrderQuoteResponseDto:
      type: object
      properties:
        transaction:
          $ref: '#/components/schemas/GetOrderQuoteTransactionDto'
        amountOut:
          type: string
          description: >-
            Net amount credited toward the order after fees, in want-asset base
            units (decimal string). Equals offerAmount - protocolFee and
            integratorFee, converted to want-asset base units.
          example: '992500'
        protocolFee:
          type: string
          description: >-
            Protocol fee charged on the order, in offer-asset base units
            (decimal string). Most routes price this as a percentage of the
            order; USDG↔USDG transfers between Ethereum and Robinhood charge a
            flat dollar-denominated bridging fee instead.
          example: '2500'
        integratorFee:
          type: string
          description: >-
            Integrator fee charged on the order, in offer-asset base units
            (decimal string). "0" when no integrator fee applies.
          example: '5000'
        totalFees:
          type: string
          description: >-
            Total fees charged on the order, in offer-asset base units (decimal
            string). Sum of protocolFee and integratorFee.
          example: '7500'
        estimatedLatencyMs:
          type: number
          description: >-
            Estimated time for order fulfillment in milliseconds, based on the
            asset pair and order volume. Undefined when no SLA data is available
            for the route.
          example: 300000
      required:
        - transaction
        - amountOut
        - protocolFee
        - integratorFee
        - totalFees
    ErrorResponseDto:
      type: object
      properties:
        error:
          description: Error object containing details
          allOf:
            - $ref: '#/components/schemas/ErrorObjectDto'
      required:
        - error
    GetOrderQuoteTransactionDto:
      type: object
      properties:
        to:
          type: string
          description: Transit station address the submitOrder transaction is sent to.
          example: '0xabcdef1234567890abcdef1234567890abcdef12'
        data:
          type: string
          description: >-
            ABI-encoded `submitOrder(...)` 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). "0" for
            ERC-20-only routes.
          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: submitOrder
        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>'

````