---
title: "Get inbox placement results"
method: GET
path: "/v1/emails/{emailId}/inbox-placement-tests"
tags: ["Emails"]
---

# Get inbox placement results

`GET /v1/emails/{emailId}/inbox-placement-tests`

With `testId`: the current status + placement of ONE test — while `status` is `collecting`, this live-refreshes from the provider (re-poll every ~30s until `completed`) and returns per-provider inbox/spam/missing tallies with folder/tab `categories` and ACTUAL `folders` (e.g. Gmail Promotions, Yahoo bulk, gmx spamverdacht), each provider's OWN SPF/DKIM/DMARC verdicts (`byProvider[].authentication`), Microsoft's filter telemetry (`microsoftFilter` — SCL >= 5 lands in Junk), a spoofing check (`spoofingDetected`), header checks (`headers` — one-click unsubscribe, plain-text part), a `spamFilter` content verdict with the triggered rules, and a `diagnosis` array of per-provider findings with concrete remediation. WITHOUT `testId`: lists the design's recent tests (lean rows, persisted snapshots — poll a `testId` to refresh) for comparing subject/preview/version variants side by side. FREE.

## Path parameters

- `emailId` string, required — Design id returned by `POST /v1/emails` and listed by `GET /v1/emails`.

## Query parameters

- `testId` string — The test id returned by the create endpoint; omit to list the design's recent tests.

## Response `200`

With `testId`: the test resource. Without: `{ data: [lean test rows] }`.

- union
  - EmailInboxPlacementTest
    - `testId` string, required
    - `emailId` string, required
    - `status` 'pending' | 'sending' | 'collecting' | 'completed' | 'partial' | 'failed', required
    - `domainId` string, required
    - `subject` string
    - `previewText` string
    - `emailVersionId` string
    - `seedCount` integer, required
    - `results` object, nullable, required
      - `overall` object, required
        - `provider` string, required
        - `total` integer, required
        - `inbox` integer, required
        - `spam` integer, required
        - `missing` integer, required
        - `pending` integer, required
        - `categories` object
        - `folders` object
        - `authentication` object
          - `spf` 'pass' | 'fail' | 'mixed'
          - `dkim` 'pass' | 'fail' | 'mixed'
          - `dmarc` 'pass' | 'fail' | 'mixed'
      - `byProvider` object[], required
        - `provider` string, required
        - `total` integer, required
        - `inbox` integer, required
        - `spam` integer, required
        - `missing` integer, required
        - `pending` integer, required
        - `categories` object
        - `folders` object
        - `authentication` object
          - `spf` 'pass' | 'fail' | 'mixed'
          - `dkim` 'pass' | 'fail' | 'mixed'
          - `dmarc` 'pass' | 'fail' | 'mixed'
      - `authentication` object, required
        - `spf` string
        - `dkim` string
        - `dmarc` string
      - `spamFilter` object
        - `flagged` boolean, required
        - `score` number, required
        - `threshold` number, required
        - `rules` object[], required
          - `name` string, required
          - `score` number, required
          - `description` string
      - `microsoftFilter` object
        - `spamConfidenceLevel` number, required
        - `bulkComplaintLevel` number, required
        - `sampleCount` integer, required
        - `junked` boolean, required
      - `spoofingDetected` boolean
      - `headers` object
        - `listUnsubscribe` boolean, required
        - `oneClickUnsubscribe` boolean, required
        - `plainTextPart` boolean, required
        - `feedbackId` boolean, required
    - `diagnosis` object[]
      - `id` 'spoofing_detected' | 'aggregate_auth_failure' | 'provider_auth_failure' | 'microsoft_junk_filtering' | 'provider_spam_placement' | 'promotions_tab_placement' | 'bulk_folder_placement' | 'content_filter_flagged' | 'content_rule' | 'missing_list_unsubscribe' | 'missing_plain_text_part', required
      - `severity` 'critical' | 'warning' | 'info', required
      - `provider` string
      - `summary` string, required
      - `remediation` string, required
    - `errorMessage` string
    - `createdAt` string, required
    - `updatedAt` string, required
  - EmailInboxPlacementTestList
    - `data` object[], required
      - `testId` string, required
      - `status` 'pending' | 'sending' | 'collecting' | 'completed' | 'partial' | 'failed', required
      - `domainId` string, required
      - `subject` string, required
      - `previewText` string
      - `emailVersionId` string
      - `seedCount` integer, required
      - `overall` object, nullable, required
        - `provider` string, required
        - `total` integer, required
        - `inbox` integer, required
        - `spam` integer, required
        - `missing` integer, required
        - `pending` integer, required
        - `categories` object
        - `folders` object
        - `authentication` object
          - `spf` 'pass' | 'fail' | 'mixed'
          - `dkim` 'pass' | 'fail' | 'mixed'
          - `dmarc` 'pass' | 'fail' | 'mixed'
      - `createdAt` string, required
      - `updatedAt` string, required

## Other responses

- `401` — The API key was missing, invalid, or revoked.
- `403` — The caller does not have the required `emails` permission.
- `404` — No test exists with that id for this email (cross-brand ids surface as 404).
- `429` — The request hit the rolling rate limit window.
- `500` — Unexpected internal error.

---

[API](https://skmtc.net/brew/apis/brew-public-api-v1.md) · [All operations](https://skmtc.net/brew/apis/brew-public-api-v1/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/brew/brew-public-api-v1/versions/db96cfedc6c5/schema)
