{
  "opencollection": "1.0.0",
  "info": {
    "name": "Campaigns API",
    "version": "2026-preview"
  },
  "items": [
    {
      "info": {
        "name": "Campaigns",
        "type": "folder"
      },
      "items": [
        {
          "info": {
            "name": "List campaigns with filtering, sorting, and cursor pagination",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.omnisend.com/api/campaigns",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "limit",
                "value": "",
                "type": "query",
                "description": "Number of items per page. Range: 1-250. Default: 100"
              },
              {
                "name": "after",
                "value": "",
                "type": "query",
                "description": "Opaque cursor for the next page"
              },
              {
                "name": "before",
                "value": "",
                "type": "query",
                "description": "Opaque cursor for the previous page"
              },
              {
                "name": "sort",
                "value": "",
                "type": "query",
                "description": "Sort field. Default: createdAt"
              },
              {
                "name": "direction",
                "value": "",
                "type": "query",
                "description": "Sort direction. Default: desc"
              },
              {
                "name": "status",
                "value": "",
                "type": "query",
                "description": "Filter by status (repeatable for OR logic)"
              },
              {
                "name": "nameContains",
                "value": "",
                "type": "query",
                "description": "Filter by name (partial match, max 200 characters)"
              },
              {
                "name": "channel",
                "value": "",
                "type": "query",
                "description": "Filter by message channel (repeatable for OR logic)"
              },
              {
                "name": "type",
                "value": "",
                "type": "query",
                "description": "Filter by campaign type. Use `booster` to list only boosters, `abTest` to list only A/B test parents."
              },
              {
                "name": "parentCampaignID",
                "value": "",
                "type": "query",
                "description": "Filter to boosters of the given parent campaign ID. Implies type=booster."
              },
              {
                "name": "createdAtFrom",
                "value": "",
                "type": "query",
                "description": "Filter campaigns created after this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)"
              },
              {
                "name": "createdAtTo",
                "value": "",
                "type": "query",
                "description": "Filter campaigns created before this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)"
              },
              {
                "name": "updatedAtFrom",
                "value": "",
                "type": "query",
                "description": "Filter campaigns updated after this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)"
              },
              {
                "name": "updatedAtTo",
                "value": "",
                "type": "query",
                "description": "Filter campaigns updated before this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)"
              }
            ],
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "List campaigns with filtering, sorting, and cursor-based pagination.\n\n**Scopes:**\n`campaigns.read`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute.\n\n**Filtering & sorting:**\nSupported 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.\n- `sort` ac"
        },
        {
          "info": {
            "name": "Create campaign",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.omnisend.com/api/campaigns",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Create a new campaign draft.\n\n**Boosters (`type: booster`):**\n- The parent campaign (`boosterSettings.campaignID`) must be a regular email campaign in 'draft' or 'sent' status; 'scheduled' and 'started' parents return 409.\n- Each parent campaign supports at most one booster; creating another returns 409. Delete the existing booster first to replace it.\n- `sendingSettings` is only allowed when the parent is already sent; for a draft parent provide `boosterSettings.delay` instead (max 240 hours) a"
        },
        {
          "info": {
            "name": "Get campaign",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.omnisend.com/api/campaigns/:id",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID (24 character hexadecimal)"
              }
            ],
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Get a single campaign by ID.\n\n**Scopes:**\n`campaigns.read`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        },
        {
          "info": {
            "name": "Update campaign (draft status only)",
            "type": "http"
          },
          "http": {
            "method": "PATCH",
            "url": "https://api.omnisend.com/api/campaigns/:id",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID (24 character hexadecimal)"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Update a campaign draft. Only campaigns in 'draft' status can be updated; any other status returns 409.\nTo change a campaign that is no longer a draft, copy it and edit the new draft copy.\n\n**Scopes:**\n`campaigns.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        },
        {
          "info": {
            "name": "Delete campaign",
            "type": "http"
          },
          "http": {
            "method": "DELETE",
            "url": "https://api.omnisend.com/api/campaigns/:id",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID"
              }
            ],
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Delete a campaign.\n\n**Scopes:**\n`campaigns.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        },
        {
          "info": {
            "name": "Resume A/B test",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.omnisend.com/api/campaigns/:id/ab-test/resume",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID (24 character hexadecimal)"
              }
            ],
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Resume a stopped A/B test. Automatic winner selection becomes eligible to pick this campaign again.\n\nAvailable only while the campaign is in `stopped` status.\n\n**Scopes:**\n`campaigns.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        },
        {
          "info": {
            "name": "Stop A/B test",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.omnisend.com/api/campaigns/:id/ab-test/stop",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID (24 character hexadecimal)"
              }
            ],
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Halt the A/B test winner-selection phase. While stopped, automatic winner selection no longer considers this campaign until it is resumed.\n\nAvailable only while the campaign is in `started` status.\n\n**Scopes:**\n`campaigns.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        },
        {
          "info": {
            "name": "Select A/B test winner",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.omnisend.com/api/campaigns/:id/ab-test/winner",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID (24 character hexadecimal)"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Manually pick a variant as the winner. The chosen variant is routed into the send pipeline immediately.\n\n**Scopes:**\n`campaigns.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        },
        {
          "info": {
            "name": "Cancel campaign",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.omnisend.com/api/campaigns/:id/cancel",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID (24 character hexadecimal)"
              }
            ],
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Cancel a campaign and mark it as canceled.\n\n**Cancelable source states:** `scheduled` or `paused` (all channel types), or `started` (email only). Any other status (e.g. `draft`, `sent`, `canceled`) returns 409.\n\nSupported cases:\n- Any scheduled or paused campaign (all channel types)\n- Started email campaigns\n\n**Note:** For started campaigns, cancellation is best-effort — messages already in flight may still be delivered.\n\n**Scopes:**\n`campaigns.write`\n\n**Rate Limiting:**\nThis endpoint is rate li"
        },
        {
          "info": {
            "name": "Copy campaign",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.omnisend.com/api/campaigns/:id/copy",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID to copy (24 character hexadecimal)"
              }
            ],
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Create a draft copy of an existing campaign, copying content, audience, and settings from the original.\nThe copy is a new draft campaign with its own ID; the original campaign is left unchanged.\nThe copied campaign name will be prefixed with \"Copy of: \".\n\n**Scopes:**\n`campaigns.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        },
        {
          "info": {
            "name": "Send campaign",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.omnisend.com/api/campaigns/:id/send",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID (24 character hexadecimal)"
              }
            ],
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "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.\nSupports both email and SMS campaigns. Behavior depends on the campaign's sending strategy:\n\n- **Immediate**: Campaign will be sent immediately\n- **Scheduled**: Campaign will be queued for the scheduled time with optional timezone optimization\n\n**Scopes:**\n`campaigns.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        },
        {
          "info": {
            "name": "Send campaign test email",
            "type": "http"
          },
          "http": {
            "method": "POST",
            "url": "https://api.omnisend.com/api/campaigns/:id/test-email",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID (24 character hexadecimal)"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Render the campaign draft and email it to up to 5 recipients so the merchant (or their AI tool) can preview it without leaving the API. The test uses the campaign's saved subject, sender, and content; only email campaigns are supported.\n\n**Scopes:**\n`campaigns.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        },
        {
          "info": {
            "name": "Get campaign UTM settings",
            "type": "http"
          },
          "http": {
            "method": "GET",
            "url": "https://api.omnisend.com/api/campaigns/:id/utm",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID (24 character hexadecimal)"
              }
            ],
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Get UTM tag settings for a campaign. The response shape is the same for all\ncampaign types: `tags` is populated for regular campaigns, `variants` for A/B\ncampaigns. The absent field is omitted.\n\n**Scopes:**\n`campaigns.read`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        },
        {
          "info": {
            "name": "Update campaign UTM settings",
            "type": "http"
          },
          "http": {
            "method": "PUT",
            "url": "https://api.omnisend.com/api/campaigns/:id/utm",
            "headers": [
              {
                "name": "Omnisend-Version",
                "value": ""
              }
            ],
            "params": [
              {
                "name": "id",
                "value": "",
                "type": "path",
                "description": "Campaign ID (24 character hexadecimal)"
              }
            ],
            "body": {
              "type": "json",
              "data": "{}"
            },
            "auth": {
              "type": "oauth2",
              "flow": "client_credentials",
              "accessTokenUrl": "https://app.omnisend.com/oauth2/token",
              "credentials": {
                "clientId": "{{clientId}}",
                "clientSecret": "{{clientSecret}}"
              }
            }
          },
          "docs": "Replace UTM tag settings for a campaign. For regular campaigns send a\n`tags` object. For A/B test campaigns send a `variants` object. The campaign\nmust be in draft status.\n\n**Scopes:**\n`campaigns.write`\n\n**Rate Limiting:**\nThis endpoint is rate limited to 400 requests per minute."
        }
      ]
    }
  ],
  "bundled": true
}