زویکس APIقیمت زنده طلا، سکه و ارز

مرجع

کدهای وضعیت HTTP و کدهای خطا

همه پاسخ‌های ممکن API قیمت زویکس: کدهای وضعیت HTTP، کد هر خطا، علت و راه‌حل، و هدرهای پاسخ.

شکل پاسخ خطا

همه خطاها (به‌جز مسیری که اصلاً وجود ندارد) این شکل را دارند. برنامه خود را روی code بنویسید، نه متن پیام:

{
  "error": {
    "code": "ip_not_allowed",
    "message": "این IP برای این کلید مجاز نیست"
  }
}

کدهای وضعیت HTTP

کدناممعنی
200OKموفق؛ پاسخ در data است.
400Bad Requestپارامتر نامعتبر.
401Unauthorizedکلید نیامده یا نامعتبر است.
402Payment Requiredاشتراک فعال نیست؛ تمدید کنید.
403Forbiddenکلید درست است ولی این درخواست مجاز نیست (IP، دامنه، اپ اندروید یا پلن).
404Not Foundنماد یا مسیر وجود ندارد.
429Too Many Requestsسقف دقیقه، سهمیه روزانه یا تعداد اتصال زنده پر شده؛ Retry-After را ببینید.
500Internal Server Errorخطای سرور؛ با فاصله دوباره تلاش کنید.
503Service Unavailableموقتاً در دسترس نیست؛ بعد از Retry-After تلاش کنید.

همه کدهای خطا

401api_key_requiredکلید ارسال نشده
چه وقت
هیچ‌کدام از X-API-Key، Authorization: Bearer یا api_key در درخواست نیست.
راه‌حل
کلید را در هدر X-API-Key بفرستید.
401invalid_api_keyکلید نامعتبر یا باطل
چه وقت
کلید اشتباه تایپ شده، باطل شده یا وجود ندارد.
راه‌حل
کلید را از داشبورد کپی کنید یا کلید تازه بسازید.
402subscription_expiredاشتراک تمام شده
چه وقت
پلن فعالی برای حساب نیست (تمام شده یا هنوز نخریده‌اید).
راه‌حل
از داشبورد پلن را تمدید کنید؛ کلیدها بلافاصله دوباره کار می‌کنند.
403client_suspendedحساب غیرفعال
چه وقت
حساب شما توسط پشتیبانی غیرفعال شده است.
راه‌حل
با پشتیبانی زویکس تماس بگیرید.
403ip_not_allowedIP مجاز نیست
چه وقت
برای کلید فهرست IP تعریف شده و درخواست از IP دیگری آمده.
راه‌حل
IP سرور را در «IPهای مجاز» کلید اضافه کنید.
403origin_not_allowedدامنه مجاز نیست
چه وقت
کلید به دامنه‌های مشخصی محدود است و درخواست (یا قاب ویجت) از سایت دیگری است.
راه‌حل
دامنه را در «دامنه‌های مجاز» کلید اضافه کنید.
403app_not_allowedاپ مجاز نیست
چه وقت
کلید به اپ‌های اندروید مشخصی محدود است و هدرهای X-Android-Package و X-Android-Cert نیامده یا با اپ ثبت‌شده نمی‌خواند.
راه‌حل
هدرها را از خود اپ بفرستید (راهنمای اندروید) و SHA-256 گواهی امضای نسخه انتشار (Play App Signing) را در کلید ثبت کنید.
403plan_feature_missingامکان در پلن نیست
چه وقت
ارسال زنده یا ویجت در پلن شما نیست.
راه‌حل
پلن را به حرفه‌ای یا سازمانی ارتقا دهید.
403symbol_not_in_planنماد در پلن نیست
چه وقت
پلن شما به نمادهای مشخصی محدود است.
راه‌حل
نمادهای پلن را با /v1/symbols ببینید یا پلن را ارتقا دهید.
403history_not_in_planتاریخچه در پلن نیست
چه وقت
پلن شما تاریخچه ندارد.
راه‌حل
پلنی با تاریخچه انتخاب کنید.
403history_range_not_in_planبازه بیش از سقف پلن
چه وقت
days بیشتر از بازه تاریخچه پلن است.
راه‌حل
days را کمتر کنید یا پلن را ارتقا دهید.
404symbol_not_foundنماد وجود ندارد
چه وقت
نماد اشتباه است.
راه‌حل
شناسه درست را از /v1/symbols بردارید (حروف کوچک انگلیسی).
429rate_limitedسقف درخواست در دقیقه
چه وقت
بیش از سقف پلن در یک دقیقه درخواست داده‌اید.
راه‌حل
به هدر Retry-After (ثانیه) احترام بگذارید، پاسخ‌ها را چند ثانیه کش کنید یا از /v1/stream استفاده کنید.
429daily_quota_exceededسهمیه روزانه تمام شد
چه وقت
مصرف امروز (به وقت تهران) به سهمیه پلن رسیده.
راه‌حل
تا نیمه‌شب تهران صبر کنید یا پلن را ارتقا دهید؛ X-Quota-Remaining را پایش کنید.
429too_many_streamsاتصال زنده زیاد
چه وقت
بیش از ۵ اتصال هم‌زمان /v1/stream با یک کلید.
راه‌حل
یک اتصال در سرور بگیرید و بین کاربران خودتان پخش کنید.
500internalخطای داخلی
چه وقت
مشکل پیش‌بینی‌نشده در سرور.
راه‌حل
با فاصله دوباره تلاش کنید؛ اگر ادامه داشت با شناسه درخواست (X-Request-Id) به پشتیبانی خبر دهید.
503service_disabledسرویس موقتاً متوقف
چه وقت
سرویس‌دهی API برای نگهداری موقتاً خاموش است.
راه‌حل
بعد از Retry-After دوباره تلاش کنید.
503unavailableسرور موقتاً در دسترس نیست
چه وقت
به‌روزرسانی یا قطعی کوتاه.
راه‌حل
چند ثانیه بعد دوباره تلاش کنید.

مسیری که وجود ندارد پاسخ ۴۰۴ متنی (نه JSON) می‌گیرد؛ آدرس را با /v1/… بررسی کنید.

هدرهای پاسخ

هدرمعنی
X-RateLimit-Limitسقف درخواست در دقیقه پلن شما
X-Quota-Limitسهمیه روزانه (فقط وقتی پلن سهمیه دارد)
X-Quota-Remainingباقی‌مانده سهمیه امروز
X-Planنام پلن (URL-encoded)
X-Local-Free-Remainingفقط برای درخواست از صفحه‌ای روی localhost یا 127.0.0.1: باقی‌مانده درخواست‌های رایگان توسعه امروز
Retry-Afterدر پاسخ‌های ۴۲۹ و ۵۰۳: چند ثانیه صبر کنید
X-Request-Idشناسه درخواست برای پیگیری با پشتیبانی

نمونه مدیریت خطا

const res = await fetch(url, { headers: { "X-API-Key": key } });
const body = await res.json();
if (!res.ok) {
  switch (body.error.code) {
    case "invalid_api_key":      // کلید را در تنظیمات برنامه بررسی کنید
    case "subscription_expired": // به مدیر خبر دهید تا تمدید کند
      alertAdmin(body.error.message); break;
    case "rate_limited":         // Retry-After ثانیه صبر کنید
      await sleep(Number(res.headers.get("Retry-After") ?? 60) * 1000); break;
    default:
      console.error(res.status, body.error.code, body.error.message);
  }
}