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.

OpenAPI Specification

omnisend-automations-api-openapi.yml Raw ↑
openapi: 3.0.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.
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:**\n\
        This endpoint is rate limited to 400 requests per minute.\n\n## Trigger condition examples\n\n\
        The `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\n\
        exclusively 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/sc

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