# POST /v2/config

<div class="api-docs" id="bkmrk-">  <div class="endpoint-section">  
</div></div>## System Configuration &amp; Tenant Init

این متد حیاتی‌ترین اندپوینت برای راه‌اندازی اولیه اپلیکیشن (Bootstrapping) است.   
سیستم بر اساس هدر **Domain** تشخیص می‌دهد که کاربر مربوط به کدام شعبه (Office) است و تنظیمات ظاهری، مالی، حقوقی و ماژول‌های فعال آن شعبه را برمی‌گرداند.

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

  </div># Get Office Configuration

<div class="api-docs" id="bkmrk-url%3A-%2Fv2%2Fconfig-meth"><div class="endpoint-info"><div>**URL:** `/v2/config`</div><div>**Method:** <span class="method-post">POST</span></div><div>**Controller:** V2BaseController@config</div><div>**Auth:** Public (No Auth Middleware Required usually, relies on Domain Header)</div></div></div>### Headers (Required)

<div class="api-docs" id="bkmrk-header-name-descript"><table class="schema-table" dir="rtl"><thead><tr><th>Header Name</th><th>Description</th></tr></thead><tbody><tr><td dir="ltr">Domain</td><td>آدرس دامنه‌ای که اپلیکیشن روی آن اجرا می‌شود (مثلاً `crm.example.com`).   
<small>سیستم `www.` و پورت (`:8080`) را به صورت خودکار حذف می‌کند تا دامنه پایه را پیدا کند.</small></td></tr></tbody></table>

  </div>### Response Structure (JSON)

خروجی شامل چندین بخش اصلی است:

<div class="api-docs" id="bkmrk-key-block-descriptio"><table class="schema-table" dir="rtl"><thead><tr><th>Key Block</th><th>Description</th></tr></thead><tbody><tr><td dir="ltr">office\_id</td><td>شناسه شعبه + 1000 (جهت Obfuscation).</td></tr><tr><td dir="ltr">title / brand</td><td>عنوان‌ها و نام برند به فارسی و انگلیسی.</td></tr><tr><td dir="ltr">communicational</td><td>اطلاعات تماس (تلفن، موبایل، ایمیل، آدرس، کد پستی و لوکیشن).</td></tr><tr><td dir="ltr">design</td><td>تنظیمات ظاهری شامل: - `logo/paper_logo/favicon`: لینک تصاویر.
- `base_color/theme/style`: تنظیمات CSS و رنگ‌بندی.
- `login_text`: متن نمایش داده شده در صفحه ورود.

</td></tr><tr><td dir="ltr">support\_online</td><td>کدهای مربوط به ابزارهای چت آنلاین (مثل Raychat یا Crisp).</td></tr><tr><td dir="ltr">details.financial\_debt</td><td><span style="color: red;">Boolean</span>  
آیا شعبه بدهی پرداخت نشده بابت پشتیبانی دارد؟ (بررسی جدول `airplus_bills`).</td></tr><tr><td dir="ltr">details.official</td><td>قوانین هاردکد شده سیستم برای مرخصی‌ها (Calendar Limit): - `leave`: قوانین مرخصی روزانه/ساعتی.
- `license`: قوانین مجوزها.

</td></tr><tr><td dir="ltr">details.config</td><td>تنظیمات داینامیک خوانده شده از جدول `office_config` (بصورت Key-Value).</td></tr></tbody></table>

</div>### Example Response

```json
{
    "office_id": 1001,
    "title": {
        "fa": "آژانس مسافرتی نمونه",
        "en": "Sample Travel Agency"
    },
    "brand": {
        "fa": "برند نمونه",
        "en": "Sample Brand"
    },
    "short_domain": "smpl",
    "expiration": "2026-01-01",
    "communicational": {
        "phone": "02188888888",
        "mobile": "09120000000",
        "email": "info@example.com",
        "site": "example.com",
        "address": {
            "fa": "تهران، خیابان ولیعصر...",
            "en": "Tehran, Valiasr St..."
        }
    },
    "design": {
        "login_text": "Welcome to Automation",
        "logo": "https://liara.../logo.png",
        "base_color": "#3b82f6",
        "theme": "light"
    },
    "services": ["flight", "hotel", "train"],
    "details": {
        "financial_debt": false,
        "financial": {
            "value_added": 9 
        },
        "official": {
            "calendar_limit": {
                "leave": {
                    "1": { "overtime": -60, "substitute": true },
                    "2": { "overtime": -60, "substitute": false }
                }
            }
        },
        "config": {
            "allow_negative_stock": "0",
            "print_footer_text": "Thanks for your purchase"
        }
    }
}
```

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

  </div>### Technical Logic Flow

<div class="api-docs" id="bkmrk-request-header%3A-doma"><div class="flowchart"><div class="flow-item">Request Header: Domain</div><div class="flow-arrow">↓</div><div class="flow-item-process">**Clean Domain**  
Remove 'www.' and ':port'</div><div class="flow-arrow">↓</div><div class="flow-item-process" style="background-color: #fffde7;">**DB Query (offices)**  
WHERE json_contains(domain, $baseDomain)</div><div class="flow-arrow">↓</div><div class="flow-item-condition">Found?</div><div class="flow-arrow" style="transform: rotate(-45deg); display: inline-block;">↙ No</div><div class="flow-arrow" style="transform: rotate(45deg); display: inline-block;">Yes ↘</div><div style="display: flex; justify-content: space-between; margin-top: 10px;"><div class="flow-item-error" style="width: 45%;">**Return 400**  
"The office is not defined"</div><div class="flow-item-process" style="width: 45%; background-color: #e8f5e9;">**Fetch Details**  
1. VAT Info  
2. Office Configs  
3. Check Expired Bills</div></div><div class="flow-arrow">↓</div><div class="flow-item-success">Return Complete JSON</div></div></div>