---
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`

## Request

- Base URL: `https://brew.new/api`
- URL: `https://brew.new/api/v1/emails/{emailId}/inbox-placement-tests`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/brew/apis/brew-public-api-v1/docs/v1/emails/:emailId/inbox-placement-tests/get.ts> (a function with typed inputs; its response is checked against the schema)

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.dev/brew/apis/brew-public-api-v1.md) - [All operations](https://skmtc.dev/brew/apis/brew-public-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/brew/apis/brew-public-api-v1/revisions/db96cfedc6c5?raw)
