قدِّر قبل أن تستدعي: سعِّر أي إجراء مجانًا
ما ستبنيه: نمطًا من خطوتين يقتبس تكلفة الاستدعاء، ويقارنها بميزانية، ثم ينفذها فقط عند اجتيازها. ستنتهي بمساعد يمكنك لفّه حول أي إجراء في الكتالوج.
| القسم | أساسيات الواجهة |
|---|---|
| الإجراءات المستخدمة | POST /v1/data/{action}:estimatePOST /v1/data/contacts/find-email |
| الائتمانات | مجاني — هذه النقاط لا تُحاسَب أبدًا |
| آمن مع مفتاح الاختبار | نعم — يعمل على qk_test_ بصفر ائتمان |
| مدة الإنجاز | ~5 دقيقة |
| المتطلبات | مساحة عمل، ومفتاح qk_test_ أو qk_live_، و curl أو أي عميل HTTP. |
نقطة نهاية التقدير
لكل إجراء مُسعَّر تقدير مقابل. خذ مسار الإجراء، وأضف :estimate، وأرسل الجسم نفسه الذي كنت سترسله على أي حال. تستعيد التكلفة الائتمانية لذلك الاستدعاء بالتحديد ولا تُحاسَب على السؤال.
# 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 دائمًا.
# < 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 */ }
}قدِّر، تحقق، ثم شغِّل
الشكل المفيد هو بوابة: قدِّر، قارن بأي ميزانية لديك، ونفِّذ فقط إن اجتازت. كلا الاستدعاءين يأخذان الجسم نفسه، فتكلفك البوابة طلبًا إضافيًا واحدًا وصفر ائتمان.
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 فتحصل على تفصيل كل خطوة دون تشغيل أي شيء. الفكرة نفسها، والتكلفة صفر نفسها.
# 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.
- عروض الأسعار تظل تعمل عند رصيد صفر — التقدير مجاني دائمًا.
- أرسل للتقدير الجسم نفسه المرسل للاستدعاء الفعلي، وإلا لن يتطابق العرض.
الخطوات التالية
شغِّل التقدير أولًا. لا يكلف شيئًا، وهو الحساب نفسه الذي سيطبقه العدّاد.