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:

BV-API-KEY: YOUR_API_KEY

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

Пример

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

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

ТарифЗапросов/ЧасЗапросов/День
Free1001,000
Starter1,00010,000
Professional10,000100,000
EnterpriseИндивидуальноИндивидуально

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

ЗаголовокОписание
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": true
}

Параметры

ПараметрТипОбязателенПо умолчаниюОписание
emailstringДа-Email-адрес для проверки
smtp_checkbooleanНетtrueВыполнять SMTP-проверку почтового ящика
timeoutintegerНет5000Таймаут запроса в миллисекундах (макс: 30000)

Ответ

{
  "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": true
}

Параметры

ПараметрТипОбязателенПо умолчаниюОписание
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",
        "smtp_check": true,
        "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-адресами для массовой проверки. Поддерживаются файлы 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,
    "result_file_path": "results/2026/02/04/result_xxx.csv",
    "download_url": ""
  }
}

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

ЗаголовокОписание
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(payload, signature, secret) {
  const expectedSignature = 'sha256=' +
    crypto.createHmac('sha256', secret)
      .update(payload)
      .digest('hex');

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

def verify_webhook_signature(payload: bytes, signature: str, secret: str) -> bool:
    expected = 'sha256=' + hmac.new(
        secret.encode(),
        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 = 'bv_live_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