الأخطاء

يستخدم كل خطأ، عبر الـ API بأكمله، مغلّفًا واحدًا، بحيث يمكنك التعامل مع الإخفاقات بمسار كود واحد.

شكل الخطأ

غلاف الخطأ
{
  "error": {
    "code": "VALIDATION_FAILED",
    "message": "The request was invalid.",
    "details": [
      { "path": "declaredNumber", "message": "must be E.164" }
    ]
  }
}

تطابق حالة HTTP الرمز code. الحقل details موجود فقط في أخطاء التحقّق.

رموز الأخطاء

الرمزHTTPمتى
UNAUTHORIZED401مفتاح مفقود أو غير صالح.
FORBIDDEN403المفتاح يفتقر إلى النطاق المطلوب.
NOT_FOUND404لا يوجد مورد كهذا في حسابك. ويظهر هذا الخطأ أيضًا عند الإرسال أو إعادة التوجيه إلى chatId ليس محادثةً للرقم المُرسِل، حتى لو كان محادثةً لرقم آخر من أرقامك، وعندها لا يُرسَل شيء.
VALIDATION_FAILED400كان جسم الطلب أو الاستعلام غير صالح.
CONFLICT409الإجراء يتعارض مع الحالة الحالية (مثل الإرسال من رقم غير متصل).
RATE_LIMITED429طلبات كثيرة جدًا. خفّف الوتيرة وأعِد المحاولة.
OUTBOUND_LIMIT429سقف المراسلة الباردة: بدأ هذا الرقم عددًا كبيرًا جدًا من المحادثات الجديدة خلال هذه الساعة. والردود لا تُحتسب أبدًا. انتظر المدة التي تحدّدها Retry-After، وأبقِ حجم الاتصالات الأولى معتدلًا.
SLOT_REQUIRED402ربط رقم يتطلّب خانة متاحة.
ACCOUNT_SUSPENDED402الحساب كله قيد الإيقاف المؤقت. وكل المسارات تردّ بهذا عدا تسجيل الدخول والفوترة. المفتاح صالح وإعادة المحاولة لن تفيد: تواصل معنا لاستعادة الوصول.
TRANSPORT_UNAVAILABLE503خدمة الاتصال غير متاحة لبرهة. أعِد المحاولة بعد قليل.
TRANSPORT_BUSY503خدمة الرسائل مشغولة. انتظر المدة التي تحدّدها ترويسة Retry-After ثم أعِد المحاولة، وكل ما صدر سابقًا يبقى صالحًا.
BILLING_UNAVAILABLE503لا يوجد في هذا النشر أي معالج مدفوعات مُهيّأ.
INTERNAL500خطأ غير متوقّع من جهتنا.

التمهّل وإعادة المحاولة

ثلاثة رموز تطلب منك الانتظار، ومعانيها مختلفة. فـ RATE_LIMITED يعني خفّف الوتيرة. وOUTBOUND_LIMIT يعني توقّف مدةً عن مراسلة أشخاص جدد: فالردود ما زالت تمرّ، والميزانية تخصّ الرقم لا مفتاحك. وTRANSPORT_BUSY يعني أن خدمة الرسائل تحدّ من وتيرتنا: إنه ضغط حِمل، لا عيب في طلبك، وكل ما صدر سابقًا يبقى صالحًا. وتحمل الرموز الثلاثة Retry-After بالثواني حين تكون المدة معروفة، فانتظر تلك المدة على الأقل.

429 Too Many Requests
{
  "error": {
    "code": "OUTBOUND_LIMIT",
    "message": "This number has started too many new conversations in the last hour."
  }
}

أخطاء التحقّق

بالنسبة لخطأ VALIDATION_FAILED، يسرد details كل حقل مخالف عبر path لتتمكّن من إظهار المشكلة بجوار الحقل الصحيح.

معالجة الأخطاء
const res = await fetch("https://api.sendveo.com/v1/numbers", options)
if (!res.ok) {
  const { error } = await res.json()
  if (error.code === "VALIDATION_FAILED") {
    for (const d of error.details ?? []) showFieldError(d.path, d.message)
  } else {
    showBanner(error.message)
  }
}
رموز أخطاء الـ API وغلافها · توثيق Sendveo