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

# Deployment descriptor

> Chain ID, the order protocol address and the tokens with their decimals. Read at startup; cacheable for 60 seconds.



## OpenAPI

````yaml openapi.json GET /v1/config
openapi: 3.1.0
info:
  title: Aile Quote API
  version: v1-2026-11
  description: >-
    Get a price, send one transaction, receive the exact amount.


    **How it works**


    1. `GET /config` gives you the chain, the order protocol address
    (`contracts.lop`) and the tokens with their decimals.

    2. `GET /quote` gives you a price for a pair and an amount. Pass as `taker`
    the address that will send the transaction.

    3. From that address, approve `fill.allowanceTarget` for the token you sell.

    4. Send `fill.to`, `fill.data` and `fill.value` from that address before
    `expiresAt`.

    5. Read the receipt. The transaction delivers exactly `buyAmount` or
    reverts.


    **What a quote is**


    A quote is an order signed by the market maker. It is valid for about 30
    seconds, only the `taker` can use it, and it can be used once. `maxFirmSize`
    is the largest amount you can get right now at this rate, in both tokens.


    **What you can rely on**


    - Fields, routes and enumeration values are only ever added, never removed
    or changed in type.

    - Send `fill.to`, `fill.data` and `fill.value` exactly as returned.

    - `order`, `signature`, `maker` and the other `fill` fields are there for
    your information. Do not hard-code the maker address: it changes.

    - `maker.kind`, `signature.type`, `fill.method` and the problem `reason` can
    gain new values. Treat a `reason` you do not know as "no quote".


    **Access**


    Aile issues your API key. Send it as `Authorization: Bearer <key>` and keep
    it on your backend. `GET /quote` requires it. The other routes work without
    it; with it, their calls count against your own budget and are attributed to
    you instead of sharing the anonymous per-address limit. Over budget you get
    429 `key-rate-limit` with `Retry-After`. Use **Authorize** to try the routes
    on this page; the page forgets the key on reload.


    **Scope**


    Base mainnet, real assets. The pairs come from the market makers' books,
    between the tokens `GET /config` lists; a pair nobody quotes answers 400
    `bad-pair`.
servers:
  - url: https://staging.app.aile.tech/api/base
    description: Base
security: []
tags:
  - name: Service
    description: Discover the chain, the order protocol and the tokens
  - name: Quotes
    description: Receive a signed order and ready calldata
  - name: Orders
    description: Track a fill by its order hash
paths:
  /v1/config:
    get:
      tags:
        - Service
      summary: Deployment descriptor
      description: >-
        Chain ID, the order protocol (`contracts.lop`: approve it for the sold
        token and send fills to it) and the tokens. `tokens` lists the
        deployment's tokens; `bookTokens` the tokens added on this network
        since. Both carry the address and the decimals to convert amounts. Read
        it at startup; cacheable for 60 seconds. A key is optional here: with
        one, the call is attributed to you and charged to your budget.
      operationId: getConfig
      responses:
        '200':
          description: Default Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Config'
      security:
        - {}
        - apiKey: []
components:
  schemas:
    Config:
      type: object
      properties:
        protocols:
          description: >-
            Deployments enabled for execution (fillable: true). Retired
            deployments are omitted from this list but retained internally for
            order history and event processing.
          type: array
          items:
            type: object
            properties:
              chainId:
                type: integer
                exclusiveMinimum: 0
              lop: {}
              settlement:
                anyOf:
                  - {}
                  - type: 'null'
              marketMakerExecutor:
                anyOf:
                  - {}
                  - type: 'null'
              solverExecutor:
                anyOf:
                  - {}
                  - type: 'null'
              marketMakerExecutorKind:
                type: string
                enum:
                  - reference
                  - treasury
              treasury:
                anyOf:
                  - {}
                  - type: 'null'
              fillable:
                default: true
                type: boolean
              startBlock:
                type: string
                pattern: ^\d+$
            required:
              - chainId
              - lop
              - settlement
              - marketMakerExecutor
              - solverExecutor
              - marketMakerExecutorKind
              - treasury
              - fillable
            additionalProperties: false
        chainId:
          type: integer
        network:
          type: string
        contracts:
          type: object
          properties:
            lop:
              anyOf:
                - type: string
                  pattern: ^0x[0-9a-fA-F]{40}$
                  description: 0x-prefixed 20-byte address
                - type: 'null'
              description: 'Aile core: EIP-712 verifyingContract and the spender to approve'
            settlement:
              anyOf:
                - type: string
                  pattern: ^0x[0-9a-fA-F]{40}$
                  description: 0x-prefixed 20-byte address
                - type: 'null'
            commit:
              anyOf:
                - type: string
                - type: 'null'
              description: intent-protocol commit the contracts were built from
            operatorPass:
              anyOf:
                - type: string
                  pattern: ^0x[0-9a-fA-F]{40}$
                  description: 0x-prefixed 20-byte address
                - type: 'null'
              description: >-
                The operator pass (an AccessToken deployment): admin-console
                sign-in only, it grants nothing on chain. Null until it is
                deployed
            marketMakerExecutor:
              anyOf:
                - type: string
                  pattern: ^0x[0-9a-fA-F]{40}$
                  description: 0x-prefixed 20-byte address
                - type: 'null'
              description: >-
                The treasury executor the market maker fills through
                (AileTreasuryExecutor). Null on a stack without one
            solverExecutor:
              anyOf:
                - type: string
                  pattern: ^0x[0-9a-fA-F]{40}$
                  description: 0x-prefixed 20-byte address
                - type: 'null'
              description: >-
                The solver's executor (AileReferenceExecutor, EXECUTOR_ADDRESS).
                Null on a stack without one
          required:
            - lop
            - settlement
            - commit
            - operatorPass
            - marketMakerExecutor
            - solverExecutor
          additionalProperties: true
        tokens:
          type: array
          items:
            $ref: '#/components/schemas/ConfigToken'
          description: The deployment's tokens
        bookTokens:
          description: >-
            The tokens operators added on this network (listed, in the order
            first added; [] when none, absent on an older gateway): they form
            market makers' own pairs only, with each other and with `tokens`,
            priced by market makers' books, never by AileFX's desk
          type: array
          items:
            $ref: '#/components/schemas/BookToken'
        explorerBaseUrl:
          anyOf:
            - type: string
            - type: 'null'
        quotePairs:
          description: >-
            The only pairs quoted, either direction (QUOTE_PAIRS); absent = any
            two offered tokens
          type: array
          items:
            type: string
      required:
        - chainId
        - network
        - contracts
        - tokens
        - explorerBaseUrl
      additionalProperties: true
      description: Deployment descriptor; every client reads addresses from here
    ConfigToken:
      type: object
      properties:
        symbol:
          type: string
        name:
          type: string
        decimals:
          type: integer
        address:
          anyOf:
            - type: string
              pattern: ^0x[0-9a-fA-F]{40}$
              description: 0x-prefixed 20-byte address
            - type: 'null'
          description: null = not tradable on this deployment
        kind:
          type: string
          enum:
            - erc20
            - fiat
      required:
        - symbol
        - name
        - decimals
        - address
        - kind
      additionalProperties: true
    BookToken:
      type: object
      properties:
        symbol:
          type: string
          pattern: ^[A-Z][A-Z0-9]{1,11}$
          description: >-
            The token's own symbol(), upper-cased: a letter, then 1 to 11
            letters or digits
        name:
          type: string
          description: >-
            The token's own name() (control and format characters removed, at
            most 40 characters), else its symbol
        decimals:
          type: integer
          minimum: 0
          maximum: 18
          description: decimals() as read when the token was added
        address:
          type: string
          pattern: ^0x[0-9a-f]{40}$
          description: Lowercase
        kind:
          type: string
          const: erc20
      required:
        - symbol
        - name
        - decimals
        - address
        - kind
      additionalProperties: true
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        API key issued by Aile. Authorization: Bearer <key>. Required for
        quotes. Optional on the other routes: without it they share the
        anonymous per-address limit, with it the calls are attributed to you and
        charged to your own budget.

````

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