Omnisend Campaigns API

The Campaigns API from Omnisend — 14 operation(s) for campaigns. Version 2026-03-15, harvested from Omnisend's published contract.

Operations 14

GET /campaigns List campaigns with filtering, sorting, and cursor pagination
POST /campaigns Create campaign
DELETE /campaigns/{id} Delete campaign
GET /campaigns/{id} Get campaign
PATCH /campaigns/{id} Update campaign (draft status only)
POST /campaigns/{id}/ab-test/resume Resume A/B test
POST /campaigns/{id}/ab-test/stop Stop A/B test
POST /campaigns/{id}/ab-test/winner Select A/B test winner
POST /campaigns/{id}/cancel Cancel campaign
POST /campaigns/{id}/copy Copy campaign
POST /campaigns/{id}/send Send campaign
POST /campaigns/{id}/test-email Send campaign test email
GET /campaigns/{id}/utm Get campaign UTM settings
PUT /campaigns/{id}/utm Update campaign UTM settings

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-campaigns-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-campaigns-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact: {}
  description: API for managing campaigns.
  title: Campaigns API
  version: 2026-preview
  x-api-evangelist:
    harvested: '2026-08-13'
    method: searched
    source: https://dash.readme.com/api/v1/api-registry/7moskuxtmsopb4bg
    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: Campaigns
paths:
  /campaigns:
    get:
      description: 'List campaigns with filtering, sorting, and cursor-based pagination.


        **Scopes:**

        `campaigns.read`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.


        **Filtering & sorting:**

        Supported query parameters: `nameContains`, `status`, `channel`, `type`, `parentCampaignID`, `createdAtFrom`/`createdAtTo`, `updatedAtFrom`/`updatedAtTo`, `sort`, `direction`, `limit`, `after`, `before`. Only these documented parameters are accepted; any unknown parameter returns 400.

        - `sort` accepts `createdAt`, `updatedAt`, or `name`; `direction` (`asc`/`desc`) is only valid together with `sort`.


        **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

        - Do not send `after` and `before` together, and keep filters and sorting unchanged while paginating with a cursor'
      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
          - name
      - description: 'Sort direction. Default: desc'
        in: query
        name: direction
        schema:
          type: string
          enum:
          - asc
          - desc
      - description: Filter by status (repeatable for OR logic)
        in: query
        name: status
        explode: true
        schema:
          type: array
          items:
            enum:
            - error
            - onHold
            - sent
            - paused
            - started
            - stopped
            - expired
            - draft
            - scheduled
            - canceled
            type: string
      - description: Filter by name (partial match, max 200 characters)
        in: query
        name: nameContains
        schema:
          type: string
          maxLength: 200
      - description: Filter by message channel (repeatable for OR logic)
        in: query
        name: channel
        explode: true
        schema:
          type: array
          items:
            enum:
            - email
            - sms
            - push
            type: string
      - description: Filter by campaign type. Use `booster` to list only boosters, `abTest` to list only A/B test parents.
        in: query
        name: type
        schema:
          type: string
          enum:
          - regular
          - booster
          - abTest
      - description: Filter to boosters of the given parent campaign ID. Implies type=booster.
        in: query
        name: parentCampaignID
        schema:
          type: string
      - description: Filter campaigns 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 campaigns 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 campaigns 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 campaigns 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 campaigns with pagination
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignsResponse'
        '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:
        - campaigns.read
      - ApiKeyAuth: []
      summary: List campaigns with filtering, sorting, and cursor pagination
      tags:
      - Campaigns
    post:
      description: 'Create a new campaign draft.


        **Boosters (`type: booster`):**

        - The parent campaign (`boosterSettings.campaignID`) must be a regular email campaign in ''draft'' or ''sent'' status; ''scheduled'' and ''started'' parents return 409.

        - Each parent campaign supports at most one booster; creating another returns 409. Delete the existing booster first to replace it.

        - `sendingSettings` is only allowed when the parent is already sent; for a draft parent provide `boosterSettings.delay` instead (max 240 hours) and the booster is scheduled automatically when the parent sends.


        **Scopes:**

        `campaigns.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCampaignRequest'
        description: Campaign data
        required: true
      responses:
        '201':
          description: Created campaign
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
        '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: 'Booster only: parent campaign not found'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: 'Booster only: booster already exists for this campaign, or parent campaign status does not allow booster operations'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Campaign channel is not supported, or the store has no verified sender email to use when content.email.senderEmail is omitted
          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:
        - campaigns.write
      - ApiKeyAuth: []
      summary: Create campaign
      tags:
      - Campaigns
  /campaigns/{id}:
    delete:
      description: 'Delete a campaign.


        **Scopes:**

        `campaigns.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Campaign ID
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Campaign 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'
        '409':
          description: Campaign status does not allow deletion
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Campaign type is not supported
          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:
        - campaigns.write
      - ApiKeyAuth: []
      summary: Delete campaign
      tags:
      - Campaigns
    get:
      description: 'Get a single campaign by ID.


        **Scopes:**

        `campaigns.read`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Campaign ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Campaign
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
        '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: Campaign 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:
        - campaigns.read
      - ApiKeyAuth: []
      summary: Get campaign
      tags:
      - Campaigns
    patch:
      description: 'Update a campaign draft. Only campaigns in ''draft'' status can be updated; any other status returns 409.

        To change a campaign that is no longer a draft, copy it and edit the new draft copy.


        **Scopes:**

        `campaigns.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Campaign ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCampaignRequest'
        description: Campaign update data
        required: true
      responses:
        '200':
          description: Updated campaign
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
        '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: Campaign not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Campaign state does not allow modification
          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:
        - campaigns.write
      - ApiKeyAuth: []
      summary: Update campaign (draft status only)
      tags:
      - Campaigns
  /campaigns/{id}/ab-test/resume:
    post:
      description: 'Resume a stopped A/B test. Automatic winner selection becomes eligible to pick this campaign again.


        Available only while the campaign is in `stopped` status.


        **Scopes:**

        `campaigns.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Campaign ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: A/B test resumed
        '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'
        '404':
          description: Campaign not found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Campaign status is not stopped
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Campaign is not an A/B test
          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:
        - campaigns.write
      - ApiKeyAuth: []
      summary: Resume A/B test
      tags:
      - Campaigns
  /campaigns/{id}/ab-test/stop:
    post:
      description: 'Halt the A/B test winner-selection phase. While stopped, automatic winner selection no longer considers this campaign until it is resumed.


        Available only while the campaign is in `started` status.


        **Scopes:**

        `campaigns.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Campaign ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: A/B test stopped
        '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'
        '404':
          description: Campaign not found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Campaign status is not started
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Campaign is not an A/B test
          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:
        - campaigns.write
      - ApiKeyAuth: []
      summary: Stop A/B test
      tags:
      - Campaigns
  /campaigns/{id}/ab-test/winner:
    post:
      description: 'Manually pick a variant as the winner. The chosen variant is routed into the send pipeline immediately.


        **Scopes:**

        `campaigns.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Campaign ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SelectABTestWinnerRequest'
        description: Winner variant selection
        required: true
      responses:
        '204':
          description: Winner selected
        '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'
        '404':
          description: Campaign not found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Campaign status does not allow winner selection
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Campaign is not an A/B parent
          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:
        - campaigns.write
      - ApiKeyAuth: []
      summary: Select A/B test winner
      tags:
      - Campaigns
  /campaigns/{id}/cancel:
    post:
      description: 'Cancel a campaign and mark it as canceled.


        **Cancelable source states:** `scheduled` or `paused` (all channel types), or `started` (email only). Any other status (e.g. `draft`, `sent`, `canceled`) returns 409.


        Supported cases:

        - Any scheduled or paused campaign (all channel types)

        - Started email campaigns


        **Note:** For started campaigns, cancellation is best-effort — messages already in flight may still be delivered.


        **Scopes:**

        `campaigns.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Campaign ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Campaign cancel initiated 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'
        '404':
          description: Campaign not found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Campaign is not in a cancelable state (only scheduled, or started/paused email campaigns can be canceled)
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '410':
          description: API version has been retired
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          description: Campaign type is not supported
          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:
        - campaigns.write
      - ApiKeyAuth: []
      summary: Cancel campaign
      tags:
      - Campaigns
  /campaigns/{id}/copy:
    post:
      description: 'Create a draft copy of an existing campaign, copying content, audience, and settings from the original.

        The copy is a new draft campaign with its own ID; the original campaign is left unchanged.

        The copied campaign name will be prefixed with "Copy of: ".


        **Scopes:**

        `campaigns.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Campaign ID to copy (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Created draft copy of the campaign
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Campaign'
        '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: Campaign 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'
        '422':
          description: Campaign type is not supported
          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:
        - campaigns.write
      - ApiKeyAuth: []
      summary: Copy campaign
      tags:
      - Campaigns
  /campaigns/{id}/send:
    post:
      description: 'Submit a campaign draft for sending. Only campaigns in ''draft'' status can be sent; to send a campaign again, copy it and send the copy.

        Supports both email and SMS campaigns. Behavior depends on the campaign''s sending strategy:


        - **Immediate**: Campaign will be sent immediately

        - **Scheduled**: Campaign will be queued for the scheduled time with optional timezone optimization


        **Scopes:**

        `campaigns.write`


        **Rate Limiting:**

        This endpoint is rate limited to 400 requests per minute.'
      parameters:
      - $ref: '#/components/parameters/APIVersionHeader'
      - description: Campaign ID (24 character hexadecimal)
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Campaign send initiated 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'
        '402':
          description: Payment is required to send this campaign
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '403':
          description: Insufficient permissions for this operation
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '404':
          description: Campaign not found
          content:
            '*/*':
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Campaign state does not allow sending or content is invalid
          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:
        - campaigns.write
      

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