Email on Acid Email Testing API

Create and manage email rendering tests

OpenAPI Specification

email-on-acid-email-testing-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Email on Acid Authentication Email Testing API
  description: 'REST API for automating email testing across 100+ email clients and devices, including email rendering previews, spam filter testing, seed list management, and accessibility checks. Now branded as Mailgun Inspect. Supports sandbox mode for development and test result storage for 90 days.

    '
  version: '5.0'
  contact:
    name: Email on Acid Support
    url: https://www.emailonacid.com/contact/
  license:
    name: Proprietary
    url: https://www.emailonacid.com/terms/
servers:
- url: https://api.emailonacid.com/v5
  description: Email on Acid API v5
security:
- basicAuth: []
tags:
- name: Email Testing
  description: Create and manage email rendering tests
paths:
  /email/tests:
    get:
      summary: Get all email tests
      operationId: getEmailTests
      tags:
      - Email Testing
      description: 'Retrieve a list of all email tests. Supports filtering and pagination via query parameters.

        '
      parameters:
      - $ref: '#/components/parameters/fromDate'
      - $ref: '#/components/parameters/toDate'
      - $ref: '#/components/parameters/subjectFilter'
      - $ref: '#/components/parameters/resultsPerPage'
      - $ref: '#/components/parameters/page'
      responses:
        '200':
          description: List of email tests
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TestSummary'
        '401':
          $ref: '#/components/responses/AccessDenied'
    post:
      summary: Create email test
      operationId: createEmailTest
      tags:
      - Email Testing
      description: 'Submit an email for testing across one or more email clients and devices. Either `html` or `url` must be provided. Tests are retained for 90 days.

        '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateEmailTestRequest'
            example:
              subject: My Email Subject
              html: <html><body><p>Hello World</p></body></html>
              transfer_encoding: 8bit
              charset: utf-8
              clients:
              - outlook16
              - gmail_chr26_win
              - iphone6p_9
              image_blocking: false
      responses:
        '200':
          description: Email test created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateEmailTestResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '403':
          $ref: '#/components/responses/PermissionError'
  /email/tests/{testId}:
    get:
      summary: Get email test info
      operationId: getEmailTest
      tags:
      - Email Testing
      description: Retrieve information and current processing status for a specific email test.
      parameters:
      - $ref: '#/components/parameters/testId'
      responses:
        '200':
          description: Email test details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailTestInfo'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '404':
          $ref: '#/components/responses/InvalidTestID'
    delete:
      summary: Delete email test
      operationId: deleteEmailTest
      tags:
      - Email Testing
      description: Permanently delete a specific email test and all associated results.
      parameters:
      - $ref: '#/components/parameters/testId'
      responses:
        '200':
          description: Test deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '404':
          $ref: '#/components/responses/InvalidTestID'
  /email/tests/{testId}/results:
    get:
      summary: Get all test results
      operationId: getEmailTestResults
      tags:
      - Email Testing
      description: 'Retrieve screenshot rendering results for all clients in an email test. Screenshot URLs support Basic Authentication (permanent, 90-day life) or Presigned URLs (24-hour time-limited).

        '
      parameters:
      - $ref: '#/components/parameters/testId'
      responses:
        '200':
          description: Map of client results keyed by client ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailTestResultsMap'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '404':
          $ref: '#/components/responses/InvalidTestID'
  /email/tests/{testId}/results/{clientId}:
    get:
      summary: Get single client test result
      operationId: getEmailTestResultByClient
      tags:
      - Email Testing
      description: Retrieve rendering results for a specific client within an email test.
      parameters:
      - $ref: '#/components/parameters/testId'
      - name: clientId
        in: path
        required: true
        schema:
          type: string
        description: The client identifier (e.g. outlook16, gmail_chr26_win)
      responses:
        '200':
          description: Client result details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailClientResult'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '404':
          $ref: '#/components/responses/InvalidTestID'
  /email/tests/{testId}/results/reprocess:
    put:
      summary: Reprocess screenshots
      operationId: reprocessScreenshots
      tags:
      - Email Testing
      description: 'Request re-rendering of screenshots for specific clients within a test. Each client has a limited number of reprocess attempts.

        '
      parameters:
      - $ref: '#/components/parameters/testId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ClientList'
            example:
              clients:
              - iphone6p_9
              - gmail_chr26_win
              - outlook16
      responses:
        '200':
          description: Reprocess results per client
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReprocessResultsMap'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '404':
          $ref: '#/components/responses/InvalidTestID'
  /email/tests/{testId}/content:
    get:
      summary: Get test HTML content
      operationId: getEmailTestContent
      tags:
      - Email Testing
      description: Retrieve the original HTML content submitted for a specific email test.
      parameters:
      - $ref: '#/components/parameters/testId'
      responses:
        '200':
          description: Original HTML content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailContent'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '404':
          $ref: '#/components/responses/InvalidTestID'
  /email/tests/{testId}/content/inlinecss:
    get:
      summary: Get HTML with inlined CSS
      operationId: getEmailTestContentInlineCss
      tags:
      - Email Testing
      description: Retrieve the email HTML content with all external stylesheets inlined.
      parameters:
      - $ref: '#/components/parameters/testId'
      responses:
        '200':
          description: HTML with inlined stylesheets
          content:
            text/html:
              schema:
                type: string
        '401':
          $ref: '#/components/responses/AccessDenied'
        '404':
          $ref: '#/components/responses/InvalidTestID'
  /email/tests/{testId}/content/textonly:
    get:
      summary: Get plain text content
      operationId: getEmailTestContentTextOnly
      tags:
      - Email Testing
      description: Retrieve a plain text approximation of the email HTML content.
      parameters:
      - $ref: '#/components/parameters/testId'
      responses:
        '200':
          description: Plain text content
          content:
            text/plain:
              schema:
                type: string
        '401':
          $ref: '#/components/responses/AccessDenied'
        '404':
          $ref: '#/components/responses/InvalidTestID'
  /email/tests/{testId}/spam/results:
    get:
      summary: Get spam results for email test
      operationId: getEmailTestSpamResults
      tags:
      - Email Testing
      description: Retrieve spam filter analysis results for an email test that included spam testing.
      parameters:
      - $ref: '#/components/parameters/testId'
      responses:
        '200':
          description: List of spam filter results per client
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SpamResult'
        '401':
          $ref: '#/components/responses/AccessDenied'
        '404':
          $ref: '#/components/responses/InvalidTestID'
  /email/tests/{testId}/spam/seedlist:
    get:
      summary: Get spam seed list for email test
      operationId: getEmailTestSpamSeedList
      tags:
      - Email Testing
      description: Retrieve the seed list email addresses for a seed-method spam test.
      parameters:
      - $ref: '#/components/parameters/testId'
      responses:
        '200':
          description: List of seed list email addresses
          content:
            application/json:
              schema:
                type: array
                items:
                  type: string
                  format: email
        '401':
          $ref: '#/components/responses/AccessDenied'
        '404':
          $ref: '#/components/responses/InvalidTestID'
components:
  schemas:
    SpamConfig:
      type: object
      description: Spam test configuration embedded in an email test
      properties:
        test_method:
          type: string
          enum:
          - eoa
          - smtp
          - seed
          default: eoa
          description: Spam testing method
        from_address:
          type: string
          format: email
          description: Sender email address for spam testing
        key:
          type: string
          description: Pre-reserved seedlist key (optional for seed method)
        smtp_info:
          $ref: '#/components/schemas/SmtpInfo'
    EmailTestInfo:
      type: object
      properties:
        subject:
          type: string
          description: Email subject line
        date:
          type: integer
          format: int64
          description: Unix timestamp of test creation
        completed:
          type: array
          items:
            type: string
          description: Client IDs with completed rendering
        processing:
          type: array
          items:
            type: string
          description: Client IDs currently being processed
        bounced:
          type: array
          items:
            type: string
          description: Client IDs that encountered errors
    EmailClientResult:
      type: object
      properties:
        id:
          type: string
          description: Client identifier
        display_name:
          type: string
          description: Human-readable client display name
        client:
          type: string
          description: Email client name
        os:
          type: string
          description: Operating system
        category:
          type: string
          enum:
          - Application
          - Mobile
          - Web
        screenshots:
          $ref: '#/components/schemas/ScreenshotUrls'
        thumbnail:
          type: string
          format: uri
          description: Thumbnail screenshot URL
        full_thumbnail:
          type: string
          format: uri
          description: Full-size thumbnail screenshot URL
        status:
          type: string
          enum:
          - Complete
          - Processing
          - Bounced
          - Pending
          description: Current rendering status
        status_details:
          $ref: '#/components/schemas/StatusDetails'
    SuccessResponse:
      type: object
      properties:
        success:
          type: boolean
          example: true
    ReprocessResultsMap:
      type: object
      description: Map of client ID to reprocess result
      additionalProperties:
        $ref: '#/components/schemas/ReprocessResult'
    CreateEmailTestRequest:
      type: object
      required:
      - subject
      properties:
        subject:
          type: string
          description: Email subject line
        html:
          type: string
          description: HTML email content (required if url not provided)
        url:
          type: string
          format: uri
          description: URL to email content (required if html not provided)
        transfer_encoding:
          type: string
          enum:
          - base64
          - quoted-printable
          - 7bit
          - 8bit
          default: 8bit
          description: Content transfer encoding
        charset:
          type: string
          default: utf-8
          description: Character encoding
        free_test:
          type: boolean
          default: false
          description: Use limited free test features
        sandbox:
          type: boolean
          default: false
          description: Sandbox mode - no content created
        reference_id:
          type: string
          description: Enterprise tracking reference identifier
        customer_id:
          type: string
          description: Enterprise customer identifier (required for enterprise packages)
        headers:
          type: object
          additionalProperties:
            type: string
          description: Custom X-Header pairs (enterprise only)
        clients:
          type: array
          items:
            type: string
          description: Email client IDs to test (defaults to account default list)
        image_blocking:
          type: boolean
          default: false
          description: Block images in supported clients
        spam:
          $ref: '#/components/schemas/SpamConfig'
    EmailContent:
      type: object
      properties:
        content:
          type: string
          description: Original HTML content of the email test
    CreateEmailTestResponse:
      type: object
      properties:
        id:
          type: string
          description: Unique test identifier
        reference_id:
          type: string
          description: Enterprise reference identifier
        customer_id:
          type: string
          description: Enterprise customer identifier
        spam:
          type: object
          properties:
            key:
              type: string
              description: Unique spam test identifier
            address_list:
              type: array
              items:
                type: string
                format: email
              description: Seed list addresses to send email to
    EmailTestResultsMap:
      type: object
      description: Map of client ID to rendering result
      additionalProperties:
        $ref: '#/components/schemas/EmailClientResult'
    ClientList:
      type: object
      properties:
        clients:
          type: array
          items:
            type: string
          description: Array of email client IDs
          example:
          - outlook16
          - gmail_chr26_win
          - iphone6p_9
    TestSummary:
      type: object
      properties:
        id:
          type: string
          description: Unique test identifier
        date:
          type: integer
          format: int64
          description: Unix timestamp of test creation
        type:
          type: string
          enum:
          - email-test
          - spam-test
          description: Test type classification
        headers:
          type: object
          additionalProperties:
            type: string
          description: Custom X-headers associated with the test
    ReprocessResult:
      type: object
      properties:
        success:
          type: boolean
          description: Whether reprocess was initiated successfully
        remaining_reprocesses:
          type: integer
          description: Remaining reprocess attempts for this client
        regional:
          type: boolean
          description: Whether regional processing was used
    SpamResult:
      type: object
      properties:
        client:
          type: string
          description: Spam filter client name
        type:
          type: string
          enum:
          - b2c
          - b2b
          description: Spam client type (business-to-consumer or business-to-business)
        spam:
          type: integer
          nullable: true
          description: 'Spam verdict: 1 = marked as spam, 0 = neutral/no decision, -1 = not spam, null/empty = pending

            '
        details:
          type: string
          description: Additional spam filter analysis details
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            name:
              type: string
              description: Error type identifier
              enum:
              - AccessDenied
              - RateLimited
              - InvalidJSON
              - InvalidParameter
              - InvalidTestID
              - InvalidClient
              - PermissionError
              - TestLimitReached
            message:
              type: string
              description: Human-readable error description
    SmtpInfo:
      type: object
      description: SMTP configuration for smtp test method
      required:
      - host
      properties:
        host:
          type: string
          description: SMTP server hostname
        port:
          type: integer
          default: 25
          description: SMTP port number
        secure:
          type: string
          enum:
          - ssl
          - tls
          - ''
          default: ''
          description: Connection security type
        username:
          type: string
          description: SMTP authentication username
        password:
          type: string
          description: SMTP authentication password
    ScreenshotUrls:
      type: object
      properties:
        default:
          type: string
          format: uri
          description: Default screenshot URL
        no_images:
          type: string
          format: uri
          description: Screenshot with image blocking applied
    StatusDetails:
      type: object
      properties:
        submitted:
          type: integer
          format: int64
          description: Unix timestamp when test was submitted
        completed:
          type: integer
          format: int64
          description: Unix timestamp when test completed
        attempts:
          type: integer
          description: Number of processing attempts
  responses:
    PermissionError:
      description: Account plan does not permit this operation
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              name: PermissionError
              message: Your plan does not include this feature
    BadRequest:
      description: Invalid request parameters or JSON
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              name: InvalidJSON
              message: Malformed JSON in request body
    AccessDenied:
      description: Authentication failure
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              name: AccessDenied
              message: Invalid API credentials
    InvalidTestID:
      description: Test not found or not accessible
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              name: InvalidTestID
              message: Test not found or access denied
  parameters:
    resultsPerPage:
      name: results
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 200
        default: 50
      description: Number of results to return per page
    subjectFilter:
      name: subject
      in: query
      required: false
      schema:
        type: string
      description: Exact subject line match (case-insensitive)
    page:
      name: page
      in: query
      required: false
      schema:
        type: integer
        minimum: 1
        default: 1
      description: Page number for paginated results
    testId:
      name: testId
      in: path
      required: true
      schema:
        type: string
      description: Unique identifier for the test
    fromDate:
      name: from
      in: query
      required: false
      schema:
        type: string
      description: Start of date range (ISO date string, Unix timestamp, or relative term like "yesterday")
    toDate:
      name: to
      in: query
      required: false
      schema:
        type: string
      description: End of date range (ISO date string, Unix timestamp, or relative term like "yesterday")
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: 'HTTP Basic Authentication using `<api_key>:<account_password>` base64-encoded. Use "sandbox:sandbox" credentials for sandbox testing.

        '