رفتن به محتوای اصلی
سندک

مستنداتمرجع

خطاها و سقف‌ها

قالب پاسخ خطا، کدهای ماشین‌خوان، و سقف‌های اندازه، نرخ و مصرف.

آخرین ویرایش: ۲۱ آبان ۱۴۰۵

قالب خطا

خطاهای ارسال یک شیء با message (متن انگلیسی برای انسان) و code (مقدار ثابت برای برنامه) هستند. به code تکیه کنید، نه به message؛ متن ممکن است عوض شود.

422
{
  "message": "The From domain is not a verified domain of this account.",
  "code": "sender_not_verified"
}

خطای اعتبارسنجی فیلدها (مثلاً نشانی نامعتبر) قالب استاندارد لاراول را دارد: message و یک شیء errors که برای هر فیلد پیام می‌آورد، با کد 422.

کدهای وضعیت

کد HTTPمعناتلاش دوباره؟
202پیام در صف قرار گرفت—
200پاسخ تکراری با Idempotency-Key—
401کلید نامعتبر، لغو‌شده، منقضی یا از آدرس غیرمجازنه
403کلید اجازه‌ی این کار را نداردنه
404قالب پیدا نشدنه
413پیام یا پیوست بزرگ استنه، کوچکش کنید
422درخواست نامعتبرنه، اصلاحش کنید
429نرخ یا سهمیهبعداً
503سرویس موقتاً نمی‌پذیردبعداً، با Retry-After

کدهای خطا

codeکد HTTPتوضیح
sender_not_verified422دامنه‌ی from تأیید نشده است
key_not_allowed_for_domain403این کلید اجازه‌ی ارسال از آن دامنه را ندارد
no_recipients422پیام گیرنده ندارد
too_many_recipients422بیش از ۵۰ گیرنده
template_not_found404قالب متعلق به این حساب نیست
message_too_large413پیام از اندازه‌ی مجاز بزرگ‌تر است
attachment_too_large413مجموع پیوست‌ها بزرگ است
attachment_invalid422پیوست base64 معتبر نیست
attachment_blocked422نوع فایل پیوست مجاز نیست
batch_too_large413بدنه ضرب‌در گیرنده‌ها بزرگ است؛ در گروه‌های کوچک‌تر بفرستید
quota_exceeded429سهمیه‌ی ماهانه یا روزانه تمام شده است
sending_under_review503ارسال حساب برای بررسی کوتاه نگه داشته شده
bad_idempotency_key422قالب Idempotency-Key درست نیست
idempotency_key_reused422همان کلید با بدنه‌ی دیگر آمده

سقف‌ها

موردسقف
گیرنده در هر پیام۵۰ (To و Cc و Bcc با هم)
عضو recipients در ارسال دسته‌ای۵۰
اندازه‌ی پیام در API۱ مگابایت (بدون پیوست)
اندازه‌ی پیام در SMTP۱۰ مگابایت
پیوست۱۰ عدد، مجموعاً ۱۰ مگابایت
ارسال دسته‌ایبدنه × گیرنده ≤ ۱۰ مگابایت
موضوع۲۵۵ نویسه
برچسب۱۰ عدد، هر کدام ≤ ۳۲ نویسه
metadata و variables۱۰ و ۲۰ مورد
هدر دلخواه۲۰ مورد
درخواست در دقیقه۶۰۰ برای هر کلید

نرخ درخواست

هر کلید در دقیقه ۶۰۰ درخواست دارد. بعد از آن پاسخ 429 با هدر Retry-After می‌گیرید. برای حجم بالا از ارسال دسته‌ای استفاده کنید؛ هر درخواست تا ۵۰ گیرنده دارد.

سهمیه

سقف ماهانه و (در پلن رایگان) روزانه به پلن شما بستگی دارد. وقتی تمام شود، ارسال با quota_exceeded و کد 429 رد می‌شود و ایمیل بی‌صدا گم نمی‌شود. می‌توانید ایمیل اضافه بخرید یا پلن را عوض کنید. سهمیه اول هر ماه شمسی از نو شروع می‌شود.

هر گیرنده یک واحد حساب می‌شود، یعنی یک ایمیل با سه گیرنده سه واحد است. تلاش دوباره‌ی خود سندک برای تحویل، دوباره حساب نمی‌شود. گیرنده‌ی داخل فهرست حذف حساب نمی‌شود.

Retry-After

برای 429 و 503، اگر هدر Retry-After بود، همان قدر صبر کنید. بدون هدر، با فاصله‌ی افزایشی (۱ ثانیه، ۲، ۴، …) و Idempotency-Key دوباره بفرستید.

Node.js
async function sendWithRetry(body, key, tries = 5) {
  for (let attempt = 0; attempt < tries; attempt++) {
    const response = await fetch('https://api.sendak.ir/v1/emails', {
      method: 'POST',
      headers: {
        Authorization: `Bearer ${process.env.SENDAK_KEY}`,
        'Content-Type': 'application/json',
        'Idempotency-Key': key,
      },
      body: JSON.stringify(body),
      signal: AbortSignal.timeout(10_000),
    })

    if (response.ok) return response.json()
    if (response.status !== 429 && response.status < 500) throw new Error(await response.text())

    const wait = Number(response.headers.get('Retry-After')) || 2 ** attempt
    await new Promise((resolve) => setTimeout(resolve, wait * 1000))
  }

  throw new Error('Sendak did not accept the message')
}