API Documentation

Complete reference for the Rukh Email Verification API. Verify any email address in real-time with a single API call. Multi-layered checks including syntax, DNS, SMTP, and deliverability analysis.

Authentication

All API requests require authentication via the x-api-key header. Include your API key in every request:

x-api-key: your_api_key_here

API keys are available from your dashboard after signing up. Keep your API key confidential — do not expose it in client-side code or public repositories.

Base URL

https://api.rukhtechnologies.com

All endpoints are served over HTTPS. HTTP requests will be redirected to HTTPS.

Check Email

Verify a single email address. Returns comprehensive deliverability information including syntax validation, MX records, SMTP verification, and risk assessment.

POST /v1/check-email

Request Body

ParameterTypeDescription
to_emailstring requiredThe email address to verify
from_emailstring optionalThe email address to use in the MAIL FROM SMTP command. Defaults to our verification address.
hello_namestring optionalThe hostname to use in the EHLO SMTP command. Defaults to our server hostname.
Example Request
curl -X POST https://api.rukhtechnologies.com/v1/check-email \
  -H "Content-Type: application/json" \
  -H "x-api-key: your_api_key_here" \
  -d '{
    "to_email": "jane@example.com"
  }'
Example Response
{
  "input": "jane@example.com",
  "is_reachable": "safe",
  "misc": {
    "is_disposable": false,
    "is_role_account": false,
    "gravatar_url": null,
    "haveibeenpwned": null
  },
  "mx": {
    "accepts_mail": true,
    "records": [
      "alt1.aspmx.l.google.com.",
      "aspmx.l.google.com."
    ]
  },
  "smtp": {
    "can_connect_smtp": true,
    "has_full_inbox": false,
    "is_catch_all": false,
    "is_deliverable": true,
    "is_disabled": false
  },
  "syntax": {
    "address": "jane@example.com",
    "domain": "example.com",
    "is_valid_syntax": true,
    "username": "jane"
  }
}

Bulk Verify

Verify multiple email addresses by calling the check-email endpoint for each address. For large lists, use the CSV upload feature in your dashboard (available on Professional plans and above).

POST /v1/check-email

Use the same endpoint as single verification. For programmatic bulk verification, iterate over your email list and call the API for each address. Respect your plan's rate limits to avoid throttling.

Example — Bulk Verify (Node.js)
const emails = ['alice@example.com', 'bob@test.com', 'carol@gmail.com'];

for (const email of emails) {
  const res = await fetch('https://api.rukhtechnologies.com/v1/check-email', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'x-api-key': process.env.RUKH_API_KEY,
    },
    body: JSON.stringify({ to_email: email }),
  });
  const result = await res.json();
  console.log(email, result.is_reachable);
}

For best results, add a small delay between requests to stay within rate limits. Dashboard CSV upload handles concurrency and rate limiting automatically.

API Version

The current API version is v1. All endpoints are under the /v1/ path prefix. We will communicate breaking changes in advance and maintain backward compatibility within major versions.

Response Fields

The verification response contains detailed information across several categories:

Top-level Fields

inputThe email address that was verified
is_reachableOverall reachability verdict: safe, risky, invalid, or unknown

syntax

is_valid_syntaxWhether the email follows valid syntax rules (RFC 5322)
usernameThe local part of the email (before @)
domainThe domain part of the email (after @)

mx

accepts_mailWhether the domain has MX records configured to receive mail
recordsList of MX record hostnames for the domain

smtp

can_connect_smtpWhether an SMTP connection was successfully established
is_deliverableWhether the mail server accepted the recipient address
is_catch_allWhether the domain accepts mail for any address (catch-all)
has_full_inboxWhether the mailbox is full
is_disabledWhether the account has been disabled

misc

is_disposableWhether the domain is a known disposable email provider
is_role_accountWhether the address is a role account (e.g., info@, admin@)

Reachability Values

The is_reachable field returns one of four values:

ValueMeaningAction
safeThe email address exists and can receive mailSafe to send
riskyThe address exists but has risk factors (catch-all, full inbox, etc.)Send with caution
invalidThe address does not exist or cannot receive mailDo not send
unknownVerification could not be completed (server timeout, greylisting, etc.)Retry later or verify manually

HTTP Status Codes

200Verification completed successfully
400Invalid request — check your request body
401Unauthorized — invalid or missing API key
422Unprocessable — invalid email format
429Rate limit exceeded — slow down requests
500Internal server error — contact support

Rate Limits

Rate limits vary by plan:

PlanRequests/secondMonthly limit
Free1100
Starter510,000
Professional25100,000
Enterprise100+500,000

When rate limited, the API returns a 429 status code with a Retry-After header indicating when to retry.

Quick Start Guide

Get started verifying emails in under 2 minutes:

  1. Sign up — Create an account at rukhtechnologies.com
  2. Get your API key — Find it in your dashboard under API Settings
  3. Make your first request — Use the curl example above, replacing your_api_key_here with your actual key
  4. Integrate — Add verification to your signup flows, CRM imports, or marketing campaigns

Node.js Example

const response = await fetch('https://api.rukhtechnologies.com/v1/check-email', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'x-api-key': process.env.RUKH_API_KEY,
  },
  body: JSON.stringify({ to_email: 'jane@example.com' }),
});
const result = await response.json();
console.log(result.is_reachable); // "safe", "risky", "invalid", or "unknown"

Python Example

import requests

response = requests.post(
    'https://api.rukhtechnologies.com/v1/check-email',
    headers={
        'Content-Type': 'application/json',
        'x-api-key': 'your_api_key_here',
    },
    json={'to_email': 'jane@example.com'},
)
result = response.json()
print(result['is_reachable'])  # "safe", "risky", "invalid", or "unknown"

Error Handling

When an error occurs during verification, the response will include error details in the relevant section. For example, an SMTP connection failure will appear in the smtp object:

{
  "smtp": {
    "can_connect_smtp": false,
    "error": {
      "type": "SmtpError",
      "message": "Connection timed out after 30 seconds"
    }
  }
}

Best practices for error handling:

Need help with integration? Contact us at support@rukhtechnologies.com or check our contact page.