QannasAPI

Очистите список адресов пакетом

Что вы построите: конвейер «отправить и забрать», который проверяет список адресов как одну пакетную задачу, а затем забирает оценённые результаты — без собственного цикла опроса, который нужно сопровождать.

РазделСерверные сценарии
Используемые действияPOST /v1/data/workflows/clean-list:estimatePOST /v1/bulk/jobsGET /v1/bulk/jobs/{job_id}/result
Кредиты1 за проверенный адрес (худший случай)
Работает с тестовым ключомНет — нужен боевой ключ
Время на выполнение~15 мин
ТребованияКлюч qk_live_ с балансом и список адресов в виде массива или CSV-текста.

Отправьте список одной задачей

Отправьте действие и ваши адреса на пакетный эндпоинт либо массивом queries, либо как csv_text. Вы сразу получаете идентификатор задачи, а не держите соединение открытым на весь список.

submit.sh
# 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 при отправке, и мы позовём вас сами — так правильнее для любого списка больше нескольких сотен адресов.

collect.sh
# 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.

Перепроверяйте по расписанию

Качество адресов деградирует по мере того, как люди меняют работу. Прогон списка раз в квартал со сравнением оценок даёт вам собственную скорость деградации, что обычно полезнее любой отдельной проверки.

decay.py
# 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 при отправке
Форма стоимостиЗа разрешённый адрес, а не за отправленный

Чек-лист перед продакшеном

  • Используйте вебхук для любого списка больше нескольких сотен адресов.
  • Храните оценку, а не булево значение — порог захочется пересмотреть позже.
  • Оцените запуск перед отправкой большого списка.
  • Перепроверяйте раз в квартал и отслеживайте собственную скорость деградации.

Дальше

Сначала запустите оценку. Она ничего не стоит и использует ровно ту же арифметику, что и счётчик.