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

# Venues

> Every venue the router knows, in a fixed order, with its program id, how it is priced,
whether it can be built under `swap` and served, the pools indexed for it, and the price
oracle's live verdict. The `dex` names here are the only spelling the router emits, and
the labels `dexes` / `excludeDexes` accept (aliases too). Always `200`, even on a router
that is not ready.

This table does not read your deploy's on-chain config: a venue your config has no live
row for is listed here but never served (a pinned build on it answers `422`).


The venues this router knows, with how each is priced and built:

* `buildable`: the router has an instruction builder for it; `declined` says why not when it has none.
* `servable`: it can be quoted at all (a dark venue only when its answers can be reproduced exactly).
* `onchainExactOut`: whether a one-hop ExactOut can pin the output on it ([ExactOut](/router/quote-and-swap#exactin-and-exactout)).
* `oracle.verdict`: the router's ongoing check of its prices against real fills, `green`, `probation`, `red` or `nodata`. A `red` venue is held out of every quote until it recovers.
* `indexedPools`: pools of the venue in the router's index right now.

`dex` and `aliases` are the names `dexes` and `excludeDexes` accept. This table does not reflect your deploy's on-chain config: a venue your config does not allow is skipped by quotes even when it is listed here.


## OpenAPI

````yaml router.openapi.yaml GET /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 over ~20
    venues through a

    deploy of the `swap` program. 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 no
    key and builds for

    Raze's deploy of the `swap` program,
    `DADMMjfNnY6z8H9h9RfHZ9tfarBySsj4Yb65qLyKJDAD`.


    **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`.


    **No authentication.** A router you run yourself has no keys, no accounts
    and no rate limit. It

    listens on loopback by default (`ROUTER_LISTEN=127.0.0.1:4700`); keep it
    behind your firewall or

    your own gateway.


    **Conventions:**

    - Amounts are integers in the token's base units (lamports, atoms). In
    quotes and builds the
      u64 amounts are decimal **strings** (`inAmount`, `outAmount`, `otherAmountThreshold`,
      `platformFee.amount`, every `costs.*`). `minReturn`, `maxAmountIn`, `computeUnits` and
      `contextSlot` 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.


    **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** 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, `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`.


    The 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
  - url: http://127.0.0.1:4700
    description: Your own router (default ROUTER_LISTEN)
security: []
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
paths:
  /venues:
    get:
      tags:
        - venues
      summary: Venue table
      description: >
        Every venue the router knows, in a fixed order, with its program id, how
        it is priced,

        whether it can be built under `swap` and served, the pools indexed for
        it, and the price

        oracle's live verdict. The `dex` names here are the only spelling the
        router emits, and

        the labels `dexes` / `excludeDexes` accept (aliases too). Always `200`,
        even on a router

        that is not ready.


        This table does not read your deploy's on-chain config: a venue your
        config has no live

        row for is listed here but never served (a pinned build on it answers
        `422`).
      operationId: listVenues
      responses:
        '200':
          description: The venue table
          content:
            application/json:
              schema:
                type: object
                properties:
                  venues:
                    type: array
                    items:
                      $ref: '#/components/schemas/Venue'
              example:
                venues:
                  - dex: PumpFun
                    aliases:
                      - Pumpfun
                      - pump
                      - pump.fun
                      - PumpFunBc
                      - pumpfun-bc
                      - Pumpfun Bonding Curve
                    programId: 6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P
                    pricing: curve
                    depth: financials
                    exactOut: closed_form
                    onchainExactOut: buy_only
                    split: curve
                    wireSafe: true
                    buildable: true
                    servable: true
                    maxAgeSlots: 300
                    indexedPools: 271561
                    oracle:
                      verdict: green
                      barsSince: '2026-09-21'
                      modelBarBps: 1
                      overBarBps: 0
                      driftBarBps: 50
                      modelFloorUnits: 4
                      fills: 5
                      modelN: 3
                      modelAbsMaxBps: 0
                      modelOverMaxBps: 0
                      driftAbsMaxBps: 511
                      wireBreaches: 0
                  - dex: Raydium CLMM
                    aliases:
                      - RaydiumCL
                      - RaydiumCLMM
                      - clmm
                    programId: CAMMCzo5YL8w4VFF8KVHrK22GGUsp5VTaW7grrKgrWqK
                    pricing: walk
                    depth: tick_walk
                    exactOut: closed_form
                    onchainExactOut: both
                    split: walk
                    wireSafe: false
                    buildable: true
                    servable: true
                    maxAgeSlots: 300
                    indexedPools: 6008
                    oracle:
                      verdict: nodata
                      barsSince: '2026-09-21'
                      modelBarBps: 1
                      overBarBps: 0
                      driftBarBps: 50
                      modelFloorUnits: 4
                      fills: 0
                      modelN: 0
                      modelAbsMaxBps: 0
                      modelOverMaxBps: 0
                      driftAbsMaxBps: 0
                      wireBreaches: 0
                  - dex: Quant
                    aliases: []
                    programId: QuaNtZsgYRe5Z9Bk4LZ4cTD9tbkVoyCNf1R2BN9bBDv
                    pricing: observed
                    depth: observed
                    exactOut: opaque_inverse
                    onchainExactOut: none
                    split: unmeasured
                    wireSafe: false
                    buildable: false
                    servable: false
                    declined: >-
                      Quant's on-chain CPI-caller allowlist excludes the swap
                      program (Custom 0x9)
                    maxAgeSlots: 300
                    indexedPools: 0
                    oracle:
                      verdict: nodata
                      barsSince: '2026-09-21'
                      modelBarBps: 1
                      overBarBps: 0
                      driftBarBps: 50
                      modelFloorUnits: 4
                      fills: 0
                      modelN: 0
                      modelAbsMaxBps: 0
                      modelOverMaxBps: 0
                      driftAbsMaxBps: 0
                      wireBreaches: 0
components:
  schemas:
    Venue:
      type: object
      properties:
        dex:
          type: string
          description: >-
            The venue's label: the only spelling in responses, and the one
            filters accept
        aliases:
          type: array
          items:
            type: string
          description: Other spellings `dexes` / `excludeDexes` accept
        programId:
          type: string
        pricing:
          type: string
          enum:
            - vault_cp
            - curve
            - walk
            - observed
          description: >-
            How a quote is computed: constant product on vault balances, a
            bonding curve, a tick/bin walk, or a dark venue reproduced from
            observed fills
        depth:
          type: string
          enum:
            - vault_balances
            - financials
            - bin_walk
            - tick_walk
            - observed
        exactOut:
          type: string
          enum:
            - closed_form
            - numeric
            - opaque_inverse
          description: How an ExactOut input is computed
        onchainExactOut:
          type: string
          enum:
            - both
            - buy_only
            - none
            - unverified
          description: >-
            Whether the venue has a pinned-output instruction the build uses for
            a one-hop ExactOut (`buy_only`: only when buying from the curve).
            Otherwise ExactOut is built as exact-in with the requested output as
            floor
        split:
          type: string
          enum:
            - independent
            - walk
            - shared_vault
            - curve
            - unmeasured
          description: How the venue takes part in split routes
        wireSafe:
          type: boolean
          description: >-
            A hop always has the same, small account set (pool and vaults).
            Concentrated and dark venues name more accounts
        buildable:
          type: boolean
          description: Has an instruction builder under `swap`
        servable:
          type: boolean
          description: >-
            Can be served at all (a dark venue only when its answer can be
            reproduced exactly)
        declined:
          type: string
          description: Why it is not buildable. Absent when it is
        maxAgeSlots:
          type: integer
        indexedPools:
          type: integer
          description: Pools of this venue in the router's index now
        oracle:
          $ref: '#/components/schemas/VenueOracle'
    VenueOracle:
      type: object
      description: >-
        The router compares its quotes with landed fills. A `red` venue is
        removed from every route until it recovers
      properties:
        verdict:
          type: string
          enum:
            - nodata
            - green
            - probation
            - red
        barsSince:
          type: string
          description: Date the bars below took effect
        modelBarBps:
          type: integer
        overBarBps:
          type: integer
        driftBarBps:
          type: integer
        modelFloorUnits:
          type: integer
          description: Base units under which a model error is not judged
        fills:
          type: integer
          description: Landed fills observed
        modelN:
          type: integer
        modelAbsMaxBps:
          type: integer
        modelOverMaxBps:
          type: integer
        driftAbsMaxBps:
          type: integer
        wireBreaches:
          type: integer
        breach:
          type: string
          description: The bar broken. Present only when `red`

````

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