Endpoint

GET /v1/check/

The single check endpoint performs a real-time lookup for one email address or domain. It returns classification signals including disposable status, provider type, risk score, MX validity, and optional SMTP deliverability results. The endpoint is optimized for sub-50 ms responses when domain data is cached.

Parameters

| Parameter | Type | Required | Description | |-----------|--------|----------|-------------| | email | string | Yes | The email address (e.g. user@example.com) or domain (e.g. example.com or @example.com) to check. | | verify | string | No | When set to true, 1, or yes, performs a live SMTP deliverability check. Adds 1–5 seconds of latency. |

The email parameter accepts both full email addresses and bare domains. Invalid formats return a 400 Bad Request with an error message.

Request Example

Using curl with header authentication:

curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.emailyze.xyz/v1/check/?email=signup@tempmail.com"

Using query parameter authentication:

curl "https://api.emailyze.xyz/v1/check/?email=signup@tempmail.com&key=YOUR_API_KEY"

With deliverability verification:

curl -H "X-API-Key: YOUR_API_KEY" \
  "https://api.emailyze.xyz/v1/check/?email=user@gmail.com&verify=true"

Response Schema

A successful response (HTTP 200) is a JSON object with the following fields:

| Field | Type | Description | |-----------------|---------|-------------| | email | string | The normalized email or *@domain for domain-only input. | | domain | string | The extracted domain (e.g. tempmail.com). | | is_disposable | boolean | true if the domain is classified as disposable. | | provider_type | string | One of: disposable, personal, freemail, masked, unknown. | | risk_score | number | 0–100; higher indicates greater risk. 80+ is high risk. | | mx_valid | boolean | true if the domain has valid MX records. | | mx_provider | string | Detected provider (e.g. google, microsoft) or null. | | local_part_type | string | role, plus_addressing, numerical, standard, or null. | | catch_all | boolean | true/false if known; null if not probed. | | syntax | object | { domain, username, is_valid_syntax, suggestion }. | | smtp | object | SMTP probe results when verify=true. | | first_seen | string | ISO 8601 date when domain was first seen. | | last_seen | string | ISO 8601 date when domain was last seen. | | sources | array | Source names contributing to classification. | | checked_at | string | ISO 8601 timestamp of the check. | | latency_ms | number | Response time in milliseconds. |

The smtp object contains: can_connect_smtp, has_full_inbox, is_catch_all, is_deliverable, is_disabled. When verify is not used, is_deliverable and has_full_inbox are null.

Example Response

Disposable email:

{
  "email": "signup@tempmail.com",
  "domain": "tempmail.com",
  "is_disposable": true,
  "provider_type": "disposable",
  "risk_score": 92.5,
  "mx_valid": true,
  "mx_provider": null,
  "local_part_type": "standard",
  "catch_all": false,
  "syntax": {
    "domain": "tempmail.com",
    "username": "signup",
    "is_valid_syntax": true,
    "suggestion": null
  },
  "smtp": {
    "can_connect_smtp": true,
    "has_full_inbox": null,
    "is_catch_all": false,
    "is_deliverable": null,
    "is_disabled": null
  },
  "first_seen": "2024-01-15T00:00:00Z",
  "last_seen": "2025-03-06T14:30:00Z",
  "sources": ["disposable-list", "community"],
  "checked_at": "2025-03-06T14:30:00.123Z",
  "latency_ms": 38
}

Personal/freemail domain:

{
  "email": "user@gmail.com",
  "domain": "gmail.com",
  "is_disposable": false,
  "provider_type": "freemail",
  "risk_score": 0.0,
  "mx_valid": true,
  "mx_provider": "google",
  "local_part_type": "standard",
  "catch_all": null,
  "syntax": {
    "domain": "gmail.com",
    "username": "user",
    "is_valid_syntax": true,
    "suggestion": null
  },
  "smtp": {
    "can_connect_smtp": true,
    "has_full_inbox": null,
    "is_catch_all": null,
    "is_deliverable": null,
    "is_disabled": null
  },
  "first_seen": "2020-06-01T00:00:00Z",
  "last_seen": "2025-03-06T14:30:00Z",
  "sources": ["personal-domains"],
  "checked_at": "2025-03-06T14:30:00.456Z",
  "latency_ms": 41
}

Error Responses

| Status | Condition | Response Body | |--------|-----------|---------------| | 400 | Missing email parameter | {"error": "Missing required parameter: email"} | | 400 | Invalid email or domain format | {"error": "Invalid email or domain format"} | | 401 | Missing or invalid API key | {"detail": "Missing API key. Provide X-API-Key header or key query parameter."} or {"detail": "Invalid or inactive API key."} | | 429 | Rate limit exceeded | {"detail": "Request was throttled."} |

Interpreting Provider Types

The provider_type field categorizes the domain. disposable indicates a temporary or throwaway email service. personal and freemail are typically trusted (e.g. gmail.com, outlook.com). masked refers to relay services that hide the real address. unknown means the domain was not found in our curated lists; it may be a corporate or niche provider. Combine provider_type with risk_score for nuanced policies: for example, allow freemail with low risk but require extra verification for unknown domains with risk above 50.

Rate Limits and Performance

Single check requests are subject to your plan's rate limits. Responses are typically returned in under 50 ms when the domain is in cache. First-time lookups for unknown domains may take slightly longer as we perform MX validation and create the record. The latency_ms field in the response reports actual server-side processing time. Use it for monitoring and alerting.

Domain-Only vs Email Input

You can pass either a full email or a bare domain. For ?email=example.com, the API returns "email": "*@example.com" and the same domain-level classification. This is useful when you have domain lists but not full addresses, or when you want to pre-check a domain before collecting the local part. The local_part_type and syntax fields are populated only when a full email is provided; for domain-only input, they may be null.

SMTP Verification Details

When verify=true is set, the API performs a live SMTP connection to the domain's MX servers. It attempts to connect, optionally send a RCPT TO command, and reports is_deliverable, has_full_inbox, and is_disabled. This adds 1–5 seconds of latency and is subject to rate limits. Use it sparingly for email verification flows where you must confirm deliverability.

Caching and Freshness

Domain data is cached for performance. The first_seen and last_seen timestamps indicate when we first and last observed the domain. Our classification is updated as we receive new signals. For real-time accuracy, the single check endpoint always reflects the latest data at request time; there is no client-side caching required.

Programming Language Examples

In Python, use requests: requests.get("https://api.emailyze.xyz/v1/check/", params={"email": email}, headers={"X-API-Key": key}). In Node.js, use fetch or axios with the same URL and headers. In PHP, use file_get_contents with a stream context or Guzzle. All examples return JSON; parse the response and check is_disposable and risk_score for your business logic.

See Also