Catalog
Everything the public site renders: financing programmes and their terms, the register of legal acts, the FAQ base, the citizens' reception schedule and the org chart.
The read endpoints below are public — no authentication, no bearer token.
They return only rows whose status is active. Anonymous traffic is capped
by the api rate limiter (see Getting started).
The management endpoints (/api/v1/admin/…, at the end of this page) sit
behind auth:sanctum and a permission.
Translatable fields (title, summary, body, question, answer,
label, note, position, address, name, duties) resolve to the
locale negotiated from Accept-Language. Send Accept-Language: uz (or
ru / uz_cyrl) — the default when nothing is sent is uz.
uz_cyrl is the Cyrillic script of Uzbek. Case and separator do not matter
(uz-Cyrl, UZ_CYRL all resolve) — the SetLocale middleware normalises
whatever the client sends back to the exact tag in
config('app.supported_locales').
Programmes
GET /api/v1/programs
Paginated list. Follows the list contract.
| Filter | Values | Notes |
|---|---|---|
filter[sector] |
cotton, wheat, seed_wheat, commodity_wheat, machinery, fruit, potato, greenhouse, oilseed, livestock, fishery |
exact match |
filter[kind] |
credit, leasing, subsidy |
exact match |
filter[search] |
free text | matches title in the current locale |
filter[search] ignores apostrophes on both sides of the comparison, so
jamg'arma, jamg‘arma, jamgʻarma and jamgarma all return the same rows.
Type whichever your keyboard produces.
sort: sort_order (default), id. Prefix with - to reverse.
Each item embeds terms[] and legal_document.
GET /api/v1/programs/{slug}
One programme with terms[], legal_document and its faqs[].
404 when the slug is unknown or the programme is inactive.
GET /api/v1/programs/match
Backs the "find the financing that fits you" wizard. All three parameters are optional; each one narrows the result.
| Parameter | Values |
|---|---|
borrower_type |
one or a comma-separated list of farmer, seed_farm, cluster, textile_enterprise, grain_receiver, leasing_organization, entrepreneur |
sector |
one or a comma-separated list of the sector values above |
kind |
credit, leasing, subsidy |
A list matches programmes open to ANY of the values (borrower_type=farmer,seed_farm
is how the site maps the answer "fermer"). When borrower_type is given, the
embedded terms[] are narrowed to those borrowers — so the client can render
the applicable rate directly. Programmes without any term for the given
borrowers are left out. An unknown value returns 422 with the field in errors.
Returns an unpaginated array (the wizard shows a handful of results).
Term object
The calculator reads its inputs from here — never hardcode a rate on the
client. Rates are what the borrower pays; the bank margin is already
inside annual_rate.
| Field | Meaning |
|---|---|
borrower_type |
who this term applies to |
label |
human description of the borrower |
share_percent |
maximum share of the crop/asset value that can be financed |
annual_rate |
annual rate the borrower pays, in percent |
bank_margin |
the bank's share of annual_rate |
rate_discount_a / rate_discount_b |
reduction for stability-rating class A / B |
term_months |
total term |
grace_months |
grace period before principal repayment starts |
note |
conditions that do not fit a number |
null means the source act does not fix that value — for example the seed-wheat
programme, whose rate tracks the Central Bank base rate. Render the note
in that case rather than a blank field.
Legal documents
GET /api/v1/legal-documents
| Filter | Values |
|---|---|
filter[doc_type] |
presidential_decree, presidential_resolution, cabinet_resolution, ministry_order, charter, internal |
filter[relevance] |
direct_primary, direct, related |
filter[state] |
in_force, amended, repealed |
filter[year] |
four-digit year of adoption |
filter[direction] |
exact direction label in the current locale (values from /legal-documents/directions) |
filter[search] |
free text over title, direction and number, in every locale and both Uzbek scripts — see Search |
sort: adopted_on (default -adopted_on), number, id.
GET /api/v1/legal-documents/directions
Distinct direction labels of active documents in the current locale, sorted — the values the site's direction filter offers.
{ "data": ["Chorvachilik", "Lizing", "Paxtachilik"] }
Each item carries revisions_count so a list can badge amended acts
without a second request.
GET /api/v1/legal-documents/{id}
The list item plus revisions[] (each with changed_on, summary and the
amending_document), content — the full text of the act in the current
locale when the Fund published it (null otherwise) — and files[], the
downloadable copies:
"files": [
{ "id": 12, "locale": "uz_cyrl", "format": "doc", "name": "PF-5095-uz_cyrl.doc", "size": 34147, "url": "http://…/storage/12/PF-5095-uz_cyrl.doc" }
]
One file per locale at most; locale tells which script/language the copy
is in. Seeded copies come from the old agrofin.uz register.
GET /api/v1/legal-documents/changes
Acts that were actually amended, most recently changed first. Backs the "latest legislative changes" block. Unpaginated, capped at 10.
FAQ
GET /api/v1/faqs
| Filter | Values |
|---|---|
filter[faq_category_id] |
category id |
filter[program_id] |
programme id |
filter[search] |
free text over question and answer, in every locale and both Uzbek scripts |
Default page size is 50, maximum 100. The base is larger than one page —
walk meta.pagination.last_page to show everything (the site does).
Categories: one general category (jamgarma-haqida, whose first five
questions are the canonical "term / rate / who / documents / banks" ones),
one per financing direction, and the subsidies split by subsidy type
(subsidiyalar, subsidiya-ehf, subsidiya-foiz, subsidiya-klaster-foiz,
subsidiya-klaster-xarid) so that the same question text ("Subsidiya
miqdori qancha?") never repeats inside one category.
GET /api/v1/faq-categories
Categories with faqs_count — active questions only.
Reception schedule
GET /api/v1/reception-slots
The citizens' reception timetable: who receives, in what capacity, on which
weekday and between which hours. starts_at / ends_at are HH:MM.
weekday is monday…friday — there is no weekend reception.
Unpaginated; there are seven officials.
Org chart
GET /api/v1/staff-units
A tree: root units, each with nested children[] two levels deep.
head_name is the person heading that unit. Backs the interactive
organogram.
Boshqaruv — huquqiy hujjatlar
Hammasi auth:sanctum ortida. super_admin har qanday tekshiruvni chetlab
o'tadi.
Hujjatni saytga chiqarish — uni yozishdan alohida huquq. update legal-documents matnni tahrirlashga yetadi; statusni o'zgartirish (faol
qilish ham, saytdan olib tashlash ham) publish legal-documentsni talab
qiladi. Tekshiruv o'tishga ishlaydi: allaqachon faol hujjatni status: 1
bilan qayta yuborib tahrirlash qo'shimcha huquq so'ramaydi. Rad etilgan urinish
403 qaytaradi, jim o'tkazib yubormaydi.
| Method | Path | Ability |
|---|---|---|
GET |
/api/v1/admin/legal-documents |
view legal-documents |
POST |
/api/v1/admin/legal-documents |
create legal-documents |
GET |
/api/v1/admin/legal-documents/{legalDocument} |
view legal-documents |
PUT |
/api/v1/admin/legal-documents/{legalDocument} |
update legal-documents |
DELETE |
/api/v1/admin/legal-documents/{legalDocument} |
delete legal-documents |
POST |
/api/v1/admin/legal-documents/{legalDocument}/files |
update legal-documents |
DELETE |
/api/v1/admin/legal-documents/{legalDocument}/files/{media} |
update legal-documents |
To'liq ro'yxat: view, create, update, delete, publish legal-documents.
Ro'yxat
Ommaviy endpointdan farqli, nofaol hujjatlar ham qaytadi. Ommaviy
filtrlarning hammasi ishlaydi (doc_type, relevance, state, year,
direction, search), ustiga filter[status]=1|0. sort: adopted_on
(sukut -adopted_on), number, id, sort_order.
Har bir element tarjima maydonlarini to'liq xarita ko'rinishida beradi
(tahrirlash formasi to'ldirilgan holda kelsin), status (1/0),
sort_order, revisions_count va programs_count bilan:
{
"id": 7,
"doc_type": "cabinet_resolution",
"number": "680",
"adopted_on": "2023-12-25",
"title": { "uz": "Paxta tartibi", "ru": "Порядок хлопка", "uz_cyrl": "Пахта тартиби" },
"direction": { "uz": "Paxtachilik" },
"relevance": "direct_primary",
"state": "in_force",
"external_url": "https://lex.uz/docs/680",
"status": 0,
"sort_order": 0,
"revisions_count": 2,
"programs_count": 1,
"created_at": "2026-09-15T08:00:00+00:00",
"updated_at": "2026-09-15T08:00:00+00:00"
}
direction va content tarjimasi bo'lmasa null.
Bitta hujjat
GET …/{legalDocument} ro'yxat elementiga content (to'liq matn xaritasi),
files[] (ommaviy shakl bilan bir xil: id, locale, format, name,
size, url) va revisions[]ni qo'shadi — eng yangisi birinchi:
"revisions": [
{
"id": 3,
"changed_on": "2025-03-01",
"amending_document_id": 12,
"amending_document": { "id": 12, "doc_type": "presidential_decree", "number": "PF-5095" },
"summary": { "uz": "3-band yangi tahrirda", "ru": "Пункт 3 в новой редакции" }
}
]
Hujjat yaratish
{
"doc_type": "cabinet_resolution",
"number": "680",
"adopted_on": "2023-12-25",
"title": { "uz": "Paxta tartibi", "ru": "Порядок хлопка", "uz_cyrl": "Пахта тартиби" },
"direction": { "uz": "Paxtachilik" },
"content": { "uz": "<p>Matn</p>" },
"relevance": "direct_primary",
"state": "in_force",
"external_url": "https://lex.uz/docs/680",
"status": 0,
"sort_order": 0,
"revisions": [
{ "changed_on": "2025-03-01", "amending_document_id": 12, "summary": { "uz": "3-band yangi tahrirda" } }
]
}
| Maydon | Qoida |
|---|---|
doc_type |
majburiy; presidential_decree, presidential_resolution, cabinet_resolution, ministry_order, charter, internal |
number |
majburiy, 64 belgigacha; tur ichida yagona — VMQ-680 va PQ-680 ikki xil hujjat, lekin ikkita VMQ-680 bo'lmaydi (422) |
adopted_on |
majburiy, YYYY-MM-DD |
title |
majburiy; sukut tili (uz) bo'lishi shart; noma'lum til rad etiladi |
direction, content |
ixtiyoriy tarjima xaritasi; null — tozalash |
relevance |
majburiy; direct_primary, direct, related |
state |
in_force (sukut), amended, repealed |
external_url |
ixtiyoriy, to'liq URL, 255 belgigacha |
status |
1 faol / 0 nofaol; yuborilmasa 0; 1 uchun publish legal-documents kerak |
sort_order |
0…32767 |
revisions[] |
ixtiyoriy; har birida changed_on (YYYY-MM-DD, majburiy), summary (tarjima xaritasi, majburiy), amending_document_id (mavjud hujjat yoki null); yaratishda id yuborilmaydi |
Javob — 201 va yuqoridagi to'liq shakl.
Tahrirlash
PUT — qisman yangilash: yuborilmagan maydon saqlangan qiymatida qoladi.
Tarjima xaritasi til bo'yicha birlashadi: {"title": {"uz": "…", "ru": "…"}}
uz_cyrl matniga tegmaydi. Xaritada sukut tili (uz) baribir bo'lishi
kerak.
[] qoidasi. Bo'sh obyekt yuborilgan tarjima maydoni ({"title": {}}
yoki []) «tegilmasin» deb o'qiladi — bo'sh forma sarlavhani uch tilda
o'chirib yubormaydi. direction, content, external_url uchun esa null
(yoki bo'sh qiymat) tozalash degani.
number/doc_type yagonaligi juftlik bo'yicha tekshiriladi: faqat turni
o'zgartirib ham, faqat raqamni o'zgartirib ham boshqa hujjat bilan
to'qnashib bo'lmaydi (422).
revisions sinxronizatsiyasi. Kalit yuborilmasa tarix o'zgarmaydi.
Yuborilsa, tarix aynan shu ro'yxatga keltiriladi:
idbor qator — yangilanadi (idshu hujjatning tahririga tegishli bo'lishi shart);idyo'q (yokinull) — yangi tahrir qo'shiladi;- ro'yxatda bo'lmagan mavjud tahrir — yumshoq o'chiriladi.
amending_document_id hujjatning o'ziga teng bo'lolmaydi.
DELETE yumshoq o'chiradi: yozuv jadvalda qoladi, ommaviy GET /api/v1/legal-documents/{id} esa 404 beradi.
Fayllar
POST …/{legalDocument}/files — multipart file (doc / docx / pdf / html,
20 MB gacha) va locale (uz, ru, uz_cyrl). Har til uchun bitta
nusxa: o'sha tilning avvalgi fayli o'chib, yangisi qo'yiladi. Fayl nomi
URL uchun tozalanadi (Nizom (uz).html → nizom-uz.html). Javob — hujjatning
to'liq shakli, files[] yangilangan holda.
DELETE …/{legalDocument}/files/{media} — files[].id bo'yicha. Boshqa
hujjatning fayli yoki mavjud bo'lmagan id uchun 404.