Разработчикам
API для проверки email, который просто работает
Проверяйте один адрес в реальном времени или отправляйте целый список пакетом. Все запросы используют HTTPS и возвращают JSON. Ключи API создаются в панели управления в разделе «Ключи API».
- REST и JSON
- Пакетные обратные вызовы
- Те же кредиты, что и в панели управления
Аутентификация
Передавайте ключ API как bearer-токен в заголовке Authorization в каждом запросе. Храните ключи на своём сервере. Никогда не размещайте их в коде браузера или в мобильных приложениях.
Authorization: Bearer YOUR_API_KEY
Базовый URL для всех эндпоинтов: https://bouncebell.com/api/v1.
Проверить один адрес
GET https://bouncebell.com/api/v1/verify
| Параметр | Обязательно | Описание |
|---|---|---|
email | Да | Адрес для проверки. Закодируйте его для URL. |
timeout | Нет | Время ожидания ответа почтового сервера в секундах, от 3 до 30. По умолчанию 10. Если время истекло, статус будет unknown, а кредит не списывается. |
Пример
curl "https://bouncebell.com/api/v1/verify?email=rini.elizabeth%40acme-foods.example" \
-H "Authorization: Bearer YOUR_API_KEY"
{
"email": "rini.elizabeth@acme-foods.example",
"status": "valid",
"reason": "mailbox_exists",
"domain": "acme-foods.example",
"mx_record": "mx1.acme-foods.example",
"disposable": false,
"role": false,
"free_provider": false,
"catch_all": false,
"did_you_mean": null,
"checked_at": "2026-10-30T09:30:12Z",
"credits_used": 1
}
Поля результата
| Поле | Тип | Описание |
|---|---|---|
email | string | Адрес в том виде, в каком вы его отправили. |
status | string | Итоговый результат. См. статусы. |
reason | string | Причина результата, например mailbox_not_found или no_mail_server. |
domain | string | Доменная часть в нижнем регистре. |
mx_record | string or null | Почтовый сервер с наивысшим приоритетом. |
disposable | boolean | True, если домен является сервисом временных ящиков. |
role | boolean | True для общих ящиков, например info@ или support@. |
free_provider | boolean | True для бесплатных почтовых сервисов, например Gmail. |
catch_all | boolean | True, если домен принимает любой адрес. |
did_you_mean | string or null | Исправленный адрес, если в домене похоже на опечатку. |
checked_at | string | Время проверки в формате ISO 8601 UTC. |
credits_used | integer | 1 или 0, если статус unknown. |
Статусы
| Статус | Значение | Рекомендуемое действие |
|---|---|---|
valid | Ящик существует и принимает почту. | Отправить |
invalid | Адрес, домен или ящик не существует. | Удалить |
disposable | Сервис временных почтовых ящиков. | Удалить |
catch_all | Домен принимает все адреса, поэтому подтвердить ящик невозможно. | Проверить |
role | Существующий общий ящик. | Проверить |
unknown | Почтовый сервер не дал ответ вовремя. Кредит не списывается. | Повторите позже |
Пакеты
Отправляйте до 100 000 адресов в одном запросе. Пакет обрабатывается в фоне: запрашивайте его статус или укажите callback_url, и мы вызовем его, когда пакет будет готов.
Создать пакет
POST https://bouncebell.com/api/v1/batches
curl -X POST "https://bouncebell.com/api/v1/batches" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "October import", "emails": ["a@example.com", "b@example.com"],
"callback_url": "https://yourapp.example/hooks/bouncebell"}'
{ "id": "bat_8f2k1q3m9x7w4p", "status": "queued", "total": 2, "done": 0 }
При создании пакета кредиты резервируются за каждый уникальный адрес, а после завершения кредиты за неизвестные результаты возвращаются. На адрес обратного вызова приходит POST-запрос с {"event": "batch.completed", "batch_id": "...", "status": "done", "counts": {...}}. Адреса обратного вызова должны использовать HTTPS.
Проверить ход выполнения
GET https://bouncebell.com/api/v1/batches/{id}
{ "id": "bat_8f2k1q3m9x7w4p", "status": "running", "total": 2, "done": 1 }
Статус: queued, running или done. При статусе done ответ также содержит counts по статусам.
Скачать результаты
GET https://bouncebell.com/api/v1/batches/{id}/results
По умолчанию возвращает JSON. Добавьте ?format=csv, чтобы получить файл CSV. Каждая строка содержит те же поля, что и проверка одного адреса.
Кредиты
GET https://bouncebell.com/api/v1/credits
{ "credits_remaining": 33420 }
Ошибки и ограничения
При ошибке возвращается JSON с кодом error и понятным сообщением message.
| HTTP-код | Ошибка | Что делать |
|---|---|---|
| 400 | bad_request | Параметр отсутствует или указан неверно. Прочитайте сообщение. |
| 401 | invalid_key | Убедитесь, что ключ указан верно и не был отозван. |
| 402 | no_credits | Купите ещё кредитов. |
| 403 | email_not_confirmed | Откройте ссылку подтверждения, которую мы отправили вам при регистрации. |
| 404 | not_found | Пакет не существует или был удалён через 30 дней. |
| 429 | rate_limited | Снизьте частоту запросов. Подождите столько секунд, сколько указано в заголовке Retry-After. |
| 500 | server_error | Повторите запрос с небольшой задержкой. Если ошибка повторяется, обратитесь в поддержку. |
Проверки отдельных адресов ограничены 20 запросами в секунду на ключ. Если нужно больше, напишите нам.