# Single Email Check

Check an email address's syntax, mail DNS, and disposable indicators, including [per-email alias detection](https://docs.disify.com/api/plus-alias.md).

## GET request

`GET /api/email/{email}`

```bash
curl https://disify.com/api/email/user@disposable-inbox.test
```

You can append [premium feature](https://docs.disify.com/guide/premium-features.md) suffixes to the path, e.g. `/api/email/{email}/spf/dkim`.

## POST request

`POST /api/email`

Send the email address as a form parameter:


**cURL**

```bash
curl -X POST https://disify.com/api/email \
     --data-urlencode "email=user@disposable-inbox.test"
```

**Python**

```python
import requests

response = requests.post("https://disify.com/api/email", data={
    "email": "user@disposable-inbox.test"
})
print(response.json())
```

**JavaScript**

```javascript
const response = await fetch("https://disify.com/api/email", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: new URLSearchParams({ email: "user@disposable-inbox.test" })
});
const data = await response.json();
```

**PHP**

```php
$ch = curl_init("https://disify.com/api/email");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['email' => 'user@disposable-inbox.test']));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
```


These snippets illustrate request encoding. Use the [Quick Start](https://docs.disify.com/guide/quickstart.md) for HTTP status, timeout, and response checks before making a validation decision. Form encoding must preserve literal `+` characters in addresses.

### POST parameters

| Parameter | Type | Description |
| --- | --- | --- |
| `email` | string | The email address to validate |
| `features` | string | Optional comma-separated [premium checks](https://docs.disify.com/guide/premium-features.md), subject to plan access. |
| `block_privacy_relays` | boolean | Paid option: reject known privacy relays. Omit to use the key/account setting; explicit `false` allows relays for this request. Also accepts `1` or `0`. |

Paid checks automatically include `forwarding` and the nullable `blocked` decision for valid-format input. Relay rejection does not change `disposable`. See [Privacy Forwarding](https://docs.disify.com/api/forwarding.md) for setup, coverage, and handling inconclusive results. These options also work in query parameters.

## Responses

Illustrative core responses. Paid plans also include the [forwarding fields](https://docs.disify.com/api/response-fields.md#paid-privacy-forwarding); DNS records and detection data can change.

### Disposable detected

```json
{
  "format": true,
  "domain": "disposable-inbox.test",
  "disposable": true,
  "dns": false,
  "confidence": 100,
  "signals": ["keyword_match", "no_mx_records"],
  "domain_info": { "tld": "test", "is_subdomain": false, "parent_domain": null },
  "role": false,
  "free": false
}
```

The verdict comes from the [signals](https://docs.disify.com/api/signals.md), not DNS. This example domain has no mail servers, so `dns` is `false` and `mx_info` is omitted — the `keyword_match` signal alone flags it. An absent `whitelist` means `false`.

### Non-disposable email

```json
{
  "format": true,
  "domain": "gmail.com",
  "disposable": false,
  "dns": true,
  "whitelist": true,
  "confidence": 0,
  "domain_info": { "tld": "com", "is_subdomain": false, "parent_domain": null },
  "mx_info": [
    "gmail-smtp-in.l.google.com",
    "alt1.gmail-smtp-in.l.google.com",
    "alt2.gmail-smtp-in.l.google.com",
    "alt3.gmail-smtp-in.l.google.com",
    "alt4.gmail-smtp-in.l.google.com"
  ],
  "role": false,
  "free": true
}
```

See [Response Fields](https://docs.disify.com/api/response-fields.md) for every field, and [Detection Signals](https://docs.disify.com/api/signals.md) for the `signals` array.

Source: https://docs.disify.com/api/email.html
