Skip to content

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.

MetodManzilVazifasi
PATCH/company/trade/sale/{model}/returnChek bo‘yicha tovarlarni qaytarish
POST/company/trade/sale/{model}/exchangeChek bo‘yicha tovar almashtirish
GET/company/trade/sale/{model}/printChekni Excel’ga yuklash
GET/company/trade/sale/{model}/invoiceA4 yuk xati
GET/company/trade/sale/{model}/check-detailChek kartasi
GET/company/trade/sale/{model}/credit-detailKredit shartnomasi ma’lumotlari
GET/company/trade/saleSotuvlar ro‘yxati
GET/company/trade/sale/{model}Sotuv tafsilotlari
POST/company/trade/saleSotuv yaratish

Chek bo‘yicha tovarlarni qaytarish ​

PATCH/company/trade/sale/{model}/return

Chek 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) PATCH metodi POST + ?_method=PATCH parametri bilan yuboriladi.

Sarlavhalar (headers) ​

SarlavhaQiymatTavsif
AuthorizationBearer {token}POST /common/auth/login dan olingan token
Acceptapplication/jsonJavob JSON da
Accept-LanguageruXabarlar va nomlar tili: ru, uz, oz

Yo‘l parametrlari ​

ParametrTavsif
modelYozuv ID si

So‘rov tanasi ​

MaydonTuriMajburiyTavsif
productsobject[]Yo‘qMahsulotlar. Maks. 100 ta element
products[].idintegerHaID. Takrorlanmasin
products[].reason_typestringHaSabab turi. Mumkin qiymatlar: defective, size_not_fit, expired_date, not_match
products[].returned_quantitynumberHaQaytarilgan miqdor. Verguldan keyin 8 tagacha raqam. Kamida 0.00000001
products[].commentstringYo‘qIzoh. Maks. 1000 belgi
transactionsobject[]Yo‘qTranzaksiya. Maks. 10 ta element
transactions[].payment_typestringHaTulov turi. Mumkin qiymatlar: bank, card, cash
transactions[].payment_type_idintegerYo‘qTo'lov turi
transactions[].amountnumberHaSumma. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin
json
{
    "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
        }
    ]
}
bash
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
MaydonTuriTavsif
idintegerID
creator_idintegerYaratuvchi
company_idintegerKompaniya
cashbox_idintegerKassa
stock_idintegerOmbor
client_idnullMijoz
exchange_of_sale_idnull
currencystringValyuta
purchased_amountinteger
sold_amountintegerSotuvdagi summa
returned_amountintegerQaytarilgan summa
statusstringStatus
source_typestringManba
source_dataarray
codestringKod
created_atstringYaratilgan
updated_atstringYangilangan
json
{
    "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 ​

json
{
    "message": "Значение поля Сумма не может быть больше 2000.",
    "errors": {
        "transactions": [
            "Значение поля Сумма не может быть больше 2000."
        ]
    }
}

Chek bo‘yicha tovar almashtirish ​

POST/company/trade/sale/{model}/exchange

Asl 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) ​

SarlavhaQiymatTavsif
AuthorizationBearer {token}POST /common/auth/login dan olingan token
Acceptapplication/jsonJavob JSON da
Accept-LanguageruXabarlar va nomlar tili: ru, uz, oz

Yo‘l parametrlari ​

ParametrTavsif
modelYozuv ID si

So‘rov tanasi ​

MaydonTuriMajburiyTavsif
cashbox_idintegerHaKassa. Mavjud yozuv ID si
stock_idintegerHaOmbor. Mavjud yozuv ID si
currencystringHaValyuta
client_idintegerYo‘qMijoz
company_idintegerHaKompaniya
returned_productsobject[]HaKamida 1 ta element. Maks. 100 ta element
returned_products[].idintegerHaID. Takrorlanmasin
returned_products[].reason_typestringHaSabab turi. Mumkin qiymatlar: defective, size_not_fit, expired_date, not_match
returned_products[].returned_quantitynumberHaQaytarilgan miqdor. Verguldan keyin 8 tagacha raqam. Kamida 0.00000001
returned_products[].commentstringYo‘qIzoh. Maks. 1000 belgi
productsobject[]Yo‘qMahsulotlar. Maks. 100 ta element
products[].product_idintegerHaTovar. Takrorlanmasin
products[].sold_quantitynumberHaSotilgan miqdori. Verguldan keyin 8 tagacha raqam. Kamida 0.00000001
products[].discountnumberYo‘qChegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin
products[].pricenumberYo‘qNarxi. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin
bundlesobject[]Yo‘qKomplektlar. Maks. 100 ta element
bundles[].bundle_idintegerHaKomplekt
bundles[].quantityintegerYo‘qMiqdori. Kamida 1. 1000 dan oshmasin
bundles[].discountnumberYo‘qChegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin
bundles[].pricenumberYo‘qNarxi. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin
due_datestring (date)Yo‘qToʻlov muddati. Kamida bugungi kun
commentstringYo‘qIzoh. Maks. 1000 belgi
transactionsobject[]Yo‘qTranzaksiya. Maks. 10 ta element
transactions[].payment_typestringHaTulov turi. Takrorlanmasin. Mumkin qiymatlar: cash, card, bank, debt
transactions[].amountnumberHaSumma. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin
json
{
    "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
        }
    ]
}
bash
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
MaydonTuriTavsif
original_saleobject
original_sale.idintegerID
original_sale.creator_idintegerYaratuvchi
original_sale.company_idintegerKompaniya
original_sale.cashbox_idintegerKassa
original_sale.stock_idintegerOmbor
original_sale.client_idintegerMijoz
original_sale.exchange_of_sale_idnull
original_sale.currencystringValyuta
original_sale.purchased_amountinteger
original_sale.sold_amountintegerSotuvdagi summa
original_sale.returned_amountintegerQaytarilgan summa
original_sale.statusstringStatus
original_sale.source_typestringManba
original_sale.source_dataarray
original_sale.codestringKod
original_sale.created_atstringYaratilgan
original_sale.updated_atstringYangilangan
exchange_saleobject
exchange_sale.company_idintegerKompaniya
exchange_sale.cashbox_idintegerKassa
exchange_sale.stock_idintegerOmbor
exchange_sale.currencystringValyuta
exchange_sale.client_idintegerMijoz
exchange_sale.exchange_of_sale_idinteger
exchange_sale.statusstringStatus
exchange_sale.source_typestringManba
exchange_sale.source_dataobject
exchange_sale.source_data.exchange_keystring
exchange_sale.updated_atstringYangilangan
exchange_sale.created_atstringYaratilgan
exchange_sale.creator_idintegerYaratuvchi
exchange_sale.codestringKod
exchange_sale.idintegerID
exchange_sale.purchased_amountinteger
exchange_sale.sold_amountintegerSotuvdagi summa
exchange_sale.returned_amountintegerQaytarilgan summa
json
{
    "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 ​

json
{
    "message": "Укажите срок погашения долга",
    "errors": {
        "due_date": [
            "Укажите срок погашения долга"
        ]
    }
}

Chekni Excel’ga yuklash ​

GET/company/trade/sale/{model}/print

Bitta chek qatorlarini qo‘shilgan tartibida Excel fayl sifatida yuklab beradi.

Sarlavhalar (headers) ​

SarlavhaQiymatTavsif
AuthorizationBearer {token}POST /common/auth/login dan olingan token
Acceptapplication/jsonJavob JSON da
Accept-LanguageruXabarlar va nomlar tili: ru, uz, oz

Yo‘l parametrlari ​

ParametrTavsif
modelYozuv ID si

Javob · 200 ​

Javob — fayl yoki matn, JSON emas.

A4 yuk xati ​

GET/company/trade/sale/{model}/invoice

Chop 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) ​

SarlavhaQiymatTavsif
AuthorizationBearer {token}POST /common/auth/login dan olingan token
Acceptapplication/jsonJavob JSON da
Accept-LanguageruXabarlar va nomlar tili: ru, uz, oz

Yo‘l parametrlari ​

ParametrTavsif
modelYozuv ID si

So‘rov parametrlari ​

MaydonTuriMajburiyTavsif
formatstringYo‘qJavob formati: excel — JSON o‘rniga bosma varaqni yuklab olish

Javob · 200 ​

Javob maydonlari
MaydonTuriTavsif
saleobject
sale.idintegerID
sale.codestringKod
sale.currencystringValyuta
sale.created_atstringYaratilgan
sale.datestringSana
sale.timestring
settingsobjectSozlamalar
settings.headerobject
settings.header.store_nameboolean
settings.header.working_hoursboolean
settings.header.cashierboolean
settings.header.contactsboolean
settings.header.legal_nameboolean
settings.header.client_phoneboolean
settings.header.datebooleanSana
settings.header.sellerboolean
settings.header.clientboolean
settings.header.tinboolean
settings.header.addressbooleanManzil
settings.working_hoursnull
settings.balanceobjectBalans
settings.balance.enabledboolean
settings.balance.beforeboolean
settings.balance.addedboolean
settings.balance.written_offboolean
settings.balance.afterboolean
settings.debtobjectQarz
settings.debt.enabledboolean
settings.debt.beforeboolean
settings.debt.addedboolean
settings.debt.written_offboolean
settings.debt.afterboolean
companyobjectKompaniya
company.namestringNomlanish
company.legal_namestring
company.tinstring
company.addressstringManzil
company.phonestringTelefon
clientobject
client.idintegerID
client.full_namestringFISH
client.phonestringTelefon
cashierobject
cashier.full_namestringFISH
cashier.is_directorboolean
creatorobject
creator.full_namestringFISH
rowsobject[]
rows[].positionintegerLavozim
rows[].categorystringKategoriya
rows[].namestringNomlanish
rows[].quantityintegerMiqdori
rows[].priceintegerNarxi
rows[].amountintegerSumma
rows[].amount_uzsinteger
rows[].amount_usdnull
totalsobject
totals.quantityintegerMiqdori
totals.currentobject
totals.current.uzsinteger
totals.current.usdinteger
totals.previous_debtobject
totals.previous_debt.uzsinteger
totals.previous_debt.usdinteger
totals.totalobjectJami yozuvlar
totals.total.uzsinteger
totals.total.usdinteger
balanceobjectBalans
balance.beforeinteger
balance.addedinteger
balance.written_offinteger
balance.afterinteger
debtobjectQarz
debt.beforeinteger
debt.addedinteger
debt.written_offinteger
debt.afterinteger
json
{
    "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 ​

GET/company/trade/sale/{model}/check-detail

Chekning butun tarixi: tovarlar, to‘lovlar, barcha qaytarish va almashtirishlar hamda yakuniy qiymat. Almashtirish orqali yaratilgan yangi sotuv asl chek kartasini ochadi.

Sarlavhalar (headers) ​

SarlavhaQiymatTavsif
AuthorizationBearer {token}POST /common/auth/login dan olingan token
Acceptapplication/jsonJavob JSON da
Accept-LanguageruXabarlar va nomlar tili: ru, uz, oz

Yo‘l parametrlari ​

ParametrTavsif
modelYozuv ID si

Javob · 200 ​

Javob maydonlari
MaydonTuriTavsif
saleobject
sale.idintegerID
sale.codestringKod
sale.created_atstringYaratilgan
sale.currencystringValyuta
sale.statusstringStatus
sale.has_exchangeboolean
sale.products_countinteger
sale.payment_typesarray
sale.cashier_namestring
productsobject[]Mahsulotlar
products[].idintegerID
products[].positionintegerLavozim
products[].sale_idintegerSotish
products[].product_idintegerMahsulot
products[].service_idnull
products[].bundle_idnullKomplekt
products[].bundle_keynull
products[].bundle_namenull
products[].namestringNomlanish
products[].brand_namestringBrend nomi
products[].imagestringRasm
products[].quantityintegerMiqdori
products[].unitobject
products[].unit.idintegerID
products[].unit.nameobjectNomlanish
products[].unit.name.ozstring
products[].unit.name.rustring
products[].unit.name.uzstring
products[].unit.accuracyintegerKasrdan keyingi raqamlar soni
products[].priceintegerNarxi
products[].discountintegerChegirma
products[].amountintegerSumma
products[].is_exchangedboolean
products[].is_returnedboolean
products[].is_partially_returnedboolean
products[].returned_quantityintegerQaytarilgan miqdor
operationsobject[]
operations[].typestringTuri
operations[].subtypestring
operations[].titlestring
operations[].created_atstringYaratilgan
operations[].creator_namestring
operations[].amountintegerSumma
operations[].commentstringIzoh
operations[].payment_typesarray
operations[].refund_amountinteger
operations[].linesobject[]
operations[].lines[].sale_product_idinteger
operations[].lines[].product_idintegerMahsulot
operations[].lines[].service_idnull
operations[].lines[].bundle_idnullKomplekt
operations[].lines[].bundle_keynull
operations[].lines[].bundle_namenull
operations[].lines[].namestringNomlanish
operations[].lines[].brand_namestringBrend nomi
operations[].lines[].quantityintegerMiqdori
operations[].lines[].unitobject
operations[].lines[].unit.idintegerID
operations[].lines[].unit.nameobjectNomlanish
operations[].lines[].unit.name.ozstring
operations[].lines[].unit.name.rustring
operations[].lines[].unit.name.uzstring
operations[].lines[].unit.accuracyintegerKasrdan keyingi raqamlar soni
operations[].lines[].amountintegerSumma
operations[].lines[].reason_typestringSabab turi
operations[].lines[].commentstringIzoh
operations[].lines[].signstring
paymentsobject[]
payments[].idintegerID
payments[].payment_typestringTo'lov turi
payments[].amountintegerSumma
payments[].created_atstringYaratilgan
payments[].commentnullIzoh
totalsobject
totals.paid_amountinteger
totals.bonus_paid_amountinteger
totals.bonus_accrued_amountinteger
totals.returned_amountintegerQaytarilgan summa
totals.total_amountinteger
totals.currencystringValyuta
json
{
    "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 ​

GET/company/trade/sale/{model}/credit-detail

Kredit 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) ​

SarlavhaQiymatTavsif
AuthorizationBearer {token}POST /common/auth/login dan olingan token
Acceptapplication/jsonJavob JSON da
Accept-LanguageruXabarlar va nomlar tili: ru, uz, oz

Yo‘l parametrlari ​

ParametrTavsif
modelYozuv ID si

Javob ​

Javob misoli hali testlar tomonidan yozib olinmagan.

Sotuvlar ro‘yxati ​

GET/company/trade/sale

Cheklar 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) ​

SarlavhaQiymatTavsif
AuthorizationBearer {token}POST /common/auth/login dan olingan token
Acceptapplication/jsonJavob JSON da
Accept-LanguageruXabarlar va nomlar tili: ru, uz, oz

So‘rov parametrlari ​

MaydonTuriMajburiyTavsif
formatstringYo‘qJavob formati: excel — ro‘yxatni JSON o‘rniga Excel fayl sifatida yuklab olish (xuddi shu filtrlar qo‘llanadi)
filter[id]—Yo‘qID — aniq qiymat
filter[creator_id]—Yo‘qYaratuvchi — aniq qiymat
filter[company_id]—Yo‘qKompaniya — bitta qiymat yoki ro‘yxat filter[company_id][]
filter[cashbox_id]—Yo‘qKassa — aniq qiymat
filter[stock_id]—Yo‘qOmbor — aniq qiymat
filter[client_id]—Yo‘qMijoz — aniq qiymat
filter[currency]—Yo‘qValyuta — aniq qiymat
filter[status]—Yo‘qStatus — bitta qiymat yoki ro‘yxat filter[status][]
filter[source_type]—Yo‘qManba — aniq qiymat
filter[code]—Yo‘qKod — aniq qiymat
filter[created_at]—Yo‘qYaratilgan — davr: [0] — dan, [1] — gacha (Y-m-d)
filter[products.product.category_id]—Yo‘qKategoriya — aniq qiymat (ichki elementlar bilan)
filter[products.product.brand_id]—Yo‘qBrend — aniq qiymat
filter[transactions.payment_type]—Yo‘qTo'lov turi — aniq qiymat
sort[]—Yo‘qSaralash, - — kamayish bo‘yicha: id, -id
with[]—Yo‘qBog‘liq ma’lumotlarni qo‘shish: creator.profile, company, cashbox, stock, client, transactions, transactions.custom_payment_type, debt, cashiers.profile
page—Yo‘qSahifa raqami, 1 dan
page-size—Yo‘qSahifadagi yozuvlar soni, ko‘pi bilan 20
show[]—Yo‘qQo‘shimcha hisoblangan ma’lumotlar (metod tavsifiga qarang)

Javob · 200 ​

Sahifalangan javob: yozuvlar data[] ichida, sahifalash links va meta da.

Javob maydonlari
MaydonTuriTavsif
dataobject[]Ma'lumotlar
data[].idintegerID
data[].creator_idintegerYaratuvchi
data[].company_idintegerKompaniya
data[].cashbox_idintegerKassa
data[].stock_idintegerOmbor
data[].client_idintegerMijoz
data[].exchange_of_sale_idnull
data[].currencystringValyuta
data[].purchased_amountinteger
data[].sold_amountintegerSotuvdagi summa
data[].returned_amountintegerQaytarilgan summa
data[].statusstringStatus
data[].source_typestringManba
data[].source_dataarray
data[].codestringKod
data[].created_atstringYaratilgan
data[].updated_atstringYangilangan
data[].products_totalobject
data[].products_total.sale_idintegerSotish
data[].products_total.sold_quantityintegerSotuvdagi miqdor
data[].products_total.returned_quantityintegerQaytarilgan miqdor
data[].products_total.gross_amountinteger
data[].products_total.discount_amountinteger
data[].products_total.unit_idintegerO'lchov birligi
data[].products_total.unitobject
data[].products_total.unit.idintegerID
data[].products_total.unit.company_idintegerKompaniya
data[].products_total.unit.source_idintegerManba
data[].products_total.unit.nameobjectNomlanish
data[].products_total.unit.name.ozstring
data[].products_total.unit.name.rustring
data[].products_total.unit.name.uzstring
data[].products_total.unit.accuracyintegerKasrdan keyingi raqamlar soni
data[].products_total.unit.created_atstringYaratilgan
data[].products_total.unit.updated_atstringYangilangan
data[].products_total.unit.is_deletedboolean
json
{
    "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 ​

GET/company/trade/sale/{model}

Bitta chek: raqam, kassa, ombor, mijoz, holat va sotuv hamda qaytarish summalari.

Sarlavhalar (headers) ​

SarlavhaQiymatTavsif
AuthorizationBearer {token}POST /common/auth/login dan olingan token
Acceptapplication/jsonJavob JSON da
Accept-LanguageruXabarlar va nomlar tili: ru, uz, oz

Yo‘l parametrlari ​

ParametrTavsif
modelYozuv ID si

Javob · 200 ​

Javob maydonlari
MaydonTuriTavsif
idintegerID
creator_idintegerYaratuvchi
company_idintegerKompaniya
cashbox_idintegerKassa
stock_idintegerOmbor
client_idintegerMijoz
exchange_of_sale_idnull
currencystringValyuta
purchased_amountinteger
sold_amountintegerSotuvdagi summa
returned_amountintegerQaytarilgan summa
statusstringStatus
source_typestringManba
source_dataarray
codestringKod
created_atstringYaratilgan
updated_atstringYangilangan
json
{
    "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 ​

POST/company/trade/sale

Kompaniyaning 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) ​

SarlavhaQiymatTavsif
AuthorizationBearer {token}POST /common/auth/login dan olingan token
Acceptapplication/jsonJavob JSON da
Accept-LanguageruXabarlar va nomlar tili: ru, uz, oz

So‘rov tanasi ​

MaydonTuriMajburiyTavsif
company_idintegerHaKompaniya. Foydalanuvchiga ochiq mavjud yozuv ID si
cashbox_idintegerHaKassa. Foydalanuvchiga ochiq mavjud yozuv ID si
stock_idintegerHaOmbor. Foydalanuvchiga ochiq mavjud yozuv ID si
client_idintegerYo‘qMijoz. Foydalanuvchiga ochiq mavjud yozuv ID si
hold_idintegerYo‘qFoydalanuvchiga ochiq mavjud yozuv ID si
seller_cart_idintegerYo‘qSotuvchi tanlovi. Foydalanuvchiga ochiq mavjud yozuv ID si
currencystringHaValyuta. Mumkin qiymatlar: uzs
chequeintegerYo‘qKamida 1. 3 dan oshmasin
due_datestring (date)Yo‘qToʻlov muddati. Kamida bugungi kun
commentstringYo‘qIzoh. Maks. 1000 belgi
discountnumberYo‘qChegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin
cashier_idsarrayYo‘qMaks. 10 ta element. Foydalanuvchiga ochiq mavjud yozuv ID si
productsobject[]Yo‘qMahsulotlar. Maks. 100 ta element
products[].product_idintegerHaTovar. Takrorlanmasin
products[].discountnumberYo‘qChegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin
products[].sold_quantitynumberHaSotilgan miqdori. Verguldan keyin 8 tagacha raqam. Kamida 0.00000001
products[].pricenumberYo‘qNarxi. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin
servicesobject[]Yo‘qMaks. 100 ta element
services[].service_idintegerHaTakrorlanmasin
services[].discountnumberYo‘qChegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin
services[].pricenumberYo‘qNarxi. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin
bundlesobject[]Yo‘qKomplektlar. Maks. 100 ta element
bundles[].bundle_idintegerHaKomplekt
bundles[].quantityintegerYo‘qMiqdori. Kamida 1. 1000 dan oshmasin
bundles[].discountnumberYo‘qChegirma. Verguldan keyin 2 tagacha raqam. Kamida 0. 999999999999.99 dan oshmasin
bundles[].pricenumberYo‘qNarxi. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin
transactionsobject[]Yo‘qTranzaksiya. Maks. 10 ta element
transactions[].payment_typestringHaTulov turi. Mumkin qiymatlar: bank, card, cash, bonus, debt, system
transactions[].payment_type_idintegerYo‘qTo'lov turi. Foydalanuvchiga ochiq mavjud yozuv ID si
transactions[].amountnumberHaSumma. Verguldan keyin 2 tagacha raqam. Kamida 0.01. 999999999999.99 dan oshmasin
json
{
    "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
        }
    ]
}
bash
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
MaydonTuriTavsif
company_idintegerKompaniya
cashbox_idintegerKassa
stock_idintegerOmbor
client_idintegerMijoz
currencystringValyuta
statusstringStatus
source_typestringManba
updated_atstringYangilangan
created_atstringYaratilgan
creator_idintegerYaratuvchi
codestringKod
idintegerID
purchased_amountinteger
sold_amountintegerSotuvdagi summa
returned_amountintegerQaytarilgan summa
json
{
    "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 ​

json
{
    "message": "Для продажи в долг необходимо выбрать клиента",
    "errors": {
        "client_id": [
            "Для продажи в долг необходимо выбрать клиента"
        ]
    }
}