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

# Import labeled examples

> Imports labeled examples: evaluate over the examples as a stored run, each stored as an example (`assignment_mode` `example`), and each example's labels recorded as feedback (source `import`), in one transaction, so an example is never stored without its labels. It spends engine calls, so previews and suggestions can replay the examples with their answers. Send the structure inline (`questions`, `attributes`, `aggregations`, `result`; registered on first sight, as evaluate does) or a registered structure's hash in `structure_hash`. Each example has its `item_id`, `state`, optional `attribute_values`, `summary` and `metadata`, its labels in `claims` (expected_answer and expected_outcome claims, at least one of either, checked as submit_feedback checks them; a verdict is refused), and `label_source`: `human`, `synthetic` (an agent wrote the label) or `unknown` (the default). Only `human` labels count toward the no-new-severe-mistake rule, and among near-identical items a label ranks owner > reviewer > `human` > `unknown` > `synthetic`. Up to 200 examples per call. Before any engine call every example is checked: content the structure refuses is 400 CONTENT_INVALID (`param` `examples.<i>.state.<key>` or `examples.<i>.attribute_values.<name>`), and claims are checked (`examples.<i>.claims.<j>`). The response is the run's (201): `run_id`, and per example its result, its evaluation `id` and its `feedback_id`. An example that failed stored nothing: it comes back failed with `error.retryable`; send it again in a new call with a new Idempotency-Key. Pass `run_id` to loss_report to see how the version agrees with the labels. The request has a 60 s budget, the commit included; examples it could not start fail with `NOT_STARTED`. A replay with the same Idempotency-Key returns the first result with the Idempotent-Replayed header and calls no engine.



## OpenAPI

````yaml /openapi.json post /v1/decisions/{decision_id}/examples
openapi: 3.1.0
info:
  title: Moonbounce Decisions API
  version: 0.0.0
  description: >-
    Moonbounce decisions: evaluate an item's state against a decision structure
    (System One questions, attributes you supply and aggregations over both),
    record feedback and import labeled examples, review a ranked queue, and
    improve the structure through suggestions that ship as code diffs, each with
    a preview (backtest) and an evidence label.


    **Authentication.** Send an API key as `Authorization: Bearer <key>` on
    every operation except `GET /health` and `POST /v1/structures/hash`. Call
    the API from a server, never a browser: a key must not reach one, and the
    API sends no CORS headers. A key belongs to one organization and one
    environment: production, or test for a key with the `env:test` permission.
    Test traffic never counts as production traffic.


    **Requests.** JSON bodies (`Content-Type: application/json`) of at most 1
    MB, parsed strictly: duplicate keys, lone surrogates, integers outside
    ±(2^53 - 1), `__proto__` keys, U+0000 and nesting deeper than 64 are a 400.


    **Retries.** Send an `Idempotency-Key` on every POST under /v1 that takes
    one (all but `POST /v1/structures/hash` and `POST /v1/review/items/fill`,
    whose retry is another fill within the day's budget). Keep it for the
    request's retries. The same key with the same request returns the first
    stored result, marked `Idempotent-Replayed: true`, for 24 hours (410 if that
    result was since deleted); with another request it is 422
    IDEMPOTENCY_KEY_REUSED. Keys are scoped to the organization and environment
    across every operation, so use a fresh key per request. A request that
    failed before its result was stored runs again when retried. 429 and 503
    under /v1 may carry `Retry-After` (seconds); a daily QUOTA_EXCEEDED cap
    instead names its reset time.


    **Errors.** Every error under /v1 is `{"error": {"type", "message",
    "reason"?, "param"?, "details"?}}` (ErrorBody); `GET /health` answers its
    own shape. Every response carries a `Request-Id` header. Rate limits apply
    per key, and per client IP for requests without a valid key; a 429
    RATE_LIMITED carries `Retry-After`.
servers:
  - url: https://api.moonbounce.ai
    description: Production
security: []
paths:
  /v1/decisions/{decision_id}/examples:
    post:
      tags:
        - feedback
      summary: Import labeled examples
      description: >-
        Imports labeled examples: evaluate over the examples as a stored run,
        each stored as an example (`assignment_mode` `example`), and each
        example's labels recorded as feedback (source `import`), in one
        transaction, so an example is never stored without its labels. It spends
        engine calls, so previews and suggestions can replay the examples with
        their answers. Send the structure inline (`questions`, `attributes`,
        `aggregations`, `result`; registered on first sight, as evaluate does)
        or a registered structure's hash in `structure_hash`. Each example has
        its `item_id`, `state`, optional `attribute_values`, `summary` and
        `metadata`, its labels in `claims` (expected_answer and expected_outcome
        claims, at least one of either, checked as submit_feedback checks them;
        a verdict is refused), and `label_source`: `human`, `synthetic` (an
        agent wrote the label) or `unknown` (the default). Only `human` labels
        count toward the no-new-severe-mistake rule, and among near-identical
        items a label ranks owner > reviewer > `human` > `unknown` >
        `synthetic`. Up to 200 examples per call. Before any engine call every
        example is checked: content the structure refuses is 400 CONTENT_INVALID
        (`param` `examples.<i>.state.<key>` or
        `examples.<i>.attribute_values.<name>`), and claims are checked
        (`examples.<i>.claims.<j>`). The response is the run's (201): `run_id`,
        and per example its result, its evaluation `id` and its `feedback_id`.
        An example that failed stored nothing: it comes back failed with
        `error.retryable`; send it again in a new call with a new
        Idempotency-Key. Pass `run_id` to loss_report to see how the version
        agrees with the labels. The request has a 60 s budget, the commit
        included; examples it could not start fail with `NOT_STARTED`. A replay
        with the same Idempotency-Key returns the first result with the
        Idempotent-Replayed header and calls no engine.
      operationId: importExamples
      parameters:
        - schema:
            $ref: '#/components/schemas/DecisionId'
          required: true
          name: decision_id
          in: path
        - schema:
            type: string
            minLength: 1
            maxLength: 255
            pattern: ^[\x20-\x7e]+$
            description: >-
              Makes a retry safe. For 24 hours, the same key with the same
              request returns the first stored result (with Idempotent-Replayed:
              true); the same key with a different request is a 422
              IDEMPOTENCY_KEY_REUSED. Keys are scoped to the organization and
              environment across every operation, so use a fresh key per
              request. A request that failed before its result was stored runs
              again when retried with its key.
          required: false
          description: >-
            Makes a retry safe. For 24 hours, the same key with the same request
            returns the first stored result (with Idempotent-Replayed: true);
            the same key with a different request is a 422
            IDEMPOTENCY_KEY_REUSED. Keys are scoped to the organization and
            environment across every operation, so use a fresh key per request.
            A request that failed before its result was stored runs again when
            retried with its key.
          name: idempotency-key
          in: header
      requestBody:
        required: true
        content:
          application/json:
            examples:
              inline:
                summary: Two labeled listings, with the structure inline
                value:
                  questions:
                    counterfeit:
                      type: noul
                      instructions: Is this listing selling a counterfeit?
                      reads:
                        - state.title
                    off_platform:
                      type: noul
                      instructions: Does it ask the buyer to pay off the platform?
                      reads:
                        - state.description
                  aggregations:
                    risk:
                      type: noisy_or
                      inputs:
                        - name: questions.counterfeit
                        - name: questions.off_platform
                    verdict:
                      type: bands
                      input: aggregations.risk
                      below: allow
                      cuts:
                        - at: 0.5
                          outcome: remove
                  result: aggregations.verdict
                  examples:
                    - item_id: listing-1
                      state:
                        title: Rolex Submariner, brand new, $45
                        description: DM me on WhatsApp to pay.
                      claims:
                        - kind: expected_outcome
                          value: remove
                        - kind: expected_answer
                          question: off_platform
                          value: true
                    - item_id: listing-2
                      state:
                        title: Used road bike, 54cm
                        description: Pick up in person, pay through checkout.
                      claims:
                        - kind: expected_outcome
                          value: allow
                      label_source: human
            schema:
              $ref: '#/components/schemas/ImportExamplesRequest'
      responses:
        '201':
          description: Imported
          headers:
            Idempotent-Replayed:
              schema:
                type: string
                enum:
                  - 'true'
                description: >-
                  Present and `true` when this is the stored result of an
                  earlier request with the same Idempotency-Key.
              required: false
              description: >-
                Present and `true` when this is the stored result of an earlier
                request with the same Idempotency-Key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportExamplesResponse'
        '400':
          description: 'Invalid request: `param` names the field at fault when one applies'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '401':
          description: Missing or invalid API key (reason KEY_INVALID)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '403':
          description: The key may not do this
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '404':
          description: Not found, or not in this key's organization and environment
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '409':
          description: Conflict with the current state
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '410':
          description: >-
            The Idempotency-Key's first result was deleted, so it cannot be
            replayed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '413':
          description: The HTTP body exceeds 1 MB (reason BODY_TOO_LARGE)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '422':
          description: >-
            The request is well formed but cannot be processed
            (IDEMPOTENCY_KEY_REUSED requires a fresh key; REQUEST_TOO_LARGE
            requires a smaller request)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '429':
          description: >-
            RATE_LIMITED: retry after Retry-After seconds; QUOTA_EXCEEDED:
            details.reset_at gives the daily reset time (no Retry-After)
          headers:
            Retry-After:
              schema:
                type: string
                description: Seconds to wait before retrying, when waiting helps.
              required: false
              description: Seconds to wait before retrying, when waiting helps.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
        '503':
          description: >-
            Temporarily unavailable, with Retry-After (for example reason
            AUTH_UNAVAILABLE, ENGINE_UNAVAILABLE or STORE_UNAVAILABLE): retry
            with the same Idempotency-Key
          headers:
            Retry-After:
              schema:
                type: string
                description: Seconds to wait before retrying, when waiting helps.
              required: true
              description: Seconds to wait before retrying, when waiting helps.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody'
      security:
        - bearerAuth:
            - decisions:develop
components:
  schemas:
    DecisionId:
      type: string
      pattern: ^[a-z][a-z0-9_.-]{0,127}$
    ImportExamplesRequest:
      anyOf:
        - type: object
          properties:
            questions:
              type: object
              additionalProperties:
                $ref: '#/components/schemas/Question'
              description: System One questions, keyed by name.
            attributes:
              type: object
              additionalProperties:
                $ref: '#/components/schemas/Attribute'
              description: >-
                Values your app supplies with each call in `attribute_values`.
                The model never sees them.
            aggregations:
              type: object
              additionalProperties:
                $ref: '#/components/schemas/Aggregation'
            result:
              type: string
              minLength: 1
              maxLength: 80
              description: The final feature's path, such as `aggregations.band`.
              examples:
                - questions.asks_for_refund
                - aggregations.band
            examples:
              type: array
              items:
                $ref: '#/components/schemas/ImportExample'
              minItems: 1
              maxItems: 200
            structure_hash:
              not: {}
              description: >-
                Must be absent: send the structure inline or by its hash, not
                both.
              x-moonbounce-absent: true
          required:
            - questions
            - result
            - examples
          additionalProperties: false
        - type: object
          properties:
            examples:
              type: array
              items:
                $ref: '#/components/schemas/ImportExample'
              minItems: 1
              maxItems: 200
            questions:
              not: {}
              description: >-
                Must be absent: send the structure inline or by its hash, not
                both.
              x-moonbounce-absent: true
            attributes:
              not: {}
              description: >-
                Must be absent: send the structure inline or by its hash, not
                both.
              x-moonbounce-absent: true
            aggregations:
              not: {}
              description: >-
                Must be absent: send the structure inline or by its hash, not
                both.
              x-moonbounce-absent: true
            result:
              not: {}
              description: >-
                Must be absent: send the structure inline or by its hash, not
                both.
              x-moonbounce-absent: true
            structure_hash:
              $ref: '#/components/schemas/StructureHash'
          required:
            - examples
            - structure_hash
          additionalProperties: false
    ImportExamplesResponse:
      type: object
      properties:
        run_id:
          type: string
          pattern: >-
            ^evr_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
          description: >-
            Pass it to loss_report; kept until `expires_at`. A stored run's
            evaluations stay after it expires.
        expires_at:
          $ref: '#/components/schemas/TimestampOutput'
        dry_run:
          type: boolean
          description: >-
            Whether the items were dry runs (nothing stored) or stored as
            evaluations.
        environment:
          $ref: '#/components/schemas/Environment'
        decision_id:
          $ref: '#/components/schemas/DecisionIdOutput'
        version:
          type: object
          properties:
            structure_hash:
              $ref: '#/components/schemas/StructureHashOutput'
            engine_profile:
              type: string
            binding:
              type: integer
              minimum: 0
              description: >-
                The binding revision; 0 when the deployment default applies
                (none was set).
          required:
            - structure_hash
            - engine_profile
            - binding
          additionalProperties: true
          x-moonbounce-sdk-known-fields: true
        counts:
          type: object
          properties:
            total:
              type: integer
              minimum: 0
            decided:
              type: integer
              minimum: 0
            computed:
              type: integer
              minimum: 0
            abstained:
              type: integer
              minimum: 0
            failed:
              type: integer
              minimum: 0
            labeled:
              type: integer
              minimum: 0
              description: Items that carried `expected`.
          required:
            - total
            - decided
            - computed
            - abstained
            - failed
            - labeled
          additionalProperties: true
          x-moonbounce-sdk-known-fields: true
        cost:
          $ref: '#/components/schemas/PreviewCost'
        results:
          type: array
          items:
            $ref: '#/components/schemas/ImportExampleResult'
          description: >-
            One per example, in order. A failed example stored nothing: send it
            again in a new call.
      required:
        - run_id
        - expires_at
        - dry_run
        - environment
        - decision_id
        - version
        - counts
        - cost
        - results
      additionalProperties: true
      x-moonbounce-sdk-known-fields: true
    ErrorBody:
      type: object
      properties:
        error:
          type: object
          properties:
            type:
              $ref: '#/components/schemas/ErrorType'
            reason:
              type: string
              pattern: ^[A-Z][A-Z0-9_]+$
              description: >-
                Set where a caller can act on it, one of the reasons in the
                ErrorReason schema. New reasons may be added: treat an unknown
                one by the status and `type`.
            message:
              type: string
              description: For people; don't parse it.
            param:
              type: string
              description: >-
                The request field at fault, as a dotted path
                (`attribute_values.region`, `claims.1.value`).
            details:
              type: object
              properties:
                issues:
                  type: array
                  items:
                    $ref: '#/components/schemas/ErrorIssue'
              additionalProperties: {}
          required:
            - type
            - message
          additionalProperties: true
          x-moonbounce-sdk-known-fields: true
      required:
        - error
      additionalProperties: true
      x-moonbounce-sdk-known-fields: true
    Question:
      oneOf:
        - $ref: '#/components/schemas/NoulQuestion'
      discriminator:
        propertyName: type
        mapping:
          noul: '#/components/schemas/NoulQuestion'
    Attribute:
      oneOf:
        - $ref: '#/components/schemas/StringAttribute'
        - $ref: '#/components/schemas/NumberAttribute'
        - $ref: '#/components/schemas/BooleanAttribute'
      discriminator:
        propertyName: type
        mapping:
          string: '#/components/schemas/StringAttribute'
          number: '#/components/schemas/NumberAttribute'
          boolean: '#/components/schemas/BooleanAttribute'
    Aggregation:
      oneOf:
        - $ref: '#/components/schemas/WeightedMean'
        - $ref: '#/components/schemas/Logistic'
        - $ref: '#/components/schemas/Min'
        - $ref: '#/components/schemas/Max'
        - $ref: '#/components/schemas/Product'
        - $ref: '#/components/schemas/NoisyOr'
        - $ref: '#/components/schemas/All'
        - $ref: '#/components/schemas/Any'
        - $ref: '#/components/schemas/Bands'
        - $ref: '#/components/schemas/Rules'
        - $ref: '#/components/schemas/Match'
      discriminator:
        propertyName: type
        mapping:
          weighted_mean: '#/components/schemas/WeightedMean'
          logistic: '#/components/schemas/Logistic'
          min: '#/components/schemas/Min'
          max: '#/components/schemas/Max'
          product: '#/components/schemas/Product'
          noisy_or: '#/components/schemas/NoisyOr'
          all: '#/components/schemas/All'
          any: '#/components/schemas/Any'
          bands: '#/components/schemas/Bands'
          rules: '#/components/schemas/Rules'
          match: '#/components/schemas/Match'
    ImportExample:
      type: object
      properties:
        item_id:
          type: string
          minLength: 1
          maxLength: 256
          description: >-
            Your id for the example, unique in the call. Its evaluation is
            stored under it.
        state:
          description: >-
            The content the questions evaluate, as on evaluate. Questions with
            `reads` see only the values at those paths.
        attribute_values:
          type: object
          additionalProperties:
            anyOf:
              - type: string
                maxLength: 200
              - type: number
              - type: boolean
          description: The example's attribute values, as on evaluate.
        summary:
          type: string
          minLength: 1
          maxLength: 140
          description: One line for review cards.
        metadata:
          $ref: '#/components/schemas/Metadata'
        claims:
          type: array
          items:
            $ref: '#/components/schemas/ExampleClaim'
          minItems: 1
          maxItems: 65
          description: >-
            The example's labels: expected_answer (one per question) and
            expected_outcome claims, at least one of either; input_broken is
            allowed.
        label_source:
          type: string
          enum:
            - human
            - synthetic
            - unknown
          description: >-
            Who labeled it: `human`, `synthetic` (an agent wrote the label) or
            `unknown` (the default). A label ranks owner > reviewer > `human` >
            `unknown` > `synthetic`, and only `human` counts toward the
            no-new-severe-mistake rule.
        reason:
          type: string
          maxLength: 4000
          description: >-
            Optional: why this is the right answer, in your words: the question
            it turns on, the words in the content that show it, and the rule
            that applies.
        unsure:
          type: boolean
      required:
        - item_id
        - state
        - claims
      additionalProperties: false
    StructureHash:
      type: string
      pattern: ^sha256:[0-9a-f]{64}$
    TimestampOutput:
      type: string
      format: date-time
    Environment:
      type: string
      enum:
        - production
        - test
      description: >-
        The environment of the key that made the call: `production` or `test`.
        Evaluations, feedback, reviews and suggestions are separate per
        environment; registered structures are shared.
    DecisionIdOutput:
      type: string
      pattern: ^[a-z][a-z0-9_.-]{0,127}$
    StructureHashOutput:
      type: string
      pattern: ^sha256:[0-9a-f]{64}$
    PreviewCost:
      type: object
      properties:
        engine_calls:
          type: integer
          minimum: 0
          description: >-
            On evaluate and import_examples, upstream engine calls reported in
            usage, including retries; one call can answer several features (Jev
            compiles them). On previews, features sent to engines, not upstream
            calls.
        cache_hits:
          type: integer
          minimum: 0
          description: >-
            Feature answers reused from cache. Only previews use the cache
            today; evaluate and import_examples report 0.
        input_tokens:
          type: integer
          minimum: 0
        usd_micros:
          type: integer
          minimum: 0
      required:
        - engine_calls
        - cache_hits
        - input_tokens
        - usd_micros
      additionalProperties: true
      x-moonbounce-sdk-known-fields: true
    ImportExampleResult:
      type: object
      properties:
        item_id:
          type: string
          minLength: 1
          maxLength: 256
          description: The item's id; a stored case's `evaluation_id`.
        evaluation_id:
          type: string
          pattern: >-
            ^evl_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
          description: 'A stored case: the evaluation replayed.'
        id:
          type: string
          description: >-
            The item's evaluation id, as one evaluate gives it: `evl_` when
            stored, `dry_` on a dry run (it names only the usage). Absent on a
            failed item.
        status:
          $ref: '#/components/schemas/RunItemStatusOutput'
        outcome:
          $ref: '#/components/schemas/OutcomeOutput'
        value:
          type: number
        via:
          type: string
        missing:
          type: array
          items:
            type: string
          description: Questions on the result's path with no answer.
        answers:
          type: object
          additionalProperties:
            type:
              - number
              - 'null'
          description: 'With `include: ["answers"]`.'
        attributes:
          type: object
          additionalProperties:
            anyOf:
              - type: string
                maxLength: 200
              - type: number
              - type: boolean
          description: >-
            With `include: ["attributes"]`, when the decision keeps content
            (absent when its `store_state` is false).
        cost:
          type: object
          properties:
            engine_calls:
              type: integer
              minimum: 0
              description: >-
                On evaluate and import_examples, upstream engine calls reported
                in usage, including retries; one call can answer several
                features (Jev compiles them). On previews, features sent to
                engines, not upstream calls.
            cache_hits:
              type: integer
              minimum: 0
              description: >-
                Feature answers reused from cache. Only previews use the cache
                today; evaluate and import_examples report 0.
            input_tokens:
              type: integer
              minimum: 0
            usd_micros:
              type: integer
              minimum: 0
          required:
            - engine_calls
            - cache_hits
            - input_tokens
            - usd_micros
          additionalProperties: true
          description: >-
            What this item's engines cost (money): on a failed item, what its
            engines spent before failing; absent when none ran.
          x-moonbounce-sdk-known-fields: true
        evaluation:
          anyOf:
            - type: object
              properties:
                environment:
                  $ref: '#/components/schemas/Environment'
                id:
                  $ref: '#/components/schemas/EvlIdOutput'
                dry_run:
                  not: {}
                  description: 'Must be absent: only a dry run sets `dry_run`.'
                  x-moonbounce-absent: true
                answers:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/NoulAnswer'
                  description: Each question's answer, as System One returns it.
                aggregations:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/AggregationResult'
                via:
                  type: string
                  description: >-
                    A zero-based rule index, `cases.<label>` for an exact
                    matched case, or `else` for the fallback.
                moonbounce:
                  type: object
                  properties:
                    decision_id:
                      $ref: '#/components/schemas/DecisionIdOutput'
                    item_id:
                      type: string
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    metadata:
                      $ref: '#/components/schemas/MetadataOutput'
                    summary:
                      type: string
                  required:
                    - decision_id
                    - item_id
                    - structure_hash
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                version:
                  type: object
                  properties:
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    binding:
                      type: integer
                      minimum: 1
                    engine_profile:
                      type: string
                  required:
                    - structure_hash
                    - binding
                    - engine_profile
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                engines:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/EngineUse'
                usage:
                  $ref: '#/components/schemas/Usage'
                cost:
                  type: object
                  properties:
                    engine_calls:
                      type: integer
                      minimum: 0
                      description: >-
                        On evaluate and import_examples, upstream engine calls
                        reported in usage, including retries; one call can
                        answer several features (Jev compiles them). On
                        previews, features sent to engines, not upstream calls.
                    cache_hits:
                      type: integer
                      minimum: 0
                      description: >-
                        Feature answers reused from cache. Only previews use the
                        cache today; evaluate and import_examples report 0.
                    input_tokens:
                      type: integer
                      minimum: 0
                    usd_micros:
                      type: integer
                      minimum: 0
                  required:
                    - engine_calls
                    - cache_hits
                    - input_tokens
                    - usd_micros
                  additionalProperties: true
                  description: >-
                    Always present on fresh responses; absent only on an
                    idempotent replay of a response stored before costs were
                    reported.
                  x-moonbounce-sdk-known-fields: true
                calls:
                  type: array
                  items:
                    $ref: '#/components/schemas/EvaluateCallCost'
                status:
                  type: string
                  enum:
                    - computed
                value:
                  type: number
                outcome:
                  not: {}
                  description: >-
                    Must be absent: a computed result is a number, with no
                    outcome.
                  x-moonbounce-absent: true
                missing:
                  type: array
                  items:
                    $ref: '#/components/schemas/FeatureRefOutput'
                  description: >-
                    The questions the result depends on (through `result` and
                    every aggregation on its path) that have no answer,
                    abstained or failed, as `questions.x` paths in authored
                    question order. Absent when none is missing; reported for
                    every status. A caller who must not act on partial evidence
                    checks that it is absent, for example `status === "decided"
                    && !missing`.
              required:
                - environment
                - id
                - answers
                - aggregations
                - moonbounce
                - version
                - engines
                - usage
                - status
                - value
              additionalProperties: true
              x-moonbounce-sdk-known-fields: true
            - type: object
              properties:
                environment:
                  $ref: '#/components/schemas/Environment'
                id:
                  $ref: '#/components/schemas/EvlIdOutput'
                dry_run:
                  not: {}
                  description: 'Must be absent: only a dry run sets `dry_run`.'
                  x-moonbounce-absent: true
                answers:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/NoulAnswer'
                  description: Each question's answer, as System One returns it.
                aggregations:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/AggregationResult'
                via:
                  type: string
                  description: >-
                    A zero-based rule index, `cases.<label>` for an exact
                    matched case, or `else` for the fallback.
                moonbounce:
                  type: object
                  properties:
                    decision_id:
                      $ref: '#/components/schemas/DecisionIdOutput'
                    item_id:
                      type: string
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    metadata:
                      $ref: '#/components/schemas/MetadataOutput'
                    summary:
                      type: string
                  required:
                    - decision_id
                    - item_id
                    - structure_hash
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                version:
                  type: object
                  properties:
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    binding:
                      type: integer
                      minimum: 1
                    engine_profile:
                      type: string
                  required:
                    - structure_hash
                    - binding
                    - engine_profile
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                engines:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/EngineUse'
                usage:
                  $ref: '#/components/schemas/Usage'
                cost:
                  type: object
                  properties:
                    engine_calls:
                      type: integer
                      minimum: 0
                      description: >-
                        On evaluate and import_examples, upstream engine calls
                        reported in usage, including retries; one call can
                        answer several features (Jev compiles them). On
                        previews, features sent to engines, not upstream calls.
                    cache_hits:
                      type: integer
                      minimum: 0
                      description: >-
                        Feature answers reused from cache. Only previews use the
                        cache today; evaluate and import_examples report 0.
                    input_tokens:
                      type: integer
                      minimum: 0
                    usd_micros:
                      type: integer
                      minimum: 0
                  required:
                    - engine_calls
                    - cache_hits
                    - input_tokens
                    - usd_micros
                  additionalProperties: true
                  description: >-
                    Always present on fresh responses; absent only on an
                    idempotent replay of a response stored before costs were
                    reported.
                  x-moonbounce-sdk-known-fields: true
                calls:
                  type: array
                  items:
                    $ref: '#/components/schemas/EvaluateCallCost'
                status:
                  type: string
                  enum:
                    - decided
                value:
                  type: number
                outcome:
                  $ref: '#/components/schemas/OutcomeOutput'
                missing:
                  type: array
                  items:
                    $ref: '#/components/schemas/FeatureRefOutput'
                  description: >-
                    The questions the result depends on (through `result` and
                    every aggregation on its path) that have no answer,
                    abstained or failed, as `questions.x` paths in authored
                    question order. Absent when none is missing; reported for
                    every status. A caller who must not act on partial evidence
                    checks that it is absent, for example `status === "decided"
                    && !missing`.
              required:
                - environment
                - id
                - answers
                - aggregations
                - moonbounce
                - version
                - engines
                - usage
                - status
                - outcome
              additionalProperties: true
              x-moonbounce-sdk-known-fields: true
            - type: object
              properties:
                environment:
                  $ref: '#/components/schemas/Environment'
                id:
                  $ref: '#/components/schemas/EvlIdOutput'
                dry_run:
                  not: {}
                  description: 'Must be absent: only a dry run sets `dry_run`.'
                  x-moonbounce-absent: true
                answers:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/NoulAnswer'
                  description: Each question's answer, as System One returns it.
                aggregations:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/AggregationResult'
                via:
                  type: string
                  description: >-
                    A zero-based rule index, `cases.<label>` for an exact
                    matched case, or `else` for the fallback.
                moonbounce:
                  type: object
                  properties:
                    decision_id:
                      $ref: '#/components/schemas/DecisionIdOutput'
                    item_id:
                      type: string
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    metadata:
                      $ref: '#/components/schemas/MetadataOutput'
                    summary:
                      type: string
                  required:
                    - decision_id
                    - item_id
                    - structure_hash
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                version:
                  type: object
                  properties:
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    binding:
                      type: integer
                      minimum: 1
                    engine_profile:
                      type: string
                  required:
                    - structure_hash
                    - binding
                    - engine_profile
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                engines:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/EngineUse'
                usage:
                  $ref: '#/components/schemas/Usage'
                cost:
                  type: object
                  properties:
                    engine_calls:
                      type: integer
                      minimum: 0
                      description: >-
                        On evaluate and import_examples, upstream engine calls
                        reported in usage, including retries; one call can
                        answer several features (Jev compiles them). On
                        previews, features sent to engines, not upstream calls.
                    cache_hits:
                      type: integer
                      minimum: 0
                      description: >-
                        Feature answers reused from cache. Only previews use the
                        cache today; evaluate and import_examples report 0.
                    input_tokens:
                      type: integer
                      minimum: 0
                    usd_micros:
                      type: integer
                      minimum: 0
                  required:
                    - engine_calls
                    - cache_hits
                    - input_tokens
                    - usd_micros
                  additionalProperties: true
                  description: >-
                    Always present on fresh responses; absent only on an
                    idempotent replay of a response stored before costs were
                    reported.
                  x-moonbounce-sdk-known-fields: true
                calls:
                  type: array
                  items:
                    $ref: '#/components/schemas/EvaluateCallCost'
                status:
                  type: string
                  enum:
                    - abstained
                value:
                  not: {}
                  description: 'Must be absent: an abstained result has no value.'
                  x-moonbounce-absent: true
                outcome:
                  $ref: '#/components/schemas/OutcomeOutput'
                missing:
                  type: array
                  items:
                    $ref: '#/components/schemas/FeatureRefOutput'
                  description: >-
                    The questions the result depends on (through `result` and
                    every aggregation on its path) that have no answer,
                    abstained or failed, as `questions.x` paths in authored
                    question order. Absent when none is missing; reported for
                    every status. A caller who must not act on partial evidence
                    checks that it is absent, for example `status === "decided"
                    && !missing`.
              required:
                - environment
                - id
                - answers
                - aggregations
                - moonbounce
                - version
                - engines
                - usage
                - status
              additionalProperties: true
              x-moonbounce-sdk-known-fields: true
            - type: object
              properties:
                environment:
                  $ref: '#/components/schemas/Environment'
                id:
                  $ref: '#/components/schemas/DryId'
                dry_run:
                  type: boolean
                  enum:
                    - true
                answers:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/NoulAnswer'
                  description: Each question's answer, as System One returns it.
                aggregations:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/AggregationResult'
                via:
                  type: string
                  description: >-
                    A zero-based rule index, `cases.<label>` for an exact
                    matched case, or `else` for the fallback.
                moonbounce:
                  type: object
                  properties:
                    decision_id:
                      $ref: '#/components/schemas/DecisionIdOutput'
                    item_id:
                      type: string
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    metadata:
                      $ref: '#/components/schemas/MetadataOutput'
                    summary:
                      type: string
                  required:
                    - decision_id
                    - item_id
                    - structure_hash
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                version:
                  type: object
                  properties:
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    binding:
                      type: integer
                      minimum: 1
                    engine_profile:
                      type: string
                  required:
                    - structure_hash
                    - binding
                    - engine_profile
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                engines:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/EngineUse'
                usage:
                  $ref: '#/components/schemas/Usage'
                cost:
                  $ref: '#/components/schemas/PreviewCost'
                calls:
                  type: array
                  items:
                    $ref: '#/components/schemas/EvaluateCallCost'
                status:
                  type: string
                  enum:
                    - computed
                value:
                  type: number
                outcome:
                  not: {}
                  description: >-
                    Must be absent: a computed result is a number, with no
                    outcome.
                  x-moonbounce-absent: true
                missing:
                  type: array
                  items:
                    $ref: '#/components/schemas/FeatureRefOutput'
                  description: >-
                    The questions the result depends on (through `result` and
                    every aggregation on its path) that have no answer,
                    abstained or failed, as `questions.x` paths in authored
                    question order. Absent when none is missing; reported for
                    every status. A caller who must not act on partial evidence
                    checks that it is absent, for example `status === "decided"
                    && !missing`.
              required:
                - environment
                - id
                - dry_run
                - answers
                - aggregations
                - moonbounce
                - version
                - engines
                - usage
                - cost
                - status
                - value
              additionalProperties: true
              x-moonbounce-sdk-known-fields: true
            - type: object
              properties:
                environment:
                  $ref: '#/components/schemas/Environment'
                id:
                  $ref: '#/components/schemas/DryId'
                dry_run:
                  type: boolean
                  enum:
                    - true
                answers:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/NoulAnswer'
                  description: Each question's answer, as System One returns it.
                aggregations:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/AggregationResult'
                via:
                  type: string
                  description: >-
                    A zero-based rule index, `cases.<label>` for an exact
                    matched case, or `else` for the fallback.
                moonbounce:
                  type: object
                  properties:
                    decision_id:
                      $ref: '#/components/schemas/DecisionIdOutput'
                    item_id:
                      type: string
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    metadata:
                      $ref: '#/components/schemas/MetadataOutput'
                    summary:
                      type: string
                  required:
                    - decision_id
                    - item_id
                    - structure_hash
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                version:
                  type: object
                  properties:
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    binding:
                      type: integer
                      minimum: 1
                    engine_profile:
                      type: string
                  required:
                    - structure_hash
                    - binding
                    - engine_profile
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                engines:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/EngineUse'
                usage:
                  $ref: '#/components/schemas/Usage'
                cost:
                  $ref: '#/components/schemas/PreviewCost'
                calls:
                  type: array
                  items:
                    $ref: '#/components/schemas/EvaluateCallCost'
                status:
                  type: string
                  enum:
                    - decided
                value:
                  type: number
                outcome:
                  $ref: '#/components/schemas/OutcomeOutput'
                missing:
                  type: array
                  items:
                    $ref: '#/components/schemas/FeatureRefOutput'
                  description: >-
                    The questions the result depends on (through `result` and
                    every aggregation on its path) that have no answer,
                    abstained or failed, as `questions.x` paths in authored
                    question order. Absent when none is missing; reported for
                    every status. A caller who must not act on partial evidence
                    checks that it is absent, for example `status === "decided"
                    && !missing`.
              required:
                - environment
                - id
                - dry_run
                - answers
                - aggregations
                - moonbounce
                - version
                - engines
                - usage
                - cost
                - status
                - outcome
              additionalProperties: true
              x-moonbounce-sdk-known-fields: true
            - type: object
              properties:
                environment:
                  $ref: '#/components/schemas/Environment'
                id:
                  $ref: '#/components/schemas/DryId'
                dry_run:
                  type: boolean
                  enum:
                    - true
                answers:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/NoulAnswer'
                  description: Each question's answer, as System One returns it.
                aggregations:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/AggregationResult'
                via:
                  type: string
                  description: >-
                    A zero-based rule index, `cases.<label>` for an exact
                    matched case, or `else` for the fallback.
                moonbounce:
                  type: object
                  properties:
                    decision_id:
                      $ref: '#/components/schemas/DecisionIdOutput'
                    item_id:
                      type: string
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    metadata:
                      $ref: '#/components/schemas/MetadataOutput'
                    summary:
                      type: string
                  required:
                    - decision_id
                    - item_id
                    - structure_hash
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                version:
                  type: object
                  properties:
                    structure_hash:
                      $ref: '#/components/schemas/StructureHashOutput'
                    binding:
                      type: integer
                      minimum: 1
                    engine_profile:
                      type: string
                  required:
                    - structure_hash
                    - binding
                    - engine_profile
                  additionalProperties: true
                  x-moonbounce-sdk-known-fields: true
                engines:
                  type: object
                  additionalProperties:
                    $ref: '#/components/schemas/EngineUse'
                usage:
                  $ref: '#/components/schemas/Usage'
                cost:
                  $ref: '#/components/schemas/PreviewCost'
                calls:
                  type: array
                  items:
                    $ref: '#/components/schemas/EvaluateCallCost'
                status:
                  type: string
                  enum:
                    - abstained
                value:
                  not: {}
                  description: 'Must be absent: an abstained result has no value.'
                  x-moonbounce-absent: true
                outcome:
                  $ref: '#/components/schemas/OutcomeOutput'
                missing:
                  type: array
                  items:
                    $ref: '#/components/schemas/FeatureRefOutput'
                  description: >-
                    The questions the result depends on (through `result` and
                    every aggregation on its path) that have no answer,
                    abstained or failed, as `questions.x` paths in authored
                    question order. Absent when none is missing; reported for
                    every status. A caller who must not act on partial evidence
                    checks that it is absent, for example `status === "decided"
                    && !missing`.
              required:
                - environment
                - id
                - dry_run
                - answers
                - aggregations
                - moonbounce
                - version
                - engines
                - usage
                - cost
                - status
              additionalProperties: true
              x-moonbounce-sdk-known-fields: true
          description: >-
            With `include: ["evaluation"]`: what evaluate returns for this item
            on its own (absent on a failed item).
        error:
          type: object
          properties:
            code:
              type: string
              description: >-
                The reason, such as `ENGINE_FAILED`, `ENGINE_UNAVAILABLE` or
                `NOT_STARTED`.
            message:
              type: string
            retryable:
              type: boolean
              description: Sending the item again may work.
          required:
            - code
            - message
            - retryable
          additionalProperties: true
          description: Why it failed; only with status `failed`.
          x-moonbounce-sdk-known-fields: true
        feedback_id:
          type: string
          pattern: >-
            ^fbk_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
          description: The example's labels as feedback; absent on a failed example.
      required:
        - item_id
        - status
      additionalProperties: true
      x-moonbounce-sdk-known-fields: true
    ErrorType:
      type: string
      enum:
        - invalid_request
        - authentication
        - permission_denied
        - not_found
        - conflict
        - rate_limited
        - engine_failed
        - unavailable
        - internal
    ErrorIssue:
      type: object
      properties:
        param:
          type: string
        code:
          type: string
          pattern: ^[A-Z][A-Z0-9_]+$
          description: >-
            Stable, extensible issue code; unknown codes still have a parameter
            and human-readable message.
        message:
          type: string
      required:
        - param
        - code
        - message
      additionalProperties: true
      x-moonbounce-sdk-known-fields: true
    NoulQuestion:
      type: object
      properties:
        type:
          type: string
          enum:
            - noul
        instructions:
          $ref: '#/components/schemas/Instructions'
        criteria:
          type: object
          properties:
            'true':
              type: string
              minLength: 1
              maxLength: 4000
            'false':
              type: string
              minLength: 1
              maxLength: 4000
          additionalProperties: false
        reads:
          type: array
          items:
            $ref: '#/components/schemas/StatePath'
          minItems: 1
          maxItems: 64
          description: >-
            Paths into an object `state` this question reads, such as
            `state.message` or `state.order.customer.tier`. The question sees
            just those values, nested as in the state. Without it the question
            sees the whole state, as in System One. Every path must exist in the
            call's `state`; no entry may repeat or contain another.
      required:
        - type
        - instructions
      additionalProperties: false
      description: P(true) for a statement about the state.
    StringAttribute:
      type: object
      properties:
        type:
          type: string
          enum:
            - string
        enum:
          type: array
          items:
            type: string
            minLength: 1
            maxLength: 200
          minItems: 1
          maxItems: 255
        default:
          type: string
        source:
          type: string
          minLength: 1
          maxLength: 200
          description: >-
            The model and version behind this attribute, such as
            `toxicity-classifier-v3`. Hashed.
      required:
        - type
        - enum
      additionalProperties: false
    NumberAttribute:
      type: object
      properties:
        type:
          type: string
          enum:
            - number
        minimum:
          type: number
        maximum:
          type: number
        default:
          type: number
        source:
          type: string
          minLength: 1
          maxLength: 200
          description: >-
            The model and version behind this attribute, such as
            `toxicity-classifier-v3`. Hashed.
      required:
        - type
      additionalProperties: false
    BooleanAttribute:
      type: object
      properties:
        type:
          type: string
          enum:
            - boolean
        default:
          type: boolean
        source:
          type: string
          minLength: 1
          maxLength: 200
          description: >-
            The model and version behind this attribute, such as
            `toxicity-classifier-v3`. Hashed.
      required:
        - type
      additionalProperties: false
    WeightedMean:
      type: object
      properties:
        type:
          type: string
          enum:
            - weighted_mean
        inputs:
          type: array
          items:
            type: object
            properties:
              name:
                $ref: '#/components/schemas/FeatureRef'
              weight:
                type: number
                exclusiveMinimum: 0
              invert:
                type: boolean
            required:
              - name
            additionalProperties: false
          minItems: 1
          maxItems: 64
      required:
        - type
        - inputs
      additionalProperties: false
      description: 'Σ wᵢ·xᵢ / Σ wᵢ: a weighted average from 0 to 1, not a probability.'
    Logistic:
      type: object
      properties:
        type:
          type: string
          enum:
            - logistic
        bias:
          type: number
        inputs:
          type: array
          items:
            type: object
            properties:
              name:
                $ref: '#/components/schemas/FeatureRef'
              weight:
                type: number
            required:
              - name
              - weight
            additionalProperties: false
          minItems: 1
          maxItems: 64
      required:
        - type
        - bias
        - inputs
      additionalProperties: false
      description: σ(bias + Σ wᵢ·xᵢ), with signed weights on raw input values.
    Min:
      type: object
      properties:
        type:
          type: string
          enum:
            - min
        inputs:
          type: array
          items:
            type: object
            properties:
              name:
                $ref: '#/components/schemas/FeatureRef'
              invert:
                type: boolean
            required:
              - name
            additionalProperties: false
          minItems: 1
          maxItems: 64
      required:
        - type
        - inputs
      additionalProperties: false
      description: 'min xᵢ: all of these, when they overlap.'
    Max:
      type: object
      properties:
        type:
          type: string
          enum:
            - max
        inputs:
          type: array
          items:
            type: object
            properties:
              name:
                $ref: '#/components/schemas/FeatureRef'
              invert:
                type: boolean
            required:
              - name
            additionalProperties: false
          minItems: 1
          maxItems: 64
      required:
        - type
        - inputs
      additionalProperties: false
      description: 'max xᵢ: any of these, when they overlap.'
    Product:
      type: object
      properties:
        type:
          type: string
          enum:
            - product
        inputs:
          type: array
          items:
            type: object
            properties:
              name:
                $ref: '#/components/schemas/FeatureRef'
              invert:
                type: boolean
            required:
              - name
            additionalProperties: false
          minItems: 1
          maxItems: 64
      required:
        - type
        - inputs
      additionalProperties: false
      description: 'Π xᵢ: all of these, when they are independent.'
    NoisyOr:
      type: object
      properties:
        type:
          type: string
          enum:
            - noisy_or
        inputs:
          type: array
          items:
            type: object
            properties:
              name:
                $ref: '#/components/schemas/FeatureRef'
              invert:
                type: boolean
            required:
              - name
            additionalProperties: false
          minItems: 1
          maxItems: 64
      required:
        - type
        - inputs
      additionalProperties: false
      description: '1 − Π(1 − xᵢ): any of these, when they are independent.'
    All:
      type: object
      properties:
        type:
          type: string
          enum:
            - all
        inputs:
          type: array
          items:
            type: object
            properties:
              name:
                $ref: '#/components/schemas/FeatureRef'
              gte:
                type: number
              gt:
                type: number
              lte:
                type: number
              lt:
                type: number
            required:
              - name
            additionalProperties: false
          minItems: 1
          maxItems: 64
      required:
        - type
        - inputs
      additionalProperties: false
      description: 1 when every input passes its threshold (default ≥ 0.5), else 0.
    Any:
      type: object
      properties:
        type:
          type: string
          enum:
            - any
        inputs:
          type: array
          items:
            type: object
            properties:
              name:
                $ref: '#/components/schemas/FeatureRef'
              gte:
                type: number
              gt:
                type: number
              lte:
                type: number
              lt:
                type: number
            required:
              - name
            additionalProperties: false
          minItems: 1
          maxItems: 64
      required:
        - type
        - inputs
      additionalProperties: false
      description: 1 when any input passes its threshold (default ≥ 0.5), else 0.
    Bands:
      type: object
      properties:
        type:
          type: string
          enum:
            - bands
        input:
          $ref: '#/components/schemas/FeatureRef'
        below:
          $ref: '#/components/schemas/Name'
        cuts:
          type: array
          items:
            type: object
            properties:
              at:
                type: number
              outcome:
                $ref: '#/components/schemas/Name'
            required:
              - at
              - outcome
            additionalProperties: false
          minItems: 1
          maxItems: 9
        abstain:
          $ref: '#/components/schemas/Name'
      required:
        - type
        - input
        - below
        - cuts
      additionalProperties: false
      description: >-
        Names an outcome for each range of one feature's value. `at` means ≥;
        `below` is under the first cut.
    Rules:
      type: object
      properties:
        type:
          type: string
          enum:
            - rules
        rules:
          type: array
          items:
            type: object
            properties:
              when:
                $ref: '#/components/schemas/Condition'
              outcome:
                $ref: '#/components/schemas/Name'
            required:
              - when
              - outcome
            additionalProperties: false
          minItems: 1
          maxItems: 64
        else:
          $ref: '#/components/schemas/Name'
      required:
        - type
        - rules
        - else
      additionalProperties: false
      description: >-
        The first rule whose condition is true names its `outcome`; otherwise
        `else`.
    Match:
      type: object
      properties:
        type:
          type: string
          enum:
            - match
        input:
          $ref: '#/components/schemas/FeatureRef'
        cases:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/Name'
          description: >-
            Maps labels to outcomes. "__proto__" is not supported as a case key;
            use a rules is-condition for that label.
        else:
          $ref: '#/components/schemas/Name'
        abstain:
          $ref: '#/components/schemas/Name'
      required:
        - type
        - input
        - cases
      additionalProperties: false
      description: Maps a label straight to an outcome.
    Metadata:
      type: object
      additionalProperties:
        anyOf:
          - type: string
            maxLength: 512
          - type: number
          - type: boolean
          - type: 'null'
      description: >-
        Caller key-values, stored with the evaluation and never shown to the
        model. Keys starting `mb.` are reserved for Moonbounce provenance:
        `mb.commit`, `mb.branch`, `mb.service` and `mb.release`, which say where
        a call came from.
    ExampleClaim:
      oneOf:
        - type: object
          properties:
            kind:
              type: string
              enum:
                - expected_answer
            question:
              type: string
              minLength: 1
              maxLength: 64
              description: A question of the evaluation's structure.
            value:
              type: boolean
              description: >-
                What the question's answer should have been: true or false for a
                noul question.
          required:
            - kind
            - question
            - value
          additionalProperties: false
          description: >-
            What one question's answer should have been. It is stored against
            the question as it was asked (its hash), so a reworded question does
            not inherit it. Aggregations and attributes take none: aggregations
            are computed and attributes are facts you supplied.
        - type: object
          properties:
            kind:
              type: string
              enum:
                - expected_outcome
            value:
              type: string
              minLength: 1
              maxLength: 200
              description: One of the outcomes the decision's result can produce.
          required:
            - kind
            - value
          additionalProperties: false
          description: >-
            The outcome the decision should have produced. A decision whose
            result is a value (a number) has no outcome and takes no
            expected_outcome or verdict.
        - type: object
          properties:
            kind:
              type: string
              enum:
                - input_broken
            problem:
              type: string
              enum:
                - truncated
                - wrong_language
                - bad_extraction
                - unreadable
                - other
          required:
            - kind
            - problem
          additionalProperties: false
          description: >-
            The content could not be judged. The evaluation is kept out of fits
            and previews.
      description: >-
        An example's label or input problem; verdicts need an existing
        evaluation.
    RunItemStatusOutput:
      type: string
      enum:
        - decided
        - computed
        - abstained
        - failed
    OutcomeOutput:
      type: string
      minLength: 1
      maxLength: 200
      description: >-
        An outcome name, or the exact enum label when a string attribute is the
        result.
    EvlIdOutput:
      type: string
      pattern: >-
        ^evl_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
    NoulAnswer:
      anyOf:
        - type: object
          properties:
            type:
              type: string
              enum:
                - noul
            noul:
              type: number
              minimum: 0
              maximum: 1
          required:
            - type
            - noul
          additionalProperties: true
          x-moonbounce-sdk-known-fields: true
        - type: object
          properties:
            type:
              type: string
              enum:
                - noul
            abstained:
              type: boolean
              enum:
                - true
          required:
            - type
            - abstained
          additionalProperties: true
          x-moonbounce-sdk-known-fields: true
        - type: object
          properties:
            type:
              type: string
              enum:
                - noul
            failed:
              type: boolean
              enum:
                - true
          required:
            - type
            - failed
          additionalProperties: true
          x-moonbounce-sdk-known-fields: true
      description: P(true), or why there is no answer.
    AggregationResult:
      type: object
      properties:
        type:
          type: string
        value:
          type: number
        outcome:
          $ref: '#/components/schemas/OutcomeOutput'
        via:
          type: string
          description: >-
            A zero-based rule index, `cases.<label>` for an exact matched case,
            or `else` for the fallback.
        missing:
          type: array
          items:
            $ref: '#/components/schemas/FeatureRefOutput'
          description: >-
            weighted_mean only: the inputs dropped for having no answer, as
            written (`questions.x`).
        abstained:
          type: boolean
          enum:
            - true
      required:
        - type
      additionalProperties: true
      description: >-
        An aggregation's value. `value` for numbers (for bands, the input it
        cut); `outcome` for bands, rules and match; `via` is the zero-based rule
        index, `cases.<label>` for a matched case, or `else` for the fallback;
        `abstained` when unknown.
      x-moonbounce-sdk-known-fields: true
    MetadataOutput:
      type: object
      additionalProperties:
        anyOf:
          - type: string
            maxLength: 512
          - type: number
          - type: boolean
          - type: 'null'
      description: >-
        Caller key-values, stored with the evaluation and never shown to the
        model. Keys starting `mb.` are reserved for Moonbounce provenance:
        `mb.commit`, `mb.branch`, `mb.service` and `mb.release`, which say where
        a call came from.
    EngineUse:
      type: object
      properties:
        engine:
          type: string
        model:
          type: string
        resolved_model:
          type: string
        adapter:
          type: string
        cached:
          type: boolean
      required:
        - engine
        - model
        - resolved_model
        - adapter
        - cached
      additionalProperties: true
      x-moonbounce-sdk-known-fields: true
    Usage:
      type: object
      properties:
        input_tokens:
          type: integer
        output_tokens:
          type: integer
      required:
        - input_tokens
        - output_tokens
      additionalProperties: true
      x-moonbounce-sdk-known-fields: true
    EvaluateCallCost:
      type: object
      properties:
        questions:
          type: array
          items:
            $ref: '#/components/schemas/NameOutput'
        reads:
          type: array
          items:
            $ref: '#/components/schemas/StatePathOutput'
          description: >-
            The paths sent, as the questions wrote them (`state.message`);
            absent when the whole state was.
        input_tokens:
          type: integer
          minimum: 0
      required:
        - questions
      additionalProperties: true
      description: One upstream System One call.
      x-moonbounce-sdk-known-fields: true
    FeatureRefOutput:
      type: string
      minLength: 1
      maxLength: 80
      description: >-
        A feature's path: `questions.<name>`, `attributes.<name>` or
        `aggregations.<name>`.
      examples:
        - questions.asks_for_refund
        - aggregations.band
    DryId:
      type: string
      pattern: >-
        ^dry_[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
    Instructions:
      anyOf:
        - type: string
          minLength: 1
          maxLength: 4000
        - type: object
          additionalProperties: {}
        - type: array
          items: {}
          minItems: 1
    StatePath:
      type: string
      minLength: 1
      maxLength: 256
      description: >-
        `state.<key>` or a nested object path such as
        `state.order.customer.tier`: keys of an object `state`. A key has no
        `.`, `[` or `]`. Array indexes are not supported yet.
      examples:
        - state.message
        - state.order.order_total_usd
    FeatureRef:
      type: string
      minLength: 1
      maxLength: 80
      description: >-
        A feature's path: `questions.<name>`, `attributes.<name>` or
        `aggregations.<name>`.
      examples:
        - questions.asks_for_refund
        - aggregations.band
    Name:
      type: string
      pattern: ^[a-z][a-z0-9_]{0,63}$
    Condition:
      anyOf:
        - type: object
          properties:
            name:
              $ref: '#/components/schemas/FeatureRef'
            gte:
              type: number
            gt:
              type: number
            lte:
              type: number
            lt:
              type: number
            is:
              type: string
              minLength: 1
              maxLength: 200
            in:
              type: array
              items:
                type: string
                minLength: 1
                maxLength: 200
              minItems: 1
              maxItems: 255
            abstained:
              type: boolean
              enum:
                - true
          required:
            - name
          additionalProperties: false
        - type: object
          properties:
            all:
              type: array
              items:
                $ref: '#/components/schemas/Condition'
              minItems: 1
              maxItems: 64
          required:
            - all
          additionalProperties: false
        - type: object
          properties:
            any:
              type: array
              items:
                $ref: '#/components/schemas/Condition'
              minItems: 1
              maxItems: 64
          required:
            - any
          additionalProperties: false
        - type: object
          properties:
            not:
              $ref: '#/components/schemas/Condition'
          required:
            - not
          additionalProperties: false
    NameOutput:
      type: string
      pattern: ^[a-z][a-z0-9_]{0,63}$
    StatePathOutput:
      type: string
      minLength: 1
      maxLength: 256
      description: >-
        `state.<key>` or a nested object path such as
        `state.order.customer.tier`: keys of an object `state`. A key has no
        `.`, `[` or `]`. Array indexes are not supported yet.
      examples:
        - state.message
        - state.order.order_total_usd
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        An API key, sent as `Authorization: Bearer <key>`. Each operation lists
        the scope its key needs: `decisions:evaluate` (evaluate and read
        evaluations), `decisions:feedback` (your app's feedback) or
        `decisions:develop` (everything else, including owner feedback and the
        review queue). An operation listing no scope takes any scoped key. A key
        with no scope, or without the operation's, gets 403 INSUFFICIENT_SCOPE.

````

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