---
title: "Record a Decision Action Execution receipt"
method: POST
path: "/api/decision/{decision_id}/execution"
tags: ["Action Execution"]
---

# Record a Decision Action Execution receipt

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

## Request

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

Creates a hashed Action Execution Receipt linked to the original Decision Record and action binding. Keyed writes are atomically claimed: the same key plus the same canonical execution payload replays the original receipt, 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 receipt.

## Path parameters

- `decision_id` string, required

## Headers

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

## Request body

- DecisionExecutionRequest
  - `decision_id` string
  - `execution_status` string, required: Normalized to queued, executed, failed, skipped, reverted, blocked, reviewed, unknown, or a compact custom status.
  - `execution_result` string
  - `action_taken` string
  - `target_system` string
  - `target_object_id` string
  - `mutation` string
  - `execution_id` string
  - `external_ref` string
  - `executor` object
  - `decision_record_hash` string
  - `decision_receipt_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
  - `action_binding_hash` string
  - `state_before_hash` string
  - `state_after_hash` string
  - `state_before_ref` string
  - `state_after_ref` string
  - `evidence_refs` union[]
    - union
      - object
      - string
  - `executed_at` string
  - `reported_at` string

## Response `200`

Idempotent replay of an existing Action Execution Receipt

- DecisionExecutionResult
  - `ok` boolean, required
  - `idempotency_status` string
  - `decision_id` string, required
  - `execution` DecisionExecution, required
    - `decision_protocol_version` 'decision_protocol_v1', required
    - `decision_execution_version` 'decision_execution_v1', required
    - `execution_receipt_id` string, required
    - `decision_id` string, required
    - `idempotency_key` string
    - `execution_status` string, required
    - `execution_result` string
    - `action_taken` string
    - `target_system` string
    - `target_object_id` string
    - `mutation` string
    - `external_ref` string
    - `execution_id` string
    - `executor` object
    - `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
    - `action_binding_hash` string
    - `action_binding_match` boolean, nullable
    - `state_before_hash` string
    - `state_after_hash` string
    - `state_before_ref` string
    - `state_after_ref` string
    - `evidence_refs` object[]
    - `execution_input_hash` string
    - `execution_hash` string, required
    - `integrity` object
    - `executed_at` string
    - `reported_at` string, required
    - `decision_found` boolean
    - `decision_url` string
    - `verify_url` string

## Other responses

- `201`: Action Execution Receipt 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)
