---
title: "Get decision receipt"
method: GET
path: "/agent/workspaces/{workspace}/actions/{action}/decision-receipt"
tags: ["ActionReadApi"]
---

# Get decision receipt

`GET /agent/workspaces/{workspace}/actions/{action}/decision-receipt`

## Request

- Base URL: `https://plainrouter.com/api/v1`
- URL: `https://plainrouter.com/api/v1/agent/workspaces/{workspace}/actions/{action}/decision-receipt`
- Auth: HTTP bearer

Read persisted Actions data for the authorized account. Unbound keys require exactly one active account; account_id cannot select among multiple accounts.

## Path parameters

- `workspace` integer, required
- `action` string, required

## Query parameters

- `account_id` integer

## Response `200`

Authorized Actions resource.

- ActionDecisionReceiptRead
  - `document` object, required
  - `document_sha256` string, required
  - `chain_entry` object, required
    - `sequence` integer, required
    - `hash` string, required
  - `disposition` ActionCurrentDisposition, required
    - `receipt_status` 'pending' | 'attempting' | 'reconciliation_required' | 'committed' | 'executed_pending_verification' | 'measuring' | 'verified' | 'compensating' | 'compensated' | 'compensation_failed' | 'irreversible' | 'failed' | 'reconciliation_exhausted' | 'null', nullable, required
    - `outcome_payload` object, nullable, required: Write-once outcome. Management comparisons use PlainRouter counted arrivals and Inventory spend. Resume compares the target after the change with the rest of the same account over those same days. Pause is not judged. Missing data never yields a verdict. Other action types retain their existing payloads.
      - `status` 'measurable' | 'not_measurable' | 'unavailable'
      - `observed_at` string, date-time
      - `reason_code` string, nullable
      - `reason` string, nullable
      - `baseline` union
        - object
          - `scope` 'target' | 'rest_of_account'
          - `days` string[]: Three whole days in the ad account timezone; excludes the change day.
          - `currency` string, nullable
          - `timezone` string
          - `spend_minor` string, nullable: Decimal spend in ISO currency minor units; null when daily mirror data is missing.
          - `counted_arrivals` integer, nullable: Arrivals counted by PlainRouter through Signals, never provider conversions.
          - `cost_per_counted_arrival_minor` string, nullable: Spend divided by counted arrivals, in ISO currency minor units, displayed to six decimal places.
        - string[]
      - `metrics` union
        - object
          - `scope` 'target' | 'rest_of_account'
          - `days` string[]: Three whole days in the ad account timezone; excludes the change day.
          - `currency` string, nullable
          - `timezone` string
          - `spend_minor` string, nullable: Decimal spend in ISO currency minor units; null when daily mirror data is missing.
          - `counted_arrivals` integer, nullable: Arrivals counted by PlainRouter through Signals, never provider conversions.
          - `cost_per_counted_arrival_minor` string, nullable: Spend divided by counted arrivals, in ISO currency minor units, displayed to six decimal places.
          - `verdict` 'held' | 'lost' | 'not_judged' | 'null', nullable
          - `loss_threshold_percent` string
        - string[]
      - `inverse` object
        - `status` 'proposed' | 'inverse_not_proposed', required
        - `batch_id` string
        - `reason_code` string
    - `outcome_status` 'measurable' | 'not_measurable' | 'unavailable' | 'null', nullable, required
    - `outcome_reason_code` string, nullable, required
    - `outcome_checked_at` string, date-time, nullable, required
    - `compensation_reason_code` string, nullable, required
    - `recovery_disposition` 'no_compensation' | 'restored' | 'unrestored' | 'contradictory' | 'irreversible' | 'uncertain' | 'null', nullable, required
    - `late_restored` boolean, required

## Other responses

- `401`: Missing, invalid, expired or revoked credentials and inactive account bindings return error and error_description. Insufficient principal permission or lost issuer authority returns error insufficient_scope and error_description. A management key returns message instead.
- `403`: The key lacks the read-actions grant.
- `404`: Workspace, account, or Actions resource not found. A visible action without an execution receipt returns error.code receipt_not_available and error.message "No execution receipt exists for this action because it was not executed."
- `422`: Request validation failed.

---

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