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

# Get action

`GET /agent/workspaces/{workspace}/actions/{action}`

## Request

- Base URL: `https://plainrouter.com/api/v1`
- URL: `https://plainrouter.com/api/v1/agent/workspaces/{workspace}/actions/{action}`
- 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.

- ActionDetailRead
  - `data` ActionReadItem, required
    - `id` string, required
    - `batch_id` string, required
    - `workspace_id` integer, required
    - `type` 'increase_budget' | 'decrease_budget' | 'pause' | 'resume' | 'replace_creative' | 'shift_spend' | 'rollback' | 'create_campaign' | 'create_ad_set' | 'create_ad' | 'upload_asset' | 'adjust_budget' | 'set_status' | 'duplicate_ad_with_creative' | 'duplicate_adset' | 'duplicate_ad_with_creative_v2', required
    - `target_entity_type` string, required
    - `target_entity_id` string, required
    - `target_entity_name` string, nullable, required
    - `counted_evidence` object, nullable: Frozen proposal-time target figures over completed account-local dates. Purchase values are decimal strings in the account currency; counted values in other currencies are excluded and never converted. Null means figures were not captured. Display only; never an enforcement input.
      - `target` object, required
        - `kind` string, required
        - `id` string, required
      - `captured_at` string, required
      - `window` object, nullable, required
        - `since` string, required
        - `until` string, required
        - `timezone` string, required
        - `days` integer
      - `currency` string, nullable, required
      - `currency_note` string, required
      - `conversion_definition` object
        - `version` string, required
        - `events` string[], required
      - `meta_reported` object, required
        - `inline_link_clicks` integer, nullable, required
        - `purchase_count` integer, nullable, required
        - `purchase_value` string, nullable, required
        - `spend` string, nullable, required
        - `impressions` integer, nullable, required
      - `counted` object, required
        - `arrivals` integer, nullable, required
        - `purchase_count` integer, nullable, required
        - `purchase_value` string, nullable, required
        - `observed_conversions` integer, nullable
      - `coverage` object, required
        - `arrivals` object, nullable, required
          - `since` string, required
          - `until` string, required
          - `timezone` string, required
          - `days` integer
        - `purchases` object, nullable, required
          - `since` string, required
          - `until` string, required
          - `timezone` string, required
          - `days` integer
    - `params` union, required
      - object
      - unknown[]
        - unknown
    - `rationale` string, required
    - `proposer` object
      - `type` 'user' | 'agent' | 'system', required
      - `name` string: PlainRouter for a system proposer; omitted for people and agents.
    - `evidence` union: System evidence cites either the original action and its counted outcome or the rule, revision, run and decision.
      - object
        - `original_action_id` string, required
        - `outcome` object, 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
              - …
            - string[]
          - `metrics` union
            - object
              - …
            - string[]
          - `inverse` object
            - `status` 'proposed' | 'inverse_not_proposed', required
            - `batch_id` string
            - `reason_code` string
      - object
        - `rule_id` string, required
        - `revision_id` string, required
        - `run_id` string, required
        - `decision_id` string, required
      - object: System evidence from a completed Test cites its Test, verdict and selected winner member.
        - `test_id` string, required
        - `verdict_id` string, required
        - `winner_member_id` string, required
    - `status` 'pending' | 'approved_without_execution' | 'rejected' | 'executing' | 'executed_pending_verification' | 'compensating' | 'measuring' | 'verified' | 'failed' | 'execution_uncertain' | 'rolled_back' | 'blocked', required
    - `batch_status` 'pending' | 'approved' | 'approved_without_execution' | 'auto_approved' | 'rejected' | 'executing' | 'executed_pending_verification' | 'compensating' | 'measuring' | 'completed' | 'failed' | 'rolled_back' | 'rollback_incomplete' | 'blocked' | 'halted', 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
    - `policy_decision` 'allow' | 'require_approval' | 'block' | 'null', nullable, required
    - `policy_reasons` string[], required
    - `policy_result` ActionPolicyResult, required
      - `id` string, required
      - `policy_id` string, required
      - `policy_version` integer, required
      - `phase` 'proposal' | 'approval' | 'execution', required
      - `outcome` 'allowed' | 'approval_required' | 'blocked', required
      - `reasons` string[], required
      - `reason_details` string[], nullable, required
      - `requested_minor` integer, nullable, required
      - `evaluated_at` string, date-time, required
    - `policy_results` ActionPolicyResult[], required
      - `id` string, required
      - `policy_id` string, required
      - `policy_version` integer, required
      - `phase` 'proposal' | 'approval' | 'execution', required
      - `outcome` 'allowed' | 'approval_required' | 'blocked', required
      - `reasons` string[], required
      - `reason_details` string[], nullable, required
      - `requested_minor` integer, nullable, required
      - `evaluated_at` string, date-time, 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.
- `422`: Request validation failed.

## Changes

- **2026-10-20** `d071d4f4f05c`: 2 info
  - added the optional property `data/counted_evidence/conversion_definition` to the response with the `200` status
  - added the optional property `data/counted_evidence/counted/observed_conversions` to the response with the `200` status

[Operation history](https://skmtc.dev/plainrouter/apis/plainrouter-conversion-api/changes/agent/workspaces/:workspace/actions/:action/get.md)

---

[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)
