QannasAPI

اقرأ ترويسات الائتمان: دقِّق كل خصم من الاستجابة

ما ستبنيه: غلافًا رفيعًا للعميل يسجل تكلفة كل استدعاء وما تبقى لديك، فتصبح سجلاتك أنت مسار التدقيق المحاسبي.

القسمأساسيات الواجهة
الإجراءات المستخدمةPOST /v1/data/contacts/verify-email
الائتمانات1 (أسوأ الحالات)
آمن مع مفتاح الاختبارنعم — يعمل على qk_test_ بصفر ائتمان
مدة الإنجاز~5 دقيقة
المتطلباتمفتاح، وأي عميل HTTP يتيح لك قراءة ترويسات الاستجابة.

ثلاث ترويسات على كل استدعاء بيانات

X-Credits-Charged هو ما كلفه هذا الاستدعاء. X-Credits-Balance هو المتبقي بعده. X-Price-Book يحدد دفتر الأسعار الذي احتُسب الخصم وفقه، فيمكن دائمًا تتبع عرض سعر وخصم إلى القواعد نفسها.

headers.sh
curl -i -X POST https://api.qannasapi.com/v1/data/contacts/verify-email \
  -H "Authorization: Bearer $QANNAS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "jane@acme.example"}'

# < HTTP/1.1 200 OK
# < X-Credits-Charged: 1      # what this call cost
# < X-Credits-Balance: 94     # what is left afterwards
# < X-Price-Book: public    # which rules were applied

سجِّل الخصم لا التقدير

لُفَّ عميل HTTP مرة واحدة وسجِّل الترويسات الثلاث بجانب request_id. يمنحك ذلك نسب التكلفة لكل استدعاء دون استقصاء نقطة استخدام، و request_id هو ما سيطلبه الدعم إن بدا خصم ما خاطئًا.

metered_client.ts
export async function call(action: string, body: unknown) {
  const res = await fetch(`${API}/v1/data/${action}`, {
    method: "POST",
    headers: { Authorization: `Bearer ${key}`, "Content-Type": "application/json" },
    body: JSON.stringify(body),
  });

  const json = await res.json();
  // Your logs become the billing audit trail.
  logger.info("qannas.call", {
    action,
    request_id: json.request_id,
    charged: Number(res.headers.get("X-Credits-Charged")),
    balance: Number(res.headers.get("X-Credits-Balance")),
  });

  return json;
}

راقب الرصيد لا الساعة

لأن الرصيد يعود مع كل استدعاء، يمكنك التحكم في المعدل أو التنبيه من الاستجابة التي بين يديك. لا توجد نقطة حصة منفصلة تستقصيها ولا فجوة بين الإنفاق ومعرفته.

throttle.ts
// The balance arrives on the call you already made —
// there is no quota endpoint to poll and no lag.
const balance = Number(res.headers.get("X-Credits-Balance"));
if (balance < LOW_WATER_MARK) {
  pauseNonUrgentJobs();
  alertOps(`credits low: ${balance}`);
}

الخلاصة

النمطالطريقة
تكلفة هذا الاستدعاءX-Credits-Charged
المتبقيX-Credits-Balance
القواعد المطبَّقةX-Price-Book
تتبُّع خصمrequest_id في جسم الاستجابة
التحكم في المعدلنبِّه على X-Credits-Balance من الاستدعاء الذي نفَّذته للتو

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

  • سجِّل X-Credits-Charged و X-Credits-Balance و request_id في كل استدعاء.
  • نبِّه على ترويسة الرصيد بدل استقصاء نقطة استخدام.
  • احتفظ بـ request_id — به يُتتبَّع أي خصم بعينه.
  • توقَّع X-Credits-Charged: 0 عند عدم العثور ولا تعدّه فشلًا.

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

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