Email validation infrastructure. 30+ IP across 3 continents. Per-provider routing, catch-all detection, Mail.ru-specialized adapter, MailWizz integration.
Обратись к админу или создай через master token:
curl -X POST https://vader.orm-bin.ru/api/admin/keys \
-H "Authorization: Bearer <MASTER_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"name": "My App", "permissions": {"verify": true, "batch": true}, "rate_limit": 1000}'
В ответе будет key — сохрани, он показывается один раз:
{
"id": 1,
"key": "vdr_6QdLeb3P7IRZ6WFvOGhWiP1mfeLSfU2bV5fAHHLiW6g",
"prefix": "vdr_6QdLeb3P"
}
curl -X POST https://vader.orm-bin.ru/api/verify \
-H "Authorization: Bearer vdr_6QdLeb3P..." \
-H "Content-Type: application/json" \
-d '{"email": "test@mail.ru"}'
curl -X POST https://vader.orm-bin.ru/api/batch \
-H "Authorization: Bearer vdr_..." \
-F "file=@list.csv" \
-F "name=My batch" \
-F "junk_filter=true" \
-F "split_multi=true" \
-F "webhook_url=https://my-app.com/hook"
Все запросы требуют заголовок Authorization: Bearer <token>.
| Тип | Формат | Использование |
|---|---|---|
| Master Token | hex (64 chars) |
Admin доступ ко всем endpoints включая /api/admin/* |
| Client Key | vdr_* |
Permissions ограничены (verify/batch/mailwizz), rate limit per hour |
| Permission | Доступ |
|---|---|
admin | Полный — управление ключами, всё что угодно |
verify | POST /api/verify (single email) |
batch | POST /api/batch, /api/batch/preview, /api/process-cards |
mailwizz | Push в MailWizz |
stats | GET /api/stats и аналитика |
POST /api/verify
Проверить один email в реальном времени (~1-2 сек)
{"email": "user@example.com"}
POST /api/batch/preview
Превью CSV — статистика junk/duplicates/multi-cell до запуска
multipart/form-data: file=@list.csv
POST /api/batch
Запустить batch валидацию CSV. Поддерживает webhook_url для уведомления о завершении.
multipart/form-data:
file=@list.csv (или cache_key из preview)
name=My Batch
junk_filter=true
split_multi=true
deduplicate=true
webhook_url=https://...
POST /api/process-cards
⭐ Full pipeline: JSON-карточки → split → filter → validate → MailWizz push → webhook
{
"cards": [
{"email": "ivan@x.com", "company": "ООО Тест", "name": "Иван"},
{"email": "sales@y.com, info@y.com", "company": "Y Ltd"}
],
"name": "API Batch",
"junk_filter": true,
"split_multi": true,
"mailwizz_server": "rf-email-1",
"mailwizz_list_uid": "hn2cssaw7jaf2",
"webhook_url": "https://..."
}
GET /api/jobs?limit=30&search=...&status=running
Список последних jobs с поиском и фильтром
GET /api/jobs/{id}
Статус job — progress, counts, quality_score
GET /api/jobs/{id}/breakdown
Разбивка по провайдерам с Valid/Risky/Invalid
GET /api/jobs/{id}/validations
Постранично все валидации с фильтрами status/provider/search
GET /api/jobs/{id}/download?only=valid&mw_format=true
Скачать CSV. only: valid / valid_risky / invalid / risky / all. mw_format=true для MailWizz формата (Email без кавычек, остальные в "")
POST /api/jobs/{id}/stop
Остановить running job
POST /api/jobs/{id}/restart
Перезапустить (продолжит с того места)
PATCH /api/jobs/{id}
Переименовать. {"name": "..."}
GET /api/mailwizz/servers
Список 6 серверов (RU x2, USA x2, EU x2) с гео
GET /api/mailwizz/{server}/lists
Подписчик-листы сервера
POST /api/mailwizz/push
Залить job → MailWizz list
{
"job_id": 5,
"server": "rf-email-1",
"list_uid": "hn2cssaw7jaf2",
"only_status": "valid"
}
GET /api/health
Базовая проверка (public, без auth)
GET /api/health/full
Master + probe-ноды + 24h-статистика
GET /api/stats
Полная статистика валидаций
GET /api/stats/providers
По провайдерам за 24ч с fail-rate
GET /api/stats/timeline?days=7
Валидации по дням
GET /api/search?q=email
Глобальный поиск по всей истории валидаций
POST /api/admin/keys
Создать API key
GET /api/admin/keys
Список всех keys (метаданные)
PATCH /api/admin/keys/{id}
Включить/отключить, менять rate_limit
DELETE /api/admin/keys/{id}
Удалить ключ полностью
import requests
TOKEN = 'vdr_6QdLeb3P7IRZ6WFvOGhWiP1mfeLSfU2bV5fAHHLiW6g'
BASE = 'https://vader.orm-bin.ru'
# Single verify
r = requests.post(f'{BASE}/api/verify',
headers={'Authorization': f'Bearer {TOKEN}'},
json={'email': 'test@mail.ru'})
print(r.json())
# Full pipeline — leads to MailWizz
r = requests.post(f'{BASE}/api/process-cards',
headers={'Authorization': f'Bearer {TOKEN}'},
json={
'cards': [
{'email': 'ivan@x.com', 'company': 'ООО Тест', 'name': 'Иван'},
],
'name': 'API Batch',
'mailwizz_server': 'rf-email-1',
'mailwizz_list_uid': 'hn2cssaw7jaf2',
'webhook_url': 'https://my-app.com/hook'
})
job_id = r.json()['job_id']
print('Started job:', job_id)
const TOKEN = 'vdr_6QdLeb3P7IRZ6WFvOGhWiP1mfeLSfU2bV5fAHHLiW6g';
const BASE = 'https://vader.orm-bin.ru';
const res = await fetch(`${BASE}/api/verify`, {
method: 'POST',
headers: {
'Authorization': `Bearer ${TOKEN}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({email: 'test@mail.ru'}),
});
const data = await res.json();
console.log(data);
# Verify
curl -X POST https://vader.orm-bin.ru/api/verify \
-H "Authorization: Bearer vdr_..." \
-H "Content-Type: application/json" \
-d '{"email": "test@mail.ru"}'
# Batch CSV upload
curl -X POST https://vader.orm-bin.ru/api/batch \
-H "Authorization: Bearer vdr_..." \
-F "file=@list.csv" \
-F "name=My batch" \
-F "junk_filter=true"
# Download cleaned CSV
curl -O -J -H "Authorization: Bearer vdr_..." \
"https://vader.orm-bin.ru/api/jobs/5/download?only=valid&mw_format=true"
При завершении job (если был webhook_url) на твой URL отправится POST:
{
"job_id": 5,
"name": "API Batch",
"status": "completed",
"processed": 1500,
"valid": 850,
"risky": 350,
"invalid": 300,
"quality_score": 78
}
| Code | Meaning |
|---|---|
401 | Missing Bearer token |
403 | Invalid token / IP not allowed / missing permission |
404 | Job/key not found |
413 | File too large (max 50 MB / 50K cards) |
429 | Rate limit exceeded (per hour) |
500 | Internal error |
502 | MailWizz upstream error |