NOKYCNUMBER

HTTP API v1

وصول برمجي إلى أرقام الهاتف والمكالمات وSMS والبريد الصوتي وميزات الذكاء الاصطناعي. JSON عبر HTTPS. عمليات idempotent حيث يلزم. لا يُشترط SDK، لكننا نوفر 5 منها.

مقدمة

يعتمد NoKYCNumber API على بنية REST. نستخدم روابط URL موجّهة للموارد يمكن التنبؤ بها، ونقبل ونُعيد أجسام مشفّرة بـ JSON، ونستخدم رموز استجابة HTTP القياسية والمصادقة والأفعال.

عنوان URL الأساسي

http
https://api.nokycnumber.com/v1/

يجب إرسال جميع الطلبات عبر HTTPS. ستفشل المكالمات عبر HTTP العادي بخطأ 301 Moved Permanently. وستفشل الطلبات غير المصادق عليها بخطأ 401 Unauthenticated.

اصطلاح JSON

  • تستخدم جميع الطلبات ذات المحتوى Content-Type: application/json. يتم رفض المحتوى المشفَّر بصيغة النماذج بخطأ 415.
  • تُعاد الطوابع الزمنية كسلاسل ISO-8601 UTC (2026-04-26T14:23:00Z) وتُقبل بالتنسيق ذاته.
  • تُعاد أرقام الهاتف بصيغة E.164 مع + في البداية (+33647189022) وتُعرض بشكل منسّق في display عند الاقتضاء.
  • تبدأ معرّفات الكائنات بادئةً بمواردها: num_، call_، sms_، vm_، whk_، evt_.

المصادقة

قم بالمصادقة باستخدام مفتاح bearer صادر من لوحتك ضمن الإعدادات → مفاتيح API. يوجد نوعان من المفاتيح:

  • sk_live_… — سر جانب الخادم. صلاحيات قراءة/كتابة كاملة. لا تكشفه أبدًا في كود العميل.
  • pk_live_… — مفتاح قابل للنشر. محجوز حاليًا؛ لم يُستخدم بعد في أي نقطة وصول.

تنسيق الترويسة

http
Authorization: Bearer sk_live_5f3a8b2c4d1e9f6a7b8c2d1e9f6a7b8c
Content-Type: application/json
NoKYC-Version: 2026-04-01

استخدم ترويسة NoKYC-Version لتثبيت إصدار محدد من واجهة API (انظر الإصدارات). عند حذفها، يُستخدم الإصدار الافتراضي المثبّت لحسابك.

النطاقات

تُصدر المفاتيح بأحد ثلاثة نطاقات:

النطاقالطرق المسموح بهاحالة الاستخدام
readGETلوحات التقارير والمراقبة.
read_writeGET · POST · PATCHمعظم التكاملات من جانب الخادم.
adminالكل بما في ذلك DELETEأتمتة التفعيل وإدارة الحساب.

يمكن تدوير المفاتيح في أي وقت. تظل المفاتيح القديمة صالحة لمدة 5 دقائق بعد التدوير للسماح بالنشر دون توقف.

الأخطاء

يستخدم API رموز حالة HTTP المعتادة. 2xx تعني النجاح، و4xx تعني وجود مشكلة في طلبك، و5xx تعني أننا ارتكبنا خطأً ونودّ الاطلاع عليه.

غلاف الخطأ

json
{
  "error": {
    "type": "invalid_request_error",
    "code": "parameter_missing",
    "message": "Required parameter `country` is missing.",
    "param": "country",
    "request_id": "req_8a4c2f1e9b3d4a7c"
  }
}

رموز الحالة

الرمزالمعنى
200OK · نجح الطلب
201تم الإنشاء · تم إنشاء المورد
204لا محتوى · تم حذف المورد، لا يُعاد أي محتوى
400طلب غير صالح · JSON مشوَّه أو معامل مطلوب مفقود
401غير موثّق · مفتاح API غير صالح أو مفقود أو مُلغى
402الدفع مطلوب · رصيد الحساب غير كافٍ لتنفيذ هذا الإجراء
403محظور · المفتاح لا يملك الصلاحية اللازمة لهذه العملية
404غير موجود · المورد غير موجود أو مملوك لحساب آخر
409تعارض · أُعيد استخدام مفتاح الأمان مع معاملات مختلفة
422غير قابل للمعالجة · خطأ دلالي (مثل: دولة غير مدعومة)
429طلبات كثيرة جداً · انظر حدود المعدل
500503مشكلة في الخادم / الخدمة · يمكن إعادة المحاولة بشكل آمن مع تأخير تدريجي

أنواع الأخطاء

  • invalid_request_error — إدخال مشوّه، أو حقول مفقودة، أو تنسيق غير صالح.
  • authentication_error — مشكلة في المفتاح.
  • authorization_error — مشكلة في النطاق.
  • rate_limit_error — تباطأ في الطلبات.
  • api_error — خطأ من جانبنا. قابل لإعادة المحاولة.
  • resource_error — حالة المورد تمنع العملية (مثلًا: محاولة إجراء مكالمة من رقم موقوف).
  • upstream_error — انتهت مهلة المشغل أو الشريك.

تتضمن كل استجابة خطأ request_id. احرص دائمًا على تسجيله — فهو الطريقة الوحيدة التي يمكن لفريق الدعم من خلالها ربط طلبك بالتتبع الداخلي لدينا.

ترقيم الصفحات

تستخدم نقاط نهاية القوائم ترقيم الصفحات بالمؤشر للأمام فقط. تُعيد ما يصل إلى limit كائنًا (الافتراضي 25، الحد الأقصى 100) وقيمة منطقية has_more. لجلب الصفحة التالية، مرِّر معرّف آخر كائن كـ starting_after.

curl
curl https://api.nokycnumber.com/v1/numbers?limit=10 \
  -H "Authorization: Bearer sk_live_…"
json
{
  "object": "list",
  "url": "/v1/numbers",
  "data": [
    { "id": "num_8a4c2f1e9b3d", "object": "number", "number": "+33647189022", … },
    { "id": "num_2k7m9p3w8x4t", "object": "number", "number": "+12025550143", … }
  ],
  "has_more": true,
  "next_cursor": "num_2k7m9p3w8x4t"
}

تُرتَّب القوائم بحيث تظهر الكائنات الأحدث أولًا. ترقيم الصفحات للخلف عبر ending_before غير مدعوم — استخدم المؤشر بدلًا من ذلك.

التكافؤ

تقبل طلبات POST التي تُعدّل الحالة ترويسة Idempotency-Key. نُزيل التكرار استناداً إلى المفتاح لمدة 24 ساعة، مع إعادة الاستجابة المخزّنة مؤقتاً عند إعادة المحاولة. استخدم UUID لكل عملية منطقية.

http
POST /v1/sms HTTP/1.1
Authorization: Bearer sk_live_…
Idempotency-Key: 9b3d4a7c-8a4c-2f1e-9b3d-4a7c8a4c2f1e
Content-Type: application/json

{ "from": "num_8a4c2f1e9b3d", "to": "+33612345678", "body": "Hello" }

إعادة إرسال نفس المفتاح مع محتوى طلب مختلف يُعيد 409 Conflict مع idempotency_key_mismatch.

مفاتيح التكافؤ ليست إلزامية، لكنها موصى بها بشدة لأي عملية تكلّف مالاً (مكالمات، SMS، شراء أرقام). بدونها، قد تؤدي إعادة المحاولة عبر الشبكة إلى مضاعفة الرسوم.

حدود معدل الطلبات

بشكل افتراضي، يقتصر كل مفتاح API على 100 طلب في الدقيقة. يمكن للعملاء ذوي الحجم الكبير طلب رفع الحد من الدعم. تُطبَّق الحدود على كل مفتاح، وليس على كل عنوان IP.

ترويسات الاستجابة

http
X-Rate-Limit-Limit: 100
X-Rate-Limit-Remaining: 73
X-Rate-Limit-Reset: 1745672460
Retry-After: 8

عند تجاوز الحد المسموح به، ستتلقى 429 Too Many Requests مع ترويسة Retry-After بالثواني. يُنصح بالتراجع التدريجي الخطي لما يصل إلى 4 محاولات إعادة؛ وإن استمرت المشكلة، اطلب رفع الحد.

حصة الاندفاع

يعمل المحدِّد بنظام دلو الرموز — تُتسامح مع الارتفاعات القصيرة التي تتجاوز 100 طلب في الدقيقة طالما ظل المتوسط المتحرك خلال 60 ثانية دون الحد الأقصى.

الإصدارات

إصدارات API مؤرَّخة (2026-04-01). تُشحن التغييرات الجذرية كإصدار مؤرَّخ جديد؛ بينما تُضاف الإضافات غير الجذرية إلى الإصدار الحالي. حدِّد إصداراً باستخدام ترويسة NoKYC-Version.

التوافق

  • ندعم كل إصدار لمدة لا تقل عن 24 شهراً بعد الإصدار التالي.
  • تُرسَل إشعارات الإيقاف إلى أصحاب الحسابات عبر البريد الإلكتروني قبل 90 يومًا.
  • ترويسة الاستجابة NoKYC-Deprecation تنبّهك عند استخدام إصدار قديم.

الإصدار الحالي: 2026-04-01.

الأرقام

الرقم number يمثّل خطًا هاتفيًا افتراضيًا تتحكم فيه. ترتبط الأرقام بدولة ونوع (mobile أو landline) وتحمل فترة فوترة.

GET /v1/numbers

عرض جميع الأرقام في حسابك. يُعيد قائمة مُقسَّمة إلى صفحات من كائنات number.

FieldالنوعDescription
limit اختياريinteger1–100، الافتراضي 25.
starting_after اختياريstringمؤشر للتصفح بالصفحات.
country اختياريstringتصفية حسب رمز الدولة ISO-2 (مثال: fr).
type اختياريstringتصفية حسب mobile أو landline.
status اختياريstringتصفية حسب active أو paused أو released.
curl
curl https://api.nokycnumber.com/v1/numbers?country=fr&type=mobile \
  -H "Authorization: Bearer sk_live_…"
json
{
  "object": "list",
  "data": [
    {
      "id": "num_8a4c2f1e9b3d",
      "object": "number",
      "number": "+33647189022",
      "display": "+33 6 47 18 90 22",
      "country": "fr",
      "type": "mobile",
      "tier": "standard",
      "status": "active",
      "billing_period": "yearly",
      "renews_at": "2027-04-26T11:23:00Z",
      "ai_enabled": true,
      "created_at": "2026-04-26T11:23:00Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}
POST /v1/numbers

تفعيل رقم جديد من معرّف الحجز. يُخصم الفترة المُهيَّأة من رصيد حسابك.

FieldالنوعDescription
available_id مطلوبstringمعرّف navail_… من /v1/numbers/available.
billing_period مطلوبstringmonthly، أو quarterly، أو yearly.
addons اختياريarrayإضافات الذكاء الاصطناعي المراد تفعيلها، مثلاً ["ai-pickup","ai-trans"].
webhook_url اختياريstringنقطة النهاية التي ستستقبل الأحداث المرتبطة بالرقم.
curl
curl https://api.nokycnumber.com/v1/numbers \
  -H "Authorization: Bearer sk_live_…" \
  -H "Idempotency-Key: 9b3d4a7c-8a4c-2f1e-9b3d-4a7c8a4c2f1e" \
  -d '{
    "available_id":   "navail_2k7m9p3w8x4t",
    "billing_period": "yearly",
    "addons":         ["ai-pickup"]
  }'
json
{
  "id": "num_8a4c2f1e9b3d",
  "object": "number",
  "number": "+33611112222",
  "display": "+33 6 11 11 22 22",
  "country": "fr",
  "type": "mobile",
  "tier": "premium",
  "status": "active",
  "billing_period": "yearly",
  "renews_at": "2027-04-26T11:23:00Z",
  "ai_enabled": true,
  "created_at": "2026-04-26T11:23:00Z"
}
GET /v1/numbers/{id}

استرداد رقم واحد بواسطة المعرّف.

curl
curl https://api.nokycnumber.com/v1/numbers/num_8a4c2f1e9b3d \
  -H "Authorization: Bearer sk_live_…"
PATCH /v1/numbers/{id}

تحديث الحقول القابلة للتعديل على رقم. استخدم POST /v1/numbers/{id}/renew لتمديد الفترة.

FieldالنوعDescription
auto_renew اختياريbooleanتفعيل التجديد التلقائي عند انتهاء الفترة.
webhook_url اختياريstringاستبدال هدف الـ webhook المرتبط بالرقم.
addons اختياريarrayاستبدال مجموعة إضافات الذكاء الاصطناعي النشطة.
on_off اختياريobjectضبط ساعات الصمت / نوافذ الإيقاف. انظر إعدادات الذكاء الاصطناعي.
DELETE /v1/numbers/{id}

تحرير رقم. يعود الرقم إلى المخزون عند انتهاء الفترة وقد يُعاد تخصيصه لعميل آخر لاحقاً. يُعيد 204 No Content.

curl
curl -X DELETE https://api.nokycnumber.com/v1/numbers/num_8a4c2f1e9b3d \
  -H "Authorization: Bearer sk_live_…"

لا يمكن استرداد الأرقام المُحرَّرة. نوصي بإيقافها مؤقتاً أولاً عبر PATCH مع { "status": "paused" } إذا كنت قد ترغب في استعادتها.

مكالمات

المكالمة call هي جلسة صوتية واحدة تنشأ من أحد أرقامك. تُجرى المكالمات الصادرة عبر POST /v1/calls؛ أما المكالمات الواردة فتُعكس إلى webhook الخاص بك ويمكن استرجاعها أيضًا عبر API.

POST/v1/calls

أجرِ مكالمة صادرة من أحد أرقامك.

FieldالنوعDescription
from مطلوبstringمعرّف num_ تمتلكه.
to مطلوبstringوجهة بتنسيق E.164، مثل +33612345678.
recording_enabled اختياريbooleanالافتراضي false. تُخزَّن التسجيلات لمدة 30 يومًا.
callerid_mask اختياريstring"hide"، أو "rotate"، أو أي رقم E.164 تمتلكه.
metadata اختياريobjectJSON اعتباطي يُعاد في webhooks الخاصة بالمكالمة.
curl
curl https://api.nokycnumber.com/v1/calls \
  -H "Authorization: Bearer sk_live_…" \
  -d '{
    "from": "num_8a4c2f1e9b3d",
    "to":   "+33612345678",
    "callerid_mask": "rotate"
  }'
json
{
  "id": "call_2k7m9p3w8x4t",
  "object": "call",
  "from": "num_8a4c2f1e9b3d",
  "from_e164": "+33647189022",
  "to": "+33612345678",
  "status": "ringing",
  "direction": "outbound",
  "started_at": "2026-04-26T11:24:01Z",
  "answered_at": null,
  "ended_at": null,
  "duration_sec": 0,
  "recording_url": null,
  "cost_usd": null
}
GET/v1/calls

عرض المكالمات. تصفية حسب number أو direction أو status أو created_after / created_before.

GET/v1/calls/{id}

استرداد مكالمة واحدة.

POST/v1/calls/{id}/hangup

إنهاء مكالمة جارية قسراً. عملية متكافئة.

رسائل SMS

إرسال واسترجاع SMS. تُقسَّم الرسائل الطويلة تلقائيًا وفق قواعد GSM-03.38 / UCS-2؛ تُظهر الاستجابة عدد الأجزاء الفعلي للفوترة.

POST/v1/sms

أرسل SMS من أحد أرقامك.

FieldالنوعDescription
from مطلوبstringمعرّف num_ تمتلكه.
to مطلوبstringوجهة بتنسيق E.164.
body مطلوبstringنص الرسالة. الحد الأقصى 1,600 حرف (10 أجزاء).
send_at اختياريstringطابع زمني مستقبلي بصيغة ISO-8601 لجدولة التسليم.
media_urls اختياريarrayحتى 5 روابط URL لصور/فيديو. MMS فقط — يعمل في الدول الداعمة.
curl
curl https://api.nokycnumber.com/v1/sms \
  -H "Authorization: Bearer sk_live_…" \
  -H "Idempotency-Key: 9b3d4a7c-8a4c-2f1e-9b3d-4a7c8a4c2f1e" \
  -d '{
    "from": "num_8a4c2f1e9b3d",
    "to":   "+33612345678",
    "body": "Bonjour. Your code is 482917."
  }'
json
{
  "id": "sms_4n2v8j1q6h7y",
  "object": "sms",
  "from_e164": "+33647189022",
  "to": "+33612345678",
  "body": "Bonjour. Your code is 482917.",
  "direction": "outbound",
  "segments": 1,
  "status": "queued",
  "created_at": "2026-04-26T11:24:50Z",
  "delivered_at": null,
  "cost_usd": 0.012
}
GET/v1/sms

عرض الرسائل. تصفية حسب number أو direction أو status.

GET/v1/sms/{id}

استرداد رسالة واحدة مع حالة التسليم على مستوى المقطع.

رسائل البريد الصوتي

تُخزَّن رسائل البريد الصوتي وتُنسخ وتُترجم تلقائياً. روابط URL للصوت موقّعة مسبقاً وتنتهي صلاحيتها بعد ساعة من الإصدار.

GET/v1/voicemails

عرض رسائل البريد الصوتي. الترقيم مطابق لنقاط نهاية القوائم الأخرى.

GET/v1/voicemails/{id}

استرداد بريد صوتي واحد مع النص المكتوب ورابط الصوت.

json
{
  "id": "vm_5p3w8x4t9k2m",
  "object": "voicemail",
  "number_id": "num_8a4c2f1e9b3d",
  "from_e164": "+33612345678",
  "received_at": "2026-04-26T11:25:42Z",
  "duration_sec": 27,
  "audio_url": "https://files.nokycnumber.com/vm/5p3w8x4t9k2m.mp3?expires=1745676342&sig=…",
  "transcript": {
    "text": "Bonjour, c'est Marc. Rappelez-moi quand vous pouvez.",
    "language": "fr",
    "translation_en": "Hello, this is Marc. Call me back when you can.",
    "summary": "Marc asks for a callback.",
    "sentiment": "neutral"
  }
}

يتطلب كل من translation_en وsummary إضافة ai-summary.

DELETE/v1/voicemails/{id}

حذف بريد صوتي وملفه الصوتي نهائياً. يُعيد 204 No Content.

إعداد الذكاء الاصطناعي

يمكن لكل رقم تشغيل وكيل ذكاء اصطناعي يرد على المكالمات عند غيابك، ويفلتر المتصلين المجهولين، ويلخّص البريد الصوتي، أو يترجم المحادثات مباشرةً. يمكن الضبط لكل رقم على حدة عبر الموارد الفرعية للذكاء الاصطناعي.

GET/v1/numbers/{id}/ai

استرجاع إعدادات الذكاء الاصطناعي الحالية لرقم ما.

json
{
  "object": "ai_config",
  "number_id": "num_8a4c2f1e9b3d",
  "addons": ["ai-pickup", "ai-summary"],
  "auto_pickup": {
    "enabled": true,
    "after_rings": 4,
    "script": "I'm unavailable right now. Leave your name, the reason for the call, and a callback number.",
    "language": "auto",
    "voice": "neutral_fr"
  },
  "screening": { "enabled": false },
  "translator": { "enabled": false, "target_language": "en" },
  "voicemail_summary": { "enabled": true, "include_sentiment": true }
}
PATCH/v1/numbers/{id}/ai

تحديث ميزة ذكاء اصطناعي واحدة أو أكثر. كل كتلة اختيارية؛ تُحدَّث الحقول الموجودة فقط.

الأصوات

الأصوات المتاحة: neutral_en، neutral_fr، neutral_es، neutral_de، neutral_jp، warm_en، warm_fr. أصوات مستنسخة مخصصة للمؤسسات عند الطلب.

الحساب

قراءة بيانات الحساب: الرصيد وإحصاءات الاستخدام والـ webhooks المُهيَّأة.

GET/v1/account

استرجاع حسابك.

json
{
  "object": "account",
  "email_hash": "9b3d4a7c8a4c2f1e",
  "balance_usd": 47.32,
  "default_country": "fr",
  "active_numbers": 3,
  "monthly_call_minutes": 412,
  "monthly_sms_segments": 1820,
  "created_at": "2026-04-12T09:15:00Z"
}
GET/v1/account/usage

تفصيل مفصّل للاستخدام للفترة الحالية. مرّر period=last_30d أو period=last_90d.

Webhooks

اشترك في أحداث حسابك أو أرقام محددة. نُرسل حدث JSON إلى نقطة نهايتك عبر POST ونعيد المحاولة حتى 5 مرات مع تأخير تدريجي أسي على مدى 24 ساعة.

غلاف الحدث

json
{
  "id": "evt_3d4a7c8a4c2f",
  "object": "event",
  "type": "sms.received",
  "created": "2026-04-26T11:25:42Z",
  "livemode": true,
  "data": { "object": { "id": "sms_…", … } },
  "request_id": "req_8a4c2f1e9b3d4a7c"
}

التحقق من التوقيع

يحمل كل طلب ترويسة X-NoKYC-Signature بالصيغة t=<ts>,v1=<hex>. التوقيع هو HMAC-SHA256 لـ <ts>.<raw_body> باستخدام السر الخاص بنقطة النهاية. ارفض أي طلب يتجاوز عمره 5 دقائق.

shell
# Pseudocode
ts, v1 = parse(header)
if abs(now - ts) > 300: reject
expected = hmac_sha256(secret, f"{ts}.{body}")
if not constant_time_eq(expected, v1): reject

نقاط النهاية

POST/v1/webhook_endpoints

تسجيل نقطة نهاية webhook جديدة. يُعيد مفتاح التوقيع السري مرة واحدة؛ احتفظ به.

FieldالنوعDescription
url مطلوبstringرابط HTTPS الذي سنرسل إليه الأحداث عبر POST.
enabled_events مطلوبarrayقائمة الاشتراك، مثل ["sms.received","call.completed"]. استخدم ["*"] للجميع.
description اختياريstringملاحظة حرة لأغراض سجلاتك الخاصة.
GET/v1/webhook_endpoints

عرض نقاط النهاية الخاصة بك.

DELETE/v1/webhook_endpoints/{id}

حذف نقطة نهاية. يُعيد 204.

أنواع الأحداث

الحدثيُطلَق عند
number.activatedتم تزويد رقم جديد وهو جاهز للاستخدام.
number.renewedتم تجديد الفترة بنجاح.
number.pausedدخل الرقم في حالة الإيقاف المؤقت لنافذة التشغيل/الإيقاف.
number.releasedتم إعادة الرقم نهائياً إلى المخزون.
call.initiatedتم إجراء المكالمة الصادرة.
call.answeredردّ الطرف الآخر.
call.completedانتهت المكالمة (لأي سبب).
call.recordedاكتمل التسجيل وأصبح متاحاً.
sms.receivedوصلت رسالة SMS واردة إلى رقمك.
sms.sentتم قبول SMS الصادر من قِبَل المشغل.
sms.deliveredتم تأكيد إيصال التسليم من المشغل.
sms.failedرفض المشغل — تحقق من failure_code.
voicemail.createdتم تسجيل بريد صوتي جديد ونسخه.
ai.pickupقام الرد التلقائي بالذكاء الاصطناعي بالإجابة على مكالمة.
account.balance_lowانخفض الرصيد عن الحد الأدنى الذي قمت بإعداده.

مخططات الكائنات

number

json
{
  "id":             "string · num_…",
  "object":         "string · constant \"number\"",
  "number":         "string · E.164",
  "display":        "string · pretty-printed",
  "country":        "string · ISO-2",
  "type":           "enum · mobile | landline",
  "tier":           "enum · standard | premium",
  "tier_pattern":   "string | null · double-repeat | sequential | mirror | round | …",
  "status":         "enum · active | paused | released",
  "billing_period": "enum · monthly | quarterly | yearly",
  "renews_at":      "string · ISO-8601 UTC",
  "auto_renew":     "boolean",
  "addons":         "array · ai-pickup | ai-screen | ai-summary | ai-trans",
  "ai_enabled":     "boolean",
  "metadata":       "object | null",
  "created_at":     "string · ISO-8601 UTC"
}

call

json
{
  "id":             "string · call_…",
  "object":         "string · constant \"call\"",
  "from":           "string · num_…",
  "from_e164":      "string · E.164",
  "to":             "string · E.164",
  "direction":      "enum · inbound | outbound",
  "status":         "enum · queued | ringing | in_progress | completed | failed | no_answer | busy",
  "started_at":     "string · ISO-8601 UTC",
  "answered_at":    "string | null",
  "ended_at":       "string | null",
  "duration_sec":   "integer",
  "recording_url":  "string | null · pre-signed, expires in 1h",
  "cost_usd":       "number | null"
}

sms

json
{
  "id":             "string · sms_…",
  "object":         "string · constant \"sms\"",
  "from":           "string · num_…",
  "from_e164":      "string · E.164",
  "to":             "string · E.164",
  "body":           "string",
  "media_urls":     "array · up to 5",
  "direction":      "enum · inbound | outbound",
  "segments":       "integer · 1–10",
  "status":         "enum · queued | sent | delivered | failed | undelivered",
  "failure_code":   "string | null",
  "created_at":     "string · ISO-8601 UTC",
  "delivered_at":   "string | null",
  "cost_usd":       "number | null"
}

SDKs الرسمية

HTTP API هو المرجع الأساسي، غير أن هذه الحزم SDK توفر لك روابط مكتوبة، وإعادة المحاولة، وضمان التوحيد، والتحقق من webhook جاهزةً للاستخدام.

  • node npm install @nokycnumber/sdk
  • python pip install nokycnumber
  • go go get github.com/nokycnumber/sdk-go
  • php composer require nokycnumber/sdk
  • ruby gem install nokycnumber