BillionVerify LogoBillionVerify

API Reference

Complete email checker API reference. Endpoints, parameters, response codes for email verification and validation.

BillionVerify API - это RESTful-сервис, предоставляющий мощные возможности верификации email. Все API-запросы должны выполняться через HTTPS.

Базовый URL

https://api.billionverify.com/v1

Спецификация OpenAPI

Полная спецификация API доступна в формате OpenAPI 3.0:

Вы можете импортировать спецификацию OpenAPI в такие инструменты, как Postman, Insomnia, или использовать её для генерации клиентских библиотек.

Аутентификация

Все API-запросы требуют аутентификации с использованием Bearer-токена в заголовке Authorization:

BILLIONVERIFY-API-KEY: YOUR_API_KEY

Получите API-ключ в панели управления BillionVerify.

Пример

curl -X POST https://api.billionverify.com/v1/verify/single \
  -H "BILLIONVERIFY-API-KEY: sk_xxx" \
  -H "Content-Type: application/json" \
  -d '{"email": "test@example.com"}'

Лимиты запросов

ЭндпоинтЛимит
Одиночная верификация (/verify/single)6 000 запросов/минуту
Массовая верификация (/verify/bulk)1 500 запросов/минуту
Загрузка файла (/verify/file)300 запросов/минуту
Проверка одноразовых email (/verify/disposable)6 000 запросов/минуту
Другие эндпоинты (/credits, /webhooks и др.)600 запросов/минуту

Информация о лимитах включена в заголовки ответа:

ЗаголовокОписание
X-RateLimit-LimitМаксимальное количество разрешённых запросов
X-RateLimit-RemainingОставшееся количество запросов в текущем окне
X-RateLimit-ResetUnix-время сброса лимита

При превышении лимита вы получите ответ 429 Too Many Requests:

{
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Rate limit exceeded. Please try again later.",
    "retry_after": 3600
  }
}

Эндпоинты

Верификация одного email

Проверка одного email-адреса с детальными результатами.

POST /verify/single

Запрос

{
  "email": "user@example.com",
  "check_smtp": false
}

Параметры

ПараметрТипОбязателенПо умолчаниюОписание
emailstringДа-Email-адрес для проверки
check_smtpbooleanНетfalseПроверка SMTP-почтового ящика в реальном времени
force_refreshbooleanНетfalseПропустить кэш и принудительно выполнить проверку

Ответ

{
  "email": "user@example.com",
  "status": "valid",
  "result": {
    "deliverable": true,
    "valid_format": true,
    "valid_domain": true,
    "valid_mx": true,
    "disposable": false,
    "role": false,
    "catchall": false,
    "free": false,
    "smtp_valid": true
  },
  "score": 0.95,
  "reason": null,
  "credits_used": 1
}

Поля ответа

ПолеТипОписание
emailstringПроверенный email-адрес
statusstringСтатус верификации: valid, invalid, unknown, catchall
resultobjectДетальные результаты верификации
scorenumberОценка уверенности (0.0 - 1.0)
reasonstringПричина статуса invalid/unknown (может быть null)
credits_usedintegerКоличество использованных кредитов

Поля объекта result

ПолеТипОписание
deliverablebooleanМожет ли email получать сообщения
valid_formatbooleanКорректен ли синтаксис email
valid_domainbooleanСуществует ли домен
valid_mxbooleanЕсть ли у домена MX-записи
disposablebooleanЯвляется ли email одноразовым сервисом
rolebooleanЯвляется ли email ролевым (info@, support@)
catchallbooleanПринимает ли домен все письма
freebooleanЯвляется ли email от бесплатного провайдера
smtp_validbooleanПрошла ли SMTP-верификация

Пакетная верификация email

Синхронная верификация нескольких email-адресов. Подходит для небольших пакетов (максимум 50 email).

POST /verify/bulk

Запрос

{
  "emails": ["user1@example.com", "user2@example.com", "user3@example.com"],
  "check_smtp": false
}

Параметры

ПараметрТипОбязателенПо умолчаниюОписание
emailsarrayДа-Массив email-адресов (макс: 50)
check_smtpbooleanНетtrueВыполнять SMTP-верификацию

Ответ

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "results": [
      {
        "email": "user1@example.com",
        "status": "valid",
        "score": 0.95,
        "is_deliverable": true,
        "is_disposable": false,
        "is_catchall": false,
        "is_role": false,
        "is_free": false,
        "domain": "example.com",
        "check_smtp": false,
        "reason": null,
        "credits_used": 1
      }
    ],
    "total_emails": 3,
    "valid_emails": 2,
    "invalid_emails": 1,
    "credits_used": 3,
    "process_time": 2500
  }
}

Проверка кредитов

Получение текущего баланса кредитов и информации об использовании.

GET /credits

Ответ

{
  "available": 9500,
  "used": 500,
  "total": 10000,
  "plan": "Professional",
  "resets_at": "2025-02-01T00:00:00Z",
  "rate_limit": {
    "requests_per_hour": 10000,
    "remaining": 9850
  }
}

Проверка одноразовых email

Проверьте, относится ли email-адрес к известному провайдеру одноразовых (временных) email. Этот эндпоинт бесплатный — он выполняет поиск домена в памяти и не расходует кредиты.

POST /verify/disposable
GET  /verify/disposable?email=user@example.com

Запрос (POST)

{
  "email": "user@example.com"
}

Параметры

ПараметрТипОбязателенОписание
emailstringДаEmail-адрес для проверки

Примечания

  • Этот эндпоинт не расходует кредиты.
  • check_smtp не поддерживается. Для полной SMTP-верификации используйте /verify/single, /verify/bulk или /verify/file с check_smtp: true.
  • Поддерживается как POST с JSON-телом, так и GET с параметром запроса ?email=.

Ответ

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "email": "user@mailnull.com",
    "domain": "mailnull.com",
    "is_disposable": true,
    "checked_at": "2026-05-19T10:00:00Z"
  }
}

Поля ответа

ПолеТипОписание
emailstringНормализованный email-адрес (в нижнем регистре)
domainstringДоменная часть email (ASCII / Punycode)
is_disposablebooleantrue, если домен является известным одноразовым
checked_atstringМетка времени UTC проверки (RFC 3339)

Верификация файла

Загрузите файл с email-адресами для массовой проверки. Поддерживаются файлы CSV, Excel и текстовые файлы.

POST /verify/file
Content-Type: multipart/form-data

Запрос

ПолеТипОбязателенОписание
filefileДаФайл с email-адресами (CSV, XLSX, XLS, TXT). Макс 20MB

Ответ

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "job_id": "7143874e-21c5-43c1-96f3-2b52ea41ae6a",
    "file_name": "emails.csv",
    "total_emails": 1000,
    "status": "processing",
    "created_at": "2026-02-04T10:30:00Z"
  }
}

Получение статуса задания файла

Проверка статуса задания верификации файла.

GET /verify/file/{job_id}

Ответ

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "job_id": "7143874e-21c5-43c1-96f3-2b52ea41ae6a",
    "file_name": "emails.csv",
    "status": "completed",
    "total_emails": 1000,
    "valid_emails": 850,
    "invalid_emails": 100,
    "role_emails": 30,
    "catchall_emails": 10,
    "unknown_emails": 10,
    "disposable_emails": 0,
    "credits_used": 990,
    "progress_percent": 100,
    "created_at": "2026-02-04T10:30:00Z",
    "completed_at": "2026-02-04T10:35:00Z"
  }
}

Скачать результаты задания файла

Скачивание результатов верификации для завершённого задания.

GET /verify/file/{job_id}/results

Параметры запроса

ПараметрТипОписание
validbooleanФильтровать только валидные email
invalidbooleanФильтровать только невалидные email
catchallbooleanВключить catch-all email
rolebooleanВключить ролевые email

Ответ

Возвращает CSV-файл с результатами верификации.


Вебхуки

Получайте уведомления в реальном времени о завершении заданий верификации файлов.

Создание вебхука

POST /webhooks

Запрос

{
  "url": "https://your-app.com/webhooks/billionverify",
  "events": ["file.completed", "file.failed"]
}

Параметры

ПараметрТипОбязателенОписание
urlstringДаHTTPS URL для получения уведомлений вебхука
eventsarrayДаСобытия для подписки

Ответ

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "id": "673f3bff-81ea-4730-9cef-af1eb7f134bf",
    "url": "https://your-app.com/webhooks/billionverify",
    "events": ["file.completed", "file.failed"],
    "secret": "5c609e6893ab3b65ce8940549a030bc165762fe171e0b38f880bd570099619bf",
    "is_active": true,
    "created_at": "2026-02-04T10:30:00Z",
    "updated_at": "2026-02-04T10:30:00Z"
  }
}

Важно: secret возвращается только при создании вебхука. Храните его безопасно — он понадобится для проверки подписей вебхуков.


Список вебхуков

GET /webhooks

Ответ

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "webhooks": [
      {
        "id": "673f3bff-81ea-4730-9cef-af1eb7f134bf",
        "url": "https://your-app.com/webhooks/billionverify",
        "events": ["file.completed", "file.failed"],
        "is_active": true,
        "created_at": "2026-02-04T10:30:00Z",
        "updated_at": "2026-02-04T10:30:00Z"
      }
    ],
    "total": 1
  }
}

Удаление вебхука

DELETE /webhooks/{webhook_id}

Ответ

{
  "success": true,
  "code": "0",
  "message": "Success",
  "data": {
    "message": "Webhook deleted successfully",
    "webhook_id": "673f3bff-81ea-4730-9cef-af1eb7f134bf"
  }
}

События вебхуков

СобытиеОписание
file.completedЗадание верификации файла успешно завершено
file.failedЗадание верификации файла завершилось с ошибкой

Полезная нагрузка вебхука

При возникновении события мы отправляем POST-запрос на ваш URL вебхука:

{
  "event": "file.completed",
  "timestamp": "2026-02-04T10:35:00Z",
  "data": {
    "job_id": "7143874e-21c5-43c1-96f3-2b52ea41ae6a",
    "file_name": "emails.csv",
    "total_emails": 1000,
    "valid_emails": 850,
    "invalid_emails": 100,
    "role_emails": 30,
    "catchall_emails": 10,
    "unknown_emails": 10,
    "disposable_emails": 0,
    "credits_used": 990,
    "process_time_seconds": 125.5,
    "download_url": "https://api.billionverify.com/v1/verify/file/7143874e-21c5-43c1-96f3-2b52ea41ae6a/results",
    "direct_download_url": "https://download.example.com/results_7143874e.csv?signature=...",
    "direct_download_expires_at": "2026-02-04T11:35:00Z"
  }
}

Заголовки вебхука

ЗаголовокОписание
X-Webhook-EventТип события (напр. file.completed)
X-Webhook-SignatureПодпись HMAC-SHA256 для верификации
X-Webhook-TimestampUnix-метка времени отправки вебхука
User-AgentBillionVerify-Webhook/1.0

Проверка подписей вебхуков

Чтобы убедиться, что вебхук отправлен BillionVerify, вычислите подпись HMAC-SHA256:

const crypto = require('crypto');

function verifyWebhookSignature(rawBody, timestamp, signature, secret) {
  const signedPayload = `${timestamp}.${rawBody}`;
  const expectedSignature =
    'sha256=' +
    crypto.createHmac('sha256', secret).update(signedPayload).digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expectedSignature),
  );
}
import hmac
import hashlib

def verify_webhook_signature(raw_body: bytes, timestamp: str, signature: str, secret: str) -> bool:
    signed_payload = timestamp.encode() + b"." + raw_body
    expected = 'sha256=' + hmac.new(
        secret.encode(),
        signed_payload,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(signature, expected)

Статусы верификации

СтатусОценкаЗначениеРекомендуемое действие
valid0.9+Email существует и может получать сообщенияБезопасно отправлять
invalid0.1Email не существует или не может получатьУдалить из списка
unknown0.5Не удалось определить валидностьПовторить позже или действовать с осторожностью
risky0.4Email может иметь проблемы с доставкойДействовать с осторожностью, отслеживать возвраты
disposable0.3Email от одноразового сервисаРассмотреть удаление
catchall0.7Домен принимает все письма (catch-all)Отслеживать возвраты
role0.6Ролевой email (info@, support@)Обычно доставляется, может иметь низкую вовлечённость

Ответы об ошибках

Все ошибки следуют единому формату:

{
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable error message",
    "details": "Additional context (optional)"
  }
}

HTTP-коды статуса

КодОписание
200Успех
400Неверный запрос - Некорректные параметры
401Не авторизован - Неверный или отсутствующий API-ключ
403Запрещено - Недостаточно прав
404Не найдено - Ресурс не существует
429Слишком много запросов - Превышен лимит
500Внутренняя ошибка сервера
503Сервис недоступен

Коды ошибок

КодHTTP-статусОписание
INVALID_API_KEY401API-ключ неверен или отсутствует
RATE_LIMIT_EXCEEDED429Слишком много запросов
INSUFFICIENT_CREDITS403Недостаточно кредитов
INVALID_EMAIL400Формат email некорректен
INVALID_REQUEST400Тело запроса некорректно
JOB_NOT_FOUND404ID пакетного задания не найден
TIMEOUT504Таймаут верификации

Лучшие практики

1. Используйте переменные окружения

Никогда не храните API-ключи в коде:

// Правильно
const apiKey = process.env.BV_API_KEY;

// Неправильно - не делайте так
const apiKey = 'sk_xxx';

2. Обрабатывайте лимиты запросов

Реализуйте экспоненциальную задержку:

async function verifyWithRetry(email, maxRetries = 3) {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await verify(email);
    } catch (error) {
      if (error.code === 'RATE_LIMIT_EXCEEDED') {
        await sleep(Math.pow(2, i) * 1000);
        continue;
      }
      throw error;
    }
  }
}

3. Используйте пакетную обработку для множества email

Для проверки более 10 email используйте пакетный эндпоинт:

// Правильно - один API-вызов
const job = await client.verifyBulk(emails);

// Неправильно - много отдельных вызовов
for (const email of emails) {
  await client.verify(email);
}

4. Используйте вебхуки для пакетных заданий

Не опрашивайте постоянно; используйте вебхуки:

// Отправка с вебхуком
const job = await client.verifyBulk(emails, {
  webhookUrl: 'https://your-app.com/webhook',
});

SDK

Используйте наши официальные SDK для упрощения интеграции:

Следующие шаги

On this page

Базовый URLСпецификация OpenAPIАутентификацияПримерЛимиты запросовЭндпоинтыВерификация одного emailЗапросПараметрыОтветПоля ответаПоля объекта resultПакетная верификация emailЗапросПараметрыОтветПроверка кредитовОтветПроверка одноразовых emailЗапрос (POST)ПараметрыПримечанияОтветПоля ответаВерификация файлаЗапросОтветПолучение статуса задания файлаОтветСкачать результаты задания файлаПараметры запросаОтветВебхукиСоздание вебхукаЗапросПараметрыОтветСписок вебхуковОтветУдаление вебхукаОтветСобытия вебхуковПолезная нагрузка вебхукаЗаголовки вебхукаПроверка подписей вебхуковСтатусы верификацииОтветы об ошибкахHTTP-коды статусаКоды ошибокЛучшие практики1. Используйте переменные окружения2. Обрабатывайте лимиты запросов3. Используйте пакетную обработку для множества email4. Используйте вебхуки для пакетных заданийSDKСледующие шаги