الأخطاء

يستخدم كل خطأ، عبر الـ 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لا يوجد مورد كهذا في حسابك.
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