---
title: "Retrieve Workflow Action Definitions"
method: GET
path: "/v1/workflows/action-definitions"
tags: ["Workflows", "Reference Data", "v1"]
---

# Retrieve Workflow Action Definitions

`GET /v1/workflows/action-definitions`

Retrieve every action a workflow step can run, each with what it accepts, what it produces, and the options it can be configured with.

Use this before creating or updating a workflow: an action's `name` is what goes into a step's `action_name`, and the keys of its `options` are what go into that step's `options`.

The list is the same for every account — it describes what the platform supports, not what the account has set up. Actions are added over time, so treat the list as open-ended and ignore any action you do not recognise.

Credit Note: Retrieving action definitions does not consume credits.

:::info
Requires the `workflows:read` OAuth2 scope.
:::

## Query parameters

- `account_id` string, required

## Response `200`

Success

- object
  - `data` WorkflowActionDefinitionV1[], required
    - `type` 'workflow_action_definition', required — The type of the object.
    - `id` string, required — The action's name — the value to put in a step's `action_name`. Also its unique identifier.
    - `attributes` object, required
      - `name` string, required — The action's name. Identical to `id`.
      - `input` object, required — What the action expects to be handed by the step before it. A step can only follow another step whose `output` is compatible with this — that is checked when the workflow is enabled.
        - `entity_type` string, required — The kind of value a workflow input, option, filter or output carries. **Resource types** refer to Leadfeeder entities. Their value is the entity's id, as a string: `company`, `company_list`, `contact`, `contact_list`, `tag`, `custom_feed`, `custom_field`, `list_view`, `saved_search`, `crm_company`, `crm_contact`, `crm_lead`, `crm_opportunity`, `crm_task`, `hmac_secret`. **Primitive types** carry a literal value: `string`, `integer`, `boolean`, `time`, `object`, `http_response`. `any` means the step accepts (or produces) whatever the preceding step passed along, whatever its type. New entity types are introduced as new actions and triggers ship. Treat this as an open set rather than a fixed list, and ignore values you do not recognise.
        - `required` boolean, required — Whether a value must be supplied before the workflow can be enabled. A workflow can be created with a required value missing — it is only rejected when you try to enable it.
        - `array` boolean, required — Whether the value is a list of `entity_type` values rather than a single one.
        - `available_options` union[], nullable — The complete set of values accepted for this input.
          - union
            - string
            - integer
      - `output` object, required — What the action hands on to the steps that follow it. An `entity_type` of `any` means it passes its input through unchanged.
        - `entity_type` string, required — The kind of value a workflow input, option, filter or output carries. **Resource types** refer to Leadfeeder entities. Their value is the entity's id, as a string: `company`, `company_list`, `contact`, `contact_list`, `tag`, `custom_feed`, `custom_field`, `list_view`, `saved_search`, `crm_company`, `crm_contact`, `crm_lead`, `crm_opportunity`, `crm_task`, `hmac_secret`. **Primitive types** carry a literal value: `string`, `integer`, `boolean`, `time`, `object`, `http_response`. `any` means the step accepts (or produces) whatever the preceding step passed along, whatever its type. New entity types are introduced as new actions and triggers ship. Treat this as an open set rather than a fixed list, and ignore values you do not recognise.
      - `options` object, required — How the action can be configured, keyed by option name. The values go into a step's `options`.
  - `meta` object, required
    - `num_results` integer, required — The total number of results returned.
    - `request_id` string, required — A unique identifier assigned to each API request for end-to-end traceability.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized. The request was rejected because the credentials are missing, invalid, expired, or have been revoked. The client must re-authenticate before retrying. Clients can differentiate via the `code` value of the first item in `errors`.
- `403` — Forbidden. The credentials are valid but the caller is not authorized to perform the request — typically because the user lacks the required permission, the OAuth scope is insufficient, the subscription plan does not include the required entitlement, the `account_id` does not belong to the authenticated user, or the target list is read-only and its members cannot be modified. Clients can differentiate via the `code` value of the first item in `errors`.
- `429` — Too many requests. Either the per-second rate limit or the monthly quota configured for the API key / OAuth application has been exceeded. Clients can differentiate via the `code` value of the first item in `errors`.
- `500` — Internal server error
- `504` — Server timeout

---

[API](https://skmtc.dev/leadfeeder/apis/leadfeeder-public-api.md) · [All operations](https://skmtc.dev/leadfeeder/apis/leadfeeder-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/leadfeeder/leadfeeder-public-api/revisions/3b95d5a53148/schema)
