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

# EVM venues

> Every venue of the EVM routes, one row per venue and chain, in a fixed order: its label
(`dex`), its `id`, the contracts it is quoted and built with, where those addresses come
from (`sources`), and whether the router has verified them against the chain
(`verification`). Only a `servable` venue (verification `verified`) is quoted. Each venue
is checked at start, and again with backoff until it passes: the bytecode of the factory,
router, quoter and wrapped token, the router's and quoter's `factory()` and `WETH()`
pointing at the manifest, the V3 fee tiers. `dex` (the `label` of quotes) and `aliases`
(the `id`) are what `dexes` and `excludeDexes` accept, ignoring case and punctuation. A
`dex` label is the same on every chain: in a filter it names the venue of the quote's
`chain`. Always `200`.

| `dex` | Chain | `id` |
| --- | --- | --- |
| Uniswap V2, Uniswap V3 | `eth` (1) | `eth-uniswap-v2`, `eth-uniswap-v3` |
| PancakeSwap V2, PancakeSwap V3 | `bsc` (56) | `bsc-pancakeswap-v2`, `bsc-pancakeswap-v3` |
| Uniswap V2, Uniswap V3 | `base` (8453) | `base-uniswap-v2`, `base-uniswap-v3` |
| Uniswap V2, Uniswap V3 | `robinhood` (4663) | `robinhood-uniswap-v2`, `robinhood-uniswap-v3` |


Only a venue whose `servable` is `true` (its `verification.status` is `verified`) is quoted. Its `dex` is the `label` of quotes; `dex` and `aliases` (its `id`) are what `dexes` and `excludeDexes` in [`/evm/quote`](/api-reference/router/evm-quote) accept, and its `router` is the `spender` of the build's approvals.


## OpenAPI

````yaml router.openapi.yaml GET /evm/venues
openapi: 3.1.0
info:
  title: Raze Swap Router API
  version: 1.0.0
  description: >
    Quotes and **unsigned** transactions for swaps on Solana, routed through a
    deploy of the `swap`

    program over the venues `GET /venues` lists as `buildable` and `servable`,
    and, under `/evm`, on

    Ethereum, BNB Chain, Base and Robinhood Chain (see **EVM routes** below).
    The router **never

    signs and never sends**: you get a quote, then the instructions (or a
    serialized, unsigned

    transaction), and you sign and broadcast from your backend.


    **Public router.** `https://router.raze.bot` is Raze's router. It takes the
    same **API key** as

    the market-data API (`x-api-key`, `Authorization: Bearer` or `?apiKey=`;
    only `/health`,

    `/ready`, `/evm/health` and `/evm/ready` are open), shares the account's
    limit a

    minute with it and spends credits for each request it lets in. Its Solana
    routes have no path

    prefix (`/quote`, `/swap-instructions`, …),

    issues no `routeTicket`, and builds for Raze's deploy of the `swap` program,

    `DADMMjfNnY6z8H9h9RfHZ9tfarBySsj4Yb65qLyKJDAD`. A missing or unknown key
    answers `401` and a

    request over the limit `429`, both with the API's body,

    `{"error": {"code": "unauthorized" | "rate_limited", "message"}}`.


    **EVM routes (`/evm`).** The same host quotes and builds swaps on Ethereum
    (`eth`, chain id 1),

    BNB Chain (`bsc`, 56), Base (`base`, 8453) and Robinhood Chain (`robinhood`,
    4663), over Uniswap

    V2 and V3 (eth, base, robinhood) and PancakeSwap V2 and V3 (bsc): `GET` and
    `POST /evm/quote`,

    `POST /evm/swap` (alias `POST /evm/swap-instructions`), `GET /evm/venues`,
    `GET /evm/chains`,

    and the open `GET /evm/health` and `GET /evm/ready`. Same key, same limit a
    minute, same

    credits. They speak the Solana routes' API, so Jupiter's: the same parameter
    and field names

    (`inputMint`, `outputMint`, `amount`, `slippageBps`, `routePlan`,
    `otherAmountThreshold`,

    `quoteResponse`, `userPublicKey`, …), the conventions and the error shape
    below, `404 not_found`

    for an unknown path (`/evm/build` and `/evm/deployments` are gone) and `405`
    with `Allow` for a

    wrong method. What differs, because EVM does:

    - `chain` is required: `eth`, `bsc`, `base`, `robinhood` or the chain id
    (alias `chainId`).

    - Mints and wallets are `0x` addresses in any case (answers are lower case);
    the native coin is
      `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE` (or `native`). Inside a `routePlan` the wrapped
      token stands for it.
    - Amounts are uint256 in base units: decimal strings of any size, or JSON
    integers up to
      2^64 − 1. `contextSlot` is the block number.
    - ExactIn only (`ExactOut` is `400`), `maxHops` at most 3 (default 2), one
    venue per route, no
      split, no platform fee (`platformFeeBps` or `feeBps` above 0 is `400`, not ignored).
    - The build returns unsigned transactions instead of instructions:
    `setupTransactions` (the
      approvals), then `swapTransaction`, simulated together, that you sign and send in order from
      your own RPC. It builds only a quote this router made and still holds (`quoteResponse.quoteId`),
      and a `quoteResponse` that says otherwise about it is `400 quote_mismatch`.
    - Errors carry no `quoteId`. A request is cut at 10 seconds (`503 rpc`,
    `request_timeout`).


    **One router, one `swap` deploy.** A router builds for the program address
    in its

    `ROUTER_SWAP_PROGRAM_ID` (the `programId` of every `swapInstruction` is that
    address) and

    reads that deploy's on-chain config: a venue the config has no live row for
    is never served,

    and while the config is paused every build answers `503`. A client with its
    own deploy runs

    its own router: it has no keys, no accounts and no rate limit and listens on
    loopback by

    default (`ROUTER_LISTEN`), so keep it behind your own gateway.


    **Conventions of the Solana routes:**

    - Amounts are integers in the token's base units (lamports, atoms). In
    quotes and builds the
      u64 amounts are decimal **strings** (`inAmount`, `outAmount`, `otherAmountThreshold`,
      `swapInfo.inAmount` / `outAmount`, `platformFee.amount`, every `costs.*Lamports*` field).
      `slippageBps`, `contextSlot`, `minReturn`, `maxAmountIn`, `computeUnits`,
      `loadedAccountsDataSize`, `lastValidBlockHeight` and every `transactionConfig` field are JSON
      numbers.
    - Mints and wallets are base58 addresses; wrapped SOL is
    `So11111111111111111111111111111111111111112`.

    - Venue labels (`label`, `dexes`, `excludeDexes`) are the `dex` names of
    `GET /venues`; input
      labels match case- and punctuation-insensitively, aliases included.
    - Request bodies are read as JSON whatever the `Content-Type`; at most 256
    KiB (larger is `413`).

    - Unknown fields and query parameters are ignored, not rejected.


    **Solana transactions are v1** (SIMD-0385, prefix `0x81`, up to 4,096 bytes
    and 64 account keys, no

    address lookup tables). The compute-unit limit, loaded-accounts limit and
    priority fee travel in

    the message header (`transactionConfig`), not as ComputeBudget instructions.
    Signing a v1

    transaction needs an SDK that supports it. `txVersion: 0` and
    `asLegacyTransaction: true` are

    refused.


    **Errors** of the Solana routes are `{"error", "reason", "quoteId"}`:
    `error` is a closed code, `reason` a label or a

    sentence, `quoteId` present once the request was parsed. The status says
    whose move it is:

    `400` fix the request, `404` no route exists (or an unknown path:
    `not_found`), `409` re-quote

    or retry later, `413` too large, `422` a named decline that waiting will not
    change, `500` a

    router bug, `503` not ready: retry with backoff. Two bodies differ:
    `not_ready` carries

    `reasons` (a list) instead of `reason`, and a `low_liquidity` decline adds
    `liquidity`. A known

    path with the wrong method (`GET /swap`) is `405` with an empty body and an
    `Allow` header.


    The Solana quote and swap fields mirror Jupiter's Swap API (Metis), so most
    clients change only the

    host; differences are listed on each operation.
servers:
  - url: https://router.raze.bot
    description: Raze's public router (API key)
security:
  - ApiKeyHeader: []
  - Bearer: []
  - ApiKeyQuery: []
tags:
  - name: ops
    description: Liveness and readiness
  - name: venues
    description: The venues this router knows, and the price oracle's verdict on each
  - name: swap
    description: Quote, then build the instructions or the unsigned transaction
  - name: transactions
    description: Serialize your own instructions as an unsigned v1 transaction
  - name: EVM swap
    description: >-
      Quote and build swaps on Ethereum, BNB Chain, Base and Robinhood Chain,
      under /evm
  - name: EVM catalog
    description: The EVM chains, their policy and the venue manifest
  - name: EVM ops
    description: Liveness and readiness of the EVM routes
paths:
  /evm/venues:
    get:
      tags:
        - EVM catalog
      summary: EVM venue table
      description: >
        Every venue of the EVM routes, one row per venue and chain, in a fixed
        order: its label

        (`dex`), its `id`, the contracts it is quoted and built with, where
        those addresses come

        from (`sources`), and whether the router has verified them against the
        chain

        (`verification`). Only a `servable` venue (verification `verified`) is
        quoted. Each venue

        is checked at start, and again with backoff until it passes: the
        bytecode of the factory,

        router, quoter and wrapped token, the router's and quoter's `factory()`
        and `WETH()`

        pointing at the manifest, the V3 fee tiers. `dex` (the `label` of
        quotes) and `aliases`

        (the `id`) are what `dexes` and `excludeDexes` accept, ignoring case and
        punctuation. A

        `dex` label is the same on every chain: in a filter it names the venue
        of the quote's

        `chain`. Always `200`.


        | `dex` | Chain | `id` |

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

        | Uniswap V2, Uniswap V3 | `eth` (1) | `eth-uniswap-v2`,
        `eth-uniswap-v3` |

        | PancakeSwap V2, PancakeSwap V3 | `bsc` (56) | `bsc-pancakeswap-v2`,
        `bsc-pancakeswap-v3` |

        | Uniswap V2, Uniswap V3 | `base` (8453) | `base-uniswap-v2`,
        `base-uniswap-v3` |

        | Uniswap V2, Uniswap V3 | `robinhood` (4663) | `robinhood-uniswap-v2`,
        `robinhood-uniswap-v3` |
      operationId: evmVenues
      responses:
        '200':
          description: The venue table (live answer, trimmed to Base)
          content:
            application/json:
              schema:
                type: object
                required:
                  - venues
                properties:
                  venues:
                    type: array
                    items:
                      $ref: '#/components/schemas/EvmVenue'
              example:
                venues:
                  - id: base-uniswap-v2
                    dex: Uniswap V2
                    aliases:
                      - base-uniswap-v2
                    chain: base
                    chainId: 8453
                    protocol: v2
                    factory: '0x8909dc15e40173ff4699343b6eb8132c65e18ec6'
                    router: '0x4752ba5dbc23f44d87826276bf6fd6b1c372ad24'
                    wrappedNative: '0x4200000000000000000000000000000000000006'
                    feeNumerator: 997
                    feeDenominator: 1000
                    routerAbi: v2-router02
                    routerFactoryGetter: factory
                    routerWrappedNativeGetter: WETH
                    sources:
                      - >-
                        https://developers.uniswap.org/docs/protocols/v2/deployments
                      - >-
                        https://github.com/Uniswap/v2-periphery/blob/master/contracts/libraries/UniswapV2Library.sol
                      - >-
                        https://developers.uniswap.org/docs/protocols/v3/deployments/v3-base-deployments
                    buildable: true
                    servable: true
                    verification:
                      status: verified
                      anchor:
                        chainId: 8453
                        number: '52396910'
                        hash: >-
                          0xa86a9f155fabcb349d9d4cde7d581185af365299e8e6946136807c3521cbdf44
                      at: '2026-10-09T21:59:34.502153925Z'
                  - id: base-uniswap-v3
                    dex: Uniswap V3
                    aliases:
                      - base-uniswap-v3
                    chain: base
                    chainId: 8453
                    protocol: v3
                    factory: '0x33128a8fc17869897dce68ed026d694621f6fdfd'
                    router: '0x2626664c2603336e57b271c5c0b26f421741e481'
                    wrappedNative: '0x4200000000000000000000000000000000000006'
                    quoter: '0x3d4e44eb1374240ce5f1b871ab261cd16335b76a'
                    feeTiers:
                      - 100
                      - 500
                      - 3000
                      - 10000
                    routerAbi: v3-swap-router02
                    routerFactoryGetter: factory
                    routerWrappedNativeGetter: WETH9
                    quoterAbi: quoter-v2
                    quoterFactoryGetter: factory
                    quoterWrappedNativeGetter: WETH9
                    sources:
                      - >-
                        https://developers.uniswap.org/docs/protocols/v3/deployments/v3-base-deployments
                      - >-
                        https://github.com/Uniswap/swap-router-contracts/blob/main/contracts/SwapRouter02.sol
                      - >-
                        https://developers.uniswap.org/docs/get-started/concepts/fees
                    buildable: true
                    servable: true
                    verification:
                      status: verified
                      anchor:
                        chainId: 8453
                        number: '52396910'
                        hash: >-
                          0xa86a9f155fabcb349d9d4cde7d581185af365299e8e6946136807c3521cbdf44
                      at: '2026-10-09T21:59:34.502161828Z'
        '401':
          $ref: '#/components/responses/EvmUnauthorized'
        '429':
          $ref: '#/components/responses/EvmRateLimited'
components:
  schemas:
    EvmVenue:
      type: object
      required:
        - id
        - dex
        - aliases
        - chain
        - chainId
        - protocol
        - factory
        - router
        - wrappedNative
        - routerAbi
        - sources
        - buildable
        - servable
        - verification
      properties:
        id:
          type: string
          description: 'The venue''s id on its chain: `<chain>-<uniswap|pancakeswap>-<v2|v3>`'
        dex:
          type: string
          description: >-
            The venue's label, the same on every chain: the `label` of quotes
            and what `dexes` / `excludeDexes` match
        aliases:
          type: array
          items:
            type: string
          description: 'Other spellings the filters accept: the `id`'
        chain:
          $ref: '#/components/schemas/EvmChainSlug'
        chainId:
          type: integer
        protocol:
          type: string
          enum:
            - v2
            - v3
        factory:
          type: string
        router:
          type: string
          description: The contract swaps go to and approvals are given to
        wrappedNative:
          type: string
        quoter:
          type: string
          description: V3 only
        poolDeployer:
          type: string
          description: PancakeSwap V3 only
        feeTiers:
          type: array
          items:
            type: integer
          description: 'V3 only: the fee tiers pools are looked up at'
        feeNumerator:
          type: integer
          description: 'V2 only: the pool fee as a fraction (997/1000 is 0.3%)'
        feeDenominator:
          type: integer
        routerAbi:
          type: string
        routerFactoryGetter:
          type: string
        routerWrappedNativeGetter:
          type: string
        quoterAbi:
          type: string
        quoterFactoryGetter:
          type: string
        quoterWrappedNativeGetter:
          type: string
        sources:
          type: array
          items:
            type: string
          description: Where the addresses come from
        buildable:
          type: boolean
          description: 'Always `true`: every listed venue has a builder'
        servable:
          type: boolean
          description: 'Verified against the chain: only a servable venue is quoted'
        verification:
          type: object
          required:
            - status
          properties:
            status:
              type: string
              enum:
                - verified
                - failed
                - pending
                - not_configured
              description: >-
                `pending`: not checked yet. `not_configured`: the chain has no
                RPC
            anchor:
              $ref: '#/components/schemas/EvmAnchor'
            at:
              type: string
              format: date-time
            failedChecks:
              type: array
              items:
                type: string
              description: '`failed`: the checks that did not pass'
    EvmChainSlug:
      type: string
      enum:
        - eth
        - bsc
        - base
        - robinhood
      description: '`eth` (chain id 1), `bsc` (56), `base` (8453), `robinhood` (4663)'
    EvmAnchor:
      type: object
      description: The block a venue was verified at
      required:
        - chainId
        - number
        - hash
      properties:
        chainId:
          type: integer
        number:
          type: string
          description: Block number, decimal string
        hash:
          type: string
    GateError:
      type: object
      description: >-
        The API key gate's error, the market-data API's shape: `unauthorized`
        (401) or `rate_limited` (429)
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              enum:
                - unauthorized
                - rate_limited
            message:
              type: string
  responses:
    EvmUnauthorized:
      description: >-
        A missing or unknown API key, or an account out of credits. The body is
        the API's, with its lower-case code.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GateError'
          example:
            error:
              code: unauthorized
              message: missing or unknown API key (send it as x-api-key)
    EvmRateLimited:
      description: >-
        Over the account's limit a minute (shared with the API, the Solana
        routes and launch). Wait for the next minute.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GateError'
          example:
            error:
              code: rate_limited
              message: too many requests
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: x-api-key
    Bearer:
      type: http
      scheme: bearer
    ApiKeyQuery:
      type: apiKey
      in: query
      name: apiKey

````

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