> For the complete documentation index, see [llms.txt](https://run.emailchaser.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://run.emailchaser.com/api-reference/inbox-placement.md).

# Inbox Placement

## Deliverability insights

> What is wrong across the workspace right now, worst first, each with the action that fixes it. Combines the placement measured over the window with the latest health check of every connected mailbox: authentication records, blacklist listings and measured placement per mailbox.

```json
{"openapi":"3.1.1","info":{"title":"Emailchaser API","version":"1.0"},"servers":[{"url":"https://api.emailchaser.com/r"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"models.InboxPlacementInsightsResponse":{"type":"object","properties":{"findings":{"type":"array","items":{"$ref":"#/components/schemas/models.InboxPlacementFindingResponse"}},"inboxRate":{"type":"integer"},"mailboxesAtRisk":{"type":"integer"},"mailboxesChecked":{"type":"integer"},"missingRate":{"type":"integer"},"providerBreakdown":{"type":"array","items":{"$ref":"#/components/schemas/models.InboxPlacementProviderResponse"}},"runsInWindow":{"type":"integer"},"spamRate":{"type":"integer"},"windowDays":{"description":"WindowDays is how far back the rates below were computed over.","type":"integer"}}},"models.InboxPlacementFindingResponse":{"type":"object","properties":{"action":{"description":"Action is what to do about it. Every finding has one: a report that only\nsays what is wrong makes the reader's day worse without improving their\ndelivery.","type":"string"},"detail":{"type":"string"},"senderAddress":{"type":"string"},"senderEmailId":{"type":"integer"},"severity":{"description":"Severity is critical, warning or info.","type":"string"},"title":{"type":"string"}}},"models.InboxPlacementProviderResponse":{"type":"object","properties":{"inbox":{"type":"integer"},"inboxRate":{"type":"integer"},"label":{"type":"string"},"missing":{"type":"integer"},"promotions":{"type":"integer"},"provider":{"type":"string"},"seeds":{"type":"integer"},"spam":{"type":"integer"}}},"models.ErrorUnauthorized":{"type":"object","properties":{"error":{"type":"string"}}},"models.InboxPlacementForbiddenResponse":{"type":"object","properties":{"code":{"description":"Code is inbox_placement_required or inbox_placement_hypergrowth_required.","type":"string"},"error":{"description":"Error is written for a person to read and can be shown as-is.","type":"string"},"tier":{"description":"Tier is the tier the workspace currently holds: none, growth or\nhypergrowth.","type":"string"}}},"models.ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/inbox-placement/insights":{"get":{"description":"What is wrong across the workspace right now, worst first, each with the action that fixes it. Combines the placement measured over the window with the latest health check of every connected mailbox: authentication records, blacklist listings and measured placement per mailbox.","tags":["Inbox Placement"],"summary":"Deliverability insights","parameters":[{"schema":{"type":"integer"},"description":"How many days of runs to summarise (1..365, default 30)","name":"days","in":"query"}],"responses":{"200":{"description":"The findings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementInsightsResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorUnauthorized"}}}},"403":{"description":"The workspace does not hold the Inbox Placement add-on (code inbox_placement_required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementForbiddenResponse"}}}},"500":{"description":"Failed to build the insights","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}}}}}}}
```

## List inbox placement runs

> Lists inbox placement runs newest first, optionally filtered to one test with ?testId=. Counters on a run are only final once its status is completed. Note that every rate is -1 when nothing has been scored yet, which means NOT MEASURED and must not be rendered as 0%.

```json
{"openapi":"3.1.1","info":{"title":"Emailchaser API","version":"1.0"},"servers":[{"url":"https://api.emailchaser.com/r"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"models.InboxPlacementListResponse":{"type":"object","properties":{"count":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/models.InboxPlacementRunResponse"}}}},"models.InboxPlacementRunResponse":{"type":"object","properties":{"completedAt":{"type":"string"},"createdAt":{"type":"string"},"error":{"type":"string"},"failed":{"type":"integer"},"id":{"type":"integer"},"inbox":{"type":"integer"},"inboxRate":{"description":"InboxRate is the whole-percentage share of SCORED probes that reached the\nprimary inbox. -1 when nothing has been scored.","type":"integer"},"messagesExpected":{"type":"integer"},"messagesSent":{"type":"integer"},"missing":{"description":"Missing counts probes never found in any folder, which usually means a\nsilent block. Reported apart from spam because it is a worse problem with\na different fix.","type":"integer"},"promotions":{"description":"Promotions counts every Gmail category tab: promotions, social and\nupdates. Delivered, but filtered away from the reader.","type":"integer"},"seedsTargeted":{"type":"integer"},"sendersTargeted":{"type":"integer"},"spam":{"type":"integer"},"spamScore":{"description":"SpamScore is the content spam score in tenths of a point, so 47 is 4.7.\n-1 when not scored.","type":"integer"},"startedAt":{"type":"string"},"status":{"description":"Status is pending, sending, collecting, completed, failed or cancelled.\nCounters are only final once status is completed.","type":"string"},"testId":{"type":"integer"},"trigger":{"description":"Trigger is manual or scheduled.","type":"string"}}},"models.ErrorUnauthorized":{"type":"object","properties":{"error":{"type":"string"}}},"models.InboxPlacementForbiddenResponse":{"type":"object","properties":{"code":{"description":"Code is inbox_placement_required or inbox_placement_hypergrowth_required.","type":"string"},"error":{"description":"Error is written for a person to read and can be shown as-is.","type":"string"},"tier":{"description":"Tier is the tier the workspace currently holds: none, growth or\nhypergrowth.","type":"string"}}},"models.ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/inbox-placement/runs":{"get":{"description":"Lists inbox placement runs newest first, optionally filtered to one test with ?testId=. Counters on a run are only final once its status is completed. Note that every rate is -1 when nothing has been scored yet, which means NOT MEASURED and must not be rendered as 0%.","tags":["Inbox Placement"],"summary":"List inbox placement runs","parameters":[{"schema":{"type":"integer"},"description":"Only runs of this test","name":"testId","in":"query"},{"schema":{"type":"integer"},"description":"How many runs to return (1..200, default 50)","name":"limit","in":"query"}],"responses":{"200":{"description":"The runs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementListResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorUnauthorized"}}}},"403":{"description":"The workspace does not hold the Inbox Placement add-on (code inbox_placement_required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementForbiddenResponse"}}}},"500":{"description":"Failed to load the runs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}}}}}}}
```

## Get an inbox placement run

> Returns one run with its complete report: the headline split, the per-provider and per-sending-mailbox breakdowns, and the content spam rules the copy triggered. "Promotions" rolls up every Gmail category tab. "Missing" means the probe was never found in any folder, which usually indicates a silent block, and is reported apart from spam because it is a worse problem with a different fix.

```json
{"openapi":"3.1.1","info":{"title":"Emailchaser API","version":"1.0"},"servers":[{"url":"https://api.emailchaser.com/r"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"models.InboxPlacementRunDetailResponse":{"type":"object","properties":{"completedAt":{"type":"string"},"createdAt":{"type":"string"},"error":{"type":"string"},"failed":{"type":"integer"},"id":{"type":"integer"},"inbox":{"type":"integer"},"inboxRate":{"description":"InboxRate is the whole-percentage share of SCORED probes that reached the\nprimary inbox. -1 when nothing has been scored.","type":"integer"},"messagesExpected":{"type":"integer"},"messagesSent":{"type":"integer"},"missing":{"description":"Missing counts probes never found in any folder, which usually means a\nsilent block. Reported apart from spam because it is a worse problem with\na different fix.","type":"integer"},"promotions":{"description":"Promotions counts every Gmail category tab: promotions, social and\nupdates. Delivered, but filtered away from the reader.","type":"integer"},"providerBreakdown":{"type":"array","items":{"$ref":"#/components/schemas/models.InboxPlacementProviderResponse"}},"seedsTargeted":{"type":"integer"},"senderBreakdown":{"type":"array","items":{"$ref":"#/components/schemas/models.InboxPlacementSenderResponse"}},"sendersTargeted":{"type":"integer"},"spam":{"type":"integer"},"spamScore":{"description":"SpamScore is the content spam score in tenths of a point, so 47 is 4.7.\n-1 when not scored.","type":"integer"},"spamScoreRules":{"type":"array","items":{"$ref":"#/components/schemas/models.InboxPlacementSpamRuleResponse"}},"startedAt":{"type":"string"},"status":{"description":"Status is pending, sending, collecting, completed, failed or cancelled.\nCounters are only final once status is completed.","type":"string"},"testId":{"type":"integer"},"trigger":{"description":"Trigger is manual or scheduled.","type":"string"}}},"models.InboxPlacementProviderResponse":{"type":"object","properties":{"inbox":{"type":"integer"},"inboxRate":{"type":"integer"},"label":{"type":"string"},"missing":{"type":"integer"},"promotions":{"type":"integer"},"provider":{"type":"string"},"seeds":{"type":"integer"},"spam":{"type":"integer"}}},"models.InboxPlacementSenderResponse":{"type":"object","properties":{"failed":{"type":"integer"},"inbox":{"type":"integer"},"inboxRate":{"type":"integer"},"missing":{"type":"integer"},"promotions":{"type":"integer"},"senderAddress":{"type":"string"},"senderEmailId":{"type":"integer"},"sent":{"type":"integer"},"spam":{"type":"integer"}}},"models.InboxPlacementSpamRuleResponse":{"type":"object","properties":{"advice":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"points":{"description":"Points is the rule's cost in tenths of a point, so 15 is 1.5 points.","type":"integer"}}},"models.ErrorUnauthorized":{"type":"object","properties":{"error":{"type":"string"}}},"models.InboxPlacementForbiddenResponse":{"type":"object","properties":{"code":{"description":"Code is inbox_placement_required or inbox_placement_hypergrowth_required.","type":"string"},"error":{"description":"Error is written for a person to read and can be shown as-is.","type":"string"},"tier":{"description":"Tier is the tier the workspace currently holds: none, growth or\nhypergrowth.","type":"string"}}},"models.ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/inbox-placement/runs/{id}":{"get":{"description":"Returns one run with its complete report: the headline split, the per-provider and per-sending-mailbox breakdowns, and the content spam rules the copy triggered. \"Promotions\" rolls up every Gmail category tab. \"Missing\" means the probe was never found in any folder, which usually indicates a silent block, and is reported apart from spam because it is a worse problem with a different fix.","tags":["Inbox Placement"],"summary":"Get an inbox placement run","parameters":[{"schema":{"type":"integer"},"description":"Run ID","name":"id","in":"path","required":true}],"responses":{"200":{"description":"The run and its report","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementRunDetailResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorUnauthorized"}}}},"403":{"description":"The workspace does not hold the Inbox Placement add-on (code inbox_placement_required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementForbiddenResponse"}}}},"404":{"description":"No such run in this workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}},"500":{"description":"Failed to load the run","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}}}}}}}
```

## List a run's individual probes

> Returns one row per probe: which of your mailboxes sent it, which seed mailbox received it, where it landed and how long it took to arrive. deliverySeconds is worth watching on its own: greylisting and throttling show up there before they show up in a placement number.

```json
{"openapi":"3.1.1","info":{"title":"Emailchaser API","version":"1.0"},"servers":[{"url":"https://api.emailchaser.com/r"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"models.InboxPlacementResultListResponse":{"type":"object","properties":{"count":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/models.InboxPlacementResultResponse"}},"runId":{"type":"integer"}}},"models.InboxPlacementResultResponse":{"type":"object","properties":{"deliverySeconds":{"description":"DeliverySeconds is how long the probe took to appear. -1 when never\ndetected. A slow delivery is itself a signal: greylisting and throttling\nboth show up here before they show up in a placement number.","type":"integer"},"detectedAt":{"type":"string"},"error":{"type":"string"},"id":{"type":"integer"},"placement":{"description":"Placement is pending, inbox, spam, promotions, social, updates, missing\nor failed.","type":"string"},"seedAddress":{"type":"string"},"seedProvider":{"type":"string"},"senderAddress":{"type":"string"},"sentAt":{"type":"string"}}},"models.ErrorUnauthorized":{"type":"object","properties":{"error":{"type":"string"}}},"models.InboxPlacementForbiddenResponse":{"type":"object","properties":{"code":{"description":"Code is inbox_placement_required or inbox_placement_hypergrowth_required.","type":"string"},"error":{"description":"Error is written for a person to read and can be shown as-is.","type":"string"},"tier":{"description":"Tier is the tier the workspace currently holds: none, growth or\nhypergrowth.","type":"string"}}},"models.ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/inbox-placement/runs/{id}/results":{"get":{"description":"Returns one row per probe: which of your mailboxes sent it, which seed mailbox received it, where it landed and how long it took to arrive. deliverySeconds is worth watching on its own: greylisting and throttling show up there before they show up in a placement number.","tags":["Inbox Placement"],"summary":"List a run's individual probes","parameters":[{"schema":{"type":"integer"},"description":"Run ID","name":"id","in":"path","required":true}],"responses":{"200":{"description":"The probes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementResultListResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorUnauthorized"}}}},"403":{"description":"The workspace does not hold the Inbox Placement add-on (code inbox_placement_required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementForbiddenResponse"}}}},"404":{"description":"No such run in this workspace","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}},"500":{"description":"Failed to load the results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}}}}}}}
```

## Sender reputation and health

> The latest health check for every connected mailbox: SPF, DKIM, DMARC and MX status, blacklist listings with their delisting links, measured inbox placement, and a combined 0-100 health score. blacklistsChecked is reported next to blacklistsListed so the count can never be read as a total. A placementScore or healthScore of -1 means not measured, not zero.

```json
{"openapi":"3.1.1","info":{"title":"Emailchaser API","version":"1.0"},"servers":[{"url":"https://api.emailchaser.com/r"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"models.SenderReputationListResponse":{"type":"object","properties":{"count":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/models.SenderReputationResponse"}}}},"models.SenderReputationResponse":{"type":"object","properties":{"blacklistListings":{"type":"array","items":{"$ref":"#/components/schemas/models.BlacklistListingResponse"}},"blacklistsChecked":{"description":"BlacklistsChecked is how many zones were queried, reported next to the\nlisting count so the number can never be read as a total.","type":"integer"},"blacklistsListed":{"type":"integer"},"checkedAt":{"type":"string"},"dkimStatus":{"type":"string"},"dmarcPolicy":{"type":"string"},"dmarcStatus":{"type":"string"},"dnsIssues":{"type":"array","items":{"type":"string"}},"domain":{"type":"string"},"healthScore":{"description":"HealthScore is 0-100 combining placement, authentication and blacklist\nstanding. -1 when it cannot be computed.","type":"integer"},"mxStatus":{"type":"string"},"placementScore":{"description":"PlacementScore is the inbox rate over recent completed runs. -1 when the\nmailbox has never been tested.","type":"integer"},"senderAddress":{"type":"string"},"senderEmailId":{"type":"integer"},"sendingIp":{"description":"SendingIP is empty for mailboxes on a shared provider (Gmail, Microsoft),\nwhich have no dedicated IP of their own to check.","type":"string"},"spfStatus":{"description":"Each status is OK, WARNING, MISSING or ERROR.","type":"string"}}},"models.BlacklistListingResponse":{"type":"object","properties":{"answer":{"type":"string"},"delistUrl":{"description":"DelistURL is where to request removal. Always present: a listing you\ncannot act on is trivia.","type":"string"},"kind":{"type":"string"},"name":{"type":"string"},"reason":{"type":"string"},"txt":{"type":"string"},"value":{"type":"string"},"zone":{"type":"string"}}},"models.ErrorUnauthorized":{"type":"object","properties":{"error":{"type":"string"}}},"models.InboxPlacementForbiddenResponse":{"type":"object","properties":{"code":{"description":"Code is inbox_placement_required or inbox_placement_hypergrowth_required.","type":"string"},"error":{"description":"Error is written for a person to read and can be shown as-is.","type":"string"},"tier":{"description":"Tier is the tier the workspace currently holds: none, growth or\nhypergrowth.","type":"string"}}},"models.ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/inbox-placement/sender-reputation":{"get":{"description":"The latest health check for every connected mailbox: SPF, DKIM, DMARC and MX status, blacklist listings with their delisting links, measured inbox placement, and a combined 0-100 health score. blacklistsChecked is reported next to blacklistsListed so the count can never be read as a total. A placementScore or healthScore of -1 means not measured, not zero.","tags":["Inbox Placement"],"summary":"Sender reputation and health","responses":{"200":{"description":"The mailbox health table","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.SenderReputationListResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorUnauthorized"}}}},"403":{"description":"The workspace does not hold the Inbox Placement add-on (code inbox_placement_required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementForbiddenResponse"}}}},"500":{"description":"Failed to load the mailbox health","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}}}}}}}
```

## Inbox placement stats by date

> Rolls completed runs up by UTC calendar day over a window, for a trend chart. Days on which nothing ran are ABSENT from the series rather than returned as zeros: a zero-filled day plots as placement collapsing to 0%, which reads as an outage when it means nobody ran a test. Defaults to the last 30 days.

```json
{"openapi":"3.1.1","info":{"title":"Emailchaser API","version":"1.0"},"servers":[{"url":"https://api.emailchaser.com/r"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"models.InboxPlacementStatsByDateResponse":{"type":"object","properties":{"days":{"type":"array","items":{"$ref":"#/components/schemas/models.InboxPlacementDailyStatResponse"}},"from":{"type":"string"},"to":{"type":"string"}}},"models.InboxPlacementDailyStatResponse":{"type":"object","properties":{"date":{"description":"Date is the UTC day.","type":"string"},"inbox":{"type":"integer"},"inboxRate":{"type":"integer"},"missing":{"type":"integer"},"promotions":{"type":"integer"},"runs":{"type":"integer"},"spam":{"type":"integer"}}},"models.ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}},"models.ErrorUnauthorized":{"type":"object","properties":{"error":{"type":"string"}}},"models.InboxPlacementForbiddenResponse":{"type":"object","properties":{"code":{"description":"Code is inbox_placement_required or inbox_placement_hypergrowth_required.","type":"string"},"error":{"description":"Error is written for a person to read and can be shown as-is.","type":"string"},"tier":{"description":"Tier is the tier the workspace currently holds: none, growth or\nhypergrowth.","type":"string"}}}}},"paths":{"/inbox-placement/stats-by-date":{"get":{"description":"Rolls completed runs up by UTC calendar day over a window, for a trend chart. Days on which nothing ran are ABSENT from the series rather than returned as zeros: a zero-filled day plots as placement collapsing to 0%, which reads as an outage when it means nobody ran a test. Defaults to the last 30 days.","tags":["Inbox Placement"],"summary":"Inbox placement stats by date","parameters":[{"schema":{"type":"string"},"description":"Start of the window, RFC3339. Defaults to 30 days ago.","name":"from","in":"query"},{"schema":{"type":"string"},"description":"End of the window, RFC3339. Defaults to now.","name":"to","in":"query"}],"responses":{"200":{"description":"The daily series","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementStatsByDateResponse"}}}},"400":{"description":"Malformed or reversed date range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorUnauthorized"}}}},"403":{"description":"The workspace does not hold the Inbox Placement add-on (code inbox_placement_required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementForbiddenResponse"}}}},"500":{"description":"Failed to load the history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}}}}}}}
```

## List inbox placement tests

> Lists every inbox placement test defined in the workspace, newest first. A test is the definition (content, which mailboxes to send from, and for a recurring test how often); each execution is a run, listed separately at /inbox-placement/runs.

```json
{"openapi":"3.1.1","info":{"title":"Emailchaser API","version":"1.0"},"servers":[{"url":"https://api.emailchaser.com/r"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"models.InboxPlacementTestListResponse":{"type":"object","properties":{"count":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/models.InboxPlacementTestResponse"}}}},"models.InboxPlacementTestResponse":{"type":"object","properties":{"createdAt":{"type":"string"},"id":{"type":"integer"},"intervalHours":{"description":"IntervalHours is how often a recurring test repeats. Null for one-time.","type":"integer"},"isPaused":{"type":"boolean"},"kind":{"description":"Kind is one_time or recurring.","type":"string"},"lastRunAt":{"type":"string"},"name":{"type":"string"},"nextRunAt":{"type":"string"},"seedProviders":{"description":"SeedProviders restricts the seed panel. Empty means every provider.","type":"array","items":{"type":"string"}},"senderEmailIds":{"description":"SenderEmailIDs are the mailboxes the test sends from.","type":"array","items":{"type":"integer"}},"subject":{"type":"string"}}},"models.ErrorUnauthorized":{"type":"object","properties":{"error":{"type":"string"}}},"models.InboxPlacementForbiddenResponse":{"type":"object","properties":{"code":{"description":"Code is inbox_placement_required or inbox_placement_hypergrowth_required.","type":"string"},"error":{"description":"Error is written for a person to read and can be shown as-is.","type":"string"},"tier":{"description":"Tier is the tier the workspace currently holds: none, growth or\nhypergrowth.","type":"string"}}},"models.ErrorResponse":{"type":"object","properties":{"error":{"type":"string"}}}}},"paths":{"/inbox-placement/tests":{"get":{"description":"Lists every inbox placement test defined in the workspace, newest first. A test is the definition (content, which mailboxes to send from, and for a recurring test how often); each execution is a run, listed separately at /inbox-placement/runs.","tags":["Inbox Placement"],"summary":"List inbox placement tests","responses":{"200":{"description":"The workspace's tests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementTestListResponse"}}}},"401":{"description":"Unauthorized - invalid or missing API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorUnauthorized"}}}},"403":{"description":"The workspace does not hold the Inbox Placement add-on (code inbox_placement_required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.InboxPlacementForbiddenResponse"}}}},"500":{"description":"Failed to load the tests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}}}}}}}}
```
