API цен на подарки
Бесплатный публичный JSON API: минимальная цена любого NFT-подарка Telegram и его модели на маркетплейсе Telegram, Fragment и Portals. Без ключей и регистрации.
Эндпоинты
| Запрос | Что возвращает |
|---|---|
GET /api/v1/gifts | Все коллекции из каталога: slug, название, флор на каждом рынке. |
GET /api/v1/gifts/{gift} | Коллекция и все её модели с ценами. ?models=0 — без списка моделей, ?history=1 — плюс флоры по дням за 30 дней. |
GET /api/v1/gifts/{gift}/{model} | Одна модель: самая низкая цена и цены на каждом рынке. ?history=1 — плюс история. |
{gift} и {model} — это slug из адреса страницы на StarPrice (/gifts/light-swords/darksaber) или просто название как в Telegram:/api/v1/gifts/Light%20Sword/Darksaber тоже сработает. Регистр не важен.
Пример: цена модели
GET https://starprice.net/api/v1/gifts/light-swords/darksaber{
"gift": { "slug": "light-swords", "name": "Light Sword", "url": "https://starprice.net/gifts/light-swords" },
"model": {
"slug": "darksaber",
"name": "Darksaber",
"kind": "upgrade",
"rarity_permille": 4,
"rarity_pct": 0.4,
"craft_rarity": null,
"issued": 123,
"image": "https://starprice.net/uploads/gifts/light-swords/darksaber.webp",
"url": "https://starprice.net/gifts/light-swords/darksaber",
"floor": {
"market": "portals", "price": 40, "currency": "GRAM", "rub": 3912, "lots": 38,
"url": "https://telegram.me/portals/market?startapp=…", "updated_at": "2026-11-03T00:40:24.122Z"
},
"offers": [
{ "market": "telegram", "price": 3200, "currency": "STARS", "rub": 4992, "lots": null, "url": null, "updated_at": "2026-11-03T00:12:09.000Z" },
{ "market": "fragment", "price": 45, "currency": "GRAM", "rub": 4401, "lots": 24, "url": "https://fragment.com/gifts/lightsword?sort=price_asc&filter=sale&attr%5BModel%5D=%5B%22Darksaber%22%5D", "updated_at": "2026-11-03T00:30:00.000Z" },
{ "market": "portals", "price": 40, "currency": "GRAM", "rub": 3912, "lots": 38, "url": "https://telegram.me/portals/market?startapp=…", "updated_at": "2026-11-03T00:40:24.122Z" }
]
},
"rates": { "gram_rub": 97.8, "star_rub": 1.56 }
}Поля
| Поле | Описание |
|---|---|
floor | Самое дешёвое предложение среди рынков. Сравниваем в рублях; если курс неизвестен — между Fragment и Portals в GRAM. null, когда модель нигде не выставлена. |
offers[] | Флор на каждом рынке, где есть лоты. Рынки: telegram (встроенный маркетплейс, цены в Stars), fragment и portals (в GRAM). |
offers[].price, currency | Цена в валюте рынка: STARS или GRAM (бывший Toncoin). |
offers[].rub | Та же цена в рублях по текущему курсу, округлена до рубля. Для Stars берётся цена звезды в самом дешёвом магазине каталога, то есть «сколько реально заплатить». null, если курса нет. |
offers[].lots | Сколько лотов выставлено. Fragment отдаёт не больше 60, Telegram количество по моделям не сообщает. |
offers[].url | Где купить: на Fragment — сразу лоты этой модели по возрастанию цены, на Portals — маркет в мини-приложении. Для маркетплейса Telegram ссылки нет: он открывается только внутри Telegram. |
offers[].updated_at | Когда мы последний раз обновили цену на этом рынке (ISO 8601, UTC). |
rates | gram_rub — рублей за 1 GRAM, star_rub — рублей за 1 Star. По ним посчитаны поля rub. |
model.rarity_permille, rarity_pct | Шанс выпадения модели при улучшении: в промилле, как отдаёт Telegram, и в процентах. У крафтовых моделей (kind: "craft") вместо шанса заполнен craft_rarity. |
history[] | По запросу ?history=1: { date, fragment, portals } — минимальная цена дня в GRAM на каждом рынке, null там, где рынок в этот день не отслеживался. Историю Portals ведём с ноября 2026. |
Коллекция целиком
GET https://starprice.net/api/v1/gifts/light-swords
{
"slug": "light-swords",
"name": "Light Sword",
"url": "https://starprice.net/gifts/light-swords",
"image": "https://starprice.net/uploads/gifts/light-swords.webp",
"models_count": 52,
"issued": 17674,
"supply": null,
"floor": { "market": "portals", "price": 6.39, "currency": "GRAM", "rub": 625, "lots": 2538, … },
"offers": [ … ],
"updated_at": "2026-11-03T09:30:12.000Z",
"rates": { "gram_rub": 97.8, "star_rub": 1.56 },
"models": [
{ "slug": "darksaber", "name": "Darksaber", "kind": "upgrade", "rarity_pct": 0.4, "floor": { … }, "offers": [ … ] },
…
]
}Модели отсортированы от самой редкой к самой частой, крафтовые в конце. Чтобы узнать slug’и всех коллекций, запросите /api/v1/gifts.
Ошибки
404 { "error": "not_found", "message": "unknown gift \"foo\"; see /api/v1/gifts for the list" }
400 { "error": "bad_request", "message": "…" }
429 слишком много запросов с одного адресаЛимиты и кэш
- Цены на Fragment и Portals обновляются примерно каждые 30 минут, на маркетплейсе Telegram — несколько раз в час. Чаще, чем раз в 5 минут, опрашивать нет смысла: ответы кэшируются на 5 минут (
Cache-Controlв ответе). - Ограничение — 30 запросов в секунду с одного IP, при превышении
429. Для списка коллекций и коллекции с моделями хватает одного запроса. - CORS открыт (
Access-Control-Allow-Origin: *): можно вызывать прямо из браузера. - Ключ не нужен. Если используете данные публично, поставьте ссылку на starprice.net/gifts — нам это поможет.
Примеры кода
JavaScript
const r = await fetch("https://starprice.net/api/v1/gifts/plush-pepes/frozen");
const { model } = await r.json();
console.log(model.floor.market, model.floor.price, model.floor.currency, "≈", model.floor.rub, "₽");Python
import requests
data = requests.get("https://starprice.net/api/v1/gifts/plush-pepes", params={"models": 0}).json()
for o in data["offers"]:
print(o["market"], o["price"], o["currency"], o["rub"])curl
curl -s "https://starprice.net/api/v1/gifts/Durov's%20Cap/Fire?history=1" | jq .historyФормат стабилен в пределах версии v1: поля могут добавляться, но не исчезать и не менять тип. Вопросы и пожелания — на странице контактов.