---
title: "Register a post-call assertion against a suite"
method: POST
path: "/api/outcome/assertions"
tags: ["Outcome"]
---

# Register a post-call assertion against a suite

`POST /api/outcome/assertions`

## Request

- Base URL: `https://api.wordis-bond.com`
- URL: `https://api.wordis-bond.com/api/outcome/assertions`
- Auth: HTTP bearer

After a scored run for `suiteId` (optionally narrowed to one scenario by `scenarioName`), Word Is Bond POSTs a signed request to `endpoint` and evaluates the matchers. The endpoint MUST be a public https URL; internal, loopback, link-local, and cloud-metadata hosts are rejected at registration. `expected.json_path` maps a JSONPath to an expected value (or the sentinels `$exists` / `$absent`); values may interpolate the scenario, e.g. `{{scenario.requested_date}}`. `priceCheck` compares the price the agent quoted against an uploaded price list. Method is POST and trigger is post_call in v0.

## Request body

- OutcomeAssertionInput: Register/patch an outcome assertion. `endpoint` must be a public https URL.
  - `suiteId` string, uuid: The suite this assertion is attached to (required on create).
  - `scenarioName` string, nullable: Only run for this scenario (persona name). Null = every scenario.
  - `name` string
  - `endpoint` string, uri
  - `method` 'POST'
  - `expected` object: status + JSONPath equality/existence checks. Values may interpolate {{scenario.*}}.
    - `status` integer
    - `json_path` object
  - `priceCheck` object, nullable: Compare the agent quote against a price list.
    - `quoted_field` string: JSONPath into the response for the recorded amount. Absent ⇒ extract from the transcript.
    - `source` string, required
    - `service_key` string: Which list entry to expect. Default {{scenario.requested_service}}.
    - `tolerance` number
  - `timeoutMs` integer: Per-request timeout, capped at 10000.
  - `retries` integer: Retry attempts on an unreachable/5xx call, capped at 3.
  - `enabled` boolean

## Response `201`

Created

- object
  - `data` OutcomeAssertion, required: Register/patch an outcome assertion. `endpoint` must be a public https URL.
    - `suiteId` string, uuid: The suite this assertion is attached to (required on create).
    - `scenarioName` string, nullable: Only run for this scenario (persona name). Null = every scenario.
    - `name` string
    - `endpoint` string, uri
    - `method` 'POST'
    - `expected` object: status + JSONPath equality/existence checks. Values may interpolate {{scenario.*}}.
      - `status` integer
      - `json_path` object
    - `priceCheck` object, nullable: Compare the agent quote against a price list.
      - `quoted_field` string: JSONPath into the response for the recorded amount. Absent ⇒ extract from the transcript.
      - `source` string, required
      - `service_key` string: Which list entry to expect. Default {{scenario.requested_service}}.
      - `tolerance` number
    - `timeoutMs` integer: Per-request timeout, capped at 10000.
    - `retries` integer: Retry attempts on an unreachable/5xx call, capped at 3.
    - `enabled` boolean
    - `id` string, uuid, required
    - `trigger` 'post_call'
    - `createdAt` string, date-time
  - `error` union, required
    - object
    - string

## Other responses

- `401`: Missing, invalid, or revoked credentials.
- `422`: The request body failed validation.

---

[API](https://skmtc.dev/wordis-bond/apis/word-is-bond-voice-agent-testing-api.md) · [All operations](https://skmtc.dev/wordis-bond/apis/word-is-bond-voice-agent-testing-api/llms.txt) · [OpenAPI document](https://skmtc.dev/wordis-bond/apis/word-is-bond-voice-agent-testing-api/revisions/66c2d5480d84?raw)
