---
title: "Check why mail is or isn't arriving | Proxy Mail QA"
description: "Developer docs for Proxy Mail QA: the MCP server for coding agents, the REST API for test suites, and the Chrome extension."
url: https://proxymail.qa/docs/reference/operations/checkdelivery
---

# Check why mail is or isn't arriving

GET

/v1/addresses/{address}/delivery

```js
const url = 'https://api.proxymail.qa/v1/addresses/k7f2x9ab12cd%40mailclub.dev/delivery';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```sh
curl --request GET \
  --url https://api.proxymail.qa/v1/addresses/k7f2x9ab12cd%40mailclub.dev/delivery \
  --header 'Authorization: Bearer <token>'
```

What has reached the address, every message we refused for it (too large, or over an hourly or daily limit) and one sentence on what that means, such as an email provider in sandbox mode. Doesn’t wait. A 404 says what an unknown address can mean.

## Authorizations

- **[apiKey](https://proxymail.qa/docs/reference.html#apikey)**

## Parameters

### Path Parameters

**address**

required

string format: email

The test address, URL-encoded. A variant also works: capitals, or a +tag (k7f2x9ab12cd+o’[brien@mailclub.dev](mailto:brien@mailclub.dev)). It acts on the plain address; waiting on a +tag variant, or listing its messages, only finds mail sent to that variant.

#### Example 

```plaintext
k7f2x9ab12cd@mailclub.dev
```

## Responses

### 200

The address’s delivery status

Media typeapplication/json

### object

**address**

string

**created\_at**

string format: date-time

**expires\_at**

string format: date-time

**receiving**

False once the address has expired: mail to it is refused.

boolean

**emails**

Emails received so far.

integer

**last\_email\_at**

string | null format: date-time

**refused**

Mail we refused for the address, newest first. Refusals for the same reason within an hour share one entry with a count.

Array<object>

### object

**reason**

string

Allowed values: too\_large address\_limit daily\_limit

**first\_at**

string format: date-time

**last\_at**

string format: date-time

**count**

integer

**size\_bytes**

The largest refused message, in bytes.

integer | null

**hint**

What the status means, most important first.

string

**help**

string format: uri

#### Example 

```json
{
  "refused": [
    {
      "reason": "too_large"
    }
  ],
  "help": "https://proxymail.qa/troubleshooting"
}
```

### 404

Nothing arrived in time, or the address isn’t in this project. hint says why as far as we can tell; after a wait, refused lists mail we turned away since `since`.

Media typeapplication/json

### object

**error**

string

**message**

string

**hint**

What we refused, or the likeliest cause, such as an email provider in sandbox mode.

string

**refused**

Mail we refused for the address, newest first. Refusals for the same reason within an hour share one entry with a count.

Array<object>

### object

**reason**

string

Allowed values: too\_large address\_limit daily\_limit

**first\_at**

string format: date-time

**last\_at**

string format: date-time

**count**

integer

**size\_bytes**

The largest refused message, in bytes.

integer | null

**help**

string format: uri

#### Example 

```json
{
  "error": "not_found",
  "refused": [
    {
      "reason": "too_large"
    }
  ],
  "help": "https://proxymail.qa/troubleshooting"
}
```

[Previous Check an email](https://proxymail.qa/docs/reference/operations/checkemail.html) [Next Reveal a saved test password](https://proxymail.qa/docs/reference/operations/revealpassword.html)
