Sotuvlar
Kassadagi to‘g‘ridan-to‘g‘ri sotuv cheklari: yaratish, ro‘yxat, qaytarish, almashtirish va bosma shakllar. Sotuv ombordan qoldiqni kamaytiradi, to‘lovlarni kassaga o‘tkazadi va mijoz bonuslarini hisoblaydi yoki yechadi.
| Metod | Manzil | Vazifasi |
|---|---|---|
| PATCH | /company/trade/sale/{model}/return | Chek bo‘yicha tovarlarni qaytarish |
| POST | /company/trade/sale/{model}/exchange | Chek bo‘yicha tovar almashtirish |
| GET | /company/trade/sale/{model}/print | Chekni Excel’ga yuklash |
| GET | /company/trade/sale/{model}/invoice | A4 yuk xati |
| GET | /company/trade/sale/{model}/check-detail | Chek kartasi |
| GET | /company/trade/sale/{model}/credit-detail | Kredit shartnomasi ma’lumotlari |
| GET | /company/trade/sale | Sotuvlar ro‘yxati |
| GET | /company/trade/sale/{model} | Sotuv tafsilotlari |
| POST | /company/trade/sale | Sotuv yaratish |
Chek bo‘yicha tovarlarni qaytarish
/company/trade/sale/{model}/returnChek qatorlarini qaytaradi (sotilganidan avval qaytarilgan miqdor ayirilganidan ko‘p emas) va transactions bo‘yicha pul to‘laydi; tovarlar omborga qaytadi. Chek bo‘yicha qarz bo‘lsa, qaytarish qiymati avval qarzni yopadi va faqat qoldig‘i to‘lanadi. Komplekt faqat butunligicha qaytariladi; bonus va qarz ko‘rinishida pul qaytarilmaydi.
Formadan (
multipart/form-data)PATCHmetodiPOST+?_method=PATCHparametri bilan yuboriladi.
Sarlavhalar (headers)
| Sarlavha | Qiymat | Tavsif |
|---|---|---|
Authorization | Bearer {token} | POST /common/auth/login dan olingan token |
Accept | application/json | Javob JSON da |
Accept-Language | ru | Xabarlar va nomlar tili: ru, uz, oz |
Yo‘l parametrlari
| Parametr | Tavsif |
|---|---|
model | Yozuv ID si |
So‘rov tanasi
| Maydon | Turi | Majburiy | Tavsif |
|---|---|---|---|
products | object[] | Yo‘q | Mahsulotlar. Maks. 100 ta element |
products[].id | integer | Ha | ID. Takrorlanmasin |
products[].reason_type | string | Ha | Sabab turi. Mumkin qiymatlar: defective, size_not_fit, expired_date, not_match |
products[].returned_quantity | number | Ha | Qaytarilgan miqdor. Verguldan keyin 8 tagacha raqam. Kamida 0.00000001 |
products[].comment | string | Yo‘q | Izoh. Maks. 1000 belgi |
transactions | object[] | Yo‘q | Tranzaksiya. Maks. 10 ta element |
transactions[].payment_type | string | Ha | Tulov turi. Mumkin qiymatlar: bank, card, cash |
transactions[].payment_type_id | integer | Yo‘q | To'lov turi |
transactions[].amount | number | Ha | Summa. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin |
{
"products": [
{
"id": 253,
"returned_quantity": 1,
"reason_type": "defective"
},
{
"id": 254,
"returned_quantity": 0.7,
"reason_type": "defective"
},
{
"id": 255,
"returned_quantity": 0.3,
"reason_type": "defective"
}
],
"transactions": [
{
"payment_type": "cash",
"amount": 3000
}
]
}curl -X PATCH "https://api.wasyt.uz/company/trade/sale/214/return" \
-H "Accept: application/json" \
-H "Accept-Language: ru" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"products":[{"id":253,"returned_quantity":1,"reason_type":"defective"},{"id":254,"returned_quantity":0.7,"reason_type":"defective"},{"id":255,"returned_quantity":0.3,"reason_type":"defective"}],"transactions":[{"payment_type":"cash","amount":3000}]}'Javob · 200
Javob maydonlari
| Maydon | Turi | Tavsif |
|---|---|---|
id | integer | ID |
creator_id | integer | Yaratuvchi |
company_id | integer | Kompaniya |
cashbox_id | integer | Kassa |
stock_id | integer | Ombor |
client_id | null | Mijoz |
exchange_of_sale_id | null | |
currency | string | Valyuta |
purchased_amount | integer | |
sold_amount | integer | Sotuvdagi summa |
returned_amount | integer | Qaytarilgan summa |
status | string | Status |
source_type | string | Manba |
source_data | array | |
code | string | Kod |
created_at | string | Yaratilgan |
updated_at | string | Yangilangan |
{
"id": 214,
"creator_id": 2,
"company_id": 1,
"cashbox_id": 2,
"stock_id": 1,
"client_id": null,
"exchange_of_sale_id": null,
"currency": "uzs",
"purchased_amount": 2061000,
"sold_amount": 3000,
"returned_amount": 3000,
"status": "full_returned",
"source_type": "wasyt",
"source_data": [],
"code": "#300926001",
"created_at": "2026-09-30 12:55:03",
"updated_at": "2026-09-30 12:55:03"
}Xato misoli · 422
{
"message": "Значение поля Сумма не может быть больше 2000.",
"errors": {
"transactions": [
"Значение поля Сумма не может быть больше 2000."
]
}
}Chek bo‘yicha tovar almashtirish
/company/trade/sale/{model}/exchangeAsl chekning tanlangan qatorlarini qaytaradi va ularning o‘rniga tovar va komplektlar uchun yangi sotuv yaratadi. Farq aynan uning summasiga transactions bilan to‘lanadi: xaridor qo‘shimcha to‘lovi — yangi sotuvga kirim (mijoz va due_date bilan qarzga ham mumkin), ortiqcha — asl chek bo‘yicha to‘lov; teng almashtirishda operatsiya yo‘q. original_sale va exchange_sale qaytaradi.
Sarlavhalar (headers)
| Sarlavha | Qiymat | Tavsif |
|---|---|---|
Authorization | Bearer {token} | POST /common/auth/login dan olingan token |
Accept | application/json | Javob JSON da |
Accept-Language | ru | Xabarlar va nomlar tili: ru, uz, oz |
Yo‘l parametrlari
| Parametr | Tavsif |
|---|---|
model | Yozuv ID si |
So‘rov tanasi
| Maydon | Turi | Majburiy | Tavsif |
|---|---|---|---|
cashbox_id | integer | Ha | Kassa. Mavjud yozuv ID si |
stock_id | integer | Ha | Ombor. Mavjud yozuv ID si |
currency | string | Ha | Valyuta |
client_id | integer | Yo‘q | Mijoz |
company_id | integer | Ha | Kompaniya |
returned_products | object[] | Ha | Kamida 1 ta element. Maks. 100 ta element |
returned_products[].id | integer | Ha | ID. Takrorlanmasin |
returned_products[].reason_type | string | Ha | Sabab turi. Mumkin qiymatlar: defective, size_not_fit, expired_date, not_match |
returned_products[].returned_quantity | number | Ha | Qaytarilgan miqdor. Verguldan keyin 8 tagacha raqam. Kamida 0.00000001 |
returned_products[].comment | string | Yo‘q | Izoh. Maks. 1000 belgi |
products | object[] | Yo‘q | Mahsulotlar. Maks. 100 ta element |
products[].product_id | integer | Ha | Tovar. Takrorlanmasin |
products[].sold_quantity | number | Ha | Sotilgan miqdori. Verguldan keyin 8 tagacha raqam. Kamida 0.00000001 |
products[].discount | number | Yo‘q | Chegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin |
products[].price | number | Yo‘q | Narxi. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin |
bundles | object[] | Yo‘q | Komplektlar. Maks. 100 ta element |
bundles[].bundle_id | integer | Ha | Komplekt |
bundles[].quantity | integer | Yo‘q | Miqdori. Kamida 1. 1000 dan oshmasin |
bundles[].discount | number | Yo‘q | Chegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin |
bundles[].price | number | Yo‘q | Narxi. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin |
due_date | string (date) | Yo‘q | Toʻlov muddati. Kamida bugungi kun |
comment | string | Yo‘q | Izoh. Maks. 1000 belgi |
transactions | object[] | Yo‘q | Tranzaksiya. Maks. 10 ta element |
transactions[].payment_type | string | Ha | Tulov turi. Takrorlanmasin. Mumkin qiymatlar: cash, card, bank, debt |
transactions[].amount | number | Ha | Summa. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin |
{
"company_id": 1,
"cashbox_id": 2,
"stock_id": 1,
"currency": "uzs",
"client_id": 1,
"due_date": "2030-12-31",
"comment": "Exchange surcharge on credit",
"returned_products": [
{
"id": 1,
"reason_type": "defective",
"returned_quantity": 1
}
],
"products": [
{
"product_id": 1,
"sold_quantity": 1
}
],
"transactions": [
{
"payment_type": "debt",
"amount": 200
}
]
}curl -X POST "https://api.wasyt.uz/company/trade/sale/1/exchange" \
-H "Accept: application/json" \
-H "Accept-Language: ru" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"company_id":1,"cashbox_id":2,"stock_id":1,"currency":"uzs","client_id":1,"due_date":"2030-12-31","comment":"Exchange surcharge on credit","returned_products":[{"id":1,"reason_type":"defective","returned_quantity":1}],"products":[{"product_id":1,"sold_quantity":1}],"transactions":[{"payment_type":"debt","amount":200}]}'Javob · 200
Javob maydonlari
| Maydon | Turi | Tavsif |
|---|---|---|
original_sale | object | |
original_sale.id | integer | ID |
original_sale.creator_id | integer | Yaratuvchi |
original_sale.company_id | integer | Kompaniya |
original_sale.cashbox_id | integer | Kassa |
original_sale.stock_id | integer | Ombor |
original_sale.client_id | integer | Mijoz |
original_sale.exchange_of_sale_id | null | |
original_sale.currency | string | Valyuta |
original_sale.purchased_amount | integer | |
original_sale.sold_amount | integer | Sotuvdagi summa |
original_sale.returned_amount | integer | Qaytarilgan summa |
original_sale.status | string | Status |
original_sale.source_type | string | Manba |
original_sale.source_data | array | |
original_sale.code | string | Kod |
original_sale.created_at | string | Yaratilgan |
original_sale.updated_at | string | Yangilangan |
exchange_sale | object | |
exchange_sale.company_id | integer | Kompaniya |
exchange_sale.cashbox_id | integer | Kassa |
exchange_sale.stock_id | integer | Ombor |
exchange_sale.currency | string | Valyuta |
exchange_sale.client_id | integer | Mijoz |
exchange_sale.exchange_of_sale_id | integer | |
exchange_sale.status | string | Status |
exchange_sale.source_type | string | Manba |
exchange_sale.source_data | object | |
exchange_sale.source_data.exchange_key | string | |
exchange_sale.updated_at | string | Yangilangan |
exchange_sale.created_at | string | Yaratilgan |
exchange_sale.creator_id | integer | Yaratuvchi |
exchange_sale.code | string | Kod |
exchange_sale.id | integer | ID |
exchange_sale.purchased_amount | integer | |
exchange_sale.sold_amount | integer | Sotuvdagi summa |
exchange_sale.returned_amount | integer | Qaytarilgan summa |
{
"original_sale": {
"id": 1,
"creator_id": 2,
"company_id": 1,
"cashbox_id": 1,
"stock_id": 1,
"client_id": 1,
"exchange_of_sale_id": null,
"currency": "uzs",
"purchased_amount": 500,
"sold_amount": 4900,
"returned_amount": 0,
"status": "completed",
"source_type": "wasyt",
"source_data": [],
"code": "w-1-1",
"created_at": "2020-01-01 10:00:00",
"updated_at": "2026-09-30 12:55:21"
},
"exchange_sale": {
"company_id": 1,
"cashbox_id": 2,
"stock_id": 1,
"currency": "uzs",
"client_id": 1,
"exchange_of_sale_id": 1,
"status": "completed",
"source_type": "wasyt",
"source_data": {
"exchange_key": "52f80baa-6e14-4ef3-8da3-dfced18a1bac"
},
"updated_at": "2026-09-30 12:55:21",
"created_at": "2026-09-30 12:55:21",
"creator_id": 2,
"code": "#300926001",
"id": 249,
"purchased_amount": 1000,
"sold_amount": 200,
"returned_amount": 0
}
}Xato misoli · 422
{
"message": "Укажите срок погашения долга",
"errors": {
"due_date": [
"Укажите срок погашения долга"
]
}
}Chekni Excel’ga yuklash
/company/trade/sale/{model}/printBitta chek qatorlarini qo‘shilgan tartibida Excel fayl sifatida yuklab beradi.
Sarlavhalar (headers)
| Sarlavha | Qiymat | Tavsif |
|---|---|---|
Authorization | Bearer {token} | POST /common/auth/login dan olingan token |
Accept | application/json | Javob JSON da |
Accept-Language | ru | Xabarlar va nomlar tili: ru, uz, oz |
Yo‘l parametrlari
| Parametr | Tavsif |
|---|---|
model | Yozuv ID si |
Javob · 200
Javob — fayl yoki matn, JSON emas.
A4 yuk xati
/company/trade/sale/{model}/invoiceChop etishni oldindan ko‘rish uchun chek bo‘yicha A4 yuk xati ma’lumotlari; format=excel bilan — xuddi shu ma’lumotlardan chop etishga tayyor Excel varaq.
Sarlavhalar (headers)
| Sarlavha | Qiymat | Tavsif |
|---|---|---|
Authorization | Bearer {token} | POST /common/auth/login dan olingan token |
Accept | application/json | Javob JSON da |
Accept-Language | ru | Xabarlar va nomlar tili: ru, uz, oz |
Yo‘l parametrlari
| Parametr | Tavsif |
|---|---|
model | Yozuv ID si |
So‘rov parametrlari
| Maydon | Turi | Majburiy | Tavsif |
|---|---|---|---|
format | string | Yo‘q | Javob formati: excel — JSON o‘rniga bosma varaqni yuklab olish |
Javob · 200
Javob maydonlari
| Maydon | Turi | Tavsif |
|---|---|---|
sale | object | |
sale.id | integer | ID |
sale.code | string | Kod |
sale.currency | string | Valyuta |
sale.created_at | string | Yaratilgan |
sale.date | string | Sana |
sale.time | string | |
settings | object | Sozlamalar |
settings.header | object | |
settings.header.store_name | boolean | |
settings.header.working_hours | boolean | |
settings.header.cashier | boolean | |
settings.header.contacts | boolean | |
settings.header.legal_name | boolean | |
settings.header.client_phone | boolean | |
settings.header.date | boolean | Sana |
settings.header.seller | boolean | |
settings.header.client | boolean | |
settings.header.tin | boolean | |
settings.header.address | boolean | Manzil |
settings.working_hours | null | |
settings.balance | object | Balans |
settings.balance.enabled | boolean | |
settings.balance.before | boolean | |
settings.balance.added | boolean | |
settings.balance.written_off | boolean | |
settings.balance.after | boolean | |
settings.debt | object | Qarz |
settings.debt.enabled | boolean | |
settings.debt.before | boolean | |
settings.debt.added | boolean | |
settings.debt.written_off | boolean | |
settings.debt.after | boolean | |
company | object | Kompaniya |
company.name | string | Nomlanish |
company.legal_name | string | |
company.tin | string | |
company.address | string | Manzil |
company.phone | string | Telefon |
client | object | |
client.id | integer | ID |
client.full_name | string | FISH |
client.phone | string | Telefon |
cashier | object | |
cashier.full_name | string | FISH |
cashier.is_director | boolean | |
creator | object | |
creator.full_name | string | FISH |
rows | object[] | |
rows[].position | integer | Lavozim |
rows[].category | string | Kategoriya |
rows[].name | string | Nomlanish |
rows[].quantity | integer | Miqdori |
rows[].price | integer | Narxi |
rows[].amount | integer | Summa |
rows[].amount_uzs | integer | |
rows[].amount_usd | null | |
totals | object | |
totals.quantity | integer | Miqdori |
totals.current | object | |
totals.current.uzs | integer | |
totals.current.usd | integer | |
totals.previous_debt | object | |
totals.previous_debt.uzs | integer | |
totals.previous_debt.usd | integer | |
totals.total | object | Jami yozuvlar |
totals.total.uzs | integer | |
totals.total.usd | integer | |
balance | object | Balans |
balance.before | integer | |
balance.added | integer | |
balance.written_off | integer | |
balance.after | integer | |
debt | object | Qarz |
debt.before | integer | |
debt.added | integer | |
debt.written_off | integer | |
debt.after | integer |
{
"sale": {
"id": 255,
"code": "inv-credit",
"currency": "uzs",
"created_at": "2026-09-30 12:55:27",
"date": "30.09.2026",
"time": "12:55:27"
},
"settings": {
"header": {
"store_name": false,
"working_hours": false,
"cashier": false,
"contacts": false,
"legal_name": false,
"client_phone": false,
"date": false,
"seller": false,
"client": false,
"tin": false,
"address": false
},
"working_hours": null,
"balance": {
"enabled": false,
"before": true,
"added": true,
"written_off": true,
"after": true
},
"debt": {
"enabled": true,
"before": true,
"added": true,
"written_off": true,
"after": true
}
},
"company": {
"name": "Company 1",
"legal_name": "Company 1",
"tin": "000000001",
"address": "Address 1",
"phone": "998000000001"
},
"client": {
"id": 1,
"full_name": "Full name 1",
"phone": "998000000001"
},
"cashier": {
"full_name": "director_1@local.host",
"is_director": true
},
"creator": {
"full_name": "director_1@local.host"
},
"rows": [
{
"position": 1,
"category": "Category 1-1-1 ru",
"name": "Product 1",
"quantity": 1,
"price": 900,
"amount": 900,
"amount_uzs": 900,
"amount_usd": null
},
{
"position": 2,
"category": "Category 1-1-1 ru",
"name": "Product 1-1",
"quantity": 2,
"price": 2000,
"amount": 4000,
"amount_uzs": 4000,
"amount_usd": null
}
],
"totals": {
"quantity": 3,
"current": {
"uzs": 4900,
"usd": 0
},
"previous_debt": {
"uzs": 4000,
"usd": 0
},
"total": {
"uzs": 8900,
"usd": 0
}
},
"balance": {
"before": 1000,
"added": 0,
"written_off": 0,
"after": 1000
},
"debt": {
"before": 4000,
"added": 4900,
"written_off": 0,
"after": 8900
}
}Chek kartasi
/company/trade/sale/{model}/check-detailChekning butun tarixi: tovarlar, to‘lovlar, barcha qaytarish va almashtirishlar hamda yakuniy qiymat. Almashtirish orqali yaratilgan yangi sotuv asl chek kartasini ochadi.
Sarlavhalar (headers)
| Sarlavha | Qiymat | Tavsif |
|---|---|---|
Authorization | Bearer {token} | POST /common/auth/login dan olingan token |
Accept | application/json | Javob JSON da |
Accept-Language | ru | Xabarlar va nomlar tili: ru, uz, oz |
Yo‘l parametrlari
| Parametr | Tavsif |
|---|---|
model | Yozuv ID si |
Javob · 200
Javob maydonlari
| Maydon | Turi | Tavsif |
|---|---|---|
sale | object | |
sale.id | integer | ID |
sale.code | string | Kod |
sale.created_at | string | Yaratilgan |
sale.currency | string | Valyuta |
sale.status | string | Status |
sale.has_exchange | boolean | |
sale.products_count | integer | |
sale.payment_types | array | |
sale.cashier_name | string | |
products | object[] | Mahsulotlar |
products[].id | integer | ID |
products[].position | integer | Lavozim |
products[].sale_id | integer | Sotish |
products[].product_id | integer | Mahsulot |
products[].service_id | null | |
products[].bundle_id | null | Komplekt |
products[].bundle_key | null | |
products[].bundle_name | null | |
products[].name | string | Nomlanish |
products[].brand_name | string | Brend nomi |
products[].image | string | Rasm |
products[].quantity | integer | Miqdori |
products[].unit | object | |
products[].unit.id | integer | ID |
products[].unit.name | object | Nomlanish |
products[].unit.name.oz | string | |
products[].unit.name.ru | string | |
products[].unit.name.uz | string | |
products[].unit.accuracy | integer | Kasrdan keyingi raqamlar soni |
products[].price | integer | Narxi |
products[].discount | integer | Chegirma |
products[].amount | integer | Summa |
products[].is_exchanged | boolean | |
products[].is_returned | boolean | |
products[].is_partially_returned | boolean | |
products[].returned_quantity | integer | Qaytarilgan miqdor |
operations | object[] | |
operations[].type | string | Turi |
operations[].subtype | string | |
operations[].title | string | |
operations[].created_at | string | Yaratilgan |
operations[].creator_name | string | |
operations[].amount | integer | Summa |
operations[].comment | string | Izoh |
operations[].payment_types | array | |
operations[].refund_amount | integer | |
operations[].lines | object[] | |
operations[].lines[].sale_product_id | integer | |
operations[].lines[].product_id | integer | Mahsulot |
operations[].lines[].service_id | null | |
operations[].lines[].bundle_id | null | Komplekt |
operations[].lines[].bundle_key | null | |
operations[].lines[].bundle_name | null | |
operations[].lines[].name | string | Nomlanish |
operations[].lines[].brand_name | string | Brend nomi |
operations[].lines[].quantity | integer | Miqdori |
operations[].lines[].unit | object | |
operations[].lines[].unit.id | integer | ID |
operations[].lines[].unit.name | object | Nomlanish |
operations[].lines[].unit.name.oz | string | |
operations[].lines[].unit.name.ru | string | |
operations[].lines[].unit.name.uz | string | |
operations[].lines[].unit.accuracy | integer | Kasrdan keyingi raqamlar soni |
operations[].lines[].amount | integer | Summa |
operations[].lines[].reason_type | string | Sabab turi |
operations[].lines[].comment | string | Izoh |
operations[].lines[].sign | string | |
payments | object[] | |
payments[].id | integer | ID |
payments[].payment_type | string | To'lov turi |
payments[].amount | integer | Summa |
payments[].created_at | string | Yaratilgan |
payments[].comment | null | Izoh |
totals | object | |
totals.paid_amount | integer | |
totals.bonus_paid_amount | integer | |
totals.bonus_accrued_amount | integer | |
totals.returned_amount | integer | Qaytarilgan summa |
totals.total_amount | integer | |
totals.currency | string | Valyuta |
{
"sale": {
"id": 177,
"code": "phf-partial",
"created_at": "2026-09-28 12:54:52",
"currency": "uzs",
"status": "partial_returned",
"has_exchange": false,
"products_count": 2,
"payment_types": [
"cash",
"card"
],
"cashier_name": "director_1@local.host"
},
"products": [
{
"id": 195,
"position": 1,
"sale_id": 177,
"product_id": 1,
"service_id": null,
"bundle_id": null,
"bundle_key": null,
"bundle_name": null,
"name": "Product 1",
"brand_name": "Brand 1",
"image": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
"quantity": 1,
"unit": {
"id": 1,
"name": {
"oz": "Unit 1 oz",
"ru": "Unit 1 ru",
"uz": "Unit 1 uz"
},
"accuracy": 4
},
"price": 5292000,
"discount": 0,
"amount": 5292000,
"is_exchanged": false,
"is_returned": false,
"is_partially_returned": false,
"returned_quantity": 0
},
{
"id": 196,
"position": 2,
"sale_id": 177,
"product_id": 2,
"service_id": null,
"bundle_id": null,
"bundle_key": null,
"bundle_name": null,
"name": "Product 1-1",
"brand_name": "Brand 1",
"image": "https://api-minio.icangroup.uz/wasyt/test_data/images/1.png",
"quantity": 1,
"unit": {
"id": 1,
"name": {
"oz": "Unit 1 oz",
"ru": "Unit 1 ru",
"uz": "Unit 1 uz"
},
"accuracy": 4
},
"price": 756000,
"discount": 0,
"amount": 756000,
"is_exchanged": false,
"is_returned": true,
"is_partially_returned": false,
"returned_quantity": 1
}
],
"operations": [
{
"type": "return",
"subtype": "partial_return",
"title": "Частичный возврат",
"created_at": "2026-09-29 12:54:52",
"creator_name": "director_1@local.host",
"amount": -756000,
"comment": "Клиент взял лишнее",
"payment_types": [
"cash"
],
"refund_amount": 756000,
"lines": [
{
"sale_product_id": 196,
"product_id": 2,
"service_id": null,
"bundle_id": null,
"bundle_key": null,
"bundle_name": null,
"name": "Product 1-1",
"brand_name": "Brand 1",
"quantity": 1,
"unit": {
"id": 1,
"name": {
"oz": "Unit 1 oz",
"ru": "Unit 1 ru",
"uz": "Unit 1 uz"
},
"accuracy": 4
},
"amount": 756000,
"reason_type": "not_match",
"comment": "Клиент взял лишнее",
"sign": "-"
}
]
}
],
"payments": [
{
"id": 59,
"payment_type": "cash",
"amount": 3500000,
"created_at": "2026-09-28 12:54:52",
"comment": null
},
{
"id": 60,
"payment_type": "card",
"amount": 2048000,
"created_at": "2026-09-28 12:54:52",
"comment": null
}
],
"totals": {
"paid_amount": 6048000,
"bonus_paid_amount": 500000,
"bonus_accrued_amount": 60480,
"returned_amount": 756000,
"total_amount": 5292000,
"currency": "uzs"
}
}Kredit shartnomasi ma’lumotlari
/company/trade/sale/{model}/credit-detailKredit cheki bo‘yicha ICAN kredit loyihasidagi shartnoma kartasi, onlayn o‘qiladi va o‘zgarishsiz qaytariladi. Chekda kredit bo‘lmasa yoki loyiha ishlamasa — 400 xato.
Sarlavhalar (headers)
| Sarlavha | Qiymat | Tavsif |
|---|---|---|
Authorization | Bearer {token} | POST /common/auth/login dan olingan token |
Accept | application/json | Javob JSON da |
Accept-Language | ru | Xabarlar va nomlar tili: ru, uz, oz |
Yo‘l parametrlari
| Parametr | Tavsif |
|---|---|
model | Yozuv ID si |
Javob
Javob misoli hali testlar tomonidan yozib olinmagan.
Sotuvlar ro‘yxati
/company/trade/saleCheklar sahifalab va filtrlar bilan; format=excel bilan — Excel’ga eksport. show[]=external_credit_payments lentaga o‘z cheki bo‘lmagan tashqi kreditlar bo‘yicha ICAN to‘lovlarini qo‘shadi.
Sarlavhalar (headers)
| Sarlavha | Qiymat | Tavsif |
|---|---|---|
Authorization | Bearer {token} | POST /common/auth/login dan olingan token |
Accept | application/json | Javob JSON da |
Accept-Language | ru | Xabarlar va nomlar tili: ru, uz, oz |
So‘rov parametrlari
| Maydon | Turi | Majburiy | Tavsif |
|---|---|---|---|
format | string | Yo‘q | Javob formati: excel — ro‘yxatni JSON o‘rniga Excel fayl sifatida yuklab olish (xuddi shu filtrlar qo‘llanadi) |
filter[id] | — | Yo‘q | ID — aniq qiymat |
filter[creator_id] | — | Yo‘q | Yaratuvchi — aniq qiymat |
filter[company_id] | — | Yo‘q | Kompaniya — bitta qiymat yoki ro‘yxat filter[company_id][] |
filter[cashbox_id] | — | Yo‘q | Kassa — aniq qiymat |
filter[stock_id] | — | Yo‘q | Ombor — aniq qiymat |
filter[client_id] | — | Yo‘q | Mijoz — aniq qiymat |
filter[currency] | — | Yo‘q | Valyuta — aniq qiymat |
filter[status] | — | Yo‘q | Status — bitta qiymat yoki ro‘yxat filter[status][] |
filter[source_type] | — | Yo‘q | Manba — aniq qiymat |
filter[code] | — | Yo‘q | Kod — aniq qiymat |
filter[created_at] | — | Yo‘q | Yaratilgan — davr: [0] — dan, [1] — gacha (Y-m-d) |
filter[products.product.category_id] | — | Yo‘q | Kategoriya — aniq qiymat (ichki elementlar bilan) |
filter[products.product.brand_id] | — | Yo‘q | Brend — aniq qiymat |
filter[transactions.payment_type] | — | Yo‘q | To'lov turi — aniq qiymat |
sort[] | — | Yo‘q | Saralash, - — kamayish bo‘yicha: id, -id |
with[] | — | Yo‘q | Bog‘liq ma’lumotlarni qo‘shish: creator.profile, company, cashbox, stock, client, transactions, transactions.custom_payment_type, debt, cashiers.profile |
page | — | Yo‘q | Sahifa raqami, 1 dan |
page-size | — | Yo‘q | Sahifadagi yozuvlar soni, ko‘pi bilan 20 |
show[] | — | Yo‘q | Qo‘shimcha hisoblangan ma’lumotlar (metod tavsifiga qarang) |
Javob · 200
Sahifalangan javob: yozuvlar data[] ichida, sahifalash links va meta da.
Javob maydonlari
| Maydon | Turi | Tavsif |
|---|---|---|
data | object[] | Ma'lumotlar |
data[].id | integer | ID |
data[].creator_id | integer | Yaratuvchi |
data[].company_id | integer | Kompaniya |
data[].cashbox_id | integer | Kassa |
data[].stock_id | integer | Ombor |
data[].client_id | integer | Mijoz |
data[].exchange_of_sale_id | null | |
data[].currency | string | Valyuta |
data[].purchased_amount | integer | |
data[].sold_amount | integer | Sotuvdagi summa |
data[].returned_amount | integer | Qaytarilgan summa |
data[].status | string | Status |
data[].source_type | string | Manba |
data[].source_data | array | |
data[].code | string | Kod |
data[].created_at | string | Yaratilgan |
data[].updated_at | string | Yangilangan |
data[].products_total | object | |
data[].products_total.sale_id | integer | Sotish |
data[].products_total.sold_quantity | integer | Sotuvdagi miqdor |
data[].products_total.returned_quantity | integer | Qaytarilgan miqdor |
data[].products_total.gross_amount | integer | |
data[].products_total.discount_amount | integer | |
data[].products_total.unit_id | integer | O'lchov birligi |
data[].products_total.unit | object | |
data[].products_total.unit.id | integer | ID |
data[].products_total.unit.company_id | integer | Kompaniya |
data[].products_total.unit.source_id | integer | Manba |
data[].products_total.unit.name | object | Nomlanish |
data[].products_total.unit.name.oz | string | |
data[].products_total.unit.name.ru | string | |
data[].products_total.unit.name.uz | string | |
data[].products_total.unit.accuracy | integer | Kasrdan keyingi raqamlar soni |
data[].products_total.unit.created_at | string | Yaratilgan |
data[].products_total.unit.updated_at | string | Yangilangan |
data[].products_total.unit.is_deleted | boolean |
{
"data": [
{
"id": 1,
"creator_id": 2,
"company_id": 1,
"cashbox_id": 1,
"stock_id": 1,
"client_id": 1,
"exchange_of_sale_id": null,
"currency": "uzs",
"purchased_amount": 500,
"sold_amount": 4900,
"returned_amount": 0,
"status": "completed",
"source_type": "wasyt",
"source_data": [],
"code": "w-1-1",
"created_at": "2020-01-01 10:00:00",
"updated_at": "2020-01-01 10:00:00",
"products_total": {
"sale_id": 1,
"sold_quantity": 3,
"returned_quantity": 0,
"gross_amount": 5000,
"discount_amount": 100,
"unit_id": 1,
"unit": {
"id": 1,
"company_id": 1,
"source_id": 3,
"name": {
"oz": "Unit 1 oz",
"ru": "Unit 1 ru",
"uz": "Unit 1 uz"
},
"accuracy": 4,
"created_at": "2026-09-30 12:47:59",
"updated_at": "2026-09-30 12:47:59",
"is_deleted": false
}
}
}
],
"links": {
"first": "https://api.wasyt.uz/company/trade/sale?page=1",
"last": "https://api.wasyt.uz/company/trade/sale?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [],
"path": "https://api.wasyt.uz/company/trade/sale",
"per_page": 20,
"to": 1,
"total": 1
}
}Sotuv tafsilotlari
/company/trade/sale/{model}Bitta chek: raqam, kassa, ombor, mijoz, holat va sotuv hamda qaytarish summalari.
Sarlavhalar (headers)
| Sarlavha | Qiymat | Tavsif |
|---|---|---|
Authorization | Bearer {token} | POST /common/auth/login dan olingan token |
Accept | application/json | Javob JSON da |
Accept-Language | ru | Xabarlar va nomlar tili: ru, uz, oz |
Yo‘l parametrlari
| Parametr | Tavsif |
|---|---|
model | Yozuv ID si |
Javob · 200
Javob maydonlari
| Maydon | Turi | Tavsif |
|---|---|---|
id | integer | ID |
creator_id | integer | Yaratuvchi |
company_id | integer | Kompaniya |
cashbox_id | integer | Kassa |
stock_id | integer | Ombor |
client_id | integer | Mijoz |
exchange_of_sale_id | null | |
currency | string | Valyuta |
purchased_amount | integer | |
sold_amount | integer | Sotuvdagi summa |
returned_amount | integer | Qaytarilgan summa |
status | string | Status |
source_type | string | Manba |
source_data | array | |
code | string | Kod |
created_at | string | Yaratilgan |
updated_at | string | Yangilangan |
{
"id": 1,
"creator_id": 2,
"company_id": 1,
"cashbox_id": 1,
"stock_id": 1,
"client_id": 1,
"exchange_of_sale_id": null,
"currency": "uzs",
"purchased_amount": 500,
"sold_amount": 4900,
"returned_amount": 0,
"status": "completed",
"source_type": "wasyt",
"source_data": [],
"code": "w-1-1",
"created_at": "2020-01-01 10:00:00",
"updated_at": "2020-01-01 10:00:00"
}Sotuv yaratish
/company/trade/saleKompaniyaning sotuv valyutasida tovar, xizmat va komplektlardan (kamida bitta qator) chek uradi: qoldiq ombordan chiqariladi, transactions summasi chek jamiga aynan teng bo‘lishi kerak. Bonus bilan to‘lov — faqat UZS da, mijoz balansi va tarif limiti doirasida; qarzga — faqat mijoz va due_date bilan, bonussiz va keshbek hisoblanmasdan. hold_id, seller_cart_id va cheque bron, sotuvchi savati va chek qoralamasini yopadi.
Sarlavhalar (headers)
| Sarlavha | Qiymat | Tavsif |
|---|---|---|
Authorization | Bearer {token} | POST /common/auth/login dan olingan token |
Accept | application/json | Javob JSON da |
Accept-Language | ru | Xabarlar va nomlar tili: ru, uz, oz |
So‘rov tanasi
| Maydon | Turi | Majburiy | Tavsif |
|---|---|---|---|
company_id | integer | Ha | Kompaniya. Foydalanuvchiga ochiq mavjud yozuv ID si |
cashbox_id | integer | Ha | Kassa. Foydalanuvchiga ochiq mavjud yozuv ID si |
stock_id | integer | Ha | Ombor. Foydalanuvchiga ochiq mavjud yozuv ID si |
client_id | integer | Yo‘q | Mijoz. Foydalanuvchiga ochiq mavjud yozuv ID si |
hold_id | integer | Yo‘q | Foydalanuvchiga ochiq mavjud yozuv ID si |
seller_cart_id | integer | Yo‘q | Sotuvchi tanlovi. Foydalanuvchiga ochiq mavjud yozuv ID si |
currency | string | Ha | Valyuta. Mumkin qiymatlar: uzs |
cheque | integer | Yo‘q | Kamida 1. 3 dan oshmasin |
due_date | string (date) | Yo‘q | Toʻlov muddati. Kamida bugungi kun |
comment | string | Yo‘q | Izoh. Maks. 1000 belgi |
discount | number | Yo‘q | Chegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin |
cashier_ids | array | Yo‘q | Maks. 10 ta element. Foydalanuvchiga ochiq mavjud yozuv ID si |
products | object[] | Yo‘q | Mahsulotlar. Maks. 100 ta element |
products[].product_id | integer | Ha | Tovar. Takrorlanmasin |
products[].discount | number | Yo‘q | Chegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin |
products[].sold_quantity | number | Ha | Sotilgan miqdori. Verguldan keyin 8 tagacha raqam. Kamida 0.00000001 |
products[].price | number | Yo‘q | Narxi. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin |
services | object[] | Yo‘q | Maks. 100 ta element |
services[].service_id | integer | Ha | Takrorlanmasin |
services[].discount | number | Yo‘q | Chegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin |
services[].price | number | Yo‘q | Narxi. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin |
bundles | object[] | Yo‘q | Komplektlar. Maks. 100 ta element |
bundles[].bundle_id | integer | Ha | Komplekt |
bundles[].quantity | integer | Yo‘q | Miqdori. Kamida 1. 1000 dan oshmasin |
bundles[].discount | number | Yo‘q | Chegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin |
bundles[].price | number | Yo‘q | Narxi. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin |
transactions | object[] | Yo‘q | Tranzaksiya. Maks. 10 ta element |
transactions[].payment_type | string | Ha | Tulov turi. Mumkin qiymatlar: bank, card, cash, bonus, debt, system |
transactions[].payment_type_id | integer | Yo‘q | To'lov turi. Foydalanuvchiga ochiq mavjud yozuv ID si |
transactions[].amount | number | Ha | Summa. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin |
{
"company_id": 1,
"cashbox_id": 2,
"stock_id": 1,
"hold_id": 1,
"client_id": 1,
"currency": "uzs",
"due_date": "2030-12-31",
"comment": "Pay by end of month",
"products": [
{
"product_id": 1,
"discount": 300,
"sold_quantity": 1
},
{
"product_id": 2,
"discount": null,
"sold_quantity": 2
}
],
"transactions": [
{
"payment_type": "cash",
"amount": 2700
},
{
"payment_type": "debt",
"amount": 2000
}
]
}curl -X POST "https://api.wasyt.uz/company/trade/sale" \
-H "Accept: application/json" \
-H "Accept-Language: ru" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{"company_id":1,"cashbox_id":2,"stock_id":1,"hold_id":1,"client_id":1,"currency":"uzs","due_date":"2030-12-31","comment":"Pay by end of month","products":[{"product_id":1,"discount":300,"sold_quantity":1},{"product_id":2,"discount":null,"sold_quantity":2}],"transactions":[{"payment_type":"cash","amount":2700},{"payment_type":"debt","amount":2000}]}'Javob · 200
Javob maydonlari
| Maydon | Turi | Tavsif |
|---|---|---|
company_id | integer | Kompaniya |
cashbox_id | integer | Kassa |
stock_id | integer | Ombor |
client_id | integer | Mijoz |
currency | string | Valyuta |
status | string | Status |
source_type | string | Manba |
updated_at | string | Yangilangan |
created_at | string | Yaratilgan |
creator_id | integer | Yaratuvchi |
code | string | Kod |
id | integer | ID |
purchased_amount | integer | |
sold_amount | integer | Sotuvdagi summa |
returned_amount | integer | Qaytarilgan summa |
{
"company_id": 1,
"cashbox_id": 2,
"stock_id": 1,
"client_id": 1,
"currency": "uzs",
"status": "completed",
"source_type": "wasyt",
"updated_at": "2026-09-30 12:54:54",
"created_at": "2026-09-30 12:54:54",
"creator_id": 2,
"code": "#300926001",
"id": 201,
"purchased_amount": 4001000,
"sold_amount": 4700,
"returned_amount": 0
}Xato misoli · 422
{
"message": "Для продажи в долг необходимо выбрать клиента",
"errors": {
"client_id": [
"Для продажи в долг необходимо выбрать клиента"
]
}
}
