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

# Create and open a private auction

> The resolved audience and identity policy freeze before this call
returns. Economic identity is derived exclusively from the
authenticated principal; a caller-supplied account identifier is
neither required nor trusted. Supply the idempotency key in the header
or request body. If both are present, they must match exactly.




## OpenAPI

````yaml /openapi/agora.yaml post /v1/auctions
openapi: 3.1.0
info:
  title: Agora Auction House API
  version: 1.0.0-pilot
  description: |
    Private first-price sealed auctions for venue-backed prediction contracts.
    Active auctions are never published through an unauthenticated or global
    feed. All price and quantity values are integer atoms.

    ## Authentication

    Every `/v1` operation requires a first-party Kairos session JWT
    (`Authorization: Bearer <jwt>`, RS256, `iss: kairos.trade`,
    `aud: kairos-api`, `ver: 1`, an expiry claim, and a subject enrolled in the
    Auction House). Any other credential shape — missing header, wrong
    audience, revoked session, unenrolled subject — is rejected with `401`
    before the handler runs. There is no API-key or anonymous tier. Browser
    WebSocket clients pass the same JWT as the `Sec-WebSocket-Protocol`
    subprotocol pair `authorization, Bearer.<base64url(jwt)>`.

    Every session is granted the `auction:create` and `auction:quote`
    capabilities; they only allow the request to reach the fail-closed
    Go-owned economic policy store, which remains the real authorization
    boundary.

    ## Errors

    Every error body is a flat JSON object: `{"error": "<code>"}`, plus a
    `"message"` field on rejections raised by the auction engine. Codes are
    stable; `message` is descriptive and must not be parsed. `422` rejections
    carry the durable auction reason code (for example `INVALID_PRICE_TICK`,
    `UNAUTHORIZED_SIZE`, `SERVICE_CAPACITY_EXCEEDED`) as the `error` value.

    ## Request limits

    Request bodies are capped at 1 MiB (`413 payload_too_large`). JSON is
    parsed strictly: no `null` values, no duplicate object keys, no unknown
    fields, no trailing data, and at most 64 levels of nesting. Owner-routing
    headers (`X-Service-Token`, `X-Agora-Peer`, `X-Agora-Active-Only`,
    `X-Agora-Owner-Read-Fallback`) are internal capabilities and are rejected
    with `403` on the public listener.

    ## Rate limiting

    Only state-changing operations are metered, by a per-account and
    per-auction token bucket owned by the authoritative shard, evaluated
    before any risk reservation or journal write. Exceeding a bucket returns
    `429 auction_mutation_rate_limited`. No `Retry-After` or `X-RateLimit-*`
    headers are emitted; back off and retry with the same idempotency key.
    Reads, both preflight calls, and the stream are not metered.
servers:
  - url: https://agora.kairos.trade
    description: >-
      Production. Agora is allow-listed RFQ and the production host is not
      currently enabled, so this base URL does not answer public requests yet.
  - url: https://staging-agora.kairos.trade
    description: Staging.
security:
  - bearerAuth: []
paths:
  /v1/auctions:
    post:
      summary: Create and open a private auction
      description: |
        The resolved audience and identity policy freeze before this call
        returns. Economic identity is derived exclusively from the
        authenticated principal; a caller-supplied account identifier is
        neither required nor trusted. Supply the idempotency key in the header
        or request body. If both are present, they must match exactly.
      parameters:
        - $ref: '#/components/parameters/OptionalIdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAuction'
      responses:
        '200':
          description: Identical idempotent replay
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuctionView'
        '201':
          description: Durably opened
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuctionView'
        '400':
          description: |
            `invalid_json` (unparseable, `null`, duplicate key, unknown field,
            or over 64 levels deep), `multiple_json_values` (trailing data),
            `idempotency_key_mismatch` (header and body keys differ), or
            `idempotency_key_required` (no key at all, so the create cannot be
            routed to its owner shard).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: idempotency_key_mismatch
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: |
            `forbidden` when the session lacks the `auction:create`
            capability, or `internal_routing_headers_forbidden` when the
            request carries an owner-routing header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          $ref: '#/components/responses/Conflict'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '422':
          $ref: '#/components/responses/Rejected'
        '429':
          $ref: '#/components/responses/MutationRateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          description: |
            New creates are paused: `projection_backlog` (asynchronous
            projection backlog is unsafe), `clock_unhealthy`,
            `journal_capacity_unhealthy`, or — when the owning shard for this
            idempotency key cannot be reached — `auction_owner_unavailable`,
            `owner_routing_unavailable`, or `owner_response_invalid`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  parameters:
    OptionalIdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: >-
        Required here or in the JSON body; both values must match when supplied
        together.
      schema:
        type: string
        minLength: 1
        maxLength: 200
  schemas:
    CreateAuction:
      type: object
      required:
        - market_id
        - outcome_id
        - side
        - fill_instruction
        - hard_reserve_price_atoms
        - slippage_reference_policy
        - max_cumulative_slippage_bps
        - venue_scope
        - audience_mode
        - identity_disclosure_mode
        - allocation_priority_policy
        - max_total_execution_time_ms
      properties:
        idempotency_key:
          type: string
          description: May be supplied instead of the header
        market_id:
          type: string
          maxLength: 128
        outcome_id:
          type: string
          maxLength: 128
        side:
          enum:
            - BUY
            - SELL
        fill_instruction:
          enum:
            - FOK
            - FLEXIBLE
        fixed_quantity_atoms:
          type: integer
          format: int64
          minimum: 1
        flexible_fill:
          $ref: '#/components/schemas/FlexibleFill'
        hard_reserve_price_atoms:
          $ref: '#/components/schemas/PriceAtoms'
        slippage_reference_price_atoms:
          allOf:
            - $ref: '#/components/schemas/PriceAtoms'
          description: Required only when slippage_reference_policy is APPROVED_EXPLICIT.
        slippage_reference_policy:
          enum:
            - PUBLIC_EXECUTABLE_VWAP
            - APPROVED_EXPLICIT
        max_cumulative_slippage_bps:
          type: integer
          format: int64
          minimum: 0
          maximum: 10000
        minimum_private_improvement_bps:
          type: integer
          format: int64
          minimum: 0
          maximum: 10000
        maximum_mm_concentration_bps:
          type: integer
          format: int64
          minimum: 1
          maximum: 10000
          default: 10000
        minimum_mm_reliability_tier:
          enum:
            - UNRATED
            - C
            - B
            - A
          default: UNRATED
        allocation_priority_policy:
          enum:
            - PRICE_FIRST
            - COMPLETION_FIRST
          description: >-
            Frozen before invitations; price-first minimizes marginal economics
            while completion-first may prefer one firm able to complete the
            target.
        auction_ttl_ms:
          type: integer
          format: int64
          minimum: 2000
          maximum: 2592000000
          default: 5000
          description: >-
            Custom sealed bidding window from 2 seconds through 30 days. Omit or
            send 0 to accept the 5-second default.
        venue_scope:
          type: array
          minItems: 1
          maxItems: 8
          items:
            type: string
            maxLength: 64
        audience_mode:
          enum:
            - MANUAL
            - SAVED_GROUP
            - RECOMMENDED
        allowed_participants:
          type: array
          maxItems: 16
          items:
            type: string
            maxLength: 128
        saved_group_id:
          type: string
          maxLength: 128
        excluded_participants:
          type: array
          maxItems: 16
          items:
            type: string
            maxLength: 128
        max_recipients:
          type: integer
          minimum: 1
          maximum: 16
          default: 16
        identity_disclosure_mode:
          enum:
            - CLASS_ONLY
            - REVEAL_TO_INVITEES
            - REVEAL_ON_AWARD
        fallback_ladder:
          type: array
          maxItems: 4
          items:
            $ref: '#/components/schemas/FallbackRung'
        max_total_execution_time_ms:
          type: integer
          format: int64
          minimum: 1
          maximum: 120000
        client_metadata:
          type: object
          additionalProperties:
            type: string
          description: >-
            Bounded non-authoritative display metadata, at most 32 entries and 4
            KiB total. market_title and market_provider provide the catalog
            label. Optional client_order_id is a 1–64 character desk
            reconciliation reference using letters, numbers, or . _ : / -; it is
            originator-only and should also derive the create idempotency key.
    AuctionView:
      type: object
      required:
        - auction
      description: Fields are filtered by originator/invitee role and identity policy.
      properties:
        auction:
          $ref: '#/components/schemas/Auction'
        originator_identity:
          type: string
          description: >-
            Policy-authorized public program selector; never a program,
            execution-account, venue-account, or credential identifier.
        audience_participant_ids:
          type: array
          description: >-
            Originator-only policy-authorized public counterparty selectors;
            hidden execution identities never cross this boundary.
          items:
            type: string
        own_quote:
          $ref: '#/components/schemas/Quote'
        allocations:
          type: array
          items:
            $ref: '#/components/schemas/Allocation'
    Error:
      type: object
      required:
        - error
      description: |
        Flat error envelope used by every JSON error response. `message` is
        present on rejections raised by the auction engine and absent on
        transport-level rejections such as `invalid_list_page` or
        `payload_too_large`. Match on `error`; never parse `message`.
      properties:
        error:
          type: string
          description: Stable machine-readable code
          or the durable auction reason code on a 422/409 rejection.: null
        message:
          type: string
          description: Human-readable detail; not a stable contract.
    FlexibleFill:
      type: object
      required:
        - min_fill_quantity_atoms
        - target_fill_quantity_atoms
        - max_fill_quantity_atoms
        - objective_mode
      properties:
        min_fill_quantity_atoms:
          type: integer
          format: int64
          minimum: 1
        target_fill_quantity_atoms:
          type: integer
          format: int64
          minimum: 1
        max_fill_quantity_atoms:
          type: integer
          format: int64
          minimum: 1
        objective_mode:
          enum:
            - STOP_AT_TARGET
            - SEEK_MAXIMUM
      description: >-
        Minimum, target, and maximum are always explicit; SEEK_MAXIMUM may
        continue beyond the target but never beyond maximum.
    PriceAtoms:
      type: integer
      format: int64
      minimum: 0
      maximum: 10000
      description: One atom is 0.01 cent of probability-dollar price.
    FallbackRung:
      type: object
      required:
        - action
      properties:
        action:
          enum:
            - EXECUTE
            - CANCEL_REMAINDER
          default: EXECUTE
        rail:
          enum:
            - VENUE_NATIVE_RFQ
            - CLOB
        venue:
          type: string
        limit_price_atoms:
          $ref: '#/components/schemas/PriceAtoms'
        minimum_quantity_atoms:
          type: integer
          format: int64
          minimum: 1
        maximum_quantity_atoms:
          type: integer
          format: int64
          minimum: 1
        maximum_fraction_bps:
          type: integer
          format: int64
          minimum: 1
          maximum: 10000
          default: 10000
        timeout_ms:
          type: integer
          format: int64
          minimum: 1
          default: 2000
        maximum_quote_age_ms:
          type: integer
          format: int64
          minimum: 1
          maximum: 5000
          default: 500
        allow_partial:
          type: boolean
        on_unavailable:
          enum:
            - CONTINUE
            - STOP
          default: CONTINUE
        on_reject:
          enum:
            - CONTINUE
            - STOP
          default: CONTINUE
        fee_profile:
          $ref: '#/components/schemas/FeeProfile'
          description: Server-pinned; caller values are not authoritative.
        route_rule_profile:
          $ref: '#/components/schemas/RouteRuleProfile'
          description: >-
            Server-pinned executable venue and mapping contract; caller values
            are not authoritative.
    Auction:
      type: object
      description: |
        Role-filtered auction state. Reserve, slippage, fallback, and public
        benchmark fields are present only for the originator.
      properties:
        auction_id:
          type: string
          format: uuid
        owner_epoch:
          type: string
          pattern: ^(0|[1-9]\d*)$
          description: >-
            Opaque unsigned owner-generation counter; compare as a decimal
            string.
        customer_class:
          type: string
        market_id:
          type: string
        outcome_id:
          type: string
        side:
          enum:
            - BUY
            - SELL
        fill_instruction:
          enum:
            - FOK
            - FLEXIBLE
        min_fill_quantity_atoms:
          type: integer
          format: int64
        target_fill_quantity_atoms:
          type: integer
          format: int64
        max_fill_quantity_atoms:
          type: integer
          format: int64
        objective_mode:
          enum:
            - STOP_AT_TARGET
            - SEEK_MAXIMUM
        allocation_priority_policy:
          enum:
            - PRICE_FIRST
            - COMPLETION_FIRST
        execution_objective_quantity_atoms:
          type: integer
          format: int64
        filled_quantity_atoms:
          type: integer
          format: int64
        hard_reserve_price_atoms:
          $ref: '#/components/schemas/PriceAtoms'
        slippage_reference_price_atoms:
          $ref: '#/components/schemas/PriceAtoms'
        slippage_reference_policy:
          enum:
            - PUBLIC_EXECUTABLE_VWAP
            - APPROVED_EXPLICIT
        max_cumulative_slippage_bps:
          type: integer
          format: int64
          minimum: 0
          maximum: 10000
        minimum_private_improvement_bps:
          type: integer
          format: int64
          minimum: 0
          maximum: 10000
        maximum_mm_concentration_bps:
          type: integer
          format: int64
          minimum: 1
          maximum: 10000
        minimum_mm_reliability_tier:
          enum:
            - UNRATED
            - C
            - B
            - A
        public_benchmark_price_atoms:
          $ref: '#/components/schemas/PriceAtoms'
        public_benchmark_quantity_atoms:
          type: integer
          format: int64
          minimum: 1
        public_benchmark_observed_at:
          type: string
          format: date-time
        public_benchmark_source:
          type: string
        benchmark_calculation_version:
          type: string
        max_total_execution_time_ms:
          type: integer
          format: int64
          minimum: 1
        venue_scope:
          type: array
          items:
            type: string
        audience_mode:
          enum:
            - MANUAL
            - SAVED_GROUP
            - RECOMMENDED
        max_recipients:
          type: integer
          minimum: 1
          maximum: 16
        identity_disclosure_mode:
          enum:
            - CLASS_ONLY
            - REVEAL_TO_INVITEES
            - REVEAL_ON_AWARD
        fallback_ladder:
          type: array
          items:
            $ref: '#/components/schemas/FallbackRung'
        rule_profile:
          $ref: '#/components/schemas/RuleProfile'
        client_metadata:
          type: object
          additionalProperties:
            type: string
          description: >-
            Catalog labels are participant-visible. The optional client_order_id
            is returned only to the originator for OMS reconciliation.
        invitation_delivery:
          allOf:
            - $ref: '#/components/schemas/InvitationDelivery'
          description: Originator-only durable delivery summary.
        state:
          enum:
            - PENDING_INVITATIONS
            - OPEN
            - CLOSING
            - EXECUTING
            - RECONCILING
            - PROCESSING
            - FILLED
            - PARTIALLY_FILLED
            - UNFILLED
            - CANCELLED
            - FAILED
            - COMPLETED
          description: >-
            PROCESSING is an invitee-only privacy projection used after close
            while another participant's execution or reconciliation state
            remains hidden.
        final_reason:
          enum:
            - OBJECTIVE_REACHED
            - TARGET_NOT_REACHED
            - MAXIMUM_NOT_REACHED
            - INSUFFICIENT_SIZE
            - MIN_FILL_NOT_REACHABLE
            - NO_BIDS
            - RESERVE_NOT_MET
            - MIN_BLOCK_SIZE_NOT_MET
            - REFERENCE_UNAVAILABLE
            - NO_PRIVATE_IMPROVEMENT
            - NO_ELIGIBLE_QUOTES
            - USER_CANCELLED
            - AUCTION_OWNER_LOST
            - MINIMUM_TRANCHE_BROKEN
            - BROKEN_FOK
            - EXECUTION_UNKNOWN
            - RECONCILIATION_REQUIRED
            - LADDER_EXHAUSTED
            - CANCEL_REMAINDER
            - RUNG_UNAVAILABLE
            - RUNG_QUOTE_STALE
            - RUNG_MINIMUM_NOT_REACHED
            - RUNG_SLIPPAGE_BREACH
            - VENUE_REJECTED
            - EXECUTION_REJECTED
            - EXECUTION_TIMEOUT
            - WINNER_EXPIRED
            - ATOMICITY_UNAVAILABLE
            - VENUE_UNAVAILABLE
            - VENUE_NATIVE_RFQ_NO_RESPONSE
            - VENUE_NATIVE_RFQ_RESERVE_BREACH
            - VENUE_NATIVE_RFQ_SLIPPAGE_BREACH
            - VENUE_NATIVE_RFQ_FAILED
            - CLOB_NO_LIQUIDITY
            - CLOB_RESERVE_BREACH
            - CLOB_SLIPPAGE_BREACH
            - CLOB_FALLBACK_FAILED
            - MAPPING_INVALIDATED
            - COLLATERAL_INVALIDATED
            - PARTICIPANT_INELIGIBLE
            - SELF_TRADE_PREVENTED
            - UNAUTHORIZED_SIZE
            - SIGNER_UNAVAILABLE
            - MARKET_HALTED
            - VENUE_SESSION_LOST
            - MM_POPULATION_UNAVAILABLE
            - AUCTION_EXPIRED
            - TICK_PROFILE_STALE
            - VENUE_RULE_CHANGED
            - UNSUPPORTED_RAIL
            - INVALID_FALLBACK_POLICY
            - TOTAL_DEADLINE_EXCEEDED
            - INTERNAL_ERROR
            - BID_INVALID
            - INVALID_PRICE_RANGE
            - INVALID_PRICE_TICK
            - INVALID_QUANTITY_TICK
            - REVISION_CONFLICT
            - LATE_BID
        cancellation_reason_code:
          enum:
            - UNSPECIFIED
            - CLIENT_REQUEST
            - RISK_REDUCTION
            - MARKET_VIEW_CHANGED
            - ROUTING_CHANGE
            - DUPLICATE_ORDER
            - OTHER
          description: Originator-only durable cancellation instruction.
        cancellation_note:
          type: string
          maxLength: 240
          description: Originator-only bounded operator audit note.
        reason_history:
          type: array
          items:
            $ref: '#/components/schemas/ReasonRecord'
        minimum_tranche_established:
          type: boolean
        allocation_calculation_version:
          type: string
        capacity_authority_status:
          enum:
            - PENDING_VENUE_RECONCILIATION
            - PENDING_PORTFOLIO_COVERAGE
            - PORTFOLIO_COVERAGE_CONFIRMED
            - AUTHORITY_EVIDENCE_UNAVAILABLE
          description: Fail-closed venue and portfolio-capacity reconciliation state.
        capacity_covered_by_source_sequence:
          type: string
          pattern: ^(0|[1-9][0-9]*)$
          description: >-
            Originator-only sealed portfolio source sequence that explicitly
            covered every confirmed execution token.
        capacity_covered_at:
          type: string
          format: date-time
          description: >-
            Originator-only time at which explicit sealed coverage retired the
            capacity fence.
        capacity_portfolio_watermark:
          type: string
          maxLength: 256
          description: >-
            Originator-only opaque portfolio revision certified by the covering
            snapshot.
        open_time:
          type: string
          format: date-time
        close_time:
          type: string
          format: date-time
        finalized_at:
          type: string
          format: date-time
        sequence:
          type: string
          pattern: ^(0|[1-9]\d*)$
          description: Opaque auction authority sequence; compare as a decimal string.
    Quote:
      type: object
      required:
        - quote_id
        - auction_id
        - revision
        - price_atoms
        - max_executable_quantity_atoms
        - receive_sequence
        - received_at
        - status
      properties:
        quote_id:
          type: string
          format: uuid
        auction_id:
          type: string
          format: uuid
        revision:
          type: string
          pattern: ^(0|[1-9]\d*)$
          description: Opaque unsigned quote revision; compare as a decimal string.
        price_atoms:
          $ref: '#/components/schemas/PriceAtoms'
        max_executable_quantity_atoms:
          type: integer
          format: int64
        receive_sequence:
          type: string
          pattern: ^(0|[1-9]\d*)$
          description: >-
            Participant-scoped durable acknowledgement sequence encoded as an
            opaque decimal string; private FIFO coordinates are never exposed.
        received_at:
          type: string
          format: date-time
        status:
          enum:
            - ACTIVE
            - WITHDRAWN
            - SUPERSEDED
            - FROZEN
            - SELECTED
            - INELIGIBLE
    Allocation:
      type: object
      required:
        - allocation_id
        - price_atoms
        - quantity_atoms
        - rail
        - venue
        - minimum_tranche
        - execution_status
      properties:
        allocation_id:
          type: string
          format: uuid
        participant_id:
          type: string
          description: >-
            Policy-authorized public counterparty selector when visible to this
            principal; never a hidden execution or venue-account identifier.
        price_atoms:
          $ref: '#/components/schemas/PriceAtoms'
        quantity_atoms:
          type: integer
          format: int64
        rail:
          enum:
            - PRIVATE_BLOCK
            - VENUE_NATIVE_RFQ
            - CLOB
        venue:
          type: string
        minimum_tranche:
          type: boolean
        execution_status:
          enum:
            - PLANNED
            - SUBMITTED
            - CONFIRMED
            - REJECTED
            - UNKNOWN
        venue_execution_id:
          type: string
        confirmed_quantity_atoms:
          type: integer
          format: int64
        confirmed_price_atoms:
          $ref: '#/components/schemas/PriceAtoms'
        expected_fee_atoms:
          type: string
          pattern: ^(0|-?[1-9][0-9]*)$
        expected_all_in_value_atoms:
          type: string
          pattern: ^(0|-?[1-9][0-9]*)$
        confirmed_fee_atoms:
          type: string
          pattern: ^(0|-?[1-9][0-9]*)$
        confirmed_all_in_value_atoms:
          type: string
          pattern: ^(0|-?[1-9][0-9]*)$
        rung_index:
          type: integer
          minimum: 0
        submitted_at:
          type: string
          format: date-time
        acknowledged_at:
          type: string
          format: date-time
        finalized_at:
          type: string
          format: date-time
    FeeProfile:
      type: object
      required:
        - fee_profile_id
        - fee_profile_version
        - model
        - rate_ppm
        - fixed_fee_atoms
        - minimum_fee_atoms
        - prediction_fee_scale_ppm
        - rounding_mode
        - valid_until
      properties:
        fee_profile_id:
          type: string
        fee_profile_version:
          type: string
        model:
          enum:
            - NONE
            - NOTIONAL_PPM
            - PREDICTION_MARKET
          default: NONE
        rate_ppm:
          type: integer
          format: int64
          minimum: -1000000
          maximum: 1000000
        fixed_fee_atoms:
          type: integer
          format: int64
        minimum_fee_atoms:
          type: integer
          format: int64
          minimum: 0
        prediction_fee_scale_ppm:
          type: integer
          format: int64
          minimum: -1000000
          maximum: 1000000
        rounding_mode:
          enum:
            - AGAINST_ORIGINATOR
            - NEAREST
          default: AGAINST_ORIGINATOR
        valid_until:
          type: string
          format: date-time
    RouteRuleProfile:
      type: object
      required:
        - version
        - venue
        - rail
        - mapping_version
        - venue_market_id
        - venue_outcome_id
        - route_id
        - price_tick_atoms
        - quantity_tick_atoms
        - minimum_order_atoms
        - maximum_order_atoms
        - atomic
        - self_trade_prevention_mode
        - control_group_version
        - valid_from
        - valid_until
        - mapping_valid_from
        - mapping_valid_until
      properties:
        version:
          type: string
        venue:
          type: string
        rail:
          enum:
            - VENUE_NATIVE_RFQ
            - CLOB
        mapping_version:
          type: string
        venue_market_id:
          type: string
        venue_outcome_id:
          type: string
        route_id:
          type: string
        price_tick_atoms:
          type: integer
          format: int64
          minimum: 1
        quantity_tick_atoms:
          type: integer
          format: int64
          minimum: 1
        minimum_order_atoms:
          type: integer
          format: int64
          minimum: 1
        maximum_order_atoms:
          type: integer
          format: int64
          minimum: 1
        atomic:
          type: boolean
        self_trade_prevention_mode:
          enum:
            - CONTROL_GROUP_REJECT
        control_group_version:
          type: string
        valid_from:
          type: string
          format: date-time
        valid_until:
          type: string
          format: date-time
        mapping_valid_from:
          type: string
          format: date-time
        mapping_valid_until:
          type: string
          format: date-time
    RuleProfile:
      type: object
      description: >-
        Immutable venue, tick, atomicity, freshness, and fee-assumption snapshot
        pinned at admission.
      required:
        - version
        - venue
        - market_class
        - private_rail
        - price_tick_atoms
        - quantity_tick_atoms
        - minimum_block_atoms
        - minimum_leg_atoms
        - maximum_allocation_atoms
        - atomic_private_execution
        - public_benchmark_fee_scale_ppm
        - public_benchmark_max_age_ms
        - benchmark_calculation_version
        - valid_until
      properties:
        version:
          type: string
        venue:
          type: string
        market_class:
          type: string
        private_rail:
          enum:
            - PRIVATE_BLOCK
            - VENUE_NATIVE_RFQ
            - CLOB
        price_tick_atoms:
          type: integer
          format: int64
          minimum: 1
        quantity_tick_atoms:
          type: integer
          format: int64
          minimum: 1
        minimum_block_atoms:
          type: integer
          format: int64
          minimum: 0
        minimum_leg_atoms:
          type: integer
          format: int64
          minimum: 0
        maximum_allocation_atoms:
          type: integer
          format: int64
          minimum: 1
        atomic_private_execution:
          type: boolean
        private_fee_profile:
          $ref: '#/components/schemas/FeeProfile'
        public_benchmark_fee_scale_ppm:
          type: integer
          format: int64
          minimum: 0
          maximum: 1000000
        public_benchmark_max_age_ms:
          type: integer
          format: int64
          minimum: 1
          maximum: 5000
        benchmark_calculation_version:
          type: string
        minimum_scorecard_sample_count:
          type: integer
          minimum: 1
          default: 10
        maximum_scorecard_age_ms:
          type: integer
          format: int64
          minimum: 1
        valid_until:
          type: string
          format: date-time
    InvitationDelivery:
      type: object
      required:
        - requested_count
        - delivered_count
        - by_transport
        - participants
      properties:
        requested_count:
          type: integer
          minimum: 0
          maximum: 16
        delivered_count:
          type: integer
          minimum: 0
          maximum: 16
        by_transport:
          type: object
          additionalProperties: false
          required:
            - BROWSER
            - FIX
          properties:
            BROWSER:
              type: integer
              minimum: 0
              maximum: 16
            FIX:
              type: integer
              minimum: 0
              maximum: 16
        last_delivered_at:
          type: string
          format: date-time
        participants:
          type: array
          maxItems: 16
          description: >-
            Originator-only delivery evidence keyed by public counterparty
            selector; hidden execution and delivery-session identities are never
            exposed.
          items:
            $ref: '#/components/schemas/InvitationParticipantDelivery'
    ReasonRecord:
      type: object
      required:
        - reason
        - stage
        - occurred_at
        - contributing
      properties:
        reason:
          type: string
        stage:
          type: string
        rung_index:
          type: integer
          minimum: 0
        occurred_at:
          type: string
          format: date-time
        contributing:
          type: boolean
    InvitationParticipantDelivery:
      type: object
      required:
        - participant_id
        - delivered
      properties:
        participant_id:
          type: string
          maxLength: 128
          description: Public counterparty selector frozen for this auction.
        delivered:
          type: boolean
        transport:
          enum:
            - BROWSER
            - FIX
        delivered_at:
          type: string
          format: date-time
  responses:
    Unauthorized:
      description: |
        The bearer session is absent, malformed, expired, revoked, signed by
        an unrecognized key, carries the wrong issuer, audience, or schema
        version, or its subject is not enrolled in the Auction House.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: unauthorized
            message: authentication required
    Conflict:
      description: |
        `IDEMPOTENCY_CONFLICT` when the idempotency key was already used with
        a different request, or `REVISION_CONFLICT` when a quote revision is
        not exactly one higher than the caller's current revision.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: IDEMPOTENCY_CONFLICT
            message: IDEMPOTENCY_CONFLICT
    PayloadTooLarge:
      description: '`payload_too_large` — the request body exceeded 1 MiB.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: payload_too_large
    Rejected:
      description: |
        Admission, tick, reserve, audience, or state rejection. `error` is the
        durable auction reason code — for example `INVALID_REQUEST`,
        `TTL_OUT_OF_RANGE`, `BELOW_MIN_BLOCK_SIZE`, `NO_ELIGIBLE_MMS`,
        `PARTICIPANT_INELIGIBLE`, `SERVICE_CAPACITY_EXCEEDED`,
        `ATOMICITY_UNAVAILABLE` — or `auction_rejected` for an untyped
        request-shape failure.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: TTL_OUT_OF_RANGE
            message: TTL_OUT_OF_RANGE
    MutationRateLimited:
      description: |
        `auction_mutation_rate_limited` — the per-account or per-auction
        mutation bucket is exhausted, or the durable event budget reserved for
        auction lifecycle work has been reached. No `Retry-After` or
        `X-RateLimit-*` header is emitted. Retrying with the same idempotency
        key is safe.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: auction_mutation_rate_limited
            message: auction mutation rate limit exceeded
    InternalError:
      description: |
        `internal_error` — the owner is draining, its journal is unavailable,
        invitation publication for an idempotent replay is still pending, or
        an untyped dependency failure occurred. `encode_create`,
        `encode_quote`, and `encode_quote_preflight` indicate the request
        could not be re-encoded for owner routing.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: internal_error
            message: auction request could not be completed
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

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