HTTP API v1
وصول برمجي إلى أرقام الهاتف والمكالمات وSMS والبريد الصوتي وميزات الذكاء الاصطناعي. JSON عبر HTTPS. عمليات idempotent حيث يلزم. لا يُشترط SDK، لكننا نوفر 5 منها.
مقدمة
يعتمد NoKYCNumber API على بنية REST. نستخدم روابط URL موجّهة للموارد يمكن التنبؤ بها، ونقبل ونُعيد أجسام مشفّرة بـ JSON، ونستخدم رموز استجابة HTTP القياسية والمصادقة والأفعال.
عنوان URL الأساسي
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_…— مفتاح قابل للنشر. محجوز حاليًا؛ لم يُستخدم بعد في أي نقطة وصول.
تنسيق الترويسة
Authorization: Bearer sk_live_5f3a8b2c4d1e9f6a7b8c2d1e9f6a7b8c
Content-Type: application/json
NoKYC-Version: 2026-04-01استخدم ترويسة NoKYC-Version لتثبيت إصدار محدد من واجهة API (انظر الإصدارات). عند حذفها، يُستخدم الإصدار الافتراضي المثبّت لحسابك.
النطاقات
تُصدر المفاتيح بأحد ثلاثة نطاقات:
| النطاق | الطرق المسموح بها | حالة الاستخدام |
|---|---|---|
read | GET | لوحات التقارير والمراقبة. |
read_write | GET · POST · PATCH | معظم التكاملات من جانب الخادم. |
admin | الكل بما في ذلك DELETE | أتمتة التفعيل وإدارة الحساب. |
يمكن تدوير المفاتيح في أي وقت. تظل المفاتيح القديمة صالحة لمدة 5 دقائق بعد التدوير للسماح بالنشر دون توقف.
الأخطاء
يستخدم API رموز حالة HTTP المعتادة. 2xx تعني النجاح، و4xx تعني وجود مشكلة في طلبك، و5xx تعني أننا ارتكبنا خطأً ونودّ الاطلاع عليه.
غلاف الخطأ
{
"error": {
"type": "invalid_request_error",
"code": "parameter_missing",
"message": "Required parameter `country` is missing.",
"param": "country",
"request_id": "req_8a4c2f1e9b3d4a7c"
}
}رموز الحالة
| الرمز | المعنى |
|---|---|
200 | OK · نجح الطلب |
201 | تم الإنشاء · تم إنشاء المورد |
204 | لا محتوى · تم حذف المورد، لا يُعاد أي محتوى |
400 | طلب غير صالح · JSON مشوَّه أو معامل مطلوب مفقود |
401 | غير موثّق · مفتاح API غير صالح أو مفقود أو مُلغى |
402 | الدفع مطلوب · رصيد الحساب غير كافٍ لتنفيذ هذا الإجراء |
403 | محظور · المفتاح لا يملك الصلاحية اللازمة لهذه العملية |
404 | غير موجود · المورد غير موجود أو مملوك لحساب آخر |
409 | تعارض · أُعيد استخدام مفتاح الأمان مع معاملات مختلفة |
422 | غير قابل للمعالجة · خطأ دلالي (مثل: دولة غير مدعومة) |
429 | طلبات كثيرة جداً · انظر حدود المعدل |
500 – 503 | مشكلة في الخادم / الخدمة · يمكن إعادة المحاولة بشكل آمن مع تأخير تدريجي |
أنواع الأخطاء
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 https://api.nokycnumber.com/v1/numbers?limit=10 \
-H "Authorization: Bearer sk_live_…"{
"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 لكل عملية منطقية.
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.
ترويسات الاستجابة
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) وتحمل فترة فوترة.
/v1/numbers
عرض جميع الأرقام في حسابك. يُعيد قائمة مُقسَّمة إلى صفحات من كائنات number.
| Field | النوع | Description |
|---|---|---|
limit اختياري | integer | 1–100، الافتراضي 25. |
starting_after اختياري | string | مؤشر للتصفح بالصفحات. |
country اختياري | string | تصفية حسب رمز الدولة ISO-2 (مثال: fr). |
type اختياري | string | تصفية حسب mobile أو landline. |
status اختياري | string | تصفية حسب active أو paused أو released. |
curl https://api.nokycnumber.com/v1/numbers?country=fr&type=mobile \
-H "Authorization: Bearer sk_live_…"{
"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
}/v1/numbers/available
ابحث في المخزون عن الأرقام المتاحة في دولة ونوع محددَين. استخدم المعرّف المُعاد عند استدعاء POST /v1/numbers.
| Field | النوع | Description |
|---|---|---|
country مطلوب | string | رمز الدولة ISO-2. |
type مطلوب | string | mobile أو landline. |
tier اختياري | string | standard (الافتراضي) أو premium. |
pattern اختياري | string | فلتر اختياري على جزء من الأرقام المحلية، مثل «77». |
limit اختياري | integer | 1–50، الافتراضي 10. |
curl "https://api.nokycnumber.com/v1/numbers/available?country=fr&type=mobile&tier=premium&limit=5" \
-H "Authorization: Bearer sk_live_…"{
"object": "list",
"data": [
{ "id": "navail_2k7m9p3w8x4t", "number": "+33611112222", "display": "+33 6 11 11 22 22", "tier": "premium", "pattern": "double-repeat", "price_usd_per_month": 11.98 },
{ "id": "navail_4n2v8j1q6h7y", "number": "+33612345678", "display": "+33 6 12 34 56 78", "tier": "premium", "pattern": "sequential", "price_usd_per_month": 11.98 }
],
"expires_at": "2026-04-26T11:33:00Z"
}الأرقام المتاحة محجوزة لمدة 10 دقائق. بعد انتهاء المدة قد يُسنَد نفس المعرّف إلى مستخدم آخر.
/v1/numbers
تفعيل رقم جديد من معرّف الحجز. يُخصم الفترة المُهيَّأة من رصيد حسابك.
| Field | النوع | Description |
|---|---|---|
available_id مطلوب | string | معرّف navail_… من /v1/numbers/available. |
billing_period مطلوب | string | monthly، أو quarterly، أو yearly. |
addons اختياري | array | إضافات الذكاء الاصطناعي المراد تفعيلها، مثلاً ["ai-pickup","ai-trans"]. |
webhook_url اختياري | string | نقطة النهاية التي ستستقبل الأحداث المرتبطة بالرقم. |
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"]
}'{
"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"
}/v1/numbers/{id}
استرداد رقم واحد بواسطة المعرّف.
curl https://api.nokycnumber.com/v1/numbers/num_8a4c2f1e9b3d \
-H "Authorization: Bearer sk_live_…"/v1/numbers/{id}
تحديث الحقول القابلة للتعديل على رقم. استخدم POST /v1/numbers/{id}/renew لتمديد الفترة.
| Field | النوع | Description |
|---|---|---|
auto_renew اختياري | boolean | تفعيل التجديد التلقائي عند انتهاء الفترة. |
webhook_url اختياري | string | استبدال هدف الـ webhook المرتبط بالرقم. |
addons اختياري | array | استبدال مجموعة إضافات الذكاء الاصطناعي النشطة. |
on_off اختياري | object | ضبط ساعات الصمت / نوافذ الإيقاف. انظر إعدادات الذكاء الاصطناعي. |
/v1/numbers/{id}
تحرير رقم. يعود الرقم إلى المخزون عند انتهاء الفترة وقد يُعاد تخصيصه لعميل آخر لاحقاً. يُعيد 204 No Content.
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.
/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 اختياري | object | JSON اعتباطي يُعاد في webhooks الخاصة بالمكالمة. |
curl https://api.nokycnumber.com/v1/calls \
-H "Authorization: Bearer sk_live_…" \
-d '{
"from": "num_8a4c2f1e9b3d",
"to": "+33612345678",
"callerid_mask": "rotate"
}'{
"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
}/v1/callsعرض المكالمات. تصفية حسب number أو direction أو status أو created_after / created_before.
/v1/calls/{id}استرداد مكالمة واحدة.
/v1/calls/{id}/hangupإنهاء مكالمة جارية قسراً. عملية متكافئة.
رسائل SMS
إرسال واسترجاع SMS. تُقسَّم الرسائل الطويلة تلقائيًا وفق قواعد GSM-03.38 / UCS-2؛ تُظهر الاستجابة عدد الأجزاء الفعلي للفوترة.
/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 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."
}'{
"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
}/v1/smsعرض الرسائل. تصفية حسب number أو direction أو status.
/v1/sms/{id}استرداد رسالة واحدة مع حالة التسليم على مستوى المقطع.
رسائل البريد الصوتي
تُخزَّن رسائل البريد الصوتي وتُنسخ وتُترجم تلقائياً. روابط URL للصوت موقّعة مسبقاً وتنتهي صلاحيتها بعد ساعة من الإصدار.
/v1/voicemailsعرض رسائل البريد الصوتي. الترقيم مطابق لنقاط نهاية القوائم الأخرى.
/v1/voicemails/{id}استرداد بريد صوتي واحد مع النص المكتوب ورابط الصوت.
{
"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.
/v1/voicemails/{id}حذف بريد صوتي وملفه الصوتي نهائياً. يُعيد 204 No Content.
إعداد الذكاء الاصطناعي
يمكن لكل رقم تشغيل وكيل ذكاء اصطناعي يرد على المكالمات عند غيابك، ويفلتر المتصلين المجهولين، ويلخّص البريد الصوتي، أو يترجم المحادثات مباشرةً. يمكن الضبط لكل رقم على حدة عبر الموارد الفرعية للذكاء الاصطناعي.
/v1/numbers/{id}/aiاسترجاع إعدادات الذكاء الاصطناعي الحالية لرقم ما.
{
"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 }
}/v1/numbers/{id}/aiتحديث ميزة ذكاء اصطناعي واحدة أو أكثر. كل كتلة اختيارية؛ تُحدَّث الحقول الموجودة فقط.
الأصوات
الأصوات المتاحة: neutral_en، neutral_fr، neutral_es، neutral_de، neutral_jp، warm_en، warm_fr. أصوات مستنسخة مخصصة للمؤسسات عند الطلب.
الحساب
قراءة بيانات الحساب: الرصيد وإحصاءات الاستخدام والـ webhooks المُهيَّأة.
/v1/accountاسترجاع حسابك.
{
"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"
}/v1/account/usageتفصيل مفصّل للاستخدام للفترة الحالية. مرّر period=last_30d أو period=last_90d.
Webhooks
اشترك في أحداث حسابك أو أرقام محددة. نُرسل حدث JSON إلى نقطة نهايتك عبر POST ونعيد المحاولة حتى 5 مرات مع تأخير تدريجي أسي على مدى 24 ساعة.
غلاف الحدث
{
"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 دقائق.
# 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نقاط النهاية
/v1/webhook_endpointsتسجيل نقطة نهاية webhook جديدة. يُعيد مفتاح التوقيع السري مرة واحدة؛ احتفظ به.
| Field | النوع | Description |
|---|---|---|
url مطلوب | string | رابط HTTPS الذي سنرسل إليه الأحداث عبر POST. |
enabled_events مطلوب | array | قائمة الاشتراك، مثل ["sms.received","call.completed"]. استخدم ["*"] للجميع. |
description اختياري | string | ملاحظة حرة لأغراض سجلاتك الخاصة. |
/v1/webhook_endpointsعرض نقاط النهاية الخاصة بك.
/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
{
"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
{
"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
{
"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