{"openapi":"3.0.0","info":{"description":"E-commerce email and SMS marketing API (versioned 2026-03-15): contacts, products, carts, orders, events, segments, campaigns and automations via api.omnisend.com/api (Authorization: Omnisend-API-Key header + Omnisend-Version header). Legacy /v3 API still answers but is no longer documented.","version":"2026-03-15"},"servers":[{"description":"E-commerce email and SMS marketing API (versioned 2026-03-15): contacts, products, carts, orders, events, segments, campaigns and automations via api.omnisend.com/api (Authorization: Omnisend-API-Key header + Omnisend-Version header). Legacy /v3 API still answers but is no longer documented.","url":"https://api.apirails.com/omnisend"}],"paths":{"/automations":{"get":{"tags":["Automations"],"parameters":[{"name":"after","in":"query","description":"Opaque cursor for the next page","required":false,"schema":{"type":"string","example":""}},{"name":"before","in":"query","description":"Opaque cursor for the previous page","required":false,"schema":{"type":"string","example":""}},{"name":"createdAtFrom","in":"query","description":"Filter automations created after this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)","required":false,"schema":{"type":"string","example":""}},{"name":"createdAtTo","in":"query","description":"Filter automations created before this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)","required":false,"schema":{"type":"string","example":""}},{"name":"direction","in":"query","description":"Sort direction. Default: desc","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["asc","desc"]}}},{"name":"isEnabled","in":"query","description":"If true, only enabled automations; if false, only disabled. Omit for no filter.","required":false,"schema":{"type":"boolean","example":"","items":{"type":"string","enum":[true,false]}}},{"name":"limit","in":"query","description":"Number of items per page. Range: 1-250. Default: 100","required":false,"schema":{"type":"number","example":""}},{"name":"nameContains","in":"query","description":"Filter by name (partial match, max 200 characters)","required":false,"schema":{"type":"string","example":""}},{"name":"sort","in":"query","description":"Sort field. Default: createdAt","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["createdAt","updatedAt"]}}},{"name":"updatedAtFrom","in":"query","description":"Filter automations updated after this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)","required":false,"schema":{"type":"string","example":""}},{"name":"updatedAtTo","in":"query","description":"Filter automations updated before this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_automations","api_endpoint":"https://api.omnisend.com/api/automations"},"summary":"List automation workflows","description":"List automation workflows — 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","security":[{"bearerAuth":[]}]}},"/automations/{id}":{"get":{"tags":["Automations"],"parameters":[{"name":"id","in":"path","description":"Automation workflow ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_automations-id","api_endpoint":"https://api.omnisend.com/api/automations/{id}"},"summary":"Get automation workflow","description":"Get automation workflow — Get a single automation workflow by ID. Scopes: automations.read Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}]},"delete":{"tags":["Automations"],"parameters":[{"name":"id","in":"path","description":"Automation workflow ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/delete_automations-id","api_endpoint":"https://api.omnisend.com/api/automations/{id}"},"summary":"Delete automation workflow","description":"Delete automation workflow — 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.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/automations/{id}/blocks":{"put":{"tags":["Automations"],"parameters":[{"name":"id","in":"path","description":"Automation workflow ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/put_automations-id-blocks","api_endpoint":"https://api.omnisend.com/api/automations/{id}/blocks"},"summary":"Replace automation workflow blocks","description":"Replace automation workflow blocks — 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 cont","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"blocks":{"type":"array","description":"Full block list. Replaces the entire block tree. At least one block is required. Blocks with id update existing blocks; blocks with temporaryID create new ones. Existing blocks not included in this array are removed.","required":true,"items":{"type":"object","properties":{"type":{"type":"string","description":"type (body parameter)","required":true,"enum":["delay","action","split","abTesting"]},"abTesting":{"type":"string","description":"abTesting (body parameter)"},"action":{"type":"string","description":"action (body parameter)"},"delay":{"type":"string","description":"delay (body parameter)"},"id":{"type":"string","description":"id (body parameter)"},"split":{"type":"string","description":"split (body parameter)"},"temporaryID":{"type":"string","description":"temporaryID (body parameter)"}}}}}},"example":{"blocks":[]}}}}}},"/automations/{id}/blocks/{blockID}/test-email":{"post":{"tags":["Automations"],"parameters":[{"name":"blockID","in":"path","description":"Block identifier","required":true,"schema":{"type":"string","example":""}},{"name":"id","in":"path","description":"Automation workflow ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_automations-id-blocks-blockid-test-email","api_endpoint":"https://api.omnisend.com/api/automations/{id}/blocks/{blockID}/test-email"},"summary":"Send test email","description":"Send test email — 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.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"recipients":{"type":"array","description":"Email addresses to deliver the test email to (1 to 5 recipients).","required":true,"items":{"type":"string"}}}},"example":{"recipients":["merchant@example.com","teammate@example.com"]}}}}}},"/automations/{id}/blocks/{blockID}/utm":{"get":{"tags":["Automations"],"parameters":[{"name":"blockID","in":"path","description":"Block identifier","required":true,"schema":{"type":"string","example":""}},{"name":"id","in":"path","description":"Automation workflow ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_automations-id-blocks-blockid-utm","api_endpoint":"https://api.omnisend.com/api/automations/{id}/blocks/{blockID}/utm"},"summary":"Get UTM tags for an automation block","description":"Get UTM tags for an automation block — 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.","security":[{"bearerAuth":[]}]},"put":{"tags":["Automations"],"parameters":[{"name":"blockID","in":"path","description":"Block identifier","required":true,"schema":{"type":"string","example":""}},{"name":"id","in":"path","description":"Automation workflow ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/put_automations-id-blocks-blockid-utm","api_endpoint":"https://api.omnisend.com/api/automations/{id}/blocks/{blockID}/utm"},"summary":"Update UTM tags for an automation block","description":"Update UTM tags for an automation block — 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.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"tags":{"type":"string","description":"UTM tag values","required":true}}},"example":{"tags":"tags_example"}}}}}},"/automations/{id}/copy":{"post":{"tags":["Automations"],"parameters":[{"name":"id","in":"path","description":"Automation workflow ID to copy (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_automations-id-copy","api_endpoint":"https://api.omnisend.com/api/automations/{id}/copy"},"summary":"Copy automation workflow","description":"Copy automation workflow — Create a copy of an existing automation workflow. The copy is always created in a disabled state, regardless of the source automation's status. The request body is optional. When provided, you can specify a custom name for the copy. When omitted (or when name is empty), the copy is named \"Copy of: <original name\". Scopes: automations.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"Custom name for the copied automation workflow. When omitted, defaults to \"Copy of: <original name\"."}}},"example":{"name":"My Welcome Series (copy)"}}}}}},"/automations/{id}/disable":{"post":{"tags":["Automations"],"parameters":[{"name":"id","in":"path","description":"Automation workflow ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_automations-id-disable","api_endpoint":"https://api.omnisend.com/api/automations/{id}/disable"},"summary":"Disable automation workflow","description":"Disable automation workflow — Disable an automation workflow. Once disabled, the workflow stops accepting new trigger events. Use contactsInWorkflow to control what happens to contacts currently progressing through the workflow: - keep: contacts remain and continue through the remaining blocks until completion. No new contacts enter. - exit: all contacts are immediately removed from the workflow. Contacts who have not yet received their messages will not receive them. Disabling an already-disabl","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"contactsInWorkflow":{"type":"string","description":"What to do with contacts currently in the workflow","required":true,"enum":["keep","exit"]}}},"example":{"contactsInWorkflow":"keep"}}}}}},"/automations/{id}/enable":{"post":{"tags":["Automations"],"parameters":[{"name":"id","in":"path","description":"Automation workflow ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_automations-id-enable","api_endpoint":"https://api.omnisend.com/api/automations/{id}/enable"},"summary":"Enable automation workflow","description":"Enable automation workflow — Enable an automation workflow. Once enabled, the workflow starts processing trigger events in real time. The request body is optional. Use enrollExisting to also enroll contacts who already qualify at the time of enabling. When the body is omitted (or enrollExisting is omitted or false), only future trigger events are processed. Enabling an already-enabled automation is idempotent — returns the current state without side effects. Scopes: automations.write Rate Limiti","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"enrollExisting":{"type":"boolean","description":"Whether to enroll contacts who already meet the trigger conditions. When omitted or false, only future trigger events are processed. When enrollExisting=true: - Event-based triggers (e.g. \"placed order\", \"started checkout\"): contacts whose trigger event occurred within the first delay block's time window are enrolled. They receive messages based on their original event time, not when the workflow was enabled (e.g. 30-day delay, event 20 days ago message in 10 days). The workflow must start with a delay block — otherwise the request is rejected with 409 enroll-existing-not-applicable. - \"Entered segment\" trigger: all contacts currently in the trigger's segments are enrolled immediately. Takes effect only on the first enable; re-enabling with enrollExisting=true is rejected with 409 enroll-existing-not-applicable. Copy the workflow if a fresh enrollment is needed. - Birthday, \"Product back in stock\", and custom virtual events: not supported; enrollExisting=true is rejected with 409 enroll-existing-not-applicable.","enum":[true,false]}}},"example":{"enrollExisting":""}}}}}},"/automations/{id}/utm":{"get":{"tags":["Automations"],"parameters":[{"name":"id","in":"path","description":"Automation workflow ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_automations-id-utm","api_endpoint":"https://api.omnisend.com/api/automations/{id}/utm"},"summary":"Get aggregated UTM tags for all blocks","description":"Get aggregated UTM tags for all blocks — Retrieve UTM tracking tags for all send-action blocks in an automation. Each block's tags include default-value synthesis for missing fields. Scopes: automations.read Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}]}},"/batches":{"get":{"tags":["Batch"],"parameters":[{"name":"dateFrom","in":"query","description":"Date from (format: yyyy-mm-dd)","required":false,"schema":{"type":"string","example":""}},{"name":"dateTo","in":"query","description":"Date to (format: yyyy-mm-dd)","required":false,"schema":{"type":"string","example":""}},{"name":"endpoint","in":"query","description":"Endpoint","required":true,"schema":{"type":"string","example":"","items":{"type":"string","enum":["products","contacts","events"]}}},{"name":"limit","in":"query","description":"Limit (1-250)","required":false,"schema":{"type":"number","example":""}},{"name":"offset","in":"query","description":"Offset (minimum 0)","required":false,"schema":{"type":"number","example":""}},{"name":"status","in":"query","description":"Status","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["pending","inProgress","finished","stopped"]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_batches","api_endpoint":"https://api.omnisend.com/api/batches"},"summary":"Get batches","description":"Get batches — Get batches Scopes: products.read, contacts.read, events.read Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}]},"post":{"tags":["Batch"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_batches","api_endpoint":"https://api.omnisend.com/api/batches"},"summary":"Create batch","description":"Create batch — Batch operations allow for multiple actions of a similar type to be executed in a single request. Utilizing the batch endpoint is recommended to avoid hitting rate limits and to enhance overall performance. Creating batches is an asynchronous process that initiates the creation or updating of the specified items. POST batch operations to create multiple items simultaneously. PUT batch operations to apply multiple updates to multiple items. Each batch operation can include up to 10","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"method":{"type":"string","description":"method (body parameter)","required":true,"enum":["POST","PUT"]},"endpoint":{"type":"string","description":"endpoint (body parameter)","required":true,"enum":["products","contacts","events","categories"]},"items":{"type":"array","description":"items (body parameter)","required":true,"items":{"type":"string"}},"origin":{"type":"string","description":"origin (body parameter)"}}},"example":{"method":"POST","endpoint":"contacts","items":[],"origin":"omnisend"}}}}}},"/batches/{batchID}":{"get":{"tags":["Batch"],"parameters":[{"name":"batchID","in":"path","description":"Batch ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_batches-batchid","api_endpoint":"https://api.omnisend.com/api/batches/{batchID}"},"summary":"Get batch information","description":"Get batch information — Get batch information Scopes: products.read, contacts.read, events.read Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}]}},"/batches/{batchID}/items":{"get":{"tags":["Batch"],"parameters":[{"name":"batchID","in":"path","description":"Batch ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_batches-batchid-items","api_endpoint":"https://api.omnisend.com/api/batches/{batchID}/items"},"summary":"Get batch items","description":"Get batch items — Get batch items Scopes: products.read, contacts.read, events.read Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}]}},"/brands/current":{"get":{"tags":["Brands"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_brands-current","api_endpoint":"https://api.omnisend.com/api/brands/current"},"summary":"Get information about brand","description":"Get information about brand — With this endpoint you can get brand's information. Scopes: brands.read Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}]},"post":{"tags":["Brands"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_brands-current","api_endpoint":"https://api.omnisend.com/api/brands/current"},"summary":"Connect brand","description":"Connect brand — With this endpoint you can connect your site to Omnisend. Note it's only possible to connect store with oAuth flow. Scopes: brands.write Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"currency":{"type":"string","description":"currency (body parameter)"},"platform":{"type":"string","description":"platform (body parameter)","required":true},"version":{"type":"string","description":"version (body parameter)","required":true},"website":{"type":"string","description":"website (body parameter)","required":true}}},"example":{"currency":"USD","platform":"wordpress","version":"2","website":"https://www.example.com"}}}}}},"/campaigns":{"get":{"tags":["Campaigns"],"parameters":[{"name":"type","in":"query","description":"Filter by campaign type. Use booster to list only boosters, abTest to list only A/B test parents.","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["regular","booster","abTest"]}}},{"name":"after","in":"query","description":"Opaque cursor for the next page","required":false,"schema":{"type":"string","example":""}},{"name":"before","in":"query","description":"Opaque cursor for the previous page","required":false,"schema":{"type":"string","example":""}},{"name":"channel","in":"query","description":"Filter by message channel (repeatable for OR logic)","required":false,"schema":{"type":"array","example":""}},{"name":"createdAtFrom","in":"query","description":"Filter campaigns created after this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)","required":false,"schema":{"type":"string","example":""}},{"name":"createdAtTo","in":"query","description":"Filter campaigns created before this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)","required":false,"schema":{"type":"string","example":""}},{"name":"direction","in":"query","description":"Sort direction. Default: desc","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["asc","desc"]}}},{"name":"limit","in":"query","description":"Number of items per page. Range: 1-250. Default: 100","required":false,"schema":{"type":"number","example":""}},{"name":"nameContains","in":"query","description":"Filter by name (partial match, max 200 characters)","required":false,"schema":{"type":"string","example":""}},{"name":"parentCampaignID","in":"query","description":"Filter to boosters of the given parent campaign ID. Implies type=booster.","required":false,"schema":{"type":"string","example":""}},{"name":"sort","in":"query","description":"Sort field. Default: createdAt","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["createdAt","updatedAt","name"]}}},{"name":"status","in":"query","description":"Filter by status (repeatable for OR logic)","required":false,"schema":{"type":"array","example":""}},{"name":"updatedAtFrom","in":"query","description":"Filter campaigns updated after this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)","required":false,"schema":{"type":"string","example":""}},{"name":"updatedAtTo","in":"query","description":"Filter campaigns updated before this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_campaigns","api_endpoint":"https://api.omnisend.com/api/campaigns"},"summary":"List campaigns with filtering, sorting, and cursor pagination","description":"List campaigns with filtering, sorting, and cursor pagination — 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 retur","security":[{"bearerAuth":[]}]},"post":{"tags":["Campaigns"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_campaigns","api_endpoint":"https://api.omnisend.com/api/campaigns"},"summary":"Create campaign","description":"Create campaign — 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 hou","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"type":{"type":"string","description":"Campaign type. When type is booster, there are two supported flows: Flow 1 — draft parent + draft booster: Create a draft parent campaign, then create a draft booster for it (set boosterSettings.delay to control when it fires). Send the parent; the booster is scheduled automatically based on the configured delay. Flow 2 — already-sent parent: Create and send a parent campaign first. Once it reaches sent status, create the booster campaign (omit boosterSettings.delay) and use sendingSettings.scheduledAt to set the exact send time. Then call the send endpoint on the booster.","required":true,"enum":["regular","booster","abTest"]},"abTest":{"type":"string","description":"A/B test configuration. Required when type is \"abTest\". Variants carry per-variant content; omit the top-level content field."},"audience":{"type":"string","description":"Campaign audience. Included and excluded segments must not overlap"},"boosterSettings":{"type":"string","description":"Booster settings. Required when type is \"booster\""},"channel":{"type":"string","description":"Campaign message channel","required":true,"enum":["email","push","sms"]},"content":{"type":"string","description":"Campaign content. Required for regular campaigns (not required for booster or abTest). Populated based on channel"},"language":{"type":"string","description":"Campaign language locale in xxXX format. Optional; defaults to enUS when not provided. Must be a supported language when specified"},"name":{"type":"string","description":"Campaign name. Required for regular and abTest campaigns (not required for booster)"},"sendingSettings":{"type":"string","description":"Campaign sending settings"}}},"example":{"type":"regular","abTest":"abTest_example","audience":"audience_example","boosterSettings":"boosterSettings_example","channel":"email","content":"content_example","language":"en_US","name":"Welcome Campaign","sendingSettings":"sendingSettings_example"}}}}}},"/campaigns/{id}":{"get":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_campaigns-id","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}"},"summary":"Get campaign","description":"Get campaign — Get a single campaign by ID. Scopes: campaigns.read Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}]},"patch":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/patch_campaigns-id","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}"},"summary":"Update campaign (draft status only)","description":"Update campaign (draft status only) — 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.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"abTest":{"type":"string","description":"A/B test settings. Only applicable to A/B campaigns (campaigns with type \"abTest\"). Full replacement — all provided variant and setting fields replace existing values. templateID / contentID are excluded: templates are set at create time and cannot be changed via PATCH."},"audience":{"type":"string","description":"Campaign audience. Included and excluded segments must not overlap"},"boosterSettings":{"type":"string","description":"Booster-specific settings. Only applicable to booster campaigns (campaigns with type \"booster\")."},"content":{"type":"string","description":"Campaign content. Only specified fields will be updated"},"language":{"type":"string","description":"Campaign language locale in xxXX format. Must be a supported language"},"name":{"type":"string","description":"Campaign name"},"sendingSettings":{"type":"string","description":"Campaign sending settings. Full object replacement - all fields must be provided when updating"}}},"example":{"abTest":"abTest_example","audience":"audience_example","boosterSettings":"boosterSettings_example","content":"content_example","language":"en_US","name":"Welcome Campaign","sendingSettings":"sendingSettings_example"}}}}},"delete":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/delete_campaigns-id","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}"},"summary":"Delete campaign","description":"Delete campaign — Delete a campaign. Scopes: campaigns.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/campaigns/{id}/ab-test/resume":{"post":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_campaigns-id-ab-test-resume","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}/ab-test/resume"},"summary":"Resume A/B test","description":"Resume A/B test — 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.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/campaigns/{id}/ab-test/stop":{"post":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_campaigns-id-ab-test-stop","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}/ab-test/stop"},"summary":"Stop A/B test","description":"Stop A/B test — 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.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/campaigns/{id}/ab-test/winner":{"post":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_campaigns-id-ab-test-winner","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}/ab-test/winner"},"summary":"Select A/B test winner","description":"Select A/B test winner — 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.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"variantID":{"type":"string","description":"ID of the variant to promote as the winner","required":true}}},"example":{"variantID":"000000000000000000000001"}}}}}},"/campaigns/{id}/cancel":{"post":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_campaigns-id-cancel","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}/cancel"},"summary":"Cancel campaign","description":"Cancel campaign — 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 requ","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/campaigns/{id}/copy":{"post":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID to copy (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_campaigns-id-copy","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}/copy"},"summary":"Copy campaign","description":"Copy campaign — 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.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/campaigns/{id}/send":{"post":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_campaigns-id-send","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}/send"},"summary":"Send campaign","description":"Send campaign — 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.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/campaigns/{id}/test-email":{"post":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_campaigns-id-test-email","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}/test-email"},"summary":"Send campaign test email","description":"Send campaign test email — 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. Scopes: campaigns.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"recipients":{"type":"array","description":"Email addresses that receive the test send. Between 1 and 5 addresses.","required":true,"items":{"type":"string"}}}},"example":{"recipients":["merchant@example.com","teammate@example.com"]}}}}}},"/campaigns/{id}/utm":{"get":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_campaigns-id-utm","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}/utm"},"summary":"Get campaign UTM settings","description":"Get campaign UTM settings — Get UTM tag settings for a campaign. The response shape is the same for all campaign types: tags is populated for regular campaigns, variants for A/B campaigns. The absent field is omitted. Scopes: campaigns.read Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}]},"put":{"tags":["Campaigns"],"parameters":[{"name":"id","in":"path","description":"Campaign ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/put_campaigns-id-utm","api_endpoint":"https://api.omnisend.com/api/campaigns/{id}/utm"},"summary":"Update campaign UTM settings","description":"Update campaign UTM settings — Replace UTM tag settings for a campaign. For regular campaigns send a tags object. For A/B test campaigns send a variants object. The campaign must be in draft status. Scopes: campaigns.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"tags":{"type":"string","description":"Tags for a regular campaign — omit for A/B campaigns"},"variants":{"type":"string","description":"Variants for an A/B test campaign — omit for regular campaigns"}}},"example":{"tags":"tags_example","variants":"variants_example"}}}}}},"/contacts":{"get":{"tags":["Contacts"],"parameters":[{"name":"after","in":"query","description":"Opaque cursor for fetching the next page (from paging.cursors.after)","required":false,"schema":{"type":"string","example":""}},{"name":"before","in":"query","description":"Opaque cursor for fetching the previous page (from paging.cursors.before)","required":false,"schema":{"type":"string","example":""}},{"name":"direction","in":"query","description":"Sort direction. Default: desc","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["asc","desc"]}}},{"name":"email","in":"query","description":"Filter by email address","required":false,"schema":{"type":"string","example":""}},{"name":"limit","in":"query","description":"Number of items per page. Range: 1-250. Default: 100","required":false,"schema":{"type":"number","example":""}},{"name":"phone","in":"query","description":"Filter by phone number","required":false,"schema":{"type":"string","example":""}},{"name":"segmentID","in":"query","description":"Filter by segment ID","required":false,"schema":{"type":"string","example":""}},{"name":"sort","in":"query","description":"Sort field. Default: createdAt","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["createdAt","updatedAt"]}}},{"name":"status","in":"query","description":"Contact subscription status filter. Cannot be combined with tag","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["subscribed","unsubscribed","nonSubscribed"]}}},{"name":"tag","in":"query","description":"Filter by tag. Cannot be combined with status","required":false,"schema":{"type":"string","example":""}},{"name":"updatedAtFrom","in":"query","description":"Filter contacts updated at or after this RFC3339 timestamp. Cannot be combined with email, phone, status, segmentID, or tag","required":false,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_contacts","api_endpoint":"https://api.omnisend.com/api/contacts"},"summary":"List contacts","description":"List contacts — Returns a paginated list of contacts filtered by the provided query parameters. Scopes: contacts.read Rate Limiting: This endpoint is rate limited to 400 requests per minute. Filter restrictions: - tag and status cannot be used together in the same request. - updatedAtFrom cannot be combined with email, phone, status, segmentID, or tag.","security":[{"bearerAuth":[]}]},"post":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_contacts","api_endpoint":"https://api.omnisend.com/api/contacts"},"summary":"Create or update existing contact","description":"Create or update existing contact — Creates a new contact. If a contact with the provided email identifier already exists, it will be updated instead. Returns 201 Created for new contacts and 200 OK when an existing contact was updated. Scopes: contacts.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"address":{"type":"string","description":"Street, house number, apartment number."},"birthdate":{"type":"string","description":"Contact birthdate in YYYY-MM-DD format"},"city":{"type":"string","description":"City"},"country":{"type":"string","description":"Country name. Used to derive ISO country code when countryCode is not provided"},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code. Takes priority over country when both are provided"},"createdAt":{"type":"string","description":"Contact creation timestamp. If provided, stored as \"externalCreated\" custom property"},"customProperties":{"type":"object","description":"You can add your own custom properties. Read more in https://api-docs.omnisend.com/reference/contactscustom-properties (free-form object; the API accepts arbitrary key-value pairs)","properties":{}},"firstName":{"type":"string","description":"Contact first name"},"gender":{"type":"string","description":"Contact gender. m - male, f - female","enum":["m","f"]},"identifiers":{"type":"array","description":"Contact identifiers (email and/or phone)","items":{"type":"object","properties":{"type":{"type":"string","description":"type (body parameter)","required":true,"enum":["email","phone"]},"channels":{"type":"object","description":"channels (body parameter) (free-form object; the API accepts arbitrary key-value pairs)"},"consent":{"type":"string","description":"consent (body parameter)"},"id":{"type":"string","description":"id (body parameter)","required":true},"sendWelcomeMessage":{"type":"boolean","description":"sendWelcomeMessage (body parameter)","enum":[true,false]},"source":{"type":"string","description":"source (body parameter)"}}}},"lastName":{"type":"string","description":"Contact last name"},"postalCode":{"type":"string","description":"Postal or zip code"},"state":{"type":"string","description":"State or region"},"tags":{"type":"array","description":"Labels assigned to the contact. When creating a contact, it is strongly advised to include a source tag, e.g. \"source: shopify\".","items":{"type":"string"}},"trackingConsents":{"type":"string","description":"Contact-level tracking consents"}}},"example":{"address":"1234 Main St","birthdate":"1990-01-01","city":"Los Angeles","country":"United States","countryCode":"US","createdAt":"2024-01-01T00:00:00Z","customProperties":{},"firstName":"John","gender":"m","identifiers":[],"lastName":"Doe","postalCode":"90001","state":"New York","tags":["tag1","tag2"],"trackingConsents":"trackingConsents_example"}}}}},"patch":{"tags":["Contacts"],"parameters":[{"name":"email","in":"query","description":"Contact email address","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/patch_contacts","api_endpoint":"https://api.omnisend.com/api/contacts"},"summary":"Update contact by email","description":"Update contact by email — Updates the contact matching the provided email address. Scopes: contacts.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"address":{"type":"string","description":"Street, house number, apartment number."},"birthdate":{"type":"string","description":"Contact birthdate in YYYY-MM-DD format"},"city":{"type":"string","description":"City"},"country":{"type":"string","description":"Country name. Used to derive ISO country code when countryCode is not provided"},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code. Takes priority over country when both are provided"},"createdAt":{"type":"string","description":"Contact creation timestamp. If provided, stored as \"externalCreated\" custom property"},"customProperties":{"type":"object","description":"You can add your own custom properties. Read more in https://api-docs.omnisend.com/reference/contactscustom-properties (free-form object; the API accepts arbitrary key-value pairs)","properties":{}},"firstName":{"type":"string","description":"Contact first name"},"gender":{"type":"string","description":"Contact gender. m - male, f - female","enum":["m","f"]},"identifiers":{"type":"array","description":"Contact identifiers (email and/or phone)","items":{"type":"object","properties":{"type":{"type":"string","description":"type (body parameter)","required":true,"enum":["email","phone"]},"channels":{"type":"object","description":"channels (body parameter) (free-form object; the API accepts arbitrary key-value pairs)"},"consent":{"type":"string","description":"consent (body parameter)"},"id":{"type":"string","description":"id (body parameter)","required":true},"sendWelcomeMessage":{"type":"boolean","description":"sendWelcomeMessage (body parameter)","enum":[true,false]},"source":{"type":"string","description":"source (body parameter)"}}}},"lastName":{"type":"string","description":"Contact last name"},"postalCode":{"type":"string","description":"Postal or zip code"},"state":{"type":"string","description":"State or region"},"tags":{"type":"array","description":"Labels assigned to the contact. When creating a contact, it is strongly advised to include a source tag, e.g. \"source: shopify\".","items":{"type":"string"}},"trackingConsents":{"type":"string","description":"Contact-level tracking consents"}}},"example":{"address":"1234 Main St","birthdate":"1990-01-01","city":"Los Angeles","country":"United States","countryCode":"US","createdAt":"2024-01-01T00:00:00Z","customProperties":{},"firstName":"John","gender":"m","identifiers":[],"lastName":"Doe","postalCode":"90001","state":"New York","tags":["tag1","tag2"],"trackingConsents":"trackingConsents_example"}}}}}},"/contacts/tags":{"post":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_contacts-tags","api_endpoint":"https://api.omnisend.com/api/contacts/tags"},"summary":"Batch add tags","description":"Batch add tags — Adds the specified tags to contacts selected by contact IDs, emails, phone numbers or a segment. At least one of contactIDs, emails, phones or segmentID is required. Selectors can be combined and are applied additively — the union of all matched contacts is tagged: every contact in contactIDs, every contact matched by an address in emails, every contact matched by a number in phones and every member of segmentID. A contact matched by more than one selector is tagged once. Emails","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"contactIDs":{"type":"array","description":"Contact IDs to add tags to","items":{"type":"string"}},"emails":{"type":"array","description":"Emails of contacts to add tags to","items":{"type":"string"}},"phones":{"type":"array","description":"Phone numbers of contacts to add tags to, in E.164 format","items":{"type":"string"}},"segmentID":{"type":"string","description":"Segment ID whose contacts get the tags"},"tags":{"type":"array","description":"Tags to add","required":true,"items":{"type":"string"}}}},"example":{"contactIDs":["60a6170920d91c215e949b5c"],"emails":["contact@omnisend.com"],"phones":["+1234567890"],"segmentID":"60a6170920d91c215e949b5c","tags":["tag1","tag2"]}}}}},"delete":{"tags":["Contacts"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/delete_contacts-tags","api_endpoint":"https://api.omnisend.com/api/contacts/tags"},"summary":"Batch remove tags","description":"Batch remove tags — Removes the specified tags from contacts selected by contact IDs, emails, phone numbers or a segment. At least one of contactIDs, emails, phones or segmentID is required. Selectors can be combined and are applied additively — the tags are removed from the union of all matched contacts: every contact in contactIDs, every contact matched by an address in emails, every contact matched by a number in phones and every member of segmentID. A contact matched by more than one selecto","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"contactIDs":{"type":"array","description":"Contact IDs to remove tags from","items":{"type":"string"}},"emails":{"type":"array","description":"Emails of contacts to remove tags from","items":{"type":"string"}},"phones":{"type":"array","description":"Phone numbers of contacts to remove tags from, in E.164 format","items":{"type":"string"}},"segmentID":{"type":"string","description":"Segment ID whose contacts lose the tags"},"tags":{"type":"array","description":"Tags to remove","required":true,"items":{"type":"string"}}}},"example":{"contactIDs":["60a6170920d91c215e949b5c"],"emails":["contact@omnisend.com"],"phones":["+1234567890"],"segmentID":"60a6170920d91c215e949b5c","tags":["tag1","tag2"]}}}}}},"/contacts/{id}":{"get":{"tags":["Contacts"],"parameters":[{"name":"id","in":"path","description":"Contact ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_contacts-id","api_endpoint":"https://api.omnisend.com/api/contacts/{id}"},"summary":"Get contact","description":"Get contact — Returns the contact with the specified ID. Scopes: contacts.read Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}]},"patch":{"tags":["Contacts"],"parameters":[{"name":"id","in":"path","description":"Contact ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/patch_contacts-id","api_endpoint":"https://api.omnisend.com/api/contacts/{id}"},"summary":"Update contact by ID","description":"Update contact by ID — Updates the contact with the specified ID. Scopes: contacts.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"address":{"type":"string","description":"Street, house number, apartment number."},"birthdate":{"type":"string","description":"Contact birthdate in YYYY-MM-DD format"},"city":{"type":"string","description":"City"},"country":{"type":"string","description":"Country name. Used to derive ISO country code when countryCode is not provided"},"countryCode":{"type":"string","description":"ISO 3166-1 alpha-2 country code. Takes priority over country when both are provided"},"createdAt":{"type":"string","description":"Contact creation timestamp. If provided, stored as \"externalCreated\" custom property"},"customProperties":{"type":"object","description":"You can add your own custom properties. Read more in https://api-docs.omnisend.com/reference/contactscustom-properties (free-form object; the API accepts arbitrary key-value pairs)","properties":{}},"firstName":{"type":"string","description":"Contact first name"},"gender":{"type":"string","description":"Contact gender. m - male, f - female","enum":["m","f"]},"identifiers":{"type":"array","description":"Contact identifiers (email and/or phone)","items":{"type":"object","properties":{"type":{"type":"string","description":"type (body parameter)","required":true,"enum":["email","phone"]},"channels":{"type":"object","description":"channels (body parameter) (free-form object; the API accepts arbitrary key-value pairs)"},"consent":{"type":"string","description":"consent (body parameter)"},"id":{"type":"string","description":"id (body parameter)","required":true},"sendWelcomeMessage":{"type":"boolean","description":"sendWelcomeMessage (body parameter)","enum":[true,false]},"source":{"type":"string","description":"source (body parameter)"}}}},"lastName":{"type":"string","description":"Contact last name"},"postalCode":{"type":"string","description":"Postal or zip code"},"state":{"type":"string","description":"State or region"},"tags":{"type":"array","description":"Labels assigned to the contact. When creating a contact, it is strongly advised to include a source tag, e.g. \"source: shopify\".","items":{"type":"string"}},"trackingConsents":{"type":"string","description":"Contact-level tracking consents"}}},"example":{"address":"1234 Main St","birthdate":"1990-01-01","city":"Los Angeles","country":"United States","countryCode":"US","createdAt":"2024-01-01T00:00:00Z","customProperties":{},"firstName":"John","gender":"m","identifiers":[],"lastName":"Doe","postalCode":"90001","state":"New York","tags":["tag1","tag2"],"trackingConsents":"trackingConsents_example"}}}}}},"/email-content/{id}/render":{"post":{"tags":["Email Content"],"parameters":[{"name":"id","in":"path","description":"Content ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_email-content-id-render","api_endpoint":"https://api.omnisend.com/api/email-content/{id}/render"},"summary":"Render email content","description":"Render email content — With this endpoint you can render email content to HTML by ID. The content is rendered with an empty data context (no contact, no marketing activity). Scopes: email-templates.write Rate Limiting: This endpoint is rate limited to 40 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/email-templates":{"get":{"tags":["Email Templates"],"parameters":[{"name":"after","in":"query","description":"Cursor for next page (base64-encoded, from previous response)","required":false,"schema":{"type":"string","example":""}},{"name":"before","in":"query","description":"Cursor for previous page (base64-encoded, from previous response)","required":false,"schema":{"type":"string","example":""}},{"name":"direction","in":"query","description":"Sort direction (asc, desc; default desc)","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["asc","desc"]}}},{"name":"limit","in":"query","description":"Number of items per page (1-100, default 50)","required":false,"schema":{"type":"number","example":""}},{"name":"nameContains","in":"query","description":"Filter templates by name (case-insensitive partial match, max 200 characters)","required":false,"schema":{"type":"string","example":""}},{"name":"sort","in":"query","description":"Sort field (createdAt, name; default createdAt)","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["createdAt","name"]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_email-templates","api_endpoint":"https://api.omnisend.com/api/email-templates"},"summary":"Get email templates","description":"Get email templates — With this endpoint you can get a paginated list of email templates. Sorting: Use sort and direction to control the order of results. Supported sort fields: createdAt (default), name. Supported directions: asc, desc (default). Filtering: Use nameContains to filter templates by name (case-insensitive partial match, max 200 characters) Pagination: This endpoint uses cursor-based pagination for efficient traversal of large datasets. - Use the paging.cursors.after value from the","security":[{"bearerAuth":[]}]}},"/email-templates/{id}":{"delete":{"tags":["Email Templates"],"parameters":[{"name":"id","in":"path","description":"Email Template ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/delete_email-templates-id","api_endpoint":"https://api.omnisend.com/api/email-templates/{id}"},"summary":"Delete email template","description":"Delete email template — With this endpoint you can delete email template by ID. Scopes: email-templates.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/email-templates/{id}/render":{"post":{"tags":["Email Templates"],"parameters":[{"name":"id","in":"path","description":"Email Template ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_email-templates-id-render","api_endpoint":"https://api.omnisend.com/api/email-templates/{id}/render"},"summary":"Render email template","description":"Render email template — With this endpoint you can render an email template by ID and get the full HTML body for preview purposes. Scopes: email-templates.write Rate Limiting: This endpoint is rate limited to 40 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/email-universal-layouts/{id}":{"delete":{"tags":["Email Universal Layouts"],"parameters":[{"name":"id","in":"path","description":"Universal Layout ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/delete_email-universal-layouts-id","api_endpoint":"https://api.omnisend.com/api/email-universal-layouts/{id}"},"summary":"Delete universal layout","description":"Delete universal layout — With this endpoint you can delete a universal layout by ID. Scopes: email-templates.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/event-metadata":{"post":{"tags":["Event Metadata"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_event_metadata","api_endpoint":"https://api.omnisend.com/api/event-metadata"},"summary":"Create custom event metadata","description":"Create custom event metadata — Declares a new brand-custom event schema. The event identity is the combination of name and origin; displayName and at least one top-level property are required. Optional metadata fields must be omitted rather than sent as null. The created event is returned with every node flagged explicitlyDefined. Scopes: events.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"displayName":{"type":"string","description":"Human-readable label. Required on POST; omit on PUT to keep the stored value."},"name":{"type":"string","description":"Machine-readable event name","required":true},"origin":{"type":"string","description":"Single origin the schema belongs to","required":true},"properties":{"type":"object","description":"Property tree keyed by property name. Required with at least one key on POST; on PUT only the keys present are merged. (free-form object; the API accepts arbitrary key-value pairs)","properties":{}}}},"example":{"displayName":"Loyalty Points Earned","name":"loyalty points earned","origin":"api","properties":{}}}}}},"put":{"tags":["Event Metadata"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/put_event_metadata","api_endpoint":"https://api.omnisend.com/api/event-metadata"},"summary":"Update custom event metadata","description":"Update custom event metadata — Merges changes into an existing brand-custom event, identified by name and origin. Only supplied fields are applied: omitted metadata and omitted properties are preserved, and no property is deleted. The type of an already explicitly-defined property cannot change. Optional metadata fields must be omitted rather than sent as null. The merged event is returned. Scopes: events.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"displayName":{"type":"string","description":"Human-readable label. Required on POST; omit on PUT to keep the stored value."},"name":{"type":"string","description":"Machine-readable event name","required":true},"origin":{"type":"string","description":"Single origin the schema belongs to","required":true},"properties":{"type":"object","description":"Property tree keyed by property name. Required with at least one key on POST; on PUT only the keys present are merged. (free-form object; the API accepts arbitrary key-value pairs)","properties":{}}}},"example":{"displayName":"Loyalty Points Earned","name":"loyalty points earned","origin":"api","properties":{}}}}}}},"/event-metadata/query":{"post":{"tags":["Event Metadata"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_event_metadata_query","api_endpoint":"https://api.omnisend.com/api/event-metadata/query"},"summary":"Query events metadata","description":"Query events metadata — Returns event metadata entries for the given category, optionally filtered by event names and/or origins. Supported categories: automations, events, segments API version scoping: The events a category exposes depend on the requested Omnisend-Version; a date between releases resolves to the nearest earlier supported version. Brand-custom events are not version-scoped. Event name filtering: When events are provided, only events whose system name matches one of the given val","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"category":{"type":"string","description":"Event category, resolved against the requested Omnisend-Version","required":true,"enum":["automations","events","segments"]},"events":{"type":"array","description":"Optional list of event names to filter by","items":{"type":"string"}},"excludeCustomEvents":{"type":"boolean","description":"When true, brand-custom events are omitted. When false or omitted, custom events are included. Set this to true when only well-known events are needed, for a more predictable response size.","enum":[true,false]},"includeProperties":{"type":"boolean","description":"When true, response items include the nested property tree. When false or omitted, only event-level metadata is returned.","enum":[true,false]},"origins":{"type":"array","description":"Optional list of origins to filter by (OR-combined)","items":{"type":"string"}}}},"example":{"category":"automations","events":["placed order"],"excludeCustomEvents":true,"includeProperties":"","origins":["shopify","api"]}}}}}},"/events":{"post":{"tags":["Events"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_events","api_endpoint":"https://api.omnisend.com/api/events"},"summary":"Send Customer event","description":"Send Customer event — With this endpoint you can send customer events to Omnisend. Customer events are used to track customer behavior and trigger automations based on that behavior. You can either format and send custom customer events or use predefined events. Scopes: events.write Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"contact":{"type":"string","description":"Contact information, contact will be created or updated based on the data provided here."},"eventID":{"type":"string","description":"UUID of the event (v4, v5, v6, v7). Along with 'eventTime' used for historical event deduplication (not working on real-time events used for automations). If not provided, it will be generated automatically."},"eventName":{"type":"string","description":"Check event documentation to find what event names you need to specify for each event."},"eventTime":{"type":"string","description":"ISO 8601 timestamp. Accepts RFC 3339 (e.g. \"2021-07-01T00:00:00Z\") and the space-separated form \"YYYY-MM-DD HH:MM:SS±HH:MM\" (e.g. \"2021-07-01 00:00:00+02:00\"). Optional; defaults to current time."},"eventVersion":{"type":"string","description":"Required ONLY for recommended events. Check event documentation to find what version you need to specify for each event. For custom events you should leave it empty."},"origin":{"type":"string","description":"It should be based on the source of event API. If you are building platform or app integration it should have dedicated origin. Otherwise it should be \"api\"."},"properties":{"type":"object","description":"Event properties, you can check events guides section to see what recommended properties you should provide for each event. Not providing recommending properties can result some of the features not working properly. (free-form object; the API accepts arbitrary key-value pairs)","properties":{}}}},"example":{"contact":"contact_example","eventID":"9afca57b-d157-478b-adde-b9506322b16f","eventName":"my custom event","eventTime":"2021-07-01T00:00:00Z","eventVersion":"","origin":"api","properties":{}}}}}}},"/images":{"get":{"tags":["Images"],"parameters":[{"name":"after","in":"query","description":"Cursor for next page (base64-encoded, from previous response)","required":false,"schema":{"type":"string","example":""}},{"name":"before","in":"query","description":"Cursor for previous page (base64-encoded, from previous response)","required":false,"schema":{"type":"string","example":""}},{"name":"direction","in":"query","description":"Sort order","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["asc","desc"]}}},{"name":"limit","in":"query","description":"Number of images per page (1-250)","required":false,"schema":{"type":"number","example":""}},{"name":"nameContains","in":"query","description":"Filter images by name (partial match, case-insensitive, max 200 characters)","required":false,"schema":{"type":"string","example":""}},{"name":"sort","in":"query","description":"Field to sort by","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["createdAt","name"]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_images","api_endpoint":"https://api.omnisend.com/api/images"},"summary":"List images","description":"List images — With this endpoint you can get a paginated list of images for a brand. Sorting: Supported sort fields: createdAt (default), name Supported directions: asc, desc (default) Filtering: Use nameContains to filter images by name (case-insensitive, partial match) Pagination: This endpoint uses cursor-based pagination for efficient traversal of large datasets. - Use the cursors.after value from the response to get the next page - Use the cursors.before value from the response to get the p","security":[{"bearerAuth":[]}]},"post":{"tags":["Images"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_images","api_endpoint":"https://api.omnisend.com/api/images"},"summary":"Upload image by URL","description":"Upload image by URL — With this endpoint you can upload an image from a publicly accessible URL. If the name is not provided, the filename will be extracted from the URL. Scopes: images.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string","description":"Custom name for the image. If not provided, the filename will be extracted from the URL"},"url":{"type":"string","description":"URL of the image to upload. Must be publicly accessible (HTTPS, PNG, JPEG, GIF, or WebP, max 5MB)","required":true}}},"example":{"name":"my-image","url":"https://example.com/image.jpg"}}}}}},"/images/upload":{"post":{"tags":["Images"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_images-upload","api_endpoint":"https://api.omnisend.com/api/images/upload"},"summary":"Upload image file","description":"Upload image file — With this endpoint you can upload an image file directly from your computer. File Requirements: - Supported formats: JPEG, PNG, GIF, WebP - Maximum file size: 5MB Scopes: images.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":false,"content":{"multipart/form-data":{"schema":{"type":"object","required":[],"properties":{"file":{"type":"string","description":"Image file to upload (JPEG, PNG, GIF, or WebP, max 5MB)","required":true},"name":{"type":"string","description":"Custom name for the image. Defaults to the filename if not provided"}}},"example":{"file":"file_example","name":"name_example"}}}}}},"/images/{id}":{"get":{"tags":["Images"],"parameters":[{"name":"id","in":"path","description":"Image ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_images-id","api_endpoint":"https://api.omnisend.com/api/images/{id}"},"summary":"Get image","description":"Get image — With this endpoint you can get a single image by ID. Scopes: images.read Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}]},"delete":{"tags":["Images"],"parameters":[{"name":"id","in":"path","description":"Image ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/delete_images-id","api_endpoint":"https://api.omnisend.com/api/images/{id}"},"summary":"Delete image","description":"Delete image — With this endpoint you can delete an image by ID. Scopes: images.write Rate Limiting: This endpoint is rate limited to 400 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/product-categories":{"get":{"tags":["Product Categories"],"parameters":[{"name":"limit","in":"query","description":"Limit","required":false,"schema":{"type":"number","example":""}},{"name":"offset","in":"query","description":"Offset","required":false,"schema":{"type":"number","example":""}},{"name":"sort","in":"query","description":"Sort by","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["title","updatedAt","createdAt"]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_product-categories","api_endpoint":"https://api.omnisend.com/api/product-categories"},"summary":"List product categories","description":"List product categories — List products categories Scopes: products.read Rate Limiting: This endpoint is rate limited to 400 requests per minute. <brGuide: <a href=\"https://api-docs.omnisend.com/docs/how-to-sync-products-catalog-categories\" target=\"blank\"Sync products catalog, categories</a <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Check POSTMAN documentation</a","security":[{"bearerAuth":[]}]},"post":{"tags":["Product Categories"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_product-categories","api_endpoint":"https://api.omnisend.com/api/product-categories"},"summary":"Create product category","description":"Create product category — Creates a new product category Scopes: products.write Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Check POSTMAN documentation</a","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"categoryID":{"type":"string","description":"Product category unique identifier. Range: 1-100 characters","required":true},"title":{"type":"string","description":"Product category name. Max 255 characters","required":true}}},"example":{"categoryID":"C1234","title":"Beauty products"}}}}}},"/product-categories/{categoryID}":{"get":{"tags":["Product Categories"],"parameters":[{"name":"categoryID","in":"path","description":"Product category ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_product-categories-categoryid","api_endpoint":"https://api.omnisend.com/api/product-categories/{categoryID}"},"summary":"Get product category","description":"Get product category — Get product category by ID. Scopes: products.read Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Check POSTMAN documentation</a","security":[{"bearerAuth":[]}]},"patch":{"tags":["Product Categories"],"parameters":[{"name":"categoryID","in":"path","description":"Product category ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/patch_product-categories-categoryid","api_endpoint":"https://api.omnisend.com/api/product-categories/{categoryID}"},"summary":"Update product category","description":"Update product category — Update product category by ID. Scopes: products.write Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Check POSTMAN documentation</a","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"title":{"type":"string","description":"Product category name. Max 255 characters","required":true}}},"example":{"title":"Beauty products"}}}}},"delete":{"tags":["Product Categories"],"parameters":[{"name":"categoryID","in":"path","description":"Product category ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/delete_product-categories-categoryid","api_endpoint":"https://api.omnisend.com/api/product-categories/{categoryID}"},"summary":"Delete product category","description":"Delete product category — With this endpoint you can delete product category. Scopes: products.write Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Check POSTMAN documentation</a","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/products":{"get":{"tags":["Products"],"parameters":[{"name":"limit","in":"query","description":"Limit","required":false,"schema":{"type":"number","example":""}},{"name":"offset","in":"query","description":"Offset","required":false,"schema":{"type":"number","example":""}},{"name":"sort","in":"query","description":"Sort by","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["date","updatedAt","createdAt"]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_products","api_endpoint":"https://api.omnisend.com/api/products"},"summary":"List products","description":"List products — List products Scopes: products.read Rate Limiting: This endpoint is rate limited to 400 requests per minute. <brGuide: <a href=\"https://api-docs.omnisend.com/docs/how-to-sync-products-catalog-categories\" target=\"blank\"Sync products catalog, categories</a <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}]},"post":{"tags":["Products"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_products","api_endpoint":"https://api.omnisend.com/api/products"},"summary":"Create product","description":"Create product — Creates a new product Scopes: products.write Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"type":{"type":"string","description":"Product type can be used to categorize products."},"categoryIDs":{"type":"array","description":"categoryIDs (body parameter)","items":{"type":"string"}},"createdAt":{"type":"string","description":"createdAt (body parameter)"},"currency":{"type":"string","description":"currency (body parameter)","required":true},"defaultImageUrl":{"type":"string","description":"DefaultImageUrl is recommended if more than one image is needed. Other product images should be added to the Images array."},"description":{"type":"string","description":"Description is a short description of the product. It can be used in the email body."},"id":{"type":"string","description":"id (body parameter)","required":true},"images":{"type":"array","description":"images (body parameter)","items":{"type":"string"}},"status":{"type":"string","description":"Status can be inStock, outOfStock, or notAvailable. We recommended to keep it in sync with your shop product to ensure that Omnisend can avoid sending out-of-stock products to your customers.","required":true,"enum":["inStock","outOfStock","notAvailable"]},"tags":{"type":"array","description":"Tags can be used to categorize products.","items":{"type":"string"}},"title":{"type":"string","description":"title (body parameter)","required":true},"updatedAt":{"type":"string","description":"updatedAt (body parameter)"},"url":{"type":"string","description":"Url should point to the product page on the website.","required":true},"variants":{"type":"array","description":"Product variants are different versions of the same product. For example, a T-shirt can have different sizes and colors.","items":{"type":"object","properties":{"defaultImageUrl":{"type":"string","description":"defaultImageUrl (body parameter)"},"description":{"type":"string","description":"description (body parameter)"},"id":{"type":"string","description":"id (body parameter)","required":true},"images":{"type":"array","description":"images (body parameter)"},"price":{"type":"number","description":"price (body parameter)","required":true},"sku":{"type":"string","description":"sku (body parameter)"},"status":{"type":"string","description":"status (body parameter)","enum":["inStock","outOfStock","notAvailable"]},"strikeThroughPrice":{"type":"number","description":"strikeThroughPrice (body parameter)"},"title":{"type":"string","description":"title (body parameter)","required":true},"url":{"type":"string","description":"url (body parameter)","required":true}}}},"vendor":{"type":"string","description":"Vendor is the manufacturer or the brand of the product."}}},"example":{"type":"Super Product","categoryIDs":["1234567890","99934567890"],"createdAt":"2021-01-01T00:00:00Z","currency":"USD","defaultImageUrl":"https://example.com/image.jpg","description":"My product description","id":"1234567890","images":["https://example.com/image.jpg","https://example.com/image2.jpg"],"status":"inStock","tags":["tag1","tag2","tag3"],"title":"My Product","updatedAt":"2021-01-01T00:00:00Z","url":"https://example.com/product","variants":[],"vendor":"My Vendor"}}}}}},"/products/{productID}":{"get":{"tags":["Products"],"parameters":[{"name":"productID","in":"path","description":"Product ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_products-productid","api_endpoint":"https://api.omnisend.com/api/products/{productID}"},"summary":"Get product","description":"Get product — Get product by ID Scopes: products.read Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}]},"put":{"tags":["Products"],"parameters":[{"name":"productID","in":"path","description":"Product ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/put_products-productid","api_endpoint":"https://api.omnisend.com/api/products/{productID}"},"summary":"Replace product","description":"Replace product — Replace product by ID Scopes: products.write Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"type":{"type":"string","description":"Product type can be used to categorize products."},"categoryIDs":{"type":"array","description":"categoryIDs (body parameter)","items":{"type":"string"}},"createdAt":{"type":"string","description":"createdAt (body parameter)"},"currency":{"type":"string","description":"currency (body parameter)","required":true},"defaultImageUrl":{"type":"string","description":"DefaultImageUrl is recommended if more than one image is needed. Other product images should be added to the Images array."},"description":{"type":"string","description":"Description is a short description of the product. It can be used in the email body."},"id":{"type":"string","description":"id (body parameter)","required":true},"images":{"type":"array","description":"images (body parameter)","items":{"type":"string"}},"status":{"type":"string","description":"Status can be inStock, outOfStock, or notAvailable. We recommended to keep it in sync with your shop product to ensure that Omnisend can avoid sending out-of-stock products to your customers.","required":true,"enum":["inStock","outOfStock","notAvailable"]},"tags":{"type":"array","description":"Tags can be used to categorize products.","items":{"type":"string"}},"title":{"type":"string","description":"title (body parameter)","required":true},"updatedAt":{"type":"string","description":"updatedAt (body parameter)"},"url":{"type":"string","description":"Url should point to the product page on the website.","required":true},"variants":{"type":"array","description":"Product variants are different versions of the same product. For example, a T-shirt can have different sizes and colors.","items":{"type":"object","properties":{"defaultImageUrl":{"type":"string","description":"defaultImageUrl (body parameter)"},"description":{"type":"string","description":"description (body parameter)"},"id":{"type":"string","description":"id (body parameter)","required":true},"images":{"type":"array","description":"images (body parameter)"},"price":{"type":"number","description":"price (body parameter)","required":true},"sku":{"type":"string","description":"sku (body parameter)"},"status":{"type":"string","description":"status (body parameter)","enum":["inStock","outOfStock","notAvailable"]},"strikeThroughPrice":{"type":"number","description":"strikeThroughPrice (body parameter)"},"title":{"type":"string","description":"title (body parameter)","required":true},"url":{"type":"string","description":"url (body parameter)","required":true}}}},"vendor":{"type":"string","description":"Vendor is the manufacturer or the brand of the product."}}},"example":{"type":"Super Product","categoryIDs":["1234567890","99934567890"],"createdAt":"2021-01-01T00:00:00Z","currency":"USD","defaultImageUrl":"https://example.com/image.jpg","description":"My product description","id":"1234567890","images":["https://example.com/image.jpg","https://example.com/image2.jpg"],"status":"inStock","tags":["tag1","tag2","tag3"],"title":"My Product","updatedAt":"2021-01-01T00:00:00Z","url":"https://example.com/product","variants":[],"vendor":"My Vendor"}}}}},"delete":{"tags":["Products"],"parameters":[{"name":"productID","in":"path","description":"Product ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/delete_products-productid","api_endpoint":"https://api.omnisend.com/api/products/{productID}"},"summary":"Delete product","description":"Delete product — Delete product by ID Scopes: products.write Rate Limiting: This endpoint is rate limited to 400 requests per minute. <br<a href=\"https://www.postman.com/omnisend-api/workspace/omnisend/overview\" target=\"blank\"Open Postman collection</a","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/analytics/reports":{"post":{"tags":["Reports"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_analytics-reports","api_endpoint":"https://api.omnisend.com/api/analytics/reports"},"summary":"Generate report","description":"Generate report — Returns aggregated marketing analytics grouped by message send date. Covers delivery, engagement, and revenue attribution metrics for campaigns and automations. Supports optional dimensions (timestamp, channel, activity), filters, and up to 4 queries per request. Scopes: analytics.read Rate Limiting: This endpoint is rate limited to 10 requests per minute and 55 requests per 24 hours. Rate limits apply per brand. See Rate limits.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"queries":{"type":"array","description":"queries (body parameter)","items":{"type":"object","properties":{"alias":{"type":"string","description":"alias (body parameter)"},"dateRange":{"type":"object","description":"dateRange (body parameter)"},"dimensions":{"type":"array","description":"dimensions (body parameter)"},"filters":{"type":"array","description":"filters (body parameter)"},"metrics":{"type":"array","description":"metrics (body parameter)"}}}}}},"example":{"queries":[]}}}}}},"/segments":{"get":{"tags":["Segments"],"parameters":[{"name":"after","in":"query","description":"Cursor for next page (base64-encoded, obtained from previous response)","required":false,"schema":{"type":"string","example":""}},{"name":"before","in":"query","description":"Cursor for previous page (base64-encoded, obtained from previous response)","required":false,"schema":{"type":"string","example":""}},{"name":"direction","in":"query","description":"Sort direction (only needed on first request)","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["asc","desc"]}}},{"name":"limit","in":"query","description":"Page size (1-50)","required":false,"schema":{"type":"number","example":""}},{"name":"sort","in":"query","description":"Sort field (only needed on first request)","required":false,"schema":{"type":"string","example":"","items":{"type":"string","enum":["createdAt","name"]}}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_segments","api_endpoint":"https://api.omnisend.com/api/segments"},"summary":"List segments","description":"List segments — List segments with sorting and cursor-based pagination support. Scopes: segments.read Pagination: This endpoint uses cursor-based pagination. Use the after cursor from the response to get the next page, or the before cursor to get the previous page. Do not use both after and before parameters simultaneously. Sorting: - Only single-field sorting is supported. You cannot sort by multiple fields. - Available sort fields: createdAt (default), name. - When sorting by name, segments ar","security":[{"bearerAuth":[]}]}},"/segments/{segmentID}":{"get":{"tags":["Segments"],"parameters":[{"name":"segmentID","in":"path","description":"Segment ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_segments-segmentid","api_endpoint":"https://api.omnisend.com/api/segments/{segmentID}"},"summary":"Get segment","description":"Get segment — Returns a segment by its unique identifier. Scopes: segments.read Rate Limiting: This endpoint is rate limited to 100 requests per minute.","security":[{"bearerAuth":[]}]},"put":{"tags":["Segments"],"parameters":[{"name":"segmentID","in":"path","description":"Segment ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/put_segments-segmentid","api_endpoint":"https://api.omnisend.com/api/segments/{segmentID}"},"summary":"Update segment","description":"Update segment — Updates an existing segment by ID. The segment must not be in a building state to be updated. If the segment is currently being built, a 409 Conflict error is returned. Scopes: segments.write Rate Limiting: This endpoint is rate limited to 15 requests per minute. The request body structure (name and conditionGroups) is identical to Create segment. See the Create segment endpoint for detailed examples of condition groups, filters, and advanced segmentation patterns.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"conditionGroups":{"type":"array","description":"Condition groups defining the segment rules","required":true,"items":{"type":"object","properties":{"conditions":{"type":"array","description":"conditions (body parameter)"}}}},"name":{"type":"string","description":"Name of the segment","required":true}}},"example":{"conditionGroups":[],"name":"My Segment"}}}}},"delete":{"tags":["Segments"],"parameters":[{"name":"segmentID","in":"path","description":"Segment ID","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/delete_segments-segmentid","api_endpoint":"https://api.omnisend.com/api/segments/{segmentID}"},"summary":"Delete segment","description":"Delete segment — Permanently deletes a segment by its unique identifier. The segment must not be in a building state to be deleted. If the segment is currently being built, a 409 Conflict error is returned. Scopes: segments.write Rate Limiting: This endpoint is rate limited to 100 requests per minute.","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}},"example":{}}}}}},"/segments/{segmentID}/statistics":{"get":{"tags":["Segments"],"parameters":[{"name":"segmentID","in":"path","description":"Segment ID (24 character hexadecimal)","required":true,"schema":{"type":"string","example":""}}],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/get_segments-segmentid-statistics","api_endpoint":"https://api.omnisend.com/api/segments/{segmentID}/statistics"},"summary":"Get segment statistics","description":"Get segment statistics — Returns statistics for a segment, including the total number of matching contacts. Scopes: segments.read Rate Limiting: This endpoint is rate limited to 100 requests per minute.","security":[{"bearerAuth":[]}]}},"/analytics/statistics":{"post":{"tags":["Statistics"],"parameters":[],"responses":{"401":{"description":"Bearer token required (Authorization header)","content":{"application/json":{}}}},"externalDocs":{"api_ref":"https://api-docs.omnisend.com/reference/post_analytics-statistics","api_endpoint":"https://api.omnisend.com/api/analytics/statistics"},"summary":"Generate report (Statistics)","description":"Generate report — Returns aggregated marketing analytics grouped by event date (when opens, clicks, orders actually occurred). Covers delivery, engagement, revenue attribution, and audience growth metrics. Requires a timestamp dimension. Supports a rich set of dimensions (client, click, subscription, deliverability) and up to 4 queries per request. Scopes: analytics.read Rate Limiting: This endpoint is rate limited to 10 requests per minute and 55 requests per 24 hours. Rate limits apply per bra","security":[{"bearerAuth":[]}],"requestBody":{"description":"","required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"queries":{"type":"array","description":"queries (body parameter)","items":{"type":"object","properties":{"alias":{"type":"string","description":"alias (body parameter)"},"dateRange":{"type":"object","description":"dateRange (body parameter)"},"dimensions":{"type":"array","description":"dimensions (body parameter)"},"filters":{"type":"array","description":"filters (body parameter)"},"metrics":{"type":"array","description":"metrics (body parameter)"}}}}}},"example":{"queries":[]}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}}},"security":[{"bearerAuth":[]}]}