QannasAPI

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ónFlujos del lado del servidor
Acciones usadasPOST /v1/data/workflows/clean-list:estimatePOST /v1/bulk/jobsGET /v1/bulk/jobs/{job_id}/result
Créditos1 por dirección comprobada (peor caso)
Compatible con clave de pruebaNo — necesita una clave real
Tiempo estimado~15 min
Requisitos previosUna 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.

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 */ } }

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.

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.

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.

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")

Resumen

PatrónCómo
EnviarPOST /v1/bulk/jobs con action y queries o csv_text
ConsultarGET /v1/bulk/jobs/{job_id}
RecogerGET /v1/bulk/jobs/{job_id}/result
Evitar el sondeoPasa webhook_url al enviar
Forma del costePor 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.