Navidaa نویدا documentation
Swagger
GET /v1/otp/{verification_id}

وضعیت یا long polling

خواندن وضعیت زنده ارسال، کانال فعلی، زمان باقی مانده و تاریخچه تلاش ها.

چه زمانی poll شود

GEThttps://api.navidaa.ir/v1/otp/{verification_id}

وقتی صفحه محصول نیاز دارد نشان دهد کد در کدام کانال ارسال شده یا مسیر جایگزین به مرحله بعد رفته است، این endpoint مناسب است. در وضعیت queued هر ۵ تا ۱۰ ثانیه poll کافی است. با رسیدن به وضعیت های پایانی، polling متوقف می شود.

فیلدهای پاسخ

فیلدتوضیح
statusوضعیت چرخه عمر همان verification.
current_channelآخرین کانالی که تلاش شده، با provider، credential_id و label.
current_channel_statussent یعنی ارائه دهنده پیام را پذیرفته؛ failed یعنی همان تلاش ارسال شکست خورده است.
remaining_secondsزمان باقی مانده تا مسیر جایگزین بعدی. برای وضعیت پایانی، آخرین کانال یا وضعیت نامعلوم، مقدار null است.
attemptsتاریخچه مرتب تلاش های ارسال.

وضعیت ها

pendingفرایند ساخته شده اما هنوز تلاش ارسال ثبت نشده است. این حالت معمولا بسیار کوتاه است.
queuedحداقل یک کانال امتحان شده و فرایند هنوز فعال است.
verifiedکد درست وارد شده و تایید کامل شده است.
failed / lockedارسال به نتیجه نرسیده یا تلاش های اشتباه باعث قفل شدن شده است.
expiredزمان اعتبار تمام شده و کد دیگر قابل تایید نیست.
statusمعناادامه کار
pendingفرایند تازه ساخته شده و هنوز تلاش ارسال در تاریخچه دیده نمی شود.کمی بعد دوباره وضعیت خوانده شود.
queuedفرایند فعال است؛ کد ارسال شده یا مسیر جایگزین هنوز ادامه دارد.polling هر ۵ تا ۱۰ ثانیه یا انتظار برای وبهوک کافی است.
verifiedکد درست وارد شده است.فرایند موفق تمام شده است.
failedهمه مسیرهای ارسال شکست خورده اند.یک فرایند جدید شروع شود یا تنظیمات ارسال بررسی شود.
lockedتعداد تلاش های اشتباه زیاد شده و فرایند قفل شده است.برای کاربر فرایند جدید ساخته شود.
expiredزمان اعتبار verification تمام شده است. اگر فرایند فعال از زمان انقضا گذشته باشد، همین endpoint آن را به شکل موثر expired نشان می دهد.فرایند جدید ساخته شود.

attempts

کلید attempts در JSON تاریخچه تلاش های ارسال را نشان می دهد. هر عضو این آرایه یک تلاش روی یک کانال است و ترتیب آن با فیلد sequence مشخص می شود.

فیلدتوضیح
sequenceشماره تلاش در مسیر ارسال؛ ۱ یعنی اولین کانال.
channelجزئیات کانال و حساب استفاده شده در همان تلاش.
statussent یعنی پیام پذیرفته شده؛ failed یعنی تلاش ارسال شکست خورده است.
dispatched_atزمان انجام همان تلاش.
transition_reasonبرای تلاش های قبلی معمولا timed_out یا failed است. آخرین تلاش معمولا مقدار null دارد.

نمونه پاسخ fallback

{
  "verification_id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "queued",
  "phone": "+989123456789",
  "current_channel": {
    "type": "sms",
    "provider": "smsir",
    "credential_id": 12,
    "label": "Primary sms.ir"
  },
  "current_channel_status": "sent",
  "remaining_seconds": null,
  "expires_at": "2026-05-24T10:35:00Z",
  "verified_at": null,
  "attempts": [
    {
      "sequence": 1,
      "channel": {"type": "messenger", "provider": "eitaa", "credential_id": 21, "label": "Eitaa main"},
      "status": "sent",
      "dispatched_at": "2026-05-24T10:30:02Z",
      "transition_reason": "timed_out"
    },
    {
      "sequence": 2,
      "channel": {"type": "sms", "provider": "smsir", "credential_id": 12, "label": "Primary sms.ir"},
      "status": "sent",
      "dispatched_at": "2026-05-24T10:31:02Z",
      "transition_reason": null
    }
  ]
}