Omnisend REST API

Omnisend's REST API for ecommerce email and SMS marketing automation. Manage contacts, events, products, product categories, segments, campaigns, batches, email templates, email content, email universal layouts, images, brands, and analytics reports. Authentication uses `X-API-KEY` header or OAuth 2.0 with resource-scoped permissions (`contacts.read`, `contacts.write`, `events.write`, `products.read`, `products.write`, `campaigns.read`, `campaigns.write`, `segments.read`, `segments.write`, `email-templates.read`, `email-templates.write`, `images.read`, `images.write`, `brands.read`, `brands.write`, `analytics.read`). Cursor-based pagination across list endpoints.

OpenAPI Specification

omnisend-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Omnisend REST API
  description: |
    Omnisend's REST API for managing ecommerce email and SMS marketing
    automation. Exposes contacts, events, products, product categories,
    segments, campaigns, batches, email templates, email content, email
    universal layouts, images, brands, and analytics reports. Authentication
    uses an API key passed via the `X-API-KEY` header, or OAuth 2.0 with
    scopes such as `contacts.read`, `contacts.write`, `campaigns.read`,
    `campaigns.write`, `analytics.read`, etc.
  version: "v5"
  contact:
    name: Omnisend
    url: https://api-docs.omnisend.com/
servers:
  - url: https://api.omnisend.com/v5
    description: Omnisend REST API v5
security:
  - ApiKeyAuth: []
  - OAuth2: []
tags:
  - name: Contacts
  - name: Events
  - name: Products
  - name: ProductCategories
  - name: Segments
  - name: Campaigns
  - name: Batches
  - name: EmailTemplates
  - name: EmailContent
  - name: EmailUniversalLayouts
  - name: Images
  - name: Brands
  - name: Analytics
paths:
  /contacts:
    get:
      tags: [Contacts]
      summary: List contacts
      responses:
        "200":
          description: Paginated list of contacts
    post:
      tags: [Contacts]
      summary: Create or update a contact
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Contact'
      responses:
        "200":
          description: Contact created or updated
    patch:
      tags: [Contacts]
      summary: Update contact by email
      responses:
        "200":
          description: Contact updated
  /contacts/{id}:
    get:
      tags: [Contacts]
      summary: Get a contact
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Contact
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
    patch:
      tags: [Contacts]
      summary: Update contact by id
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Contact updated
  /contacts-tags:
    post:
      tags: [Contacts]
      summary: Add tags to contacts
      responses:
        "200":
          description: Tags added
    delete:
      tags: [Contacts]
      summary: Remove tags from contacts
      responses:
        "200":
          description: Tags removed
  /events:
    post:
      tags: [Events]
      summary: Send a customer event
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        "202":
          description: Event accepted
  /products:
    get:
      tags: [Products]
      summary: List products
      responses:
        "200":
          description: List of products
    post:
      tags: [Products]
      summary: Create a product
      responses:
        "201":
          description: Product created
  /products/{productId}:
    get:
      tags: [Products]
      summary: Get a product
      parameters:
        - in: path
          name: productId
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Product
    put:
      tags: [Products]
      summary: Replace a product
      parameters:
        - in: path
          name: productId
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Product replaced
    delete:
      tags: [Products]
      summary: Delete a product
      parameters:
        - in: path
          name: productId
          required: true
          schema:
            type: string
      responses:
        "204":
          description: Product deleted
  /product-categories:
    get:
      tags: [ProductCategories]
      summary: List product categories
      responses:
        "200":
          description: List of categories
    post:
      tags: [ProductCategories]
      summary: Create a product category
      responses:
        "201":
          description: Category created
  /product-categories/{categoryId}:
    get:
      tags: [ProductCategories]
      summary: Get a product category
      parameters:
        - in: path
          name: categoryId
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Category
    patch:
      tags: [ProductCategories]
      summary: Update a product category
      parameters:
        - in: path
          name: categoryId
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Category updated
    delete:
      tags: [ProductCategories]
      summary: Delete a product category
      parameters:
        - in: path
          name: categoryId
          required: true
          schema:
            type: string
      responses:
        "204":
          description: Category deleted
  /segments:
    get:
      tags: [Segments]
      summary: List segments
      responses:
        "200":
          description: List of segments
    post:
      tags: [Segments]
      summary: Create a segment
      responses:
        "201":
          description: Segment created
  /segments/{segmentId}:
    get:
      tags: [Segments]
      summary: Get a segment
      parameters:
        - in: path
          name: segmentId
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Segment
    put:
      tags: [Segments]
      summary: Update a segment
      parameters:
        - in: path
          name: segmentId
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Segment updated
    delete:
      tags: [Segments]
      summary: Delete a segment
      parameters:
        - in: path
          name: segmentId
          required: true
          schema:
            type: string
      responses:
        "204":
          description: Segment deleted
  /segments/{segmentId}/statistics:
    get:
      tags: [Segments]
      summary: Get segment statistics
      parameters:
        - in: path
          name: segmentId
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Segment statistics
  /campaigns:
    get:
      tags: [Campaigns]
      summary: List campaigns
      responses:
        "200":
          description: List of campaigns
    post:
      tags: [Campaigns]
      summary: Create a campaign
      responses:
        "201":
          description: Campaign created
  /campaigns/{id}:
    get:
      tags: [Campaigns]
      summary: Get a campaign
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Campaign
    patch:
      tags: [Campaigns]
      summary: Update a campaign
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Campaign updated
    delete:
      tags: [Campaigns]
      summary: Delete a campaign
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "204":
          description: Campaign deleted
  /campaigns/{id}/send:
    post:
      tags: [Campaigns]
      summary: Send a campaign
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "202":
          description: Campaign send queued
  /campaigns/{id}/cancel:
    post:
      tags: [Campaigns]
      summary: Cancel a campaign send
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Campaign cancelled
  /campaigns/{id}/copy:
    post:
      tags: [Campaigns]
      summary: Copy a campaign
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "201":
          description: Campaign copied
  /batches:
    get:
      tags: [Batches]
      summary: List batches
      responses:
        "200":
          description: List of batch operations
    post:
      tags: [Batches]
      summary: Create a batch operation
      responses:
        "202":
          description: Batch accepted
  /batches/{batchId}:
    get:
      tags: [Batches]
      summary: Get a batch
      parameters:
        - in: path
          name: batchId
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Batch details
  /batches/{batchId}/items:
    get:
      tags: [Batches]
      summary: List items in a batch
      parameters:
        - in: path
          name: batchId
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Batch items
  /email-templates:
    get:
      tags: [EmailTemplates]
      summary: List email templates
      responses:
        "200":
          description: Templates
    post:
      tags: [EmailTemplates]
      summary: Create an email template
      responses:
        "201":
          description: Template created
  /email-templates/{id}:
    get:
      tags: [EmailTemplates]
      summary: Get an email template
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Template
    put:
      tags: [EmailTemplates]
      summary: Replace an email template
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Template replaced
    delete:
      tags: [EmailTemplates]
      summary: Delete an email template
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "204":
          description: Template deleted
  /email-templates/{id}/render:
    post:
      tags: [EmailTemplates]
      summary: Render an email template
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Rendered email
  /email-templates-import:
    post:
      tags: [EmailTemplates]
      summary: Import an email template from HTML
      responses:
        "201":
          description: Template imported
  /email-content/{id}:
    get:
      tags: [EmailContent]
      summary: Get email content
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Email content
    put:
      tags: [EmailContent]
      summary: Update email content
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Email content updated
  /email-content/{id}/render:
    post:
      tags: [EmailContent]
      summary: Render email content
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Rendered content
  /email-universal-layouts:
    get:
      tags: [EmailUniversalLayouts]
      summary: List universal layouts
      responses:
        "200":
          description: Layouts
    post:
      tags: [EmailUniversalLayouts]
      summary: Create a universal layout
      responses:
        "201":
          description: Layout created
  /email-universal-layouts/{id}:
    get:
      tags: [EmailUniversalLayouts]
      summary: Get a universal layout
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Layout
    put:
      tags: [EmailUniversalLayouts]
      summary: Update a universal layout
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Layout updated
    delete:
      tags: [EmailUniversalLayouts]
      summary: Delete a universal layout
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "204":
          description: Layout deleted
  /images:
    get:
      tags: [Images]
      summary: List images
      responses:
        "200":
          description: Images
    post:
      tags: [Images]
      summary: Upload an image by URL
      responses:
        "201":
          description: Image created
  /images-upload:
    post:
      tags: [Images]
      summary: Upload an image file
      responses:
        "201":
          description: Image uploaded
  /images/{id}:
    get:
      tags: [Images]
      summary: Get an image
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "200":
          description: Image
    delete:
      tags: [Images]
      summary: Delete an image
      parameters:
        - in: path
          name: id
          required: true
          schema:
            type: string
      responses:
        "204":
          description: Image deleted
  /brands/current:
    get:
      tags: [Brands]
      summary: Get current brand
      responses:
        "200":
          description: Brand
    post:
      tags: [Brands]
      summary: Connect a brand
      responses:
        "200":
          description: Brand connected
  /analytics-reports:
    post:
      tags: [Analytics]
      summary: Generate a marketing analytics report
      responses:
        "200":
          description: Report
  /analytics-statistics:
    post:
      tags: [Analytics]
      summary: Generate event-based statistics report
      responses:
        "200":
          description: Statistics report
components:
  schemas:
    Contact:
      type: object
      properties:
        contactID:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        status:
          type: string
          enum: [subscribed, unsubscribed, nonSubscribed]
        tags:
          type: array
          items:
            type: string
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY
    OAuth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://app.omnisend.com/oauth/authorize
          tokenUrl: https://api.omnisend.com/v5/oauth/token
          scopes:
            contacts.read: Read contacts
            contacts.write: Manage contacts
            campaigns.read: Read campaigns
            campaigns.write: Manage campaigns
            analytics.read: Read analytics