# 3. Birinchi sotuv

> Sotuv yaratamiz, mahsulot qo'shamiz va to'lovni o'tkazamiz.

BILLZ’da sotuv bosqichma-bosqich yig’iladi: sotuv yaratish → pozitsiyalarni qo’shish → (mijozni bog’lash, chegirmalarni qo’llash) → to’lash.

## 1. Sotuv yaratish

```bash
curl -X POST 'https://api-admin.billz.ai/v2/order?Billz-Response-Channel=HTTP' \
  -H 'Authorization: Bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "shop_id": "DOKON_ID",
    "cashbox_id": "KASSA_ID"
  }'
```

`cashbox_id` parametrini tushirib qoldirish mumkin. Metod asinxron: `Billz-Response-Channel=HTTP` (bu yerda — query-parametr sifatida, bir xil nomdagi sarlavha orqali ham mumkin) API’ni natijani kutishga va uni konvertda qaytarishga majbur qiladi.

```json
{
  "status_code": 200,
  "id": "38c3920a-ffdd-4233-a823-8af3266f5f4f",
  "data": {
    "id": "38c3920a-ffdd-4233-a823-8af3266f5f4f",
    "order_number": "5632631379",
    "order_type": "SALE"
  },
  "correlation_id": "3674f28e-7b96-4683-87c3-80892698f421"
}
```

Sotuvning UUID’i — bu `id` maydoni (aynan shu qiymat `data.id` ichida ham bor), u keyingi barcha qadamlarda kerak bo’ladi. `order_number` — BILLZ interfeysida ko’rinadigan qisqa raqam. Do’kon `shop_id`, kassa esa `cashbox_id` maydoni bilan belgilanadi; do’konlar ro’yxatini `GET /v1/shop` qaytaradi.

## 2. Mahsulot qo’shish

```bash
curl -X POST 'https://api-admin.billz.ai/v2/order-product/SOTUV_ID' \
  -H 'Authorization: Bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Billz-Response-Channel: HTTP' \
  -d '{
    "product_id": "MAHSULOT_ID",
    "sold_measurement_value": 1
  }'
```

> **Maydon `sold_measurement_value` deb nomlanadi**
>
> `shop_id` ushbu metodga uzatilmaydi: do’kon sotuvda belgilangan.

Faqat shu metod savatchani qayta hisoblashni ishga tushiradi, busiz to’lov rad etiladi.

## 3. Mijozni biriktirish (ixtiyoriy)

```bash
curl -X PUT 'https://api-admin.billz.ai/v2/order-customer-new/SOTUV_ID' \
  -H 'Authorization: Bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'Billz-Response-Channel: HTTP' \
  -d '{ "customer_id": "MIJOZ_ID", "check_auth_code": false }'
```

## 4. To’lash

Mavjud to’lov usullarini [`GET /v1/company-payment-type`](/uz/reference/api/operations/get_v1_company_payment_type/) metodi qaytaradi. Chekni bir vaqtning o’zida bir nechta to’lov bilan yopish mumkin.

```bash
curl -X POST 'https://api-admin.billz.ai/v2/order-payment/SOTUV_ID' \
  -H 'Authorization: Bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "payments": [
      { "company_payment_type_id": "TOLOV_TURI_ID", "paid_amount": 1000000, "returned_amount": 0 }
    ],
    "comment": "onlayn do'kon"
  }'
```

Javob — `{"order_type": "SALE", "should_print_cheque": true}`.

## Tez-tez uchraydigan xatolar

| Alomat                              | Odatiy sabab                                                                                                     |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `401`                               | `access_token` muddati tugagan — [tokenlar juftligini yangilang](/uz/concepts/auth/)                             |
| `403`                               | marshrut kalit uchun ruxsat etilgan ro’yxatga kiritilmagan — [kalit nimalarga qodir](/uz/reference/permissions/) |
| `200` bitta maydonga ega `message`  | `Billz-Response-Channel: HTTP` sarlavhasi unutib qoldirilgan                                                     |
| `400`, `data.error_code` = `20084`  | mahsulotlar boshqa metod bilan qo’shilgan — 2-qadamga qarang                                                     |
| `400`, kod `20020`                  | to’lovlar summasi chekning yakuniy summasiga mos kelmayapti                                                      |
| `400`, `data.error_code` = `20010`  | do’konda ochiq kassa yo’q                                                                                        |
| `408` roppa-rosa 10 daqiqadan keyin | natija HTTP kanali orqali yetkazilmadi; sotuv holati alohida so’rov orqali tekshiriladi                          |

Keyingi qadam: [natijani BILLZ’da tekshirish](/uz/start/verify/).