Savollar API
YHQ (yo'l harakati qoidalari) imtihon savollari, biletlari va rasmlariga ochiq, faqat o'qish uchun API. Har so'rov X-API-Key sarlavhasi bilan.
Kalit va so'rov
Barcha so'rovlar https://prava.tezt.uz/api/v1 ga yuboriladi va X-API-Key sarlavhasini talab qiladi. Kalitni brauzer/ilova kodiga qattiq yozmang: mobil ilovada uni serveringiz orqali o'tkazing yoki kalitni domen/IP ro'yxati bilan cheklang. Rasmlar uchun alohida imzolangan havolalar beriladi (<img src> da ishlaydi).
curl -H "X-API-Key: YOUR_API_KEY" "https://prava.tezt.uz/api/v1/public/meta"
Kalit ruxsatlari (scope): questions:read · tickets:read · images:read · answers:read. Har endpoint o'ziga kerak ruxsatni ko'rsatadi.
Javob formati
Barcha javoblar JSON. Muvaffaqiyat: {"ok":true,"data":{…},"request_id":"…"}. Xato: {"ok":false,"error":{"code":"…","message":"…"},"request_id":"…"} (+ mos HTTP kod). request_id (va X-Request-Id sarlavhasi) — muammo haqida yozganda shuni ko'rsating.
Limit va kesh
Har kalitning daqiqalik va kunlik limiti bor. Har javobda: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (UNIX vaqt) va X-RateLimit-Daily-Limit/Remaining. Oshsa — 429 va Retry-After.
Javoblar ETag bilan keladi: keyingi safar If-None-Match: <ETag> yuboring — o'zgarmagan bo'lsa 304 (tanasiz, tez) olasiz. Javoblar gzip bilan siqiladi (Accept-Encoding: gzip). Rasmlar immutable kesh bilan, kichraytirilgan WebP variantlari bilan beriladi.
Delta-sinxron (oflayn nusxa yuritish)
GET /public/meta→content_version. Saqlangan versiya bilan bir xil bo'lsa, hech narsa qilmang.- Birinchi marta:
GET /public/questions?limit=100,next_cursorbo'sh bo'lgunchacursor=bilan davom eting. Birinchi sahifadagiserver_timeni saqlang. - Keyingi safar:
GET /public/questions?updated_since=<saqlangan server_time>&limit=100→ faqat yangi/o'zgargan savollaritemsda;removeddagi ID larni mahalliy nusxadan o'chiring. Yangiserver_timeni saqlang. - Rasm havolasidagi
vo'zgarmaguncha rasm keshdan olinadi.
Til, aralashtirish, to'g'ri javoblar
- Til:
lang=uz_latn(standart) yokiuz_cyrl. Javobdagi barcha matn tanlangan yozuvda. - Variantlar tartibi:
shuffle=1— variantlar aralashtiriladi;seed=…bilan tartib takrorlanadi. Har variantningkeyqiymati o'zgarmaydi (variant ID si), harf belgilarini (A, B, C…) ilovangiz o'zi ko'rsatsin. - To'g'ri javob: faqat
include_answers=1bilan va kalitdaanswers:readruxsati bo'lsa (correct: variant kalitlari ro'yxati, ko'p javobli savolda bir nechta,explanation). Aks holda403 insufficient_scope.
Umumiy
Meta ma'lumot
Jami savollar/biletlar/mavzular soni, kontent versiyasi va oxirgi yangilanish vaqti. Mahalliy keshingiz yangimi, shuni bilish uchun content_version ni saqlang: o'zgarmagan bo'lsa, boshqa so'rov kerak emas. Kalitning o'z ruxsatlari va limitlari ham qaytadi.
curl -H "X-API-Key: YOUR_API_KEY" \
"https://prava.tezt.uz/api/v1/public/meta"
const res = await fetch("https://prava.tezt.uz/api/v1/public/meta", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const body = await res.json();
if (!body.ok) throw new Error(body.error.code);
console.log(body.data);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://prava.tezt.uz/api/v1/public/meta")
.header("X-API-Key", "YOUR_API_KEY")
.build()
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
import 'dart:convert';
import 'package:http/http.dart' as http;
final res = await http.get(
Uri.parse('https://prava.tezt.uz/api/v1/public/meta'),
headers: {'X-API-Key': 'YOUR_API_KEY'},
);
final body = jsonDecode(res.body);
print(body['data']);
import requests
r = requests.get(
"https://prava.tezt.uz/api/v1/public/meta",
headers={"X-API-Key": "YOUR_API_KEY"},
timeout=10,
)
print(r.json()["data"])
Namunali javob
{
"ok": true,
"data": {
"api_version": 1,
"content_version": "a91c0e44b2d7",
"totals": {
"questions": 1235,
"tickets": 62,
"topics": 15
},
"last_updated_ts": 1790000000,
"last_updated_at": "2026-10-25T10:13:20+05:00",
"server_time": 1790001234,
"languages": [
"uz_latn",
"uz_cyrl"
],
"difficulties": [
"easy",
"medium",
"hard"
],
"key": {
"name": "Mening ilovam",
"scopes": [
"questions:read",
"tickets:read"
],
"rate_per_min": 60,
"rate_per_day": 10000
}
},
"request_id": "req_9f2c41d07a3b55e0"
}
Mavzular va biletlar
Mavzular (kategoriyalar)
Mavzular va ulardagi savollar soni. key ni boshqa endpointlarda topic= sifatida ishlating.
| Parametr | Tur | Tavsif |
|---|---|---|
| lang query |
string =uz_latn |
Javob yozuvi: uz_latn (lotin) yoki uz_cyrl (kirill). Kirillcha matn kiritilmagan joylar lotindan avtomatik o'giriladi. |
| fields query |
string | Faqat kerakli maydonlar, vergul bilan: fields=id,text,options. Javob hajmini kamaytiradi. |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://prava.tezt.uz/api/v1/public/topics?lang=uz_latn"
const res = await fetch("https://prava.tezt.uz/api/v1/public/topics?lang=uz_latn", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const body = await res.json();
if (!body.ok) throw new Error(body.error.code);
console.log(body.data);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://prava.tezt.uz/api/v1/public/topics?lang=uz_latn")
.header("X-API-Key", "YOUR_API_KEY")
.build()
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
import 'dart:convert';
import 'package:http/http.dart' as http;
final res = await http.get(
Uri.parse('https://prava.tezt.uz/api/v1/public/topics?lang=uz_latn'),
headers: {'X-API-Key': 'YOUR_API_KEY'},
);
final body = jsonDecode(res.body);
print(body['data']);
import requests
r = requests.get(
"https://prava.tezt.uz/api/v1/public/topics?lang=uz_latn",
headers={"X-API-Key": "YOUR_API_KEY"},
timeout=10,
)
print(r.json()["data"])
Namunali javob
{
"ok": true,
"data": {
"items": [
{
"key": "chorraha",
"name": "Chorrahalardan o'tish va navbat",
"questions": 138
},
{
"key": "svetofor",
"name": "Svetofor va tartibga soluvchi",
"questions": 74
}
],
"count": 15
},
"request_id": "req_9f2c41d07a3b55e0"
}
Biletlar ro'yxati
id — barqaror ichki ID (bilet o'chirilsa ham boshqa bilet bu raqamni olmaydi), number — foydalanuvchiga ko'rsatiladigan ketma-ket raqam (1..N). Ko'rsatish uchun number, so'rovlarda id ishlating.
| Parametr | Tur | Tavsif |
|---|---|---|
| fields query |
string | Faqat kerakli maydonlar, vergul bilan: fields=id,text,options. Javob hajmini kamaytiradi. |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://prava.tezt.uz/api/v1/public/tickets"
const res = await fetch("https://prava.tezt.uz/api/v1/public/tickets", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const body = await res.json();
if (!body.ok) throw new Error(body.error.code);
console.log(body.data);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://prava.tezt.uz/api/v1/public/tickets")
.header("X-API-Key", "YOUR_API_KEY")
.build()
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
import 'dart:convert';
import 'package:http/http.dart' as http;
final res = await http.get(
Uri.parse('https://prava.tezt.uz/api/v1/public/tickets'),
headers: {'X-API-Key': 'YOUR_API_KEY'},
);
final body = jsonDecode(res.body);
print(body['data']);
import requests
r = requests.get(
"https://prava.tezt.uz/api/v1/public/tickets",
headers={"X-API-Key": "YOUR_API_KEY"},
timeout=10,
)
print(r.json()["data"])
Namunali javob
{
"ok": true,
"data": {
"items": [
{
"id": 1,
"number": 1,
"questions": 20,
"updated_ts": 1790000000
},
{
"id": 2,
"number": 2,
"questions": 20,
"updated_ts": 1789000000
}
],
"count": 62
},
"request_id": "req_9f2c41d07a3b55e0"
}
Bitta bilet va uning savollari
Bilet savollari position tartibida.
| Parametr | Tur | Tavsif |
|---|---|---|
| id * yo'l |
integer | Bilet ID si (/public/tickets dagi id). |
| lang query |
string =uz_latn |
Javob yozuvi: uz_latn (lotin) yoki uz_cyrl (kirill). Kirillcha matn kiritilmagan joylar lotindan avtomatik o'giriladi. |
| shuffle query |
boolean =0 |
1 — javob variantlari tartibi aralashtiriladi. Har variantning key qiymati o'zgarmaydi (u variantning ID si; harfni o'zingiz ko'rsating). |
| seed query |
string | shuffle=1 bilan: bir xil seed — har safar bir xil tartib (testni qayta ochganda). |
| include_answers query |
boolean =0 |
1 — correct (to'g'ri variant kalitlari) va explanation qo'shiladi. Kalitda answers:read ruxsati kerak, aks holda 403. |
| fields query |
string | Faqat kerakli maydonlar, vergul bilan: fields=id,text,options. Javob hajmini kamaytiradi. |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://prava.tezt.uz/api/v1/public/tickets/1?lang=uz_latn&shuffle=1&seed=test1"
const res = await fetch("https://prava.tezt.uz/api/v1/public/tickets/1?lang=uz_latn&shuffle=1&seed=test1", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const body = await res.json();
if (!body.ok) throw new Error(body.error.code);
console.log(body.data);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://prava.tezt.uz/api/v1/public/tickets/1?lang=uz_latn&shuffle=1&seed=test1")
.header("X-API-Key", "YOUR_API_KEY")
.build()
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
import 'dart:convert';
import 'package:http/http.dart' as http;
final res = await http.get(
Uri.parse('https://prava.tezt.uz/api/v1/public/tickets/1?lang=uz_latn&shuffle=1&seed=test1'),
headers: {'X-API-Key': 'YOUR_API_KEY'},
);
final body = jsonDecode(res.body);
print(body['data']);
import requests
r = requests.get(
"https://prava.tezt.uz/api/v1/public/tickets/1?lang=uz_latn&shuffle=1&seed=test1",
headers={"X-API-Key": "YOUR_API_KEY"},
timeout=10,
)
print(r.json()["data"])
Namunali javob
{
"ok": true,
"data": {
"ticket": {
"id": 1,
"number": 1,
"questions": 20
},
"items": [
{
"id": 1672,
"ticket_id": 1,
"ticket_number": 1,
"position": 6,
"topic": "chorraha",
"topic_name": "Chorrahalardan o'tish va navbat",
"difficulty": "medium",
"type": "single",
"text": "Qaysi transport vositasining haydovchisi chorrahadan birinchi bo'lib o'tadi?",
"options": [
{
"key": "A",
"text": "Avtomobil va avtobus haydovchisi"
},
{
"key": "B",
"text": "Tramvay haydovchisi"
},
{
"key": "C",
"text": "Har ikkalasi"
}
],
"image": {
"url": "https://DOMEN/api/v1/public/images/1672?v=01b03c9a1f&sig=4be0f3a1c2d9e711",
"thumb_url": "https://DOMEN/api/v1/public/images/1672?v=01b03c9a1f&sig=4be0f3a1c2d9e711&w=480&fmt=webp",
"source": "own"
},
"version": 2,
"updated_ts": 1790000000
}
],
"count": 20,
"content_version": "a91c0e44b2d7"
},
"request_id": "req_9f2c41d07a3b55e0"
}
Savollar
Savollar ro'yxati (filtr, sahifalash, delta-sinxron)
id bo'yicha tartiblangan, cursor bilan sahifalanadi. Delta-sinxron: birinchi marta to'liq yuklab oling va javobdagi server_time ni saqlang; keyingi safar updated_since=<saqlangan server_time> yuboring — faqat o'zgargan/yangi savollar items da, o'chirilgan yoki nofaol bo'lganlar removed da keladi (removed oxirgi sahifada to'liq bo'ladi).
| Parametr | Tur | Tavsif |
|---|---|---|
| lang query |
string =uz_latn |
Javob yozuvi: uz_latn (lotin) yoki uz_cyrl (kirill). Kirillcha matn kiritilmagan joylar lotindan avtomatik o'giriladi. |
| topic query |
string | Mavzu kaliti (/public/topics dan), masalan chorraha. |
| difficulty query |
string | Qiyinlik: easy, medium, hard. |
| ticket query |
integer | Bilet ID si (/public/tickets dagi id). |
| limit query |
integer =50 |
Sahifadagi elementlar soni (1–100). |
| cursor query |
string | Oldingi javobdagi next_cursor. Bo'sh = birinchi sahifa. |
| updated_since query |
integer | UNIX vaqt (soniya). Shundan keyin o'zgargan savollar. |
| ids query |
string | Vergul bilan ID lar (≤100): ids=1,2,3. |
| shuffle query |
boolean =0 |
1 — javob variantlari tartibi aralashtiriladi. Har variantning key qiymati o'zgarmaydi (u variantning ID si; harfni o'zingiz ko'rsating). |
| seed query |
string | shuffle=1 bilan: bir xil seed — har safar bir xil tartib (testni qayta ochganda). |
| include_answers query |
boolean =0 |
1 — correct (to'g'ri variant kalitlari) va explanation qo'shiladi. Kalitda answers:read ruxsati kerak, aks holda 403. |
| fields query |
string | Faqat kerakli maydonlar, vergul bilan: fields=id,text,options. Javob hajmini kamaytiradi. |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://prava.tezt.uz/api/v1/public/questions?topic=chorraha&limit=2&lang=uz_latn"
const res = await fetch("https://prava.tezt.uz/api/v1/public/questions?topic=chorraha&limit=2&lang=uz_latn", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const body = await res.json();
if (!body.ok) throw new Error(body.error.code);
console.log(body.data);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://prava.tezt.uz/api/v1/public/questions?topic=chorraha&limit=2&lang=uz_latn")
.header("X-API-Key", "YOUR_API_KEY")
.build()
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
import 'dart:convert';
import 'package:http/http.dart' as http;
final res = await http.get(
Uri.parse('https://prava.tezt.uz/api/v1/public/questions?topic=chorraha&limit=2&lang=uz_latn'),
headers: {'X-API-Key': 'YOUR_API_KEY'},
);
final body = jsonDecode(res.body);
print(body['data']);
import requests
r = requests.get(
"https://prava.tezt.uz/api/v1/public/questions?topic=chorraha&limit=2&lang=uz_latn",
headers={"X-API-Key": "YOUR_API_KEY"},
timeout=10,
)
print(r.json()["data"])
Namunali javob
{
"ok": true,
"data": {
"items": [
{
"id": 1672,
"ticket_id": 1,
"ticket_number": 1,
"position": 6,
"topic": "chorraha",
"topic_name": "Chorrahalardan o'tish va navbat",
"difficulty": "medium",
"type": "single",
"text": "Qaysi transport vositasining haydovchisi chorrahadan birinchi bo'lib o'tadi?",
"options": [
{
"key": "A",
"text": "Avtomobil va avtobus haydovchisi"
},
{
"key": "B",
"text": "Tramvay haydovchisi"
},
{
"key": "C",
"text": "Har ikkalasi"
}
],
"image": {
"url": "https://DOMEN/api/v1/public/images/1672?v=01b03c9a1f&sig=4be0f3a1c2d9e711",
"thumb_url": "https://DOMEN/api/v1/public/images/1672?v=01b03c9a1f&sig=4be0f3a1c2d9e711&w=480&fmt=webp",
"source": "own"
},
"version": 2,
"updated_ts": 1790000000
}
],
"count": 1,
"next_cursor": "cNjQ5",
"content_version": "a91c0e44b2d7",
"server_time": 1790001234
},
"request_id": "req_9f2c41d07a3b55e0"
}
Bitta savol
To'g'ri javob bilan olish uchun kalitda answers:read va include_answers=1 kerak.
| Parametr | Tur | Tavsif |
|---|---|---|
| id * yo'l |
integer | Savol ID si. |
| lang query |
string =uz_latn |
Javob yozuvi: uz_latn (lotin) yoki uz_cyrl (kirill). Kirillcha matn kiritilmagan joylar lotindan avtomatik o'giriladi. |
| shuffle query |
boolean =0 |
1 — javob variantlari tartibi aralashtiriladi. Har variantning key qiymati o'zgarmaydi (u variantning ID si; harfni o'zingiz ko'rsating). |
| seed query |
string | shuffle=1 bilan: bir xil seed — har safar bir xil tartib (testni qayta ochganda). |
| include_answers query |
boolean =0 |
1 — correct (to'g'ri variant kalitlari) va explanation qo'shiladi. Kalitda answers:read ruxsati kerak, aks holda 403. |
| fields query |
string | Faqat kerakli maydonlar, vergul bilan: fields=id,text,options. Javob hajmini kamaytiradi. |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://prava.tezt.uz/api/v1/public/questions/1672?include_answers=1"
const res = await fetch("https://prava.tezt.uz/api/v1/public/questions/1672?include_answers=1", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const body = await res.json();
if (!body.ok) throw new Error(body.error.code);
console.log(body.data);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://prava.tezt.uz/api/v1/public/questions/1672?include_answers=1")
.header("X-API-Key", "YOUR_API_KEY")
.build()
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
import 'dart:convert';
import 'package:http/http.dart' as http;
final res = await http.get(
Uri.parse('https://prava.tezt.uz/api/v1/public/questions/1672?include_answers=1'),
headers: {'X-API-Key': 'YOUR_API_KEY'},
);
final body = jsonDecode(res.body);
print(body['data']);
import requests
r = requests.get(
"https://prava.tezt.uz/api/v1/public/questions/1672?include_answers=1",
headers={"X-API-Key": "YOUR_API_KEY"},
timeout=10,
)
print(r.json()["data"])
Namunali javob
{
"ok": true,
"data": {
"question": {
"id": 1672,
"ticket_id": 1,
"ticket_number": 1,
"position": 6,
"topic": "chorraha",
"topic_name": "Chorrahalardan o'tish va navbat",
"difficulty": "medium",
"type": "single",
"text": "Qaysi transport vositasining haydovchisi chorrahadan birinchi bo'lib o'tadi?",
"options": [
{
"key": "A",
"text": "Avtomobil va avtobus haydovchisi"
},
{
"key": "B",
"text": "Tramvay haydovchisi"
},
{
"key": "C",
"text": "Har ikkalasi"
}
],
"image": {
"url": "https://DOMEN/api/v1/public/images/1672?v=01b03c9a1f&sig=4be0f3a1c2d9e711",
"thumb_url": "https://DOMEN/api/v1/public/images/1672?v=01b03c9a1f&sig=4be0f3a1c2d9e711&w=480&fmt=webp",
"source": "own"
},
"version": 2,
"updated_ts": 1790000000,
"correct": [
"B"
],
"explanation": "Tramvay teng ahamiyatli chorrahada afzallikka ega."
}
},
"request_id": "req_9f2c41d07a3b55e0"
}
Tasodifiy savollar
Filtrga mos savollardan tasodifiy tanlaydi (takrorlanmaydi). exclude=1,2,3 — avval ko'rsatilganlarni chiqarib tashlaydi. Javob keshlanmaydi. seed bilan natija takrorlanadi.
| Parametr | Tur | Tavsif |
|---|---|---|
| count query |
integer | Savollar soni (1–50, standart 10). |
| topic query |
string | Mavzu kaliti (/public/topics dan), masalan chorraha. |
| difficulty query |
string | Qiyinlik: easy, medium, hard. |
| ticket query |
integer | Bilet ID si (/public/tickets dagi id). |
| exclude query |
string | Chiqarib tashlanadigan ID lar (≤200). |
| lang query |
string =uz_latn |
Javob yozuvi: uz_latn (lotin) yoki uz_cyrl (kirill). Kirillcha matn kiritilmagan joylar lotindan avtomatik o'giriladi. |
| shuffle query |
boolean =0 |
1 — javob variantlari tartibi aralashtiriladi. Har variantning key qiymati o'zgarmaydi (u variantning ID si; harfni o'zingiz ko'rsating). |
| seed query |
string | shuffle=1 bilan: bir xil seed — har safar bir xil tartib (testni qayta ochganda). |
| include_answers query |
boolean =0 |
1 — correct (to'g'ri variant kalitlari) va explanation qo'shiladi. Kalitda answers:read ruxsati kerak, aks holda 403. |
| fields query |
string | Faqat kerakli maydonlar, vergul bilan: fields=id,text,options. Javob hajmini kamaytiradi. |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://prava.tezt.uz/api/v1/public/questions/random?count=10&topic=svetofor&difficulty=medium&shuffle=1"
const res = await fetch("https://prava.tezt.uz/api/v1/public/questions/random?count=10&topic=svetofor&difficulty=medium&shuffle=1", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const body = await res.json();
if (!body.ok) throw new Error(body.error.code);
console.log(body.data);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://prava.tezt.uz/api/v1/public/questions/random?count=10&topic=svetofor&difficulty=medium&shuffle=1")
.header("X-API-Key", "YOUR_API_KEY")
.build()
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
import 'dart:convert';
import 'package:http/http.dart' as http;
final res = await http.get(
Uri.parse('https://prava.tezt.uz/api/v1/public/questions/random?count=10&topic=svetofor&difficulty=medium&shuffle=1'),
headers: {'X-API-Key': 'YOUR_API_KEY'},
);
final body = jsonDecode(res.body);
print(body['data']);
import requests
r = requests.get(
"https://prava.tezt.uz/api/v1/public/questions/random?count=10&topic=svetofor&difficulty=medium&shuffle=1",
headers={"X-API-Key": "YOUR_API_KEY"},
timeout=10,
)
print(r.json()["data"])
Namunali javob
{
"ok": true,
"data": {
"items": [
{
"id": 1672,
"ticket_id": 1,
"ticket_number": 1,
"position": 6,
"topic": "chorraha",
"topic_name": "Chorrahalardan o'tish va navbat",
"difficulty": "medium",
"type": "single",
"text": "Qaysi transport vositasining haydovchisi chorrahadan birinchi bo'lib o'tadi?",
"options": [
{
"key": "A",
"text": "Avtomobil va avtobus haydovchisi"
},
{
"key": "B",
"text": "Tramvay haydovchisi"
},
{
"key": "C",
"text": "Har ikkalasi"
}
],
"image": {
"url": "https://DOMEN/api/v1/public/images/1672?v=01b03c9a1f&sig=4be0f3a1c2d9e711",
"thumb_url": "https://DOMEN/api/v1/public/images/1672?v=01b03c9a1f&sig=4be0f3a1c2d9e711&w=480&fmt=webp",
"source": "own"
},
"version": 2,
"updated_ts": 1790000000
}
],
"count": 1,
"pool": 74,
"content_version": "a91c0e44b2d7"
},
"request_id": "req_9f2c41d07a3b55e0"
}
Qidiruv
Savol va variantlar matni bo'yicha qidiradi (lotin ham, kirill ham; harf registri va o'/oʻ apostrof turlari farqsiz).
| Parametr | Tur | Tavsif |
|---|---|---|
| q * query |
string | Qidiruv matni (≥2 belgi). |
| topic query |
string | Mavzu kaliti (/public/topics dan), masalan chorraha. |
| difficulty query |
string | Qiyinlik: easy, medium, hard. |
| limit query |
integer =50 |
Sahifadagi elementlar soni (1–100). |
| lang query |
string =uz_latn |
Javob yozuvi: uz_latn (lotin) yoki uz_cyrl (kirill). Kirillcha matn kiritilmagan joylar lotindan avtomatik o'giriladi. |
| include_answers query |
boolean =0 |
1 — correct (to'g'ri variant kalitlari) va explanation qo'shiladi. Kalitda answers:read ruxsati kerak, aks holda 403. |
| fields query |
string | Faqat kerakli maydonlar, vergul bilan: fields=id,text,options. Javob hajmini kamaytiradi. |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://prava.tezt.uz/api/v1/public/search?q=svetofor&limit=5"
const res = await fetch("https://prava.tezt.uz/api/v1/public/search?q=svetofor&limit=5", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const body = await res.json();
if (!body.ok) throw new Error(body.error.code);
console.log(body.data);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://prava.tezt.uz/api/v1/public/search?q=svetofor&limit=5")
.header("X-API-Key", "YOUR_API_KEY")
.build()
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
import 'dart:convert';
import 'package:http/http.dart' as http;
final res = await http.get(
Uri.parse('https://prava.tezt.uz/api/v1/public/search?q=svetofor&limit=5'),
headers: {'X-API-Key': 'YOUR_API_KEY'},
);
final body = jsonDecode(res.body);
print(body['data']);
import requests
r = requests.get(
"https://prava.tezt.uz/api/v1/public/search?q=svetofor&limit=5",
headers={"X-API-Key": "YOUR_API_KEY"},
timeout=10,
)
print(r.json()["data"])
Namunali javob
{
"ok": true,
"data": {
"query": "svetofor",
"items": [
{
"id": 1672,
"ticket_id": 1,
"ticket_number": 1,
"position": 6,
"topic": "chorraha",
"topic_name": "Chorrahalardan o'tish va navbat",
"difficulty": "medium",
"type": "single",
"text": "Qaysi transport vositasining haydovchisi chorrahadan birinchi bo'lib o'tadi?",
"options": [
{
"key": "A",
"text": "Avtomobil va avtobus haydovchisi"
},
{
"key": "B",
"text": "Tramvay haydovchisi"
},
{
"key": "C",
"text": "Har ikkalasi"
}
],
"image": {
"url": "https://DOMEN/api/v1/public/images/1672?v=01b03c9a1f&sig=4be0f3a1c2d9e711",
"thumb_url": "https://DOMEN/api/v1/public/images/1672?v=01b03c9a1f&sig=4be0f3a1c2d9e711&w=480&fmt=webp",
"source": "own"
},
"version": 2,
"updated_ts": 1790000000
}
],
"count": 1
},
"request_id": "req_9f2c41d07a3b55e0"
}
Rasmlar
Savol rasmi
Savol obyektidagi image.url imzolangan havola — uni to'g'ridan-to'g'ri <img src> ga qo'yish mumkin (kalit sarlavhasi kerak emas, sig o'zi ruxsat). Rasmlar Cache-Control: public, max-age=31536000, immutable bilan keladi; havoladagi v rasm o'zgarsa yangilanadi. Kichraytirish: w (160, 240, 320, 480, 640, 800, 960, 1280), format: fmt (webp, jpeg, png, orig). Rasmi yo'q savol — 404.
| Parametr | Tur | Tavsif |
|---|---|---|
| id * yo'l |
integer | Savol ID si. |
| v query |
string | Rasm versiyasi (havoladan). |
| sig query |
string | Imzo (havoladan). |
| w query |
integer | Kenglik (px), ro'yxatdagi qiymatlardan. |
| fmt query |
string | webp | jpeg | png | orig |
curl -H "X-API-Key: YOUR_API_KEY" \
"https://prava.tezt.uz/api/v1/public/images/1672"
const res = await fetch("https://prava.tezt.uz/api/v1/public/images/1672", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const body = await res.json();
if (!body.ok) throw new Error(body.error.code);
console.log(body.data);
val client = OkHttpClient()
val request = Request.Builder()
.url("https://prava.tezt.uz/api/v1/public/images/1672")
.header("X-API-Key", "YOUR_API_KEY")
.build()
client.newCall(request).execute().use { response ->
println(response.body?.string())
}
import 'dart:convert';
import 'package:http/http.dart' as http;
final res = await http.get(
Uri.parse('https://prava.tezt.uz/api/v1/public/images/1672'),
headers: {'X-API-Key': 'YOUR_API_KEY'},
);
final body = jsonDecode(res.body);
print(body['data']);
import requests
r = requests.get(
"https://prava.tezt.uz/api/v1/public/images/1672",
headers={"X-API-Key": "YOUR_API_KEY"},
timeout=10,
)
print(r.json()["data"])
Xato kodlari
| HTTP | Kod | Sabab |
|---|---|---|
| 401 | api_key_required | X-API-Key sarlavhasi yo'q |
| 401 | invalid_api_key | Kalit noto'g'ri (ko'p marta xato yuborilsa IP vaqtincha bloklanadi) |
| 401 | api_key_revoked / api_key_expired | Kalit bekor qilingan yoki muddati tugagan |
| 403 | insufficient_scope | Kalitda kerakli ruxsat yo'q (required_scope maydoni qaytadi) |
| 403 | ip_not_allowed / origin_not_allowed | Kalit boshqa IP/domendan ishlatilmoqda |
| 404 | not_found | Savol/bilet/rasm topilmadi |
| 422 | bad_lang / bad_difficulty / bad_query ... | Parametr noto'g'ri |
| 429 | rate_limited / daily_limit_exceeded | Limit oshdi. Retry-After sarlavhasi va error.retry_after kutish soniyalarini beradi |
| 503 | maintenance / api_disabled | Texnik ishlar yoki API vaqtincha o'chirilgan |
Savol bo'lsa: aloqa. Mashina o'qiydigan tavsif: openapi.json.