---
title: "Replay a vendor promise against historical outcomes"
method: POST
path: "/api/v1/promise-replay"
---

# Replay a vendor promise against historical outcomes

`POST /api/v1/promise-replay`

## Request

- Base URL: `https://spoolis.com`
- URL: `https://spoolis.com/api/v1/promise-replay`
- Auth: HTTP bearer

Deterministically replays historical units and corrections under candidate vendor terms. Every remedy is hypothetical. Submitted history is processed in memory and is not persisted or logged. Requires a full-scope key.

## Request body

- PromiseReplayRequest
  - `promise` object, required
    - `promise_version` 'replay/1', required
    - `window` 'week' | 'month', required
    - `threshold_bp` number, required
    - `finality_days` number, required
    - `uncertain_treatment` 'exclude_from_rate' | 'count_as_miss', required
    - `fee_basis` 'accepted_value' | 'delivered_value', required
    - `remedy_tiers` object[], required
      - `min_rate_bp` number, required
      - `remedy_bp` number, required
    - `remedy_cap_bp` number
    - `min_units` number, required
  - `units` object[], required
    - `unit_id` string, required
    - `customer_id` string, required
    - `delivered_at` string, required
    - `verdict` 'pass' | 'fail' | 'uncertain', required
    - `value_cents` number, required
  - `corrections` object[]
    - `unit_id` string, required
    - `corrected_at` string, required
    - `verdict` 'pass' | 'fail' | 'uncertain', required
    - `kind` 'reperformance' | 'review', required
  - `as_of` string, required
  - `sensitivity` object
    - `threshold_bp` number[]
    - `finality_days` number[]

## Response `200`

Promise replay report and Markdown readout

- PromiseReplayResponse
  - `run_id` string, required
  - `report` object, required
    - `report_version` 'promise-replay/1', required
    - `mode` 'historical_replay', required
    - `authoritative` false, required
    - `external_calls` 0, required
    - `writes` 0, required
    - `as_of` string, required
    - `promise` object, required
      - `promise_version` 'replay/1', required
      - `window` 'week' | 'month', required
      - `threshold_bp` number, required
      - `finality_days` number, required
      - `uncertain_treatment` 'exclude_from_rate' | 'count_as_miss', required
      - `fee_basis` 'accepted_value' | 'delivered_value', required
      - `remedy_tiers` object[], required
        - `min_rate_bp` number, required
        - `remedy_bp` number, required
      - `remedy_cap_bp` number
      - `min_units` number, required
    - `history` object, required
      - `units` number, required
      - `customers` number, required
      - `first_delivered_at` string, required
      - `last_delivered_at` string, required
      - `corrections` number, required
    - `periods_not_final` number, required
    - `periods_unmeasured` number, required
    - `summary` object, required
      - `periods_measured` number, required
      - `periods_breached` number, required
      - `breach_frequency_bp` number, required
      - `fee_cents_total` number, required
      - `remedy_cents_total` number, required
      - `remedy_share_of_fee_bp` number, required
    - `periods` object[], required
      - `customer_id` string, required
      - `period` string, required
      - `units` number, required
      - `passes` number, required
      - `fails` number, required
      - `uncertain` number, required
      - `counted` number, required
      - `rate_bp` number, required
      - `fee_cents` number, required
      - `breached` boolean, required
      - `remedy_bp` number, required
      - `remedy_cents` number, required
    - `worst_period` object, nullable, required
      - `period` string, required
      - `remedy_cents` number, required
      - `periods_breached` number, required
    - `customer_concentration` object, required
      - `by_customer` object[], required
        - `customer_id` string, required
        - `remedy_cents` number, required
        - `share_bp` number, required
        - `periods_breached` number, required
      - `top_customer_share_bp` number, required
    - `sensitivity` object, required
      - `threshold` object[], required
        - `threshold_bp` number, required
        - `periods_measured` number, required
        - `periods_breached` number, required
        - `breach_frequency_bp` number, required
        - `fee_cents_total` number, required
        - `remedy_cents_total` number, required
        - `remedy_share_of_fee_bp` number, required
      - `finality` object[], required
        - `finality_days` number, required
        - `periods_not_final` number, required
        - `periods_measured` number, required
        - `periods_breached` number, required
        - `breach_frequency_bp` number, required
        - `fee_cents_total` number, required
        - `remedy_cents_total` number, required
        - `remedy_share_of_fee_bp` number, required
    - `reperformance` object, required
      - `first_decision_misses` number, required
      - `cured_within_finality` number, required
      - `cure_share_bp` number, required
    - `late_corrections` object, required
      - `corrections_after_finality` number, required
      - `periods_changed` number, required
      - `remedy_reversed_cents` number, required
      - `remedy_added_cents` number, required
      - `periods_no_longer_measurable` number, required
      - `remedy_in_those_periods_cents` number, required
  - `markdown` string, required

## Other responses

- `400`: Machine-readable promise replay error
- `401`: Machine-readable promise replay error
- `403`: Machine-readable promise replay error
- `413`: Machine-readable promise replay error
- `422`: Machine-readable promise replay error
- `429`: Machine-readable promise replay error
- `500`: Machine-readable promise replay error

---

[API](https://skmtc.dev/spoolis/apis/spoolis-public-api.md) · [All operations](https://skmtc.dev/spoolis/apis/spoolis-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/spoolis/apis/spoolis-public-api/revisions/e438bfc05c01?raw)
