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

# List quote history

> List every quote this maker published in a period, live or not, newest first, with each quote's current status and the period's fill rate.

Requires a key for a maker with `vault:read`.



## OpenAPI

````yaml /hyperliquid/openapi.json get /v1/makers/{maker_id}/quote-history
openapi: 3.1.1
info:
  title: Totalis Hyperliquid API
  description: >-
    REST API for Totalis singles and parlays on Hyperliquid HIP-4 outcome
    markets, for client integrations and external market makers.


    There are three ways in, each sent as `Authorization: Bearer <credential>`:


    - **Scoped API key** (`ttk_`), for servers, bots and market makers. The
    account owner creates it in the Totalis app, or a wallet-session user
    creates one with `POST /v1/me/api-keys` and a fresh wallet signature (see
    API keys). It acts for one account, yours or a maker's, with only the scopes
    it holds, and needs no `Origin`.

    - **Wallet session**, for users who bring their own wallet to a partner's
    web page. The page signs the wallet in with `POST
    /v1/auth/wallet-challenges` and `POST /v1/auth/wallet-sessions`; the session
    is bound to the page's registered `Origin` and must be sent from it. Pages
    may also label their traffic with their publishable browser key in
    `X-Totalis-Partner: tpb_...`.

    - **Partner server key** (`tpk_`), only for `POST
    /v1/partner/wallet-admissions`, which lets a new wallet open its account
    during the invite-only launch. Server to server, never in a browser, and
    never with an `Origin`.


    Public market reads need no credential. A credential only authenticates:
    every bet, cash-out and withdrawal also carries the wallet or maker
    signature the HyperEVM contract verifies. An external wallet sends `POST
    /v1/core-exits` to move its vault cash to HyperCore before a HyperCore
    order.


    For access, partner credentials (origins, browser and server keys), builder
    codes or staging, email
    [founders@totalis.trade](mailto:founders@totalis.trade).


    Amounts are base-10 strings in native USDC atomic units, large identifiers
    are decimal strings, and every command `POST` requires an `Idempotency-Key`
    header.


    Every error is `{error: {code, message, retry, request_id,
    field_violations}}`. `code` is stable; each operation lists the codes it
    returns per status. `retry` is `NEVER` (stop), `BACKOFF` (resend the same
    request with the same `Idempotency-Key` after `Retry-After` seconds) or
    `REFRESH` (re-read state, then send a new request with a new key).
    `field_violations` names invalid inputs by JSON pointer, such as
    `/legs/0/side`.
  version: 162.0.0-accept-before
servers:
  - url: https://hip4-api.totalis.trade
    description: Production public edge
  - url: https://hip4-api-staging.totalis.trade
    description: Staging and chain-998 public edge
security: []
tags:
  - name: Markets
    description: >-
      HIP-4 questions and markets, their sides and price history. No API key
      needed.
  - name: RFQs & Quotes
    description: >-
      RFQs and the quotes that answer them: what a taker calls, then what a
      maker calls.
  - name: Positions
    description: Positions the account holds, or its maker backs.
  - name: Account
    description: >-
      The account a key acts for: identity, balances, activity, operations,
      withdrawals, deposits and HyperCore exits.
  - name: Makers
    description: >-
      The rest of a maker's setup after Making: admission, quote history,
      capital and collateral.
  - name: Partners & wallet sign-in
    description: >-
      A partner admits its users' own wallets, which sign in from the partner's
      pages.
  - name: API keys
    description: >-
      Issue, rotate and revoke scoped keys from a wallet session. An API key
      cannot manage keys.
  - name: Deployment
    description: The contract deployment every signature is made against.
  - name: WebSocket
    description: The authenticated WebSocket for account and maker updates.
paths:
  /v1/makers/{maker_id}/quote-history:
    get:
      tags:
        - Makers
      summary: List quote history
      description: >-
        List every quote this maker published in a period, live or not, newest
        first, with each quote's current status and the period's fill rate.


        Requires a key for a maker with `vault:read`.
      operationId: listMakerQuoteHistory
      parameters:
        - $ref: '#/components/parameters/MakerIdPathRequired'
        - $ref: '#/components/parameters/QuoteHistoryFromQueryRequired'
        - $ref: '#/components/parameters/QuoteHistoryThroughQueryRequired'
        - $ref: '#/components/parameters/QuoteHistoryStatusQueryOptional'
        - $ref: '#/components/parameters/QuoteKindQueryOptional'
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/Cursor'
        - name: Origin
          in: header
          required: false
          schema:
            type: string
            format: uri
          description: Required for browser sessions; API keys do not require an Origin.
          example: https://totalis.trade
      responses:
        '200':
          description: >-
            One page of the maker's quotes with one freshness status; display
            fields only, never signatures, and amounts are atomic USDC strings.
            A quote's status follows its acceptance, the maker's answer and the
            trade's chain outcome first, then the quote's book state, then its
            RFQ. A decline carries no reason, since the maker's answer records
            none. No shared caching.
          headers:
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
            Vary:
              $ref: '#/components/headers/Vary'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteHistory'
              example:
                context:
                  as_of: '2026-09-17T12:00:00Z'
                  status: CURRENT
                from: '2026-09-17T00:00:00Z'
                through: '2026-09-18T00:00:00Z'
                fill_rate:
                  submitted_count: '4'
                  filled_count: '1'
                  fill_rate_bps: '2500'
                items:
                  - quote_id: >-
                      0xa1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1
                    rfq_id: 01998a1e-0000-7000-8000-000000000004
                    kind: ENTRY
                    cashout_kind: null
                    status: OPEN
                    submitted_at: '2026-09-17T11:59:50Z'
                    expires_at: '2026-09-17T12:00:20Z'
                    accepted_at: null
                    resolved_at: null
                    operation_id: null
                    position_id: null
                    legs:
                      - outcome_id: '1'
                        side: 'YES'
                      - outcome_id: '2'
                        side: 'NO'
                    stake: '100200400'
                    net_stake: '100000000'
                    payout: '300000000'
                    maker_risk: '200000000'
                    price: null
                  - quote_id: >-
                      0xb2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2
                    rfq_id: 01998a1e-0000-7000-8000-000000000003
                    kind: CASHOUT
                    cashout_kind: SELL_BACK
                    status: DECLINED
                    submitted_at: '2026-09-17T11:30:00Z'
                    expires_at: '2026-09-17T11:30:45Z'
                    accepted_at: '2026-09-17T11:30:05Z'
                    resolved_at: null
                    operation_id: null
                    position_id: >-
                      0xdddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
                    legs: null
                    stake: null
                    net_stake: null
                    payout: null
                    maker_risk: null
                    price: '80000000'
                  - quote_id: >-
                      0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3
                    rfq_id: 01998a1e-0000-7000-8000-000000000002
                    kind: ENTRY
                    cashout_kind: null
                    status: FILLED
                    submitted_at: '2026-09-17T10:00:00Z'
                    expires_at: '2026-09-17T10:00:30Z'
                    accepted_at: '2026-09-17T10:00:04Z'
                    resolved_at: '2026-09-17T10:00:07Z'
                    operation_id: >-
                      0x0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e
                    position_id: >-
                      0xc3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3
                    legs:
                      - outcome_id: '1'
                        side: 'YES'
                    stake: '100200400'
                    net_stake: '100000000'
                    payout: '300000000'
                    maker_risk: '200000000'
                    price: null
                  - quote_id: >-
                      0xd4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4
                    rfq_id: 01998a1e-0000-7000-8000-000000000001
                    kind: ENTRY
                    cashout_kind: null
                    status: NOT_SELECTED
                    submitted_at: '2026-09-17T09:00:00Z'
                    expires_at: '2026-09-17T09:00:30Z'
                    accepted_at: null
                    resolved_at: '2026-09-17T09:00:12Z'
                    operation_id: null
                    position_id: null
                    legs:
                      - outcome_id: '3'
                        side: 'YES'
                    stake: '50000000'
                    net_stake: '49900000'
                    payout: '90000000'
                    maker_risk: '40100000'
                    price: null
                next_cursor: null
                has_more: false
        '400':
          description: >-
            - `INVALID_QUERY` (retry `NEVER`): A query parameter is malformed,
            out of range or not accepted by this operation. `field_violations`
            names it.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Error'
                  - properties:
                      error:
                        description: The error this operation returns with this status.
                        properties:
                          code:
                            description: >-
                              One of the registered codes listed in this
                              response's description.
                            enum:
                              - INVALID_QUERY
                          retry:
                            description: >-
                              The retry rule the registry fixes for the returned
                              code.
                            enum:
                              - NEVER
        '401':
          description: >-
            - `UNAUTHENTICATED` (retry `NEVER`): The credential is missing,
            invalid, expired or revoked.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Error'
                  - properties:
                      error:
                        description: The error this operation returns with this status.
                        properties:
                          code:
                            description: >-
                              One of the registered codes listed in this
                              response's description.
                            enum:
                              - UNAUTHENTICATED
                          retry:
                            description: >-
                              The retry rule the registry fixes for the returned
                              code.
                            enum:
                              - NEVER
        '403':
          description: >-
            - `FORBIDDEN` (retry `NEVER`): The credential is valid but lacks the
            scope, permission or role this operation needs.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Error'
                  - properties:
                      error:
                        description: The error this operation returns with this status.
                        properties:
                          code:
                            description: >-
                              One of the registered codes listed in this
                              response's description.
                            enum:
                              - FORBIDDEN
                          retry:
                            description: >-
                              The retry rule the registry fixes for the returned
                              code.
                            enum:
                              - NEVER
        '404':
          description: >-
            - `NOT_FOUND` (retry `NEVER`): The resource does not exist or is not
            visible to this credential.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Error'
                  - properties:
                      error:
                        description: The error this operation returns with this status.
                        properties:
                          code:
                            description: >-
                              One of the registered codes listed in this
                              response's description.
                            enum:
                              - NOT_FOUND
                          retry:
                            description: >-
                              The retry rule the registry fixes for the returned
                              code.
                            enum:
                              - NEVER
        '409':
          description: >-
            - `CURSOR_EXPIRED` (retry `REFRESH`): The account-read snapshot
            behind this cursor expired or its scope changed; restart from the
            first page.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Error'
                  - properties:
                      error:
                        description: The error this operation returns with this status.
                        properties:
                          code:
                            description: >-
                              One of the registered codes listed in this
                              response's description.
                            enum:
                              - CURSOR_EXPIRED
                          retry:
                            description: >-
                              The retry rule the registry fixes for the returned
                              code.
                            enum:
                              - REFRESH
        '429':
          description: >-
            - `RATE_LIMITED` (retry `BACKOFF`): The request quota for this
            credential or route is exhausted.
          headers:
            Retry-After:
              $ref: '#/components/headers/RetryAfter'
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Error'
                  - properties:
                      error:
                        description: The error this operation returns with this status.
                        properties:
                          code:
                            description: >-
                              One of the registered codes listed in this
                              response's description.
                            enum:
                              - RATE_LIMITED
                          retry:
                            description: >-
                              The retry rule the registry fixes for the returned
                              code.
                            enum:
                              - BACKOFF
        '503':
          description: >-
            - `AUTHORIZATION_UNAVAILABLE` (retry `BACKOFF`): Identity or
            credential authority storage is unavailable.

            - `DEPENDENCY_STALE` (retry `BACKOFF`): A projection or upstream the
            request depends on (chain projection, HyperCore state, database) is
            behind its freshness bound or unavailable.

            - `SOURCE_UNAVAILABLE` (retry `BACKOFF`): The account-read or stream
            source is unavailable.

            - `CONTRACT_UNAVAILABLE` (retry `BACKOFF`): This producer is
            disabled in this environment.
          headers:
            Retry-After:
              $ref: '#/components/headers/RetryAfter'
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/Error'
                  - properties:
                      error:
                        description: The error this operation returns with this status.
                        properties:
                          code:
                            description: >-
                              One of the registered codes listed in this
                              response's description.
                            enum:
                              - AUTHORIZATION_UNAVAILABLE
                              - DEPENDENCY_STALE
                              - SOURCE_UNAVAILABLE
                              - CONTRACT_UNAVAILABLE
                          retry:
                            description: >-
                              The retry rule the registry fixes for the returned
                              code.
                            enum:
                              - BACKOFF
      security:
        - apiKey:
            - vault:read
components:
  parameters:
    MakerIdPathRequired:
      name: maker_id
      in: path
      required: true
      description: >-
        On-chain maker ID, as a decimal string. An API key may only name the
        maker it is bound to; other makers return 404.
      schema:
        $ref: '#/components/schemas/NonZeroUInt64String'
      example: '7'
    QuoteHistoryFromQueryRequired:
      name: from
      in: query
      required: true
      description: Inclusive RFC3339 start of the period on submitted_at.
      schema:
        type: string
        format: date-time
      example: '2026-09-17T00:00:00Z'
    QuoteHistoryThroughQueryRequired:
      name: through
      in: query
      required: true
      description: Exclusive RFC3339 end of the period; must be after from.
      schema:
        type: string
        format: date-time
      example: '2026-09-18T00:00:00Z'
    QuoteHistoryStatusQueryOptional:
      name: status
      in: query
      required: false
      description: Return only quotes with this status. The fill rate ignores it.
      schema:
        $ref: '#/components/schemas/QuoteHistoryStatus'
      example: FILLED
    QuoteKindQueryOptional:
      name: kind
      in: query
      required: false
      description: Return, and compute the fill rate over, only quotes of this kind.
      schema:
        type: string
        enum:
          - ENTRY
          - CASHOUT
      example: ENTRY
    Limit:
      name: limit
      in: query
      schema:
        $ref: '#/components/schemas/PageLimit'
      description: >-
        Maximum items per page, 1 to 200, default 50. A page may hold fewer,
        even none, while has_more is true.
      example: 50
    Cursor:
      name: cursor
      in: query
      description: >-
        Omit for the first page; then send the previous response's next_cursor
        unchanged.
      schema:
        $ref: '#/components/schemas/PageCursor'
      example: eyJ2IjoxLCJzIjoiMTIzNDUifQ
  headers:
    CacheControl:
      description: Always `no-store`; account data must not be cached.
      schema:
        const: no-store
    Vary:
      schema:
        type: string
      description: >-
        The response varies by the Authorization header, so shared caches must
        not reuse it across credentials.
    RetryAfter:
      description: Seconds to wait before resending the same request
      schema:
        type: integer
        minimum: 1
  schemas:
    QuoteHistory:
      type: object
      required:
        - context
        - from
        - through
        - fill_rate
        - items
        - next_cursor
        - has_more
      properties:
        context:
          $ref: '#/components/schemas/ReadContext'
          description: >-
            Freshness of this read. Quotes are venue rows read now; FILLED and
            FAILED follow the vault projection, so as_of is its checkpoint and
            status is STALE while it lags.
        from:
          type: string
          format: date-time
          description: >-
            Inclusive RFC3339 start of the period on submitted_at, echoed from
            the query.
        through:
          type: string
          format: date-time
          description: Exclusive RFC3339 end of the period, echoed from the query.
        fill_rate:
          oneOf:
            - $ref: '#/components/schemas/QuoteFillRate'
            - type: 'null'
          description: >-
            The period's fill rate, on a list's first page (no cursor); null on
            later pages and when the period holds more than 50,000 quotes: ask
            for a shorter one.
        items:
          type: array
          items:
            $ref: '#/components/schemas/QuoteHistoryItem'
          description: >-
            Quotes on this page, newest submitted_at first. Each status is read
            when the page is.
        next_cursor:
          $ref: '#/components/schemas/NextCursor'
          description: >-
            Opaque cursor for the next page; null on the last page. Send it back
            unchanged as cursor with the same filters.
        has_more:
          type: boolean
          description: >-
            True exactly when next_cursor is non-null. A status-filtered page
            reads at most 1,000 quotes, so it may hold fewer items than limit,
            even none, while has_more is true.
      description: >-
        Every quote the maker published in a period, not only live ones, with
        the period's fill rate.
    Error:
      properties:
        error:
          $ref: '#/components/schemas/ErrorDetail'
          description: The one error this request failed with.
      required:
        - error
      type: object
    NonZeroUInt64String:
      allOf:
        - $ref: '#/components/schemas/UInt64String'
        - not:
            const: '0'
    QuoteHistoryStatus:
      type: string
      enum:
        - OPEN
        - AWAITING_CONFIRMATION
        - ACCEPTED
        - FILLED
        - FAILED
        - DECLINED
        - TIMED_OUT
        - CANCELLED
        - REPLACED
        - EXPIRED
        - NOT_SELECTED
        - RFQ_CANCELLED
      description: >-
        Where the quote stands now. OPEN: live and acceptable.
        AWAITING_CONFIRMATION: the taker accepted it and the maker has not
        answered within its two-second deadline yet. ACCEPTED: the maker
        confirmed and the trade is queued or on its way to chain. FILLED: the
        trade committed on chain. FAILED: the trade reverted or expired
        unexecuted. DECLINED: the maker declined the acceptance. TIMED_OUT: the
        maker did not answer the acceptance in time. CANCELLED: the maker
        withdrew the quote. REPLACED: the maker's newer quote on the same RFQ
        replaced it. EXPIRED: it or its RFQ lapsed unaccepted. NOT_SELECTED: the
        RFQ's taker accepted another quote first. RFQ_CANCELLED: the taker
        cancelled or replaced the RFQ.
    PageLimit:
      type: integer
      minimum: 1
      maximum: 200
      default: 50
      description: >-
        Maximum items in one page. A page may hold fewer, even none, while
        has_more is true.
    PageCursor:
      type: string
      minLength: 1
      maxLength: 2048
      description: >-
        Opaque list cursor. Send a previous response's next_cursor back
        unchanged; never build or parse one.
    ReadContext:
      type: object
      required:
        - as_of
        - status
      properties:
        as_of:
          $ref: '#/components/schemas/Timestamp'
          description: RFC3339 observation time of the oldest source this read used.
        status:
          type: string
          enum:
            - CURRENT
            - STALE
            - UNAVAILABLE
          description: >-
            Freshness of the whole read. CURRENT: every source is fresh and
            reconciled. STALE: a source lags or has not reconciled, such as a
            catching-up projection, a pending reorg rescan or a period not fully
            covered; amounts may be displayed with their age but never authorize
            an action. UNAVAILABLE: a required source could not be read, so the
            amounts it backs are null.
      description: >-
        Freshness of the read. Pages of one list share the snapshot bound into
        their cursor.
    QuoteFillRate:
      type: object
      required:
        - submitted_count
        - filled_count
        - fill_rate_bps
      properties:
        submitted_count:
          type: string
          pattern: ^(0|[1-9][0-9]{0,77})$
          description: >-
            Quotes the maker published in the period (of the requested kind),
            every replacement counted, whatever their status.
        filled_count:
          type: string
          pattern: ^(0|[1-9][0-9]{0,77})$
          description: Of those, quotes whose trade committed on chain (status FILLED).
        fill_rate_bps:
          oneOf:
            - type: string
              pattern: ^(0|[1-9][0-9]{0,77})$
            - type: 'null'
          description: >-
            floor(filled_count * 10000 / submitted_count) in basis points; null
            when submitted_count is 0.
      description: Fill rate of the period's quotes; status filters do not apply to it.
    QuoteHistoryItem:
      type: object
      required:
        - quote_id
        - rfq_id
        - kind
        - cashout_kind
        - status
        - submitted_at
        - expires_at
        - accepted_at
        - resolved_at
        - operation_id
        - position_id
        - legs
        - stake
        - net_stake
        - payout
        - maker_risk
        - price
      properties:
        quote_id:
          type: string
          pattern: ^0x[0-9a-f]{64}$
          description: 'Quote ID: the digest the maker signs on confirmation (bytes32 hex).'
        rfq_id:
          type: string
          format: uuid
          description: RFQ the quote answered.
        kind:
          type: string
          enum:
            - ENTRY
            - CASHOUT
          description: >-
            ENTRY opens a position; CASHOUT buys one back (SELL_BACK) or buys it
            (TRANSFER).
        cashout_kind:
          type:
            - string
            - 'null'
          enum:
            - SELL_BACK
            - TRANSFER
            - null
          description: >-
            For a CASHOUT quote, SELL_BACK when the position's own maker buys it
            back, TRANSFER when another maker buys it; null for ENTRY.
        status:
          $ref: '#/components/schemas/QuoteHistoryStatus'
          description: >-
            Where the quote stands now. OPEN, AWAITING_CONFIRMATION and ACCEPTED
            can still change; every other status is final. FILLED is the only
            status in which the quote traded.
        submitted_at:
          type: string
          format: date-time
          description: When the venue admitted the quote; lists order by it, newest first.
        expires_at:
          type: string
          format: date-time
          description: The quote's own expiry.
        accepted_at:
          type:
            - string
            - 'null'
          format: date-time
          description: When the taker accepted the quote; null if no taker did.
        resolved_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            When the quote reached its status: the trade's chain receipt for
            FILLED and FAILED, the confirmation deadline for TIMED_OUT, the
            winning selection for NOT_SELECTED, the earlier of the quote's and
            the RFQ's expiry for EXPIRED. Null while OPEN, AWAITING_CONFIRMATION
            or ACCEPTED, and for DECLINED, CANCELLED, REPLACED and
            RFQ_CANCELLED, whose time the venue does not record.
        operation_id:
          oneOf:
            - type: string
              pattern: ^0x[0-9a-f]{64}$
            - type: 'null'
          description: The trade's operation once the maker confirmed; null otherwise.
        position_id:
          oneOf:
            - type: string
              pattern: ^0x[0-9a-f]{64}$
            - type: 'null'
          description: >-
            For ENTRY, the position the quote opened once FILLED (its quote_id);
            for CASHOUT, the position being cashed out; null otherwise.
        legs:
          oneOf:
            - type: array
              minItems: 1
              maxItems: 100
              items:
                type: object
                required:
                  - outcome_id
                  - side
                properties:
                  outcome_id:
                    $ref: '#/components/schemas/UInt32String'
                    description: HIP-4 outcome ID of the leg.
                  side:
                    type: string
                    enum:
                      - 'YES'
                      - 'NO'
                    description: Side the taker would hold.
            - type: 'null'
          description: An ENTRY quote's legs in the RFQ's order; null for CASHOUT.
        stake:
          $ref: '#/components/schemas/UnsignedMetric'
          description: >-
            ENTRY: the taker's gross stake, before the entry fee. Null for
            CASHOUT. The quoted odds are payout / stake.
        net_stake:
          $ref: '#/components/schemas/UnsignedMetric'
          description: >-
            ENTRY: stake less the taker entry fee floor(stake * taker_fee_bps /
            10000), what the vault escrows. Null for CASHOUT, or when the
            quote's fee was never admitted.
        payout:
          $ref: '#/components/schemas/UnsignedMetric'
          description: 'ENTRY: what the taker receives if every leg wins. Null for CASHOUT.'
        maker_risk:
          $ref: '#/components/schemas/UnsignedMetric'
          description: >-
            ENTRY: what the maker stands to pay, payout minus net_stake. Null
            when net_stake is.
        price:
          $ref: '#/components/schemas/UnsignedMetric'
          description: 'CASHOUT: the price offered for the whole position. Null for ENTRY.'
      allOf:
        - if:
            properties:
              kind:
                const: ENTRY
          then:
            properties:
              cashout_kind:
                type: 'null'
              price:
                type: 'null'
              legs:
                type: array
              stake:
                type: string
              payout:
                type: string
          else:
            properties:
              cashout_kind:
                type: string
              price:
                type: string
              position_id:
                type: string
              legs:
                type: 'null'
              stake:
                type: 'null'
              net_stake:
                type: 'null'
              payout:
                type: 'null'
              maker_risk:
                type: 'null'
        - if:
            properties:
              status:
                enum:
                  - ACCEPTED
                  - FILLED
                  - FAILED
          then:
            properties:
              operation_id:
                type: string
              accepted_at:
                type: string
          else:
            properties:
              operation_id:
                type: 'null'
        - if:
            properties:
              status:
                enum:
                  - OPEN
                  - AWAITING_CONFIRMATION
                  - ACCEPTED
                  - DECLINED
                  - CANCELLED
                  - REPLACED
                  - RFQ_CANCELLED
          then:
            properties:
              resolved_at:
                type: 'null'
          else:
            properties:
              resolved_at:
                type: string
        - if:
            properties:
              status:
                enum:
                  - AWAITING_CONFIRMATION
                  - DECLINED
                  - TIMED_OUT
          then:
            properties:
              accepted_at:
                type: string
      description: >-
        One quote the maker published, display fields only; never a signature. A
        decline carries no reason: the maker's answer records none.
    NextCursor:
      type:
        - string
        - 'null'
      minLength: 1
      maxLength: 2048
      description: Opaque cursor for the next page, or null when has_more is false.
    ErrorDetail:
      properties:
        code:
          $ref: '#/components/schemas/ErrorCode'
          description: Stable registered code; branch on this, not on message or status.
        field_violations:
          description: >-
            Each invalid input by JSON pointer; empty when the error is not
            about a specific input.
          items:
            $ref: '#/components/schemas/FieldViolation'
          type: array
        message:
          description: Human-readable; may change without notice.
          minLength: 1
          type: string
        request_id:
          description: >-
            UUIDv7 of this request, also returned in the X-Request-ID header.
            Quote it when reporting a problem.
          format: uuid
          pattern: >-
            ^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
          type: string
        retry:
          $ref: '#/components/schemas/Retry'
          description: What the caller should do next; fixed by the registry for each code.
      required:
        - code
        - message
        - retry
        - request_id
        - field_violations
      type: object
    UInt64String:
      type: string
      pattern: >-
        ^(0|[1-9][0-9]{0,18}|1[0-7][0-9]{18}|18[0-3][0-9]{17}|184[0-3][0-9]{16}|1844[0-5][0-9]{15}|18446[0-6][0-9]{14}|184467[0-3][0-9]{13}|1844674[0-3][0-9]{12}|184467440[0-6][0-9]{10}|1844674407[0-2][0-9]{9}|18446744073[0-6][0-9]{8}|1844674407370[0-8][0-9]{6}|18446744073709[0-4][0-9]{5}|184467440737095[0-4][0-9]{4}|18446744073709550[0-9]{3}|18446744073709551[0-5][0-9]{2}|1844674407370955160[0-9]|1844674407370955161[0-5])$
      maxLength: 20
      format: uint64-decimal
    Timestamp:
      type: string
      format: date-time
    UInt32String:
      type: string
      pattern: >-
        ^(0|[1-9][0-9]{0,8}|[1-3][0-9]{9}|4[01][0-9]{8}|42[0-8][0-9]{7}|429[0-3][0-9]{6}|4294[0-8][0-9]{5}|42949[0-5][0-9]{4}|429496[0-6][0-9]{3}|4294967[0-1][0-9]{2}|42949672[0-8][0-9]|429496729[0-5])$
      maxLength: 10
    UnsignedMetric:
      oneOf:
        - $ref: '#/components/schemas/Amount'
        - type: 'null'
      description: >-
        Non-negative amount in atomic USDC (6 decimals, "1000000" = 1 USDC);
        null when it could not be established, never zero in its place.
    ErrorCode:
      description: >-
        Stable HTTP error code. Each code has one HTTP status and one retry
        value.
      enum:
        - INVALID_REQUEST
        - INVALID_QUERY
        - INVALID_CURSOR
        - INVALID_IDEMPOTENCY_KEY
        - ORIGIN_REQUIRED
        - SUBPROTOCOL_REQUIRED
        - UNSUPPORTED_BROWSE_CONTRACT
        - UNAUTHENTICATED
        - FORBIDDEN
        - ORIGIN_NOT_ALLOWED
        - ACCESS_REQUIRED
        - NOT_FOUND
        - IDENTITY_NOT_FOUND
        - QUOTE_NOT_FOUND
        - INVITE_CODE_NOT_FOUND
        - IDEMPOTENCY_KEY_REUSED
        - STATE_CONFLICT
        - INVITE_CODE_EXHAUSTED
        - STALE_CURSOR
        - CURSOR_EXPIRED
        - CURSOR_RESET
        - RECURRING_DEFINITION_CONFLICT
        - EMBEDDED_WALLET_CONFLICT
        - SECRET_UNAVAILABLE
        - ROTATION_IN_PROGRESS
        - TELEMETRY_CONFLICT
        - RFQ_NOT_CANCELLABLE
        - RFQ_NOT_OPEN
        - RFQ_GENERATION_STALE
        - RFQ_GENERATION_IN_FLIGHT
        - QUOTE_EXPIRED
        - QUOTE_CANCELLED
        - QUOTE_REPLACED
        - QUOTE_SIGNER_CHANGED
        - QUOTE_CAPACITY_EXCEEDED
        - CORE_ACCOUNT_NOT_READY
        - CORE_ACCOUNT_ACTIVATION_REQUIRED
        - CORE_EXIT_ABANDONED
        - CORE_MOVE_IN_FLIGHT
        - USERNAME_TAKEN
        - USERNAME_ALREADY_SET
        - INVALID_SIGNATURE
        - WALLET_CONTRACT_UNSUPPORTED
        - WRONG_AUTHORITY
        - KEY_LIMIT_REACHED
        - USERNAME_NOT_ALLOWED
        - RATE_LIMITED
        - CONNECTION_LIMIT
        - RFQ_INTENT_LIMIT
        - QUOTE_EXPOSURE_LIMIT
        - DEPENDENCY_STALE
        - AUTHORIZATION_UNAVAILABLE
        - SOURCE_UNAVAILABLE
        - CONTRACT_UNAVAILABLE
        - MARKET_DATA_UNAVAILABLE
        - BROWSE_UNAVAILABLE
        - FINANCIAL_ACTIONS_DISABLED
        - CORE_EXIT_UNAVAILABLE
        - COLLATERAL_REDUCTION_UNAVAILABLE
        - SPONSORSHIP_UNAVAILABLE
        - CONTRACT_SIGNATURE_OVERLOADED
        - QUOTE_EXPOSURE_STALE
        - COMBO_AUTOMATIC_DISABLED
        - EMBEDDED_WALLET_UNAVAILABLE
        - CONNECTION_DRAIN
      type: string
    FieldViolation:
      properties:
        code:
          description: >-
            REQUIRED: the input is missing. INVALID: it is present but malformed
            or out of range. UNEXPECTED: the input is not accepted here.
          enum:
            - REQUIRED
            - INVALID
            - UNEXPECTED
          type: string
        field:
          description: >-
            JSON pointer into the body, or into the query parameters as one flat
            object for requests without a body, for example /legs/0/stake or
            /limit.
          pattern: ^(/([^~/]|~[01])*)+$
          type: string
      required:
        - field
        - code
      type: object
    Retry:
      description: >-
        NEVER: stop. BACKOFF: resend the same request with the same
        Idempotency-Key after Retry-After. REFRESH: re-read state, then send a
        new request with a new Idempotency-Key.
      enum:
        - NEVER
        - BACKOFF
        - REFRESH
      type: string
    Amount:
      type: string
      pattern: ^(0|[1-9][0-9]{0,77})$
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: ttk_
      description: >-
        Scoped API key (`ttk_...`), created in the Totalis app or by a
        wallet-session user through the API keys routes with a fresh wallet
        signature; those routes never accept a key. Each key acts for one
        account, yours or a maker's, and holds only scopes that account can use.
        Each operation lists the scopes it requires. Send no `Origin`.

````

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