API reference · Catalog
Get a product
GEThttps://dev.adolfjon.uz/v1/catalog/products/{id}
catalog:read read-only
One product by id. Returns not_found when it is hidden or sold out for good.
Parameters
idrequiredpath · integer
Product id.
langquery · string
Language. Default en.
One of:
One of:
uz, ru, enRequest
curl https://dev.adolfjon.uz/v1/catalog/products/341 \
-H "Authorization: Bearer ak_test_YOUR_KEY"<?php
$apiKey = 'ak_test_YOUR_KEY';
$ch = curl_init('https://dev.adolfjon.uz/v1/catalog/products/341');
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/341', {
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/341',
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"
}
}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. |
not_found | 404 | No such endpoint or object. |
invalid_request | 400 | A parameter is wrong. error.param names it. |