Очистите список адресов пакетом
Что вы построите: конвейер «отправить и забрать», который проверяет список адресов как одну пакетную задачу, а затем забирает оценённые результаты — без собственного цикла опроса, который нужно сопровождать.
| Раздел | Серверные сценарии |
|---|---|
| Используемые действия | POST /v1/data/workflows/clean-list:estimatePOST /v1/bulk/jobsGET /v1/bulk/jobs/{job_id}/result |
| Кредиты | 1 за проверенный адрес (худший случай) |
| Работает с тестовым ключом | Нет — нужен боевой ключ |
| Время на выполнение | ~15 мин |
| Требования | Ключ qk_live_ с балансом и список адресов в виде массива или CSV-текста. |
Отправьте список одной задачей
Отправьте действие и ваши адреса на пакетный эндпоинт либо массивом queries, либо как csv_text. Вы сразу получаете идентификатор задачи, а не держите соединение открытым на весь список.
# Exactly one input source: queries[] or csv_text.
curl -X POST https://api.qannasapi.com/v1/bulk/jobs \
-H "Authorization: Bearer $QANNAS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"action": "verify_email",
"queries": ["jane@acme.example", "sam@acme.example"],
"webhook_url": "https://yourapp.example/hooks/qannas"
}'
# < 200 { "status": "OK", "data": { /* job id */ } }Заберите результаты
Запросите задачу, чтобы увидеть её состояние, затем заберите результат после завершения. Укажите webhook_url при отправке, и мы позовём вас сами — так правильнее для любого списка больше нескольких сотен адресов.
# Poll the job …
curl https://api.qannasapi.com/v1/bulk/jobs/$JOB_ID \
-H "Authorization: Bearer $QANNAS_API_KEY"
# … then pull the graded results once it has finished.
curl https://api.qannasapi.com/v1/bulk/jobs/$JOB_ID/result \
-H "Authorization: Bearer $QANNAS_API_KEY"
# Supplying webhook_url on submission skips this loop entirely.Читайте оценки, а не только вердикты
Проверка возвращает оценку по каждому адресу, а не голое «да» или «нет». Порог задавайте сами: писать на адрес с рискованной оценкой — решение о доставляемости, а не про API.
Перепроверяйте по расписанию
Качество адресов деградирует по мере того, как люди меняют работу. Прогон списка раз в квартал со сравнением оценок даёт вам собственную скорость деградации, что обычно полезнее любой отдельной проверки.
# Re-run quarterly and diff the grades. Your own decay rate is
# more useful than any single verification pass.
previous = load_grades("2026-Q2")
current = load_grades("2026-Q3")
decayed = [e for e in previous
if ok(previous[e]) and not ok(current.get(e))]
print(f"{len(decayed) / len(previous):.1%} decayed this quarter")Итоги
| Приём | Как |
|---|---|
| Отправка | POST /v1/bulk/jobs с action и queries либо csv_text |
| Опрос | GET /v1/bulk/jobs/{job_id} |
| Получение | GET /v1/bulk/jobs/{job_id}/result |
| Обойтись без опроса | Передайте webhook_url при отправке |
| Форма стоимости | За разрешённый адрес, а не за отправленный |
Чек-лист перед продакшеном
- Используйте вебхук для любого списка больше нескольких сотен адресов.
- Храните оценку, а не булево значение — порог захочется пересмотреть позже.
- Оцените запуск перед отправкой большого списка.
- Перепроверяйте раз в квартал и отслеживайте собственную скорость деградации.
Дальше
Сначала запустите оценку. Она ничего не стоит и использует ровно ту же арифметику, что и счётчик.