---
title: "Record a Decision Outcome"
method: POST
path: "/api/decision/{decision_id}/outcome"
tags: ["Outcome Tracking"]
---

# Record a Decision Outcome

`POST /api/decision/{decision_id}/outcome`

## Request

- Base URL: `https://www.decide.fyi`
- URL: `https://www.decide.fyi/api/decision/{decision_id}/outcome`
- Auth: API key in header `x-api-key`

Creates a hashed Outcome Record linked to the original Decision Record. Keyed writes are atomically claimed: the same key plus the same canonical outcome payload replays the original outcome, a concurrent request returns 409 in progress, and the same key plus a different payload returns 409 conflict. Authoritative storage and idempotency failures return 503 without acknowledging an untracked outcome.

## Path parameters

- `decision_id` string, required

## Headers

- `x-idempotency-key` string
- `x-request-id` string

## Request body

- DecisionOutcomeRequest
  - `decision_id` string
  - `outcome_status` string, required: Normalized to succeeded, failed, reverted, reviewed, skipped, unknown, or a compact custom status.
  - `action_taken` string
  - `action_executed` boolean
  - `target_system` string
  - `target_object_id` string
  - `mutation` string
  - `external_ref` string
  - `decision_record_hash` string
  - `decision_receipt_hash` string
  - `observed_metrics` object
  - `evidence_refs` union[]
    - union
      - object
      - string
  - `executed_at` string
  - `reported_at` string

## Response `200`

Idempotent replay of an existing Decision Outcome

- DecisionOutcomeResult
  - `ok` boolean, required
  - `idempotency_status` string
  - `decision_id` string, required
  - `outcome` DecisionOutcome, required
    - `decision_protocol_version` 'decision_protocol_v1', required
    - `decision_outcome_version` 'decision_outcome_v1', required
    - `outcome_id` string, required
    - `decision_id` string, required
    - `idempotency_key` string
    - `outcome_status` string, required
    - `action_executed` boolean
    - `action_taken` string
    - `target_system` string
    - `target_object_id` string
    - `mutation` string
    - `external_ref` string
    - `decision_record_hash` string
    - `decision_receipt_hash` string
    - `decision_verdict` string
    - `decision_action` string
    - `policy_id` string
    - `policy_version` string
    - `policy_bundle_hash` string
    - `action_binding` ActionBinding
      - `actor` string
      - `system` string
      - `resource` string
      - `proposed_action` string
      - `subject` string
      - `amount` string
      - `currency` string
      - `target_system` string
      - `target_object_id` string
      - `mutation` string
      - `expires_at` string
      - `execution_state` string
      - `execution_id` string
    - `observed_metrics` object
    - `evidence_refs` object[]
    - `outcome_input_hash` string
    - `outcome_hash` string, required
    - `integrity` object
    - `executed_at` string
    - `reported_at` string, required
    - `decision_found` boolean
    - `decision_url` string
    - `verify_url` string

## Other responses

- `201`: Decision Outcome recorded
- `401`: API key missing, invalid, inactive, or unauthorized
- `404`: Decision not found in the authenticated caller scope
- `409`: The idempotency key is already in progress, or it was reused with a different canonical payload
- `503`: Decision storage or the upstream decision engine timed out or is temporarily unavailable

---

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