API reference · Catalog
List products
GEThttps://dev.adolfjon.uz/v1/catalog/products
catalog:read paginated read-only
Products on sale, newest first. Prices are the public price in UZS, including active sales.
Parameters
categoryquery · integer
Only this category id.
typequery · string
Only this product type.
One of:
One of:
account, token, coupon, service, boost, designlimitquery · integer
Items per page, 1 to 100. Default 20.
cursorquery · string
meta.next_cursor from the previous page.
langquery · string
Language of titles and texts. Default en.
One of:
One of:
uz, ru, enRequest
curl https://dev.adolfjon.uz/v1/catalog/products \
-H "Authorization: Bearer ak_test_YOUR_KEY"<?php
$apiKey = 'ak_test_YOUR_KEY';
$ch = curl_init('https://dev.adolfjon.uz/v1/catalog/products');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . $apiKey],
]);
$res = json_decode(curl_exec($ch), true);
if (!$res['ok']) throw new RuntimeException($res['error']['message']);
print_r($res['data']);const API_KEY = 'ak_test_YOUR_KEY';
const res = await fetch('https://dev.adolfjon.uz/v1/catalog/products', {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const body = await res.json();
if (!body.ok) throw new Error(body.error.message);
console.log(body.data);import requests
API_KEY = 'ak_test_YOUR_KEY'
r = requests.get(
'https://dev.adolfjon.uz/v1/catalog/products',
headers={'Authorization': f'Bearer {API_KEY}'},
timeout=10,
)
body = r.json()
if not body['ok']:
raise RuntimeError(body['error']['message'])
print(body['data'])Response
200 OK · application/json
{
"ok": true,
"data": [
{
"id": 341,
"title": "VIP 30 days",
"type": "token",
"category_id": 2,
"price": {
"uzs": 59000,
"original_uzs": 59000,
"discount_percent": 0,
"sale_ends_at": null
},
"in_stock": true,
"stock": null,
"featured": true,
"sold": 1840,
"image_url": "https://adolfjon.uz/storage/uploads/vip.webp",
"description": "VIP access for 30 days. Activates instantly.",
"tags": [
"vip"
],
"url": "https://adolfjon.uz/store/product/341",
"created_at": "2026-10-26T14:05:00+05:00"
}
],
"meta": {
"request_id": "req_3f9a0c1d2e4b5a6978c0",
"mode": "live",
"has_more": false,
"next_cursor": null
}
}Try it
Send a real request
Paste a key from your dashboard. A test key is best here. The key stays in this browser tab only and is sent straight to the API.
Errors
| Code | HTTP | When |
|---|---|---|
unauthorized | 401 | No key, or the key is not valid. |
insufficient_scope | 403 | The key lacks the permission. error.required_scope names it. |
rate_limited | 429 | Over the per-minute limit. Wait error.retry_after seconds. |
invalid_request | 400 | A parameter is wrong. error.param names it. |