---
title: "Append evidence items. Claims, contradictions and exclusions are all preserved."
method: POST
path: "/context/evidence"
---

# Append evidence items. Claims, contradictions and exclusions are all preserved.

`POST /context/evidence`

## Request

- Base URL: `https://forbiz.io/api/public/agent`
- URL: `https://forbiz.io/api/public/agent/context/evidence`
- Auth: HTTP bearer

Capability: evidence:append. Evidence is epistemic history, NOT truth: nothing is auto-promoted into workspace context or policy, and a contradiction never overwrites the claim it contradicts. Relationship fields are authoritative: `sessionId` (batch-level or per item) and `artifactId` are persisted and echoed in `persisted_links`. An unresolvable id fails the request; an unrecognised *-session/-artifact field returns 400 unknown_relationship_field rather than being silently ignored.

## Request body

- object
  - `sessionId` string
  - `artifactId` string
  - `items` object[]
    - `kind` 'statement' | 'claim' | 'inference' | 'question' | 'unknown' | 'human_answer' | 'confirmation' | 'correction' | 'contradiction' | 'deliberate_exclusion' | 'supersession' | 'decision' | 'policy_statement' | 'hypothesis' | 'resolution'
    - `subject` string
    - `content` string
    - `epistemicStatus` 'claimed' | 'corroborated' | 'contradicted' | 'excluded' | 'confirmed' | 'observed' | 'sourced' | 'derived' | 'current_decision' | 'hypothesis' | 'unknown' | 'deliberately_unresolved' | 'superseded': Aliases are accepted and normalized, not rejected: claimed -> sourced, corroborated -> confirmed, excluded -> deliberately_unresolved. The response reports what was stored in normalized[].epistemic_status with normalized[].normalized_from carrying the value you sent (null when nothing was rewritten), and epistemic_status_aliases lists the whole mapping.
    - `contradictsEvidenceId` string
    - `excludedReason` string
    - `sessionId` string
    - `artifactId` string
    - `confidence` number
    - `materialToDecision` boolean

## Response `201`

Evidence appended. Epistemic standing is derived from the stored row.

- object
  - `ok` boolean
  - `promoted` boolean: Derived from the STORED row, never from the route: true only when the stored value really is confirmed.
  - `canonical` boolean: True only when the stored row is canonical workspace truth.
  - `stored_status` string: The confirmation status actually stored (for example 'proposed' or 'confirmed').
  - `needs_confirmation` boolean: True when a human still has to confirm the stored row.

## Other responses

- `208`: Idempotent replay of a previous request with the same Idempotency-Key. Nothing was applied again.
- `400`: Invalid or unrecognised field
- `404`: Session or artifact not found in this workspace

---

[API](https://skmtc.dev/forbiz/apis/forbiz-external-agent-api.md) · [All operations](https://skmtc.dev/forbiz/apis/forbiz-external-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/forbiz/apis/forbiz-external-agent-api/revisions/e5b10d59dc5f?raw)
