---
title: "Build Allocation Decision Receipt"
method: POST
path: "/v1/tools/build_allocation_decision_receipt"
tags: ["TODO_TAGS_REVIEW", "TODO_AP2_EXPORT_REVIEW"]
---

# Build Allocation Decision Receipt

`POST /v1/tools/build_allocation_decision_receipt`

## Request

- Base URL: `https://ainumbers.co`
- URL: `https://ainumbers.co/v1/tools/build_allocation_decision_receipt`
- Auth: none declared

Re-derives whether an allocation produced by an optimizer is explained by the objective and inputs that were true when it was made: the eligibility schedule snapshot, the inventory snapshot offered, the haircut table version, and the declared objective. Portable to any optimizer, not collateral only, so the same input shape covers a liquidity sweep, a treasury cash placement, a payment-routing choice, or an order allocation. Re-derives ONE candidate allocation for a declared objective (cheapest_to_deliver, preserve_hqla, or minimise_movements) using a fixed, published greedy rule, and compares it to the allocation the caller says was actually chosen: a reproducibility verdict, the delta versus the re-derived allocation in cost and in eligibility terms, and the binding constraint explaining each difference. A caller-named objective outside the three known ones is recorded but not solved, since this kernel has no fixed re-derivation rule for it. ADR_DIVERGENT is not a finding of error: a divergence means the chosen allocation is not explained by the declared objective and inputs, which is routinely legitimate (a trader override, an undeclared constraint, a stale snapshot); no output here characterises intent. This is not a competing optimizer and never claims the re-derived allocation is better than the one chosen. Eligibility, inventory, haircuts and the objective are every one of them a caller input, transcribed from the snapshot in force when the allocation was made; this kernel ships no eligibility table, no inventory feed and no haircut table of its own, and performs no lookups of any kind (zero-egress). Distinct from art-370-supervisory-scenario-replay, which replays the Fed's published macro scenario paths against caller loss/PPNR functions (a scenario replay over regulator-published inputs, not a decision re-derivation), and from art-236-build-ai-decision-log-record, which builds an EU AI Act Art 12(2) decision-log record (metadata about a decision, with no reproducibility verdict and no optimal-allocation computation). Reuses 505-tokenized-collateral-eligibility-checker for eligibility of each candidate and art-444-collateral-haircut-engine for the haircut applied; consumes their outcome as a caller-declared input and edits neither.

**Tool URL:** https://ainumbers.co/chaingraph/art-515-build-allocation-decision-receipt.html

## Request body

- object
  - `allocation_chosen` unknown[], required
    - unknown
  - `as_of` unknown
  - `eligibility_schedule` unknown[], required
    - unknown
  - `eligibility_schedule_ref` unknown
  - `haircut_table_version` unknown
  - `inventory_ref` unknown
  - `inventory_snapshot` unknown[], required
    - unknown
  - `objective` string
  - `obligation_amount` unknown, required
  - `obligation_ref` unknown
  - `rounding` unknown, required

## Response `200`

Successful tool execution result

- object
  - `as_of` string
  - `binding_constraints` unknown[]
    - unknown
  - `delta` object
    - `cost_chosen` string
    - `cost_delta` string
    - `cost_optimal` string
    - `eligibility` object
      - `ineligible_amount_total` string
      - `ineligible_assets_in_chosen` unknown[]
        - unknown
  - `eligibility_schedule_ref` string
  - `exceptions` unknown[]
    - unknown
  - `fence` string
  - `haircut_table_version` string
  - `inventory_ref` string
  - `judgment_required` string
  - `not_proven` object[]
    - `detail` string
    - `item` string
  - `objective` string
  - `obligation` object
    - `amount` string
    - `positive` boolean
  - `obligation_ref` string
  - `rationale` string[]
  - `reproducibility` object
    - `chosen_allocation` object[]
      - `amount` string
      - `asset_id` string
    - `obligation_covered_by_chosen` boolean
    - `obligation_covered_by_optimal` boolean
    - `optimal_allocation` object[]
      - `amount` string
      - `asset_id` string
    - `verdict` string
  - `rounding` object
    - `decimal_places` integer
    - `mode` string

---

[API](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite.md) · [All operations](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite/llms.txt) · [OpenAPI document](https://skmtc.dev/ainumbers/apis/ainumbers-co-fintech-intelligence-suite/revisions/b462e4f5bb28?raw)
