# POST /b2c/v1/auth/otp

<div class="api-docs" id="bkmrk-">  <div class="endpoint-section">  
</div></div>## B2C Customer Authentication (OTP)

این اندپوینت وظیفه مدیریت ورود و ثبت‌نام کاربران در وب‌سایت‌های فروش (B2C) را بر عهده دارد.   
سیستم از مکانیزم **رمز یکبار مصرف (OTP)** استفاده می‌کند. نکته کلیدی این است که اگر شماره موبایل در سیستم وجود نداشته باشد، کاربر به صورت **خودکار (Auto-Register)** ثبت‌نام شده و شناسه مسافر (`passenger\_id`) ایجاد می‌گردد.

<div class="api-docs" id="bkmrk--1"><div class="endpoint-section">  
</div>  
---

  </div># Request OTP / Login

<div class="api-docs" id="bkmrk-url%3A-%2Fb2c%2Fv1%2Fauth%2Fot"><div class="endpoint-info"><div>**URL:** `/b2c/v1/auth/otp`</div><div>**Method:** <span class="method-post">POST</span></div><div>**Controller:** V1UserController@authOtp</div><div>**Auth:** Public (Guest Access)</div></div></div>### Body Parameters (الزامی)

<div class="api-docs" id="bkmrk-parameter-type-descr"><table class="schema-table" dir="rtl"><thead><tr><th>Parameter</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td dir="ltr">mobile</td><td>String</td><td>شماره موبایل کاربر.   
<small>سیستم فرمت را بررسی کرده و در صورت نیاز عدد '0' را به ابتدای آن اضافه می‌کند.</small></td></tr><tr><td dir="ltr">branch</td><td>Integer</td><td>شناسه شعبه فعال (Office ID).   
<small>در صورت ثبت‌نام جدید، کاربر به این شعبه منتسب می‌شود.</small></td></tr></tbody></table>

  </div>### Response Structure

<div class="api-docs" id="bkmrk-key-description-stat"><table class="schema-table" dir="rtl"><thead><tr><th>Key</th><th>Description</th></tr></thead><tbody><tr><td dir="ltr">status</td><td>بولین (true/false) که موفقیت عملیات ارسال پیامک را نشان می‌دهد.</td></tr><tr><td dir="ltr">data.passenger\_id</td><td>شناسه منحصر به فرد کاربر (Customer ID) در دیتابیس. چه کاربر جدید باشد چه قدیمی، این شناسه برگردانده می‌شود.</td></tr><tr><td dir="ltr">message</td><td>پیام متنی وضعیت عملیات جهت نمایش به کاربر.</td></tr></tbody></table>

</div>### Example Responses

**۱. موفقیت آمیز (201 Created):**

```json
{
    "status": true,
    "time": 1702134567,
    "data": {
        "passenger_id": 5421
    },
    "message": "OTP با موفقیت ارسال گردید."
}
```

**۲. خطای محدودیت ارسال (422 Unprocessable Entity - Code 1204):**

```json
{
    "status": false,
    "code": 1204,
    "message": "تعداد درخواست های کاربر بیش از حد مجاز بوده است. لطفا 3 ساعت دیگر اقدام نمائید."
}
```

**۳. خطای پنل پیامک (422 Unprocessable Entity - Code 1202):**

```json
{
    "status": false,
    "code": 1202,
    "message": "پیامک OTP ارسال نشد. مشکلی رخ داده است. لطفا دوباره تلاش کنید",
    "trace": { ... }
}
```

<div class="api-docs" id="bkmrk--2">---

  </div>### Technical Logic

<div class="api-docs" id="bkmrk-request-%28mobile-%2B-br"><div class="flowchart"><div class="flow-item">Request (Mobile + Branch)</div><div class="flow-arrow">↓</div><div class="flow-item-process">**Normalize Mobile**  
Ensure starts with '0'  
Convert Persian nums to English</div><div class="flow-arrow">↓</div><div class="flow-item-decision">Exist in `customers`?</div><div style="display: flex; justify-content: space-between; width: 300px; margin: 0 auto;"><div style="text-align: center;"><div class="flow-arrow">↓ No</div><div class="flow-item-process" style="background-color: #fff3cd;">**Auto Register**  
INSERT INTO customers  
Branch: [$branch]</div></div><div style="text-align: center;"><div class="flow-arrow">↓ Yes</div><div class="flow-item-process">Select ID</div></div></div><div class="flow-arrow">↓</div><div class="flow-item-process">**Generate OTP**  
`StaticController::generateOtp`</div><div class="flow-arrow">↓</div><div class="flow-item-process">**Send SMS**  
`StaticController::sendNotification`  
<small>Log to SnailJob Queue</small></div><div class="flow-arrow">↓</div><div class="flow-item-success">Return JSON (Passenger ID)</div></div></div>