---
title: Domain Endpoint
description: Check if a domain is used for disposable email addresses and get additional domain details.
---

The domain endpoint returns UserCheck's signals for a domain: whether it is disposable, its mail configuration, its age, and the other fields documented below.

## Endpoint

```
GET /domain/{domain}
```

## Parameters

| Parameter | Type   | Required | Description                         |
|-----------|--------|----------|-------------------------------------|
| `domain`  | string | Yes      | The domain to check (e.g., github.com) |

### Query parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `include_mx` | boolean | `true` | Set to `false` to skip the MX lookup. The `mx` and `mx_records` keys are then left out of the response entirely rather than returned as `null`. `mx_providers` is still returned. |
| `wait` | string | none | Comma-separated list of fields to resolve before responding, instead of returning `null` and filling them in afterwards. Accepts `domain_age_in_days` and `domain_authority`. Pro plans only; unrecognized names are ignored. |

`wait` trades response time for completeness. A field that is already known returns at normal speed; one that has to be looked up holds the response open until the lookup finishes. Ask only for the fields you actually need on the first response.

## Request example

```bash
curl -X GET "https://api.usercheck.com/domain/github.com" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Response

### Success response (200)

```json
{
  "status": 200,
  "domain": "github.com",
  "domain_authority": 96,
  "tld_trust": 1,
  "domain_age_in_days": 6871,
  "mx": true,
  "mx_records": [
      { "hostname": "github-com.mail.protection.outlook.com", "priority": 0 }
  ],
  "mx_providers": [
      { "slug": "microsoft", "type": "mailbox", "grade": "professional" }
  ],
  "spf": "relaxed",
  "dmarc": "quarantine",
  "disposable": false,
  "public_domain": false,
  "relay_domain": false,
  "free_subdomain": false,
  "spam": false,
  "did_you_mean": null,
  "blocklisted": false
}
```

### Response fields

| Field           | Type           | Description |
|-----------------|----------------|-------------|
| `status`        | integer        | HTTP status code indicating the result of the API request. <br>200: Successful request <br>400: Invalid input (malformed domain) <br>429: Rate limit exceeded |
| `domain`        | string         | The domain that was checked, in normalized form: lowercased, with internationalized names converted to their ASCII (punycode) representation. |
| `domain_authority` | integer\|null | A 0–100 score indicating how established and credible a domain is. Higher scores indicate well-established domains with strong online presence. Lower scores may signal newly created or less reputable domains. The value is `null` when the score has not been determined. See [Domain Authority](/docs/concepts/domain-authority). **Pro Plan Only** |
| `tld_trust`      | integer\|null  | A 1–5 score indicating how strict the registration requirements are for the domain's TLD. Higher scores mean the registry performed more identity verification before issuing the domain. See [TLD Trust](/docs/concepts/tld-trust). **Pro Plan Only** |
| `domain_age_in_days` | integer\|null | The number of days since the domain was registered, based on the registration date reported by the domain's registry. The value is `null` when the registration date is unknown or hasn't been retrieved yet. |
| `mx`            | boolean\|null  | Indicates whether the domain has valid MX (Mail Exchange) records, the DNS records that name the servers accepting mail for a domain. A value of `true` means the domain is configured to receive email. The value is `null` when the DNS lookup couldn't be completed. |
| `mx_records`    | array    | The domain's MX records, sorted by `priority` (lowest value first, the order in which sending servers try them). Each record contains the mail server `hostname` and its `priority`. Empty when the domain has no MX records. |
| `mx_providers`  | array    | Third-party services the domain delegates its MX records to. Empty when the domain manages its own MX infrastructure or uses an unrecognized setup. See [MX Providers](/docs/concepts/mx-providers). |
| `spf`           | string\|null   | The domain's SPF posture: how strictly its published SPF record limits who may send email as the domain. One of: `strict`, `relaxed`, `neutral`, `permissive`, `missing`, or `invalid`. The value is `null` when the SPF posture hasn't been assessed yet. See [SPF & DMARC](/docs/concepts/spf-and-dmarc). |
| `dmarc`         | string\|null   | The domain's effective DMARC policy: what it asks receivers to do with mail that fails authentication. One of: `reject`, `quarantine`, `none`, `missing`, or `invalid`. The value is `null` when the DMARC policy hasn't been assessed yet. See [SPF & DMARC](/docs/concepts/spf-and-dmarc). |
| `disposable`    | boolean        | Indicates whether the domain is from a temporary or disposable email provider. These domains allow users to create temporary email addresses that typically expire after a short period, and are commonly used to bypass verification systems. Subdomains of a disposable domain are flagged as well. See [Disposable Domains](/docs/concepts/disposable). |
| `disposable_provider`    | string\|null   | Names the service operating the disposable domain, as context for the `disposable` flag: the domain itself rarely reveals which service is behind it. Usually the provider's primary domain, but an app store URL for providers that are mobile apps, so treat it as an opaque identifier. The value is `null` when the provider hasn't been identified. Only included in the response when `disposable` is `true`. See [Disposable Domains](/docs/concepts/disposable). **Pro Plan Only** |
| `public_domain` | boolean        | Indicates whether the domain is a public email service like Gmail, Yahoo Mail, or Outlook, where anyone can create a mailbox. Addresses on a public domain belong to unrelated individuals, unlike addresses on a company domain, which belong to one organization. See [Public Domains](/docs/concepts/public-domains). |
| `relay_domain`  | boolean        | Indicates whether the domain belongs to an email forwarding or relay service such as SimpleLogin, DuckDuckGo Email Protection, or Apple's Hide My Email. Addresses on these domains automatically forward mail to the owner's actual mailbox at another address, which stays hidden. See [Relay Domains](/docs/concepts/relay). |
| `free_subdomain` | boolean       | Indicates whether the domain is a subdomain of a free subdomain or dynamic DNS service like `duckdns.org`. The parent domain itself is not flagged. See [Free Subdomains](/docs/concepts/free-subdomains). |
| `spam`          | boolean        | Indicates whether the domain is associated with spam or other abusive activity. These domains often look legitimate at first glance but have been flagged in UserCheck's dataset. A domain can be flagged as spam without being disposable. See [Spam Domains](/docs/concepts/spam). |
| `did_you_mean`  | string\|null  | A suggested correction when the domain looks like a likely misspelling of a well-known domain (e.g., `gmial.com` → `gmail.com`). The value is `null` when no suggestion is available. See [Did You Mean](/docs/concepts/did-you-mean). |
| `blocklisted`   | boolean        | Indicates whether the domain exactly matches an entry on your account's custom blocklist. Entries are managed in the dashboard or through the [Blocklist endpoint](/docs/api/blocklist-endpoint). **Pro Plan Only** |

## Error responses

### Invalid domain format (400)

```json
{
  "status": 400,
  "error": "The domain is invalid."
}
```

### Rate limit exceeded (429)

```json
{
  "status": 429,
  "error": "Too many requests"
}
```
