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

# Feeds and signer keys

> The feeds that the price service signs, its signer keys, and the `feed_id` of each feed. Fetch it once at start-up, not for each request. A market's feed is `market.feeds[0]`. It equals the `feed_id` listed for its symbol.



## OpenAPI

````yaml /openapi/prices.json get /v1/feeds
openapi: 3.1.0
info:
  title: Rekt price service
  version: '1'
  summary: Signed price quotes for the instructions that read a price.
  description: >-
    Quotes come from `https://prices.rekt.trading`. There is no other address.
    Use TLS everywhere.


    Only the instructions that read a price need a quote: `settle`,
    `stamp_book`, `set_take_profit` and `prove_price`. The Knockout program
    verifies the signatures on chain. Nothing that the service returns outside
    the signed bytes is authoritative.


    Rules:


    - Call the service from a server, not from a browser. It sends no CORS
    headers.

    - Public use needs no sign-up. If you have a token, send it as
    `Authorization: Bearer <token>`. Keep a token out of URLs.

    - Public use is rate-limited for each client address. A limited request gets
    `429` with `retry_after_ms` and a `Retry-After` header. A limit says nothing
    about whether a feed is healthy.

    - Back off with jitter on `429` and `503`, and obey `retry_after_ms`.

    - For the latest price, use the stream
    (`wss://prices.rekt.trading/v1/stream`), not polling. Keep one stream
    connection per process.

    - A response can hold fields that this description does not list. Ignore a
    field that you do not know.


    For higher limits, write to support@asymmetra.xyz.
servers:
  - url: https://prices.rekt.trading
    description: The price service.
security:
  - {}
  - bearerAuth: []
tags:
  - name: Quotes
    description: Signed quotes.
  - name: Feeds
    description: Feeds, signer keys and readiness.
  - name: Health
    description: Process health.
paths:
  /v1/feeds:
    get:
      tags:
        - Feeds
      summary: Feeds and signer keys
      description: >-
        The feeds that the price service signs, its signer keys, and the
        `feed_id` of each feed. Fetch it once at start-up, not for each request.
        A market's feed is `market.feeds[0]`. It equals the `feed_id` listed for
        its symbol.
      operationId: listFeeds
      responses:
        '200':
          description: The feeds.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FeedsResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          $ref: '#/components/responses/Unavailable'
components:
  schemas:
    FeedsResponse:
      type: object
      description: The feeds that the price service signs, and its signer keys.
      properties:
        cluster:
          type: string
          description: The Solana cluster that the quotes are for.
          examples:
            - mainnet
        ed25519_program_id:
          type: string
          description: The ed25519 program id, in base58.
        feeds:
          type: array
          description: The feeds.
          items:
            $ref: '#/components/schemas/Feed'
        instance_id:
          type: string
          description: The service instance that answered.
        policy_revision:
          type: integer
          description: The revision of the feed policy. It is not signed.
        server_time_ms:
          type: integer
          description: >-
            The service clock when it answered. Unit: milliseconds since the
            Unix epoch.
        signer_set:
          type: object
          description: The signer keys of the service.
          properties:
            authority:
              type: string
              description: >-
                Where the authoritative signer set is, in words. The program
                verifies signatures against its own governed signer set, not
                against this list.
            pubkeys:
              type: array
              items:
                type: string
              description: The signer public keys, in base58.
            threshold:
              type: integer
              description: >-
                The signature threshold of the signer set, as the service states
                it. Unit: signatures.
      required:
        - feeds
    Feed:
      type: object
      description: >-
        One feed that the price service signs. A feed is not a market: the list
        can carry a feed whose market is not open to trade.
      properties:
        symbol:
          type: string
          description: The feed symbol. Send it as `feed` in `POST /v1/quote`.
          examples:
            - SOL/USD
        feed_id:
          type: string
          description: >-
            The feed id, as 64 hex characters. It equals `market.feeds[0]` of
            the market of this feed. Pin it at start-up.
          pattern: ^[0-9a-f]{64}$
        quote_unit:
          type: string
          description: The unit of the price.
          examples:
            - USD
        exponent:
          type: integer
          description: The price exponent. The price is `price × 10^exponent`.
          examples:
            - -8
        asset_class:
          type: string
          description: The asset class of the feed.
        calendar:
          type: string
          description: >-
            The name of the trading calendar of the feed. `always` means the
            feed has no closed session.
        halted:
          type: boolean
          description: >-
            True when the service has halted the feed. A quote request for a
            halted feed gets `409`.
        max_age_slots:
          type: integer
          description: 'The age limit of the feed. Unit: slots.'
      required:
        - symbol
        - feed_id
    Refusal:
      type: object
      description: A refused request. A failure is never a price.
      properties:
        status:
          type: string
          description: >-
            The refusal class, as a short code, for example `not_ready` or
            `invalid_request`.
        reason:
          type: string
          description: >-
            Why the service refused, as a short code in snake_case, for example
            `session_closed`. The list of codes can grow. Route an unknown code
            by its HTTP status.
        error:
          type: string
          description: >-
            The error code of an invalid request, for example
            `idempotency_key_reuse`.
        detail:
          type: string
          description: The refusal, in words.
        retry_after_ms:
          type: integer
          description: >-
            Wait this long before you retry. Only a retryable refusal carries
            it. Unit: milliseconds.
        retryable:
          type: boolean
          description: False when a retry cannot succeed.
  responses:
    TooManyRequests:
      description: >-
        The rate limit for your client address applies. Clients behind one
        address share a limit. Retry after `retry_after_ms`, with backoff and
        jitter.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
      headers:
        Retry-After:
          description: 'Wait this long before you retry. Unit: seconds.'
          schema:
            type: integer
    Unavailable:
      description: The service cannot answer now. Retry later, with backoff and jitter.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Optional. A token for callers that have one. Public use needs no token.

````

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