Omnisend Automations API

The Automations API from Omnisend — 13 operation(s) for creating, enabling, copying and restructuring event-triggered automation workflows, including the sendWebhook action block that is Omnisend's only outbound webhook mechanism.

Operations 13

GET /automations List automation workflows
POST /automations Create automation workflow
DELETE /automations/{id} Delete automation workflow
GET /automations/{id} Get automation workflow
PATCH /automations/{id} Patch automation workflow
PUT /automations/{id}/blocks Replace automation workflow blocks
POST /automations/{id}/blocks/{blockID}/test-email Send test email
GET /automations/{id}/blocks/{blockID}/utm Get UTM tags for an automation block
PUT /automations/{id}/blocks/{blockID}/utm Update UTM tags for an automation block
POST /automations/{id}/copy Copy automation workflow
POST /automations/{id}/disable Disable automation workflow
POST /automations/{id}/enable Enable automation workflow
GET /automations/{id}/utm Get aggregated UTM tags for all blocks

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/omnisend-automations-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

omnisend-automations-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact: {}
  description: API for managing automation workflows.
  title: Automations API
  version: 2026-preview
  x-api-evangelist:
    harvested: '2026-08-13'
    method: searched
    source: https://dash.readme.com/api/v1/api-registry/9c1ckrq1msfxryzj
    source-note: Published by Omnisend on its own docs host api-docs.omnisend.com (ReadMe project @omnisend, branch v2026-03-15); registry document referenced by the reference page as oasPublicUrl.
servers:
- url: https://api.omnisend.com/api
tags:
- name: Automations
paths:
  /automations:
    get:
      description: 'List automation workflows with filtering, sorting, and cursor-based pagination.


        **Scopes:**

        `automations.read`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.


        **Pagination:**

        This endpoint uses cursor-based pagination.

        - Use the `paging.cursors.after` value from the response to get the next page

        - Use the `paging.cursors.before` value to get the previous page

        - The `paging.hasMore` field indicates if more results are available

        - Maximum page size is 250 items. Default: 100'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: 'Number of items per page. Range: 1-250. Default: 100'
        in: query
        name: limit
        schema:
          type: integer
          minimum: 1
          maximum: 250
      - description: Opaque cursor for the next page
        in: query
        name: after
        schema:
          type: string
      - description: Opaque cursor for the previous page
        in: query
        name: before
        schema:
          type: string
      - description: 'Sort field. Default: createdAt'
        in: query
        name: sort
        schema:
          type: string
          enum:
          - createdAt
          - updatedAt
      - description: 'Sort direction. Default: desc'
        in: query
        name: direction
        schema:
          type: string
          enum:
          - asc
          - desc
      - description: If true, only enabled automations; if false, only disabled. Omit for no filter.
        in: query
        name: isEnabled
        schema:
          type: boolean
      - description: Filter by name (partial match, max 200 characters)
        in: query
        name: nameContains
        schema:
          type: string
          maxLength: 200
      - description: Filter automations created after this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)
        in: query
        name: createdAtFrom
        schema:
          type: string
          format: date-time
      - description: Filter automations created before this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)
        in: query
        name: createdAtTo
        schema:
          type: string
          format: date-time
      - description: Filter automations updated after this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)
        in: query
        name: updatedAtFrom
        schema:
          type: string
          format: date-time
      - description: Filter automations updated before this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)
        in: query
        name: updatedAtTo
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: List of automations with pagination
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListAutomationsResponse'
        '400':
          description: Request contains invalid or missing fields
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationProblem'
        '401':
          description: Authentication is missing or invalid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Insufficient permissions for this operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitProblem'
        '500':
          description: Unexpected error occurred
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      security:
      - Bearer:
        - automations.read
      - ApiKeyAuth: []
      summary: List automation workflows
      tags:
      - Automations
    post:
      description: "Create a new automation workflow.\n\n**Scopes:**\n`automations.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute.\n\n## Trigger condition examples\n\nThe `trigger.condition` field defines the event that enrolls contacts into the automation. Most trigger events use standard Events API event names and may require `origin`. Built-in trigger events, such as `\"birthday\"`, do not use `origin`.\n\nFor the `\"birthday\"` trigger, omit `trigger.condition.filterGroups` to enroll contacts on the day of their birthday. To shift the trigger time, add one filter group with exactly one filter:\n\n| Field | Operator | Value shape |\n|---|---|---|\n| `birthdate` | `eq` | Hour offset string from the birthday, e.g. `\"-24h\"`, `\"48h\"` |\n\n<details id=\"example-trigger-birthday-exact-day\">\n<summary>Birthday trigger on the contact birthday</summary>\n\n```json\n{\n  \"condition\": {\n    \"event\": \"birthday\"\n  }\n}\n```\n\n</details>\n\n<details id=\"example-trigger-birthday-before-birthday\">\n<summary>Birthday trigger before the contact birthday</summary>\n\n```json\n{\n  \"condition\": {\n    \"event\": \"birthday\",\n    \"filterGroups\": [\n      {\n        \"logicalOperator\": \"and\",\n        \"filters\": [\n          {\"field\": \"birthdate\", \"operator\": \"eq\", \"value\": \"-24h\"}\n        ]\n      }\n    ]\n  }\n}\n```\n\n</details>\n\n<details id=\"example-trigger-birthday-after-birthday\">\n<summary>Birthday trigger after the contact birthday</summary>\n\n```json\n{\n  \"condition\": {\n    \"event\": \"birthday\",\n    \"filterGroups\": [\n      {\n        \"logicalOperator\": \"and\",\n        \"filters\": [\n          {\"field\": \"birthdate\", \"operator\": \"eq\", \"value\": \"48h\"}\n        ]\n      }\n    ]\n  }\n}\n```\n\n</details>\n\nTo trigger an automation when a contact enters a specific segment, use the `entered segment` event with `origin: \"omnisend\"` and filter the trigger condition by `segment_id`. This is different from `audienceFilterGroup`, which only restricts who can enter after the trigger fires.\n\n<details id=\"example-trigger-entered-segment\">\n<summary>Trigger when a contact enters a specific segment</summary>\n\n```json\n{\n  \"condition\": {\n    \"event\": \"entered segment\",\n    \"origin\": \"omnisend\",\n    \"filterGroups\": [\n      {\n        \"logicalOperator\": \"and\",\n        \"filters\": [\n          {\"field\": \"segment_id\", \"operator\": \"eq\", \"value\": \"000000000000000000000001\"}\n        ]\n      }\n    ]\n  }\n}\n```\n\n</details>\n\n## Audience filter group examples\n\nThe `trigger.audienceFilterGroup` field is optional. When set, only contacts matching the filters are enrolled when the trigger fires — omit it to enroll everyone who triggers the event.\n\n### Supported fields\n\n| Field | Operators | Value shape |\n|---|---|---|\n| `segmentID`  | `eq`, `neq` | Segment ID string, e.g. `\"000000000000000000000001\"` |\n| `tag`        | `eq`, `neq` | Tag name, e.g. `\"vip\"` |\n| `dateAdded`  | `eq`, `neq`, `gt`, `lt` | ISO-8601 date, e.g. `\"2025-03-15\"` |\n| `firstName`  | `eq`, `neq`, `contains`, `notContains` | Free string, e.g. `\"John\"` |\n| `lastName`   | `eq`, `neq`, `contains`, `notContains` | Free string, e.g. `\"Smith\"` |\n| `gender`     | `eq` | `\"m\"` or `\"f\"` |\n| `country`    | `eq`, `neq`, `contains`, `notContains` | ISO-2 country code, e.g. `\"US\"` |\n| `state`      | `eq`, `neq`, `contains`, `notContains` | State / region name, e.g. `\"California\"` |\n| `city`       | `eq`, `neq`, `contains`, `notContains` | City name, e.g. `\"New York\"` |\n| `postalCode` | `eq`, `neq`, `contains`, `notContains` | Postal code string, e.g. `\"10001\"` |\n\n### Where it fits\n\n`audienceFilterGroup` is a sibling of `condition` inside `trigger`:\n\n```json\n{\n  \"name\": \"...\",\n  \"trigger\": {\n    \"condition\": {\n      \"event\": \"...\",\n      \"origin\": \"...\"\n    },\n    \"audienceFilterGroup\": { ... }\n  },\n  \"blocks\": [ ... ]\n}\n```\n\nEach example below shows only the `audienceFilterGroup` value — slot it into the skeleton above.\n\n<details id=\"example-audience-filter-by-segment\">\n<summary>Restrict to a single segment</summary>\n\n```json\n{\n  \"logicalOperator\": \"and\",\n  \"filters\": [\n    {\"field\": \"segmentID\", \"operator\": \"eq\", \"value\": \"000000000000000000000001\"}\n  ]\n}\n```\n\n</details>\n\n<details id=\"example-audience-filter-by-tag-include-exclude\">\n<summary>Include one tag, exclude another</summary>\n\n```json\n{\n  \"logicalOperator\": \"and\",\n  \"filters\": [\n    {\"field\": \"tag\", \"operator\": \"eq\",  \"value\": \"early-adopter\"},\n    {\"field\": \"tag\", \"operator\": \"neq\", \"value\": \"beta-churned\"}\n  ]\n}\n```\n\n</details>\n\n<details id=\"example-audience-filter-by-gender\">\n<summary>Gender (only `eq`, only `\"m\"` or `\"f\"`)</summary>\n\n```json\n{\n  \"logicalOperator\": \"and\",\n  \"filters\": [\n    {\"field\": \"gender\", \"operator\": \"eq\", \"value\": \"f\"}\n  ]\n}\n```\n\n</details>\n\n<details id=\"example-audience-filter-by-location\">\n<summary>Country + city substring match</summary>\n\n```json\n{\n  \"logicalOperator\": \"and\",\n  \"filters\": [\n    {\"field\": \"country\", \"operator\": \"eq\",       \"value\": \"US\"},\n    {\"field\": \"city\",    \"operator\": \"contains\", \"value\": \"York\"}\n  ]\n}\n```\n\n</details>\n\n<details id=\"example-audience-filter-by-date-added\">\n<summary>Recent contacts only (date cohort)</summary>\n\n```json\n{\n  \"logicalOperator\": \"and\",\n  \"filters\": [\n    {\"field\": \"dateAdded\", \"operator\": \"gt\", \"value\": \"2025-01-01\"}\n  ]\n}\n```\n\n</details>\n\n<details id=\"example-audience-filter-combined-or\">\n<summary>OR across multiple tags</summary>\n\n```json\n{\n  \"logicalOperator\": \"or\",\n  \"filters\": [\n    {\"field\": \"tag\", \"operator\": \"eq\", \"value\": \"vip\"},\n    {\"field\": \"tag\", \"operator\": \"eq\", \"value\": \"beta\"}\n  ]\n}\n```\n\n</details>\n\n<details id=\"example-audience-filter-combined-and\">\n<summary>AND across name, country, and tag</summary>\n\n```json\n{\n  \"logicalOperator\": \"and\",\n  \"filters\": [\n    {\"field\": \"firstName\", \"operator\": \"contains\", \"value\": \"John\"},\n    {\"field\": \"country\",   \"operator\": \"eq\",       \"value\": \"US\"},\n    {\"field\": \"tag\",       \"operator\": \"eq\",       \"value\": \"vip\"}\n  ]\n}\n```\n\n</details>\n"
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAutomationRequest'
        description: Automation to create
        required: true
      responses:
        '201':
          description: Created automation workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Automation'
        '400':
          description: Request contains invalid or missing fields
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationProblem'
        '401':
          description: Authentication is missing or invalid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Insufficient permissions for this operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitProblem'
        '500':
          description: Unexpected error occurred
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      security:
      - Bearer:
        - automations.write
      - ApiKeyAuth: []
      summary: Create automation workflow
      tags:
      - Automations
  /automations/{id}:
    delete:
      description: 'Delete a single automation workflow by ID.


        This operation is idempotent — deleting a non-existent automation returns a success response.


        **Scopes:**

        `automations.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Automation workflow ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Automation workflow deleted successfully
        '400':
          description: Request contains invalid or missing fields
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ValidationProblem'
        '401':
          description: Authentication is missing or invalid
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Insufficient permissions for this operation
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Rate limit exceeded
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/RateLimitProblem'
        '500':
          description: Unexpected error occurred
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
      security:
      - Bearer:
        - automations.write
      - ApiKeyAuth: []
      summary: Delete automation workflow
      tags:
      - Automations
    get:
      description: 'Get a single automation workflow by ID.


        **Scopes:**

        `automations.read`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Automation workflow ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Automation workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Automation'
        '400':
          description: Request contains invalid or missing fields
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationProblem'
        '401':
          description: Authentication is missing or invalid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Insufficient permissions for this operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: Automation workflow not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitProblem'
        '500':
          description: Unexpected error occurred
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      security:
      - Bearer:
        - automations.read
      - ApiKeyAuth: []
      summary: Get automation workflow
      tags:
      - Automations
    patch:
      description: "Partially update an automation workflow. Only the fields provided in the request body are updated.\n\nEnabled automations cannot be patched. Disable the automation via\n`POST /automations/{id}/disable`, make changes, then re-enable via\n`POST /automations/{id}/enable` when ready. When disabling, `contactsInWorkflow`\ncontrols whether contacts already in the workflow continue through the remaining\nblocks (`keep`) or exit immediately (`exit`). Enable/disable state is controlled\nexclusively via the `/automations/{id}/enable` and `/automations/{id}/disable`\nendpoints.\n\n`trigger` sub-fields (condition, audienceFilterGroup, inactivitySettings) are patched\nindividually — each provided sub-field replaces the corresponding sub-field in full.\n`exitConditions` are **replaced in full** when provided. `blocks` are patched individually.\n\n**Scopes:**\n`automations.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute.\n\n## Audience filter group examples\n\nThe `trigger.audienceFilterGroup` field in PATCH requests replaces the existing audience filter group in full (or sets it for the first time). Omit it to leave the existing audience filter group unchanged.\n\n### Supported fields\n\n| Field | Operators | Value shape |\n|---|---|---|\n| `segmentID`  | `eq`, `neq` | Segment ID string, e.g. `\"000000000000000000000001\"` |\n| `tag`        | `eq`, `neq` | Tag name, e.g. `\"vip\"` |\n| `dateAdded`  | `eq`, `neq`, `gt`, `lt` | ISO-8601 date, e.g. `\"2025-03-15\"` |\n| `firstName`  | `eq`, `neq`, `contains`, `notContains` | Free string, e.g. `\"John\"` |\n| `lastName`   | `eq`, `neq`, `contains`, `notContains` | Free string, e.g. `\"Smith\"` |\n| `gender`     | `eq` | `\"m\"` or `\"f\"` |\n| `country`    | `eq`, `neq`, `contains`, `notContains` | ISO-2 country code, e.g. `\"US\"` |\n| `state`      | `eq`, `neq`, `contains`, `notContains` | State / region name, e.g. `\"California\"` |\n| `city`       | `eq`, `neq`, `contains`, `notContains` | City name, e.g. `\"New York\"` |\n| `postalCode` | `eq`, `neq`, `contains`, `notContains` | Postal code string, e.g. `\"10001\"` |\n\n### Where it fits\n\n`audienceFilterGroup` sits inside `trigger` in the PATCH request body, alongside `condition` and `inactivitySettings`:\n\n```json\n{\n  \"trigger\": {\n    \"audienceFilterGroup\": { ... }\n  }\n}\n```\n\nEach example below shows only the `audienceFilterGroup` value — slot it into the skeleton above.\n\n<details id=\"example-patch-replace-audience-filter\">\n<summary>Replace audience filter without touching trigger event or blocks</summary>\n\n```json\n{\n  \"logicalOperator\": \"or\",\n  \"filters\": [\n    {\"field\": \"tag\", \"operator\": \"eq\", \"value\": \"vip\"},\n    {\"field\": \"tag\", \"operator\": \"eq\", \"value\": \"beta\"}\n  ]\n}\n```\n\n</details>\n\n<details id=\"example-patch-narrow-audience\">\n<summary>Narrow to US women</summary>\n\n```json\n{\n  \"logicalOperator\": \"and\",\n  \"filters\": [\n    {\"field\": \"country\", \"operator\": \"eq\", \"value\": \"US\"},\n    {\"field\": \"gender\",  \"operator\": \"eq\", \"value\": \"f\"}\n  ]\n}\n```\n\n</details>\n\n<details id=\"example-patch-swap-segment-for-tag\">\n<summary>Swap a segment-based audience for a tag-based one</summary>\n\n```json\n{\n  \"logicalOperator\": \"and\",\n  \"filters\": [\n    {\"field\": \"tag\", \"operator\": \"eq\",  \"value\": \"vip\"},\n    {\"field\": \"tag\", \"operator\": \"neq\", \"value\": \"beta-churned\"}\n  ]\n}\n```\n\n</details>\n"
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Automation workflow ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchAutomationRequest'
        description: Fields to update
        required: true
      responses:
        '200':
          description: Updated automation workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Automation'
        '400':
          description: Request contains invalid or missing fields
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationProblem'
        '401':
          description: Authentication is missing or invalid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Insufficient permissions for this operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: Automation workflow not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Cannot update an enabled automation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitProblem'
        '500':
          description: Unexpected error occurred
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      security:
      - Bearer:
        - automations.write
      - ApiKeyAuth: []
      summary: Patch automation workflow
      tags:
      - Automations
  /automations/{id}/blocks:
    put:
      description: 'Replace the full block tree for an automation workflow.


        Blocks identified by `id` are updated in place.

        Blocks identified by `temporaryID` are created as new blocks.

        Existing blocks not included in this array are removed.


        Enabled automations cannot be restructured. Disable the automation via

        `POST /automations/{id}/disable`, send the new block tree, then re-enable via

        `POST /automations/{id}/enable` when ready. When disabling, `contactsInWorkflow`

        controls whether contacts already in the workflow continue through the remaining

        blocks (`keep`) or exit immediately (`exit`).


        **Scopes:**

        `automations.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Automation workflow ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PutBlocksRequest'
        description: Full block tree replacement
        required: true
      responses:
        '200':
          description: Updated automation workflow
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Automation'
        '400':
          description: Request contains invalid or missing fields
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationProblem'
        '401':
          description: Authentication is missing or invalid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Insufficient permissions for this operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: Automation workflow not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Cannot update an enabled automation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitProblem'
        '500':
          description: Unexpected error occurred
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      security:
      - Bearer:
        - automations.write
      - ApiKeyAuth: []
      summary: Replace automation workflow blocks
      tags:
      - Automations
  /automations/{id}/blocks/{blockID}/test-email:
    post:
      description: 'Send the saved email content of a specific email block as a test

        email to up to 5 recipients. The email is rendered and delivered

        asynchronously.


        **Scopes:**

        `automations.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Automation workflow ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      - description: Block identifier
        in: path
        name: blockID
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendTestEmailRequest'
        description: Test email recipients
        required: true
      responses:
        '204':
          description: Test email accepted for delivery
        '400':
          description: Request contains invalid or missing fields
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/ValidationProblem'
        '401':
          description: Authentication is missing or invalid
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '402':
          description: Payment is required to send emails
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Insufficient permissions for this operation
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: Automation or block not found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Brand state or suppressed recipients prevent sending the test email
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Block does not support test emails or has no saved content
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Rate limit exceeded
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/RateLimitProblem'
        '500':
          description: Unexpected error occurred
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
      security:
      - Bearer:
        - automations.write
      - ApiKeyAuth: []
      summary: Send test email
      tags:
      - Automations
  /automations/{id}/blocks/{blockID}/utm:
    get:
      description: 'Retrieve UTM tracking tags for a specific send-action block.

        Missing or cleared tags are returned with their default values.


        **Scopes:**

        `automations.read`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Automation workflow ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      - description: Block identifier
        in: path
        name: blockID
        required: true
        schema:
          type: string
      responses:
        '200':
          description: UTM tags for the block
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UTMResponse'
        '400':
          description: Request contains invalid or missing fields
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationProblem'
        '401':
          description: Authentication is missing or invalid
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Insufficient permissions for this operation
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: Automation or block not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitProblem'
        '500':
          description: Unexpected error occurred
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
      security:
      - Bearer:
        - automations.read
      - ApiKeyAuth: []
      summary: Get UTM tags for an automation block
      tags:
      - Automations
    put:
      description: 'Set UTM tracking tags for a specific send-action block.

        All three tag fields are replaced atomically. Send an empty string

        to clear a field — the next read will return its default value.


        **Scopes:**

        `automations.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVe

# --- truncated at 32 KB (159 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/omnisend/refs/heads/main/openapi/omnisend-automations-api-openapi.yml