---
title: "Get Action"
method: GET
path: "/api/workflows/{team_key}/actions/{action_key}"
tags: ["workflows"]
---

# Get Action

`GET /api/workflows/{team_key}/actions/{action_key}`

## Request

- Base URL: `https://api.superit.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.superit.ai/api/workflows/{team_key}/actions/{action_key}`
- Auth: HTTP bearer

## Path parameters

- `action_key` string, required
- `team_key` string, required

## Response `200`

Successful Response

- ActionDetail
  - `key` string, required
  - `name` string, required
  - `description` string, required
  - `status` 'draft' | 'published', required
  - `runtime` 'powershell' | 'python' | 'playwright', required
  - `draft` string, required
  - `published` string, nullable, required
  - `authorisation` AuthorizationMatrix, required: Ordered list of rules, evaluated top-down, first match wins.
    - `rules` AuthorizationRule[], required
      - `requester` union, required
        - GroupTagMatcher: Match users by membership in one or more superit tags.
          - `tag` 'group', required
          - `tags` string[], required
        - SelfTagMatcher: Match the requesting user.
          - `tag` 'self', required
        - NoneTagMatcher: Match unconditionally — no tag required. Evaluated by ``_matches`` (services/authorization.py) as an unconditional ``True``, so it means opposite things depending on which field it's used in: as a requester/target matcher it means "anyone" (no restriction); as an approver it means "no approval needed" (self-service). The UI labels it accordingly per field (``TagMatcherEditor.tsx``'s ``REQUESTER_MODES`` vs ``APPROVER_MODES``) rather than showing one generic label.
          - `tag` 'none', required
      - `approver` union, required
        - GroupTagMatcher: Match users by membership in one or more superit tags.
          - `tag` 'group', required
          - `tags` string[], required
        - SelfTagMatcher: Match the requesting user.
          - `tag` 'self', required
        - NoneTagMatcher: Match unconditionally — no tag required. Evaluated by ``_matches`` (services/authorization.py) as an unconditional ``True``, so it means opposite things depending on which field it's used in: as a requester/target matcher it means "anyone" (no restriction); as an approver it means "no approval needed" (self-service). The UI labels it accordingly per field (``TagMatcherEditor.tsx``'s ``REQUESTER_MODES`` vs ``APPROVER_MODES``) rather than showing one generic label.
          - `tag` 'none', required
      - `target` union
        - GroupTagMatcher: Match users by membership in one or more superit tags.
          - `tag` 'group', required
          - `tags` string[], required
        - SelfTagMatcher: Match the requesting user.
          - `tag` 'self', required
        - NoneTagMatcher: Match unconditionally — no tag required. Evaluated by ``_matches`` (services/authorization.py) as an unconditional ``True``, so it means opposite things depending on which field it's used in: as a requester/target matcher it means "anyone" (no restriction); as an approver it means "no approval needed" (self-service). The UI labels it accordingly per field (``TagMatcherEditor.tsx``'s ``REQUESTER_MODES`` vs ``APPROVER_MODES``) rather than showing one generic label.
          - `tag` 'none', required
    - `target_input` string, nullable
  - `authorisationPolicyKey` string, nullable
  - `authorisationPolicyName` string, nullable
  - `publishedByKey` string, nullable, required
  - `publishedAt` string, date-time, nullable, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `credentials` CredentialListItem[]
    - `key` string, required
    - `name` string, required
    - `credentialType` 'oauth_app' | 'api_key', required
    - `hasToken` boolean
    - `isConfigured` boolean, nullable
    - `createdAt` string, date-time, required
    - `updatedAt` string, date-time, required
    - `envVars` string[]
  - `inputsSchema` InputField[], nullable, required
    - `name` string, required
    - `type` 'string' | 'email' | 'boolean' | 'date' | 'enum' | 'string[]' | 'textarea', required
    - `label` string, required
    - `required` boolean
    - `choices` string[], nullable
    - `default` string, nullable
  - `approvalSchema` InputField[], nullable, required
    - `name` string, required
    - `type` 'string' | 'email' | 'boolean' | 'date' | 'enum' | 'string[]' | 'textarea', required
    - `label` string, required
    - `required` boolean
    - `choices` string[], nullable
    - `default` string, nullable
  - `allowedHosts` string[], nullable, required
  - `executionTarget` string
  - `meshDeviceSelector` string, nullable
  - `pollTimeoutSeconds` integer, nullable
  - `pollIntervalSeconds` integer
  - `scriptTimeoutSeconds` integer, nullable
  - `autoRun` boolean
  - `workflowSummary` WorkflowSummaryStep[], nullable
    - `name` string, required
    - `description` string, required
  - `workflowSummaryStatus` 'idle' | 'regenerating' | 'failed'
  - `originActionKey` string, nullable
  - `originTeamKey` string, nullable
  - `publishedTeamCount` integer

## Other responses

- `400`: Invalid input
- `401`: Not authenticated
- `403`: Forbidden
- `404`: Not found
- `405`: Method not allowed
- `409`: Conflict
- `422`: Validation Error

---

[API](https://skmtc.dev/superit/apis/super-it-api.md) - [All operations](https://skmtc.dev/superit/apis/super-it-api/llms.txt) - [OpenAPI document](https://skmtc.dev/superit/apis/super-it-api/revisions/4944d556c2bb?raw)
