> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.mailercloud.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Start a placement test

> Sends a draft campaign to seed mailboxes at the chosen providers and reports where it lands (inbox, Gmail tabs, spam, missing). Each test uses one test from your Advanced Inbox Tracker allowance.

Only draft regular campaigns with a subject, sender and content can be tested. Only one test can run per campaign at a time. If the draft has not changed since its last test, set `confirm_unchanged` to `true` to spend another test.

Poll Get a placement test until `status` is no longer `running`; `eta_at` gives the expected finish time.



## OpenAPI

````yaml /openapi-v1.json post /v2/placement/tests
openapi: 3.1.0
info:
  title: Mailercloud Marketing API
  version: 1.0.0
  description: >-
    Campaigns, contacts, lists, segments, automations, and webhooks for the
    Mailercloud Marketing Platform.
servers:
  - url: https://cloudapi.mailercloud.com/v1
security:
  - apiKey: []
tags:
  - name: Campaigns
  - name: Contacts
  - name: Lists
  - name: Tags
  - name: Segments
  - name: Custom Properties
  - name: Senders
  - name: Domains
  - name: Templates
  - name: Automations
  - name: Webhooks
  - name: Webforms
  - name: Inbox Tracker
  - name: Account
paths:
  /v2/placement/tests:
    post:
      tags:
        - Inbox Tracker
      summary: Start a placement test
      description: >-
        Sends a draft campaign to seed mailboxes at the chosen providers and
        reports where it lands (inbox, Gmail tabs, spam, missing). Each test
        uses one test from your Advanced Inbox Tracker allowance.


        Only draft regular campaigns with a subject, sender and content can be
        tested. Only one test can run per campaign at a time. If the draft has
        not changed since its last test, set `confirm_unchanged` to `true` to
        spend another test.


        Poll Get a placement test until `status` is no longer `running`;
        `eta_at` gives the expected finish time.
      operationId: placement-start-test
      parameters:
        - name: Content-Type
          in: header
          required: true
          description: Request body type
          schema:
            type: string
            default: application/json
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - campaign_id
                - provider_ids
              properties:
                campaign_id:
                  type: string
                  description: Draft campaign id, as returned by the Campaigns API.
                provider_ids:
                  type: array
                  minItems: 1
                  maxItems: 100
                  items:
                    type: string
                  description: Provider ids from List placement providers.
                confirm_unchanged:
                  type: boolean
                  default: false
                  description: >-
                    Run again even though the draft has not changed since its
                    last test.
            examples:
              Example-1:
                value:
                  campaign_id: Hws
                  provider_ids:
                    - '1'
                    - '2'
      responses:
        '201':
          description: Test started.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      test_id:
                        type: string
                      status:
                        type: string
                        enum:
                          - running
                      started_at:
                        type: string
                        format: date-time
                      seeds_total:
                        type: integer
                      tests_left:
                        type: integer
                        description: Tests left in the current period after this one.
                      eta_at:
                        type:
                          - string
                          - 'null'
                        format: date-time
                        description: >-
                          Estimated finish time while the test is running;
                          `null` otherwise.
                      eta_seconds:
                        type:
                          - integer
                          - 'null'
                        description: >-
                          Estimated seconds from start to finish while running;
                          `null` otherwise.
        '400':
          description: Invalid body, or `provider_ids` empty, over 100 or unknown.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Human-readable message.
                  code:
                    type: string
                    enum:
                      - INVALID_INPUT
        '401':
          description: Missing or invalid API key.
        '403':
          description: >-
            The account has no active Advanced Inbox Tracker add-on on a paid
            plan.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Human-readable message.
                  code:
                    type: string
                    enum:
                      - ADDON_INACTIVE
        '404':
          description: Campaign not found for this account.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Human-readable message.
                  code:
                    type: string
                    enum:
                      - CAMPAIGN_NOT_FOUND
        '409':
          description: >-
            The test cannot start: the campaign is not a draft regular campaign,
            the draft is incomplete, no tests are left, a test is already
            running, or the draft is unchanged.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Human-readable message.
                  code:
                    type: string
                    enum:
                      - CAMPAIGN_TYPE_UNSUPPORTED
                      - DRAFT_NOT_READY
                      - QUOTA_EXHAUSTED
                      - TEST_ALREADY_RUNNING
                      - DRAFT_UNCHANGED
                  resets_on:
                    type: string
                    description: 'With `QUOTA_EXHAUSTED`: when the allowance resets.'
                  test_id:
                    type: string
                    description: 'With `TEST_ALREADY_RUNNING`: the running test.'
        '503':
          description: Placement testing is not available right now. Nothing was charged.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Human-readable message.
                  code:
                    type: string
                    enum:
                      - PLACEMENT_UNAVAILABLE
      servers:
        - url: https://cloudapi.mailercloud.com
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Your Mailercloud API key (plain text, no Bearer prefix). Create keys in
        Settings → API.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.