---
title: "List the versions of an automation rule"
method: GET
path: "/companies/{company}/automations/rules/{rule}/versions"
tags: ["Automations"]
---

# List the versions of an automation rule

`GET /companies/{company}/automations/rules/{rule}/versions`

## Request

- Base URL: `https://api.factuarea.com/v1`
- URL: `https://api.factuarea.com/v1/companies/{company}/automations/rules/{rule}/versions`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

List the sealed versions of a rule definition, newest first.
- The cursor of this listing is an opaque page-number token: pass `next_cursor` back verbatim, never build it.
- A rule of another company returns 200 with an empty list, not 404.

## Path parameters

- `company` string, uuid, required
- `rule` string, uuid, required

## Query parameters

- `limit` integer
- `starting_after` string
- `ending_before` string

## Headers

- `Factuarea-Version` string, date

## Response `200`

- object: Cursor-paginated list envelope shared by every v1 listing endpoint. `data` holds the page items; `has_more` signals whether another page exists; `next_cursor` is the cursor to pass back for the following page. Treat it as strictly opaque: send it through verbatim, never parse it and never assume a format — it is not the same across listings, and each listing documents its own cursor parameter. Concrete listings narrow `data` to their resource type via `allOf`.
  - `data` object[], required: Items on the current page.
    - `id` string, uuid, required: Opaque identifier of this version, a UUID v7 (e.g. `01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a9b`).
    - `object` 'automation_rule_version', required: Always `automation_rule_version`.
    - `automation_rule_id` string, uuid, required: UUID v7 of the automation rule this version belongs to.
    - `version` integer, required: Version number, monotonically increasing within the rule. It is what `automation_run.rule_version` points at, and what you pass to `GET /v1/companies/{company}/automations/rules/{rule}/versions/{version}`.
    - `trigger_type` string, required: Event this version listens to, in `resource.action` form (e.g. `invoice.paid`), frozen at the time the version was sealed.
    - `conditions` object, required: Frozen condition tree of this version. An empty object `{}` means the version has no condition and always acts. Its shape is defined by the account owner (nested combinators over the fields of the trigger payload), so it is returned verbatim.
    - `actions` object[], required: Frozen actions of this version, in the order they were declared. Each element carries its action type and its parameters. An empty array means the version declares no action.
    - `created_at` string, date-time, nullable, required: When this version was sealed (ISO 8601).
  - `has_more` boolean, required: Whether more pages are available after this one.
  - `next_cursor` string, nullable, required: Opaque cursor for the next page, or `null` when `has_more` is `false`. The example below shows the shape used by most listings; others return a different one, so pass the value back verbatim instead of validating it.

## Other responses

- `400`: `parameter_unknown` with `subcode` `retired_active_profile_header`: the retired `X-Active-Profile` header was sent; the company goes in the path. `parameter_invalid_format` on `Factuarea-Version`: the header is not a `YYYY-MM-DD` date. `unsupported_api_version`: the `Factuarea-Version` date is not a supported version.
- `401`: Missing or invalid API key.
- `403`: The request is authenticated but not allowed: the API key lacks the required scope (`insufficient_scope`), the plan does not include the public API or this feature (`addon_not_active`, `feature_not_available_in_plan`), or the module is not available with a test key (`module_not_available_in_sandbox`). `company_inactive`: the company in the path is deactivated; reactivate it to operate.
- `404`: The requested resource does not exist or belongs to another company. `profile_not_found`: the company in the path does not exist, is not in the API key scope or belongs to the other environment (live or test).
- `422`: Validation failed. The `error.param` field identifies which input is invalid.
- `429`: Rate limit exceeded. Retry after the duration in `Retry-After`.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/factuarea/apis/factuarea-public-api.md) · [All operations](https://skmtc.dev/factuarea/apis/factuarea-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/factuarea/apis/factuarea-public-api/revisions/718e77934422?raw)
