Limpia una lista de correos por lotes
Lo que vas a construir: una tubería de enviar y recoger que verifica una lista de direcciones como un único trabajo por lotes y luego recupera los resultados calificados — sin un bucle de sondeo propio que mantener.
| Sección | Flujos del lado del servidor |
|---|---|
| Acciones usadas | POST /v1/data/workflows/clean-list:estimatePOST /v1/bulk/jobsGET /v1/bulk/jobs/{job_id}/result |
| Créditos | 1 por dirección comprobada (peor caso) |
| Compatible con clave de prueba | No — necesita una clave real |
| Tiempo estimado | ~15 min |
| Requisitos previos | Una clave qk_live_ con saldo y una lista de direcciones como array o como texto CSV. |
Envía la lista como un solo trabajo
Publica la acción y tus direcciones en el endpoint de lotes, ya sea como array queries o como csv_text. Recibes un identificador de trabajo de inmediato en vez de mantener una conexión abierta durante toda la lista.
# 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 */ } }Recoge los resultados
Consulta el trabajo para ver su estado y luego recupera el resultado cuando haya terminado. Proporciona un webhook_url al enviarlo y te llamaremos nosotros, que es la forma adecuada para cualquier lista de más de unos cientos de direcciones.
# 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.Lee las calificaciones, no solo los veredictos
La verificación devuelve una calificación por dirección en vez de un simple sí o no. Decide tu propio umbral: escribir a una dirección calificada como arriesgada es una decisión de entregabilidad, no de API.
Revierifica periódicamente
La calidad de las direcciones se degrada según la gente cambia de trabajo. Volver a pasar una lista cada trimestre y comparar calificaciones te da una tasa de degradación propia, normalmente más útil que cualquier pasada de verificación aislada.
# 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")Resumen
| Patrón | Cómo |
|---|---|
| Enviar | POST /v1/bulk/jobs con action y queries o csv_text |
| Consultar | GET /v1/bulk/jobs/{job_id} |
| Recoger | GET /v1/bulk/jobs/{job_id}/result |
| Evitar el sondeo | Pasa webhook_url al enviar |
| Forma del coste | Por dirección resuelta, no por dirección enviada |
Lista para producción
- Usa un webhook para cualquier lista de más de unos cientos de direcciones.
- Guarda la calificación, no un booleano — querrás reajustar el umbral más adelante.
- Cotiza la ejecución antes de enviar una lista grande.
- Revierifica cada trimestre y sigue tu propia tasa de degradación.
Siguientes pasos
Ejecuta primero la estimación. No cuesta nada y aplica exactamente la misma aritmética que el contador.