---
title: "Get a plan action"
method: GET
path: "/orgs/{orgName}/plan-actions/{actionName}"
tags: ["PlanActions"]
---

# Get a plan action

`GET /orgs/{orgName}/plan-actions/{actionName}`

## Request

- Base URL: `https://api.signadot.com/api/v2`
- URL: `https://api.signadot.com/api/v2/orgs/{orgName}/plan-actions/{actionName}`
- Auth: API key in header `signadot-api-key`

Get a single action by name (org-owned preferred over system)

## Path parameters

- `orgName` string, required
- `actionName` string, required

## Response `200`

OK

- PlanAction
  - `id` string
  - `managedBy` string: ManagedBy indicates whether this action is managed by the system (synced from git) or by an org (created via API).
  - `name` string
  - `spec` PlanActionSpec
    - `body` string: Body is the action implementation as markdown with code blocks. Inputs and outputs are declared inline via \input{...} and \output{...} syntax.
    - `published` boolean: Published controls whether this action is visible and usable.
  - `status` PlanActionStatus
    - `bodyImage` PlanImageRef
      - `env` object: Env carries env entries with literal values (KEY -> literal). Applies in both paths. Reserved runner-set keys (SIGNADOT_*, HOME, TMPDIR, PATH) silently lose to the runner's values on collision.
      - `envFromInput` object: EnvFromInput carries env entries whose values resolve from a declared input at run time (KEY -> input name). Applies in both paths. Same reserved-key filtering as Env. The same KEY may not appear in both Env and EnvFromInput.
      - `inputName` string: InputName names a declared input whose value at run time is the image reference. Set when the action declared \image{ref={"input":"NAME"}}. If the input resolves to the empty string, the action runs in the runner's base image.
      - `literal` string: Literal is the image reference itself, e.g. "alpine:3.19". Set when the action declared \image{"..."} or \image{ref="..."}. An empty literal means "run in the runner's base image".
    - `bodyOutputs` PlanField[]: BodyOutputs are the output fields parsed from \output{...} directives in the body.
      - `default` object: Default is the default value used when the field is not provided. Must conform to Schema if set.
      - `metadata` object: Metadata carries presentation hints and additional key-value pairs. Well-known keys: "contentType" (MIME type), "displayName" (UI label), "encoding" (e.g. "base64" for inlined binary values).
      - `name` string: Name is the field identifier, unique within the resource's params or outputs.
      - `required` boolean: Required indicates whether the field must be provided.
      - `schema` object: Schema is an optional JSON Schema describing the field's type and constraints.
      - `schemaRef` string: SchemaRef is an optional reference to an external schema (name, file, or URL).
    - `bodyParams` PlanField[]: BodyParams are the input parameters parsed from \input{...} directives in the body.
      - `default` object: Default is the default value used when the field is not provided. Must conform to Schema if set.
      - `metadata` object: Metadata carries presentation hints and additional key-value pairs. Well-known keys: "contentType" (MIME type), "displayName" (UI label), "encoding" (e.g. "base64" for inlined binary values).
      - `name` string: Name is the field identifier, unique within the resource's params or outputs.
      - `required` boolean: Required indicates whether the field must be provided.
      - `schema` object: Schema is an optional JSON Schema describing the field's type and constraints.
      - `schemaRef` string: SchemaRef is an optional reference to an external schema (name, file, or URL).
    - `createdAt` string: CreatedAt is when the action was created. Serialized as RFC3339.
    - `description` string: Description is a short one-line description parsed from the \description{...} directive in the body.
    - `enabled` boolean: Enabled is the org's effective view on whether this action can be used. Resolved from per-org overrides and system defaults via the same precedence the compile path applies. Distinct from Spec.Published, which is the action author's intent.
    - `extraInputsSchemaPolicy` PlanExtraInputsSchemaPolicy
      - `default` object: Default is the schema to apply when the plan author omitted one. Empty (nil) when this primitive is not set.
      - `require` boolean: Require, when true, makes plan compile fail if any extra_input on a step of this action is schemaless.
    - `revision` integer
    - `updatedAt` string: UpdatedAt is when the action was last updated. Serialized as RFC3339.

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `404`: Not Found
- `502`: Bad Gateway

## Changes

- **2026-05-07** `942b3992433f`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/signadot/apis/signadot-api/changes/orgs/:orgName/plan-actions/:actionName/get.md)

---

[API](https://skmtc.dev/signadot/apis/signadot-api.md) - [All operations](https://skmtc.dev/signadot/apis/signadot-api/llms.txt) - [OpenAPI document](https://skmtc.dev/signadot/apis/signadot-api/revisions/5e80b0f9c718?raw)
