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

# Readiness

> Kubernetes-style readiness probe. Returns 200 only when the service is ready to serve traffic.



## OpenAPI

````yaml GET /health/readiness
openapi: 3.0.3
info:
  title: Umbra Indexer Read Service
  description: >
    Read-only REST API for querying Umbra mixer tree state, UTXO records,

    and Merkle inclusion proofs.


    ## Response Encoding


    **All endpoints** support `application/x-protobuf` encoding. The encoding

    strategy differs by endpoint category:


    - **Always Protobuf** (no content negotiation): stats, tree metadata, Merkle
    proofs,
      and all UTXO data endpoints. These endpoints always respond with
      `Content-Type: application/x-protobuf` regardless of the `Accept` header.
    - **Content negotiation** (health endpoints only): respond with JSON by
    default,
      or Protobuf when `Accept: application/x-protobuf` is set. Send
      `Accept: application/x-protobuf` for consistent protobuf-only clients.

    ## UTXO Response Layouts


    The three UTXO data endpoints (`GET /v1/utxos`, `GET
    /v1/utxos/{absolute_index}`,

    `GET /v1/trees/{tree_index}/utxos`) support two Protobuf response layouts

    controlled by the `X-Response-Layout` request header:


    - **Row-oriented** (default) -- `UtxoResponse` message: each UTXO is a
      self-contained `UtxoDataItem` sub-message. Easier to iterate record-by-record.
    - **Columnar** (`X-Response-Layout: columnar`) -- `UtxoColumnarResponse`
    message:
      each field across all UTXOs is packed into a parallel array inside a single
      `UtxoColumns` sub-message. Compresses significantly better over the wire and is
      preferred by vectorized consumers (e.g. data pipelines, analytics).

    ## Rate Limiting


    All endpoints are subject to rate limiting. Exceeded limits return `429 Too
    Many Requests`.


    ## Compression


    All responses are compressed. Send `Accept-Encoding: gzip, br`.


    ## Absolute Index


    The **absolute index** is a globally monotonic cursor across all Merkle
    trees:

    ```

    absolute_index = tree_index * MAX_LEAVES_PER_TREE + insertion_index

    ```

    where `MAX_LEAVES_PER_TREE = 1,048,576` (2^20).
  version: 0.1.0
  contact:
    name: Umbra Protocol
servers:
  - url: https://utxo-indexer.api.umbraprivacy.com
    description: Mainnet
  - url: https://utxo-indexer.api-devnet.umbraprivacy.com
    description: Devnet
security: []
tags:
  - name: health
    description: |
      Health and readiness probes for Kubernetes or load-balancer checks.
      Support both JSON and Protobuf via `Accept` header negotiation.
  - name: stats
    description: Aggregate statistics for the UTXO index. Always Protobuf.
  - name: trees
    description: Per-tree Merkle metadata and Merkle inclusion proofs. Always Protobuf.
  - name: utxos
    description: >
      UTXO data queries with absolute-index-based pagination. Always Protobuf.

      Supports row-oriented and columnar response layouts via
      `X-Response-Layout`.
paths:
  /health/readiness:
    get:
      tags:
        - health
      summary: Kubernetes readiness probe
      description: >
        Returns `200 OK` only when all downstream dependencies (storage backend)

        are reachable. Returns `503 Service Unavailable` otherwise.


        **Content negotiation**: `Accept: application/x-protobuf` -> Protobuf;
        else JSON.

        The `503` response uses the same schema with `ready: false`.
      operationId: readiness
      parameters:
        - name: Accept
          in: header
          required: false
          schema:
            type: string
            enum:
              - application/json
              - application/x-protobuf
      responses:
        '200':
          description: Service is ready to accept traffic.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReadinessResponse'
              example:
                ready: true
                storage: true
            application/x-protobuf:
              schema:
                $ref: '#/components/schemas/ReadinessResponse'
        '503':
          description: Service is not ready (storage backend unreachable or degraded).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReadinessResponse'
              example:
                ready: false
                storage: false
            application/x-protobuf:
              schema:
                $ref: '#/components/schemas/ReadinessResponse'
components:
  schemas:
    ReadinessResponse:
      type: object
      description: >
        Readiness probe response returned by `GET /health/readiness`.


        Returns `200 OK` only when all downstream dependencies are reachable.

        Returns `503 Service Unavailable` when any dependency is unhealthy --
        the

        response body still uses this schema, with `ready: false`.
      required:
        - ready
        - storage
      properties:
        ready:
          type: boolean
          description: '`true` if all dependencies (storage backend) are reachable.'
          example: true
        storage:
          type: boolean
          description: '`true` if the storage backend passed its connectivity probe.'
          example: true

````