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.

اقرأ الدرجات لا الأحكام فقط

يعيد التحقق درجةً لكل عنوان بدل نعم أو لا مجردة. حدِّد عتبتك بنفسك: مراسلة عنوان مُقيَّم كمحفوف بالمخاطر قرار يخص قابلية التسليم لديك، لا قرار واجهة برمجية.

أعد التحقق دوريًا

تتآكل جودة العناوين مع تغيير الناس لوظائفهم. إعادة تشغيل القائمة كل ربع سنة ومقارنة الدرجات يمنحك معدل تآكل لبياناتك أنت، وهو أنفع عادةً من أي عملية تحقق مفردة.

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 عند الإرسال
شكل التكلفةلكل عنوان يُحسم، لا لكل عنوان يُرسل

قائمة التحقق قبل الإنتاج

  • استخدم webhook لأي قائمة تتجاوز بضع مئات من العناوين.
  • خزِّن الدرجة لا قيمة منطقية — ستحتاج لإعادة ضبط العتبة لاحقًا.
  • سعِّر التشغيل قبل إرسال قائمة كبيرة.
  • أعد التحقق كل ربع سنة وتتبَّع معدل التآكل لديك.

الخطوات التالية

شغِّل التقدير أولًا. لا يكلف شيئًا، وهو الحساب نفسه الذي سيطبقه العدّاد.