QannasAPI

قدِّر قبل أن تستدعي: سعِّر أي إجراء مجانًا

ما ستبنيه: نمطًا من خطوتين يقتبس تكلفة الاستدعاء، ويقارنها بميزانية، ثم ينفذها فقط عند اجتيازها. ستنتهي بمساعد يمكنك لفّه حول أي إجراء في الكتالوج.

القسمأساسيات الواجهة
الإجراءات المستخدمةPOST /v1/data/{action}:estimatePOST /v1/data/contacts/find-email
الائتماناتمجاني — هذه النقاط لا تُحاسَب أبدًا
آمن مع مفتاح الاختبارنعم — يعمل على qk_test_ بصفر ائتمان
مدة الإنجاز~5 دقيقة
المتطلباتمساحة عمل، ومفتاح qk_test_ أو qk_live_، و curl أو أي عميل HTTP.

نقطة نهاية التقدير

لكل إجراء مُسعَّر تقدير مقابل. خذ مسار الإجراء، وأضف :estimate، وأرسل الجسم نفسه الذي كنت سترسله على أي حال. تستعيد التكلفة الائتمانية لذلك الاستدعاء بالتحديد ولا تُحاسَب على السؤال.

estimate.sh
# Append :estimate to any action path. Costs nothing.
curl -X POST https://api.qannasapi.com/v1/data/contacts/find-email:estimate \
  -H "Authorization: Bearer $QANNAS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "Jane Doe, Acme Logistics"}'

اقرأ عرض السعر

تستخدم الاستجابة الغلاف القياسي — status و request_id و data — مع عرض السعر داخل data. ولأن التقدير مجاني، فإن ترويسة X-Credits-Charged على أي تقدير تساوي 0 دائمًا.

estimate response
# < HTTP/1.1 200 OK
# < X-Credits-Charged: 0     # asking is always free

{
  "status": "OK",
  "request_id": "req_...",
  "data": { /* the quote for this exact call */ }
}

قدِّر، تحقق، ثم شغِّل

الشكل المفيد هو بوابة: قدِّر، قارن بأي ميزانية لديك، ونفِّذ فقط إن اجتازت. كلا الاستدعاءين يأخذان الجسم نفسه، فتكلفك البوابة طلبًا إضافيًا واحدًا وصفر ائتمان.

quote_then_call.py
import os, requests

API = "https://api.qannasapi.com"
HEADERS = {"Authorization": f"Bearer {os.environ['QANNAS_API_KEY']}"}

def quote_then_call(action, body, budget):
    # 1 — free quote, same body as the real call
    quote = requests.post(
        f"{API}/v1/data/{action}:estimate", json=body, headers=HEADERS
    ).json()

    # 2 — gate on your own budget before spending anything
    if cost_of(quote) > budget:
        raise RuntimeError("quote exceeds budget")

    # 3 — run it
    return requests.post(
        f"{API}/v1/data/{action}", json=body, headers=HEADERS
    )

سير العمل يُسعَّر بالطريقة نفسها

سير العمل على الخادم يستخدم dry_run بدل لاحقة :estimate — أرسل dry_run: true فتحصل على تفصيل كل خطوة دون تشغيل أي شيء. الفكرة نفسها، والتكلفة صفر نفسها.

workflow-quote.sh
# Workflows use dry_run instead of a :estimate suffix.
curl -X POST https://api.qannasapi.com/v1/data/workflows/lead-list \
  -H "Authorization: Bearer $QANNAS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"inputs": {"industry": "logistics"}, "limit": 25, "dry_run": true}'

# < X-Credits-Charged: 0   # a dry run never bills

الخلاصة

النمطالطريقة
تسعير إجراءPOST /v1/data/{action}:estimate بالجسم الذي تنوي إرساله
تسعير سير عملPOST /v1/data/workflows/{name} مع dry_run: true
تكلفة التقديرصفر — X-Credits-Charged دائمًا 0 على التقدير
الغلاف{ status, request_id, data } — نفسه في التقديرات والاستدعاءات الفعلية
معنى الرقمأسوأ الحالات، بافتراض أن كل خطوة ستجد شيئًا

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

  • ضع الاستدعاءات المكلفة أو التي يطلقها المستخدم خلف بوابة تقدير.
  • ضع الميزانية على أساس التقدير، ثم سوِّ الحساب على أساس X-Credits-Charged.
  • عروض الأسعار تظل تعمل عند رصيد صفر — التقدير مجاني دائمًا.
  • أرسل للتقدير الجسم نفسه المرسل للاستدعاء الفعلي، وإلا لن يتطابق العرض.

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

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