Документация API
Авторизация, каталог предметов, покупка и продажа, события WebSocket, статусы сделок и баланс. Параметры и JSON-примеры для интеграции со Skinsty.
https://api-market.skinsty.comПримеры запросов и ответов • JSONПримеры отражают текущий API. Методы с отметкой «Требуется авторизация» принимают Bearer JWT или cookie access_token. API-ключи, Full_list и отдельный курсорный API пока недоступны; их статус указан в соответствующих разделах.
Быстрый старт
- Для приватных методов передайте Authorization: Bearer <access_token>; браузер может использовать cookie access_token.
- Запросите POST /market с обязательным provider. Для точного названия используйте exactMarketName с полным market hash name, включая износ и вариант.
- Продолжайте выдачу по meta.hasNext, увеличивая page и передавая возвращённые dbOffset, skinvendOffset, groupOffset.
- Проверьте listing ID через POST /market/check и передайте его как sku в POST /market/buy. Сохраните checkoutId и transactionId.
- Слушайте offerStateChanged; после переподключения сверяйте сделки через POST /market/trading.
Значения иллюстративные. Ответы предметов показывают основные поля; дополнительные поля зависят от игры и источника. Даты — ISO 8601, деньги — числа в валюте ответа.
Авторизация
Публичный каталог работает без сессии. Для приватных методов используйте пользовательский JWT, полученный при входе в Skinsty.
HTTP: Bearer JWT или cookie
Передайте Authorization: Bearer <access_token>. Браузер может отправлять HttpOnly cookie access_token с credentials: include. Cookie имеет приоритет перед заголовком. X-localization: ru или en выбирает язык. JWT и Steam API key — разные ключи.
API-ключ
Пользовательская авторизация через api_key пока недоступна. Не передавайте Steam API key или внутренний служебный token вместо access_token.
Двухфакторная проверка
Некоторые операции, включая создание автопокупки и торга, дополнительно проверяют двухфакторную авторизацию. Если она включена, передавайте код в заголовке X-TwoFactorAuth. Ошибка 499 с сообщением 2fa означает, что проверка не пройдена.
curl 'https://api-market.skinsty.com/market/wallet/balance' \
-H 'Authorization: Bearer <access_token>' \
-H 'X-localization: ru'WebSocket: предметы и сделки
Используется Socket.IO на https://api-market.skinsty.com, путь /socket.io. Подписки нужно восстанавливать на каждом connect, включая переподключения.
2.1. Экшены на предметы
Комната broadcast получает marketItemPriceChanged с sku и price. Событие передаёт изменение цены, но не гарантирует отдельный сигнал о каждом новом листинге. Полного потока создания и удаления предметов пока нет; сверяйте наличие через /market и /market/check. При переподключении загрузите актуальное состояние.
2.2. Обновление статусов сделок
Для приватных событий передайте JWT в auth.token или cookie и отправьте join со строкой ID своего пользователя. Сервер выбирает комнату по сессии. offerStateChanged содержит tID, state, displayStatus и сведения о сделке. Обновляйте запись по tID и сверяйте состояние через /market/trading. События не имеют replay-курсора; пропущенные события восстанавливайте HTTP-запросом.
import { io } from 'socket.io-client';
const socket = io('https://api-market.skinsty.com', {
path: '/socket.io',
auth: { token: accessToken },
withCredentials: true
});
socket.on('marketItemPriceChanged', ({ sku, price }) => {
updateListingPrice(sku, price);
});
socket.on('offerStateChanged', event => {
refreshTrade(event.tID);
});
socket.on('connect', () => {
socket.emit('join', 'broadcast');
socket.emit('join', String(currentUserId));
refreshCatalog();
refreshTrades();
});{
"sku": "listing_id",
"price": 42.5
}{
"tID": "transaction_id",
"sku": "listing_id",
"id": "transaction_record_id",
"checkoutId": "e1d74ed0-a842-4fc0-b64d-cbfda50ca4bb",
"tradeOfferId": "1234567890",
"type": "buy",
"recipientUserId": 123,
"state": "NeedBuyerApprove",
"displayStatus": "waiting_buyer",
"status": "Pending",
"provider": "CSGO",
"price": 42.5,
"total": 42.5,
"amount": 42.5,
"currency": "USD",
"name": {
"first": "AK-47",
"second": "Redline"
},
"icon": "https://cdn.skinsty.com/example-item.png",
"createdAt": "2026-10-28T09:00:00.000Z",
"updatedAt": "2026-10-28T09:01:00.000Z",
"expiredAt": "2026-10-28T09:10:00.000Z",
"cancelActor": null,
"cancelPhase": null,
"cancelReason": null
}Каталог и точное название
Список предложений с фильтрами и последовательной загрузкой. В интеграции всегда передавайте provider. Поиск — только по полному названию через exactMarketName.
Точное совпадение
Используйте exactMarketName: «AK-47 | Redline (Field-Tested)». Учитывайте регистр, StatTrak™, Souvenir и износ. nameSearch и /market/search — подсказки интерфейса сайта; для точного поиска в интеграции они не подходят.
Загрузка как по курсору
page начинается с 1, take — от 1 до 150. Следующий запрос: page + 1 и dbOffset / skinvendOffset / groupOffset из meta предыдущего ответа, если они присутствуют. Сохраняйте provider, take, сортировку и фильтры. При смене фильтров начните с page: 1 без offsets. Завершайте при hasNext: false. Текущая выдача не является неизменяемым снимком: удаляйте дубликаты по id.
{
"provider": "CSGO",
"exactMarketName": "AK-47 | Redline (Field-Tested)",
"page": 2,
"take": 1,
"dbOffset": 1,
"skinvendOffset": 0,
"sort": {
"price": "ASC"
},
"price": {
"from": 10,
"to": 150
}
}{
"provider": "CSGO",
"exactMarketName": "AK-47 | Redline (Field-Tested)",
"page": 1,
"take": 24,
"price": {
"from": 10,
"to": 150
},
"float": {
"from": 0.15,
"to": 0.38
},
"sort": {
"price": "ASC"
},
"stickers": {
"values": [],
"match": "all",
"exact": false,
"positions": []
},
"variant": "normal"
}Возвращает список предметов на маркете. Поддерживает фильтры цены, float, стикеров, редкости, статуса и сортировки.
https://api-market.skinsty.com/market| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
provider | Да | CSGO | DOTA2 | Rust | TF2 | Провайдер; всегда указывайте явно. |
exactMarketName | Нет | string | Полное оригинальное название с точным совпадением. |
page | Нет | integer ≥ 1 | Шаг последовательной загрузки, начало: 1. |
take | Нет | integer 1…150 | Размер выдачи, по умолчанию 10. |
dbOffset / skinvendOffset / groupOffset | Нет | integer ≥ 0 | Продолжение из meta предыдущего ответа; не вычисляйте самостоятельно. |
price / float | Нет | { from?: number; to?: number } | Границы цены или float. |
sort | Нет | MarketSortRequestDto | Например { "price": "ASC" }. |
stickers | Нет | MarketStickerFilterDto | values, match: all | any, exact и позиции slot/value. |
variant / gemPresence | Нет | string | variant: all | normal | statTrack | souvenir; gemPresence: present | absent (Dota 2). |
{
"provider": "CSGO",
"page": 1,
"take": 1,
"exactMarketName": "AK-47 | Redline (Field-Tested)",
"price": {
"from": 10,
"to": 150
},
"sort": {
"price": "ASC"
}
}{
"data": [
{
"id": "listing_id",
"sku": "listing_id",
"catalogSku": "catalog_sku",
"originalMarketName": "AK-47 | Redline (Field-Tested)",
"marketSlug": "ak-47-redline-field-tested",
"marketName": {
"first": "AK-47",
"second": "Redline"
},
"provider": "CSGO",
"price": 42.5,
"marketPrice": 45,
"image": "https://cdn.skinsty.com/example-item.png",
"preview": "https://cdn.skinsty.com/example-item.png",
"count": 1,
"tradable": true,
"marketable": true,
"isInMarket": true,
"isCatalog": false,
"float": 0.21,
"stickers": [],
"keychains": [],
"gems": [],
"attributes": [],
"props": []
}
],
"meta": {
"page": 1,
"take": 1,
"itemsCount": 2,
"planItemsCount": 2,
"countWithoutGroup": 2,
"pagesCount": 2,
"hasPrev": false,
"hasNext": true,
"dbOffset": 1,
"skinvendOffset": 0
}
}Возвращает сгруппированный список предметов для компактной витрины.
https://api-market.skinsty.com/market-group| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
provider | Да | CSGO | DOTA2 | Rust | TF2 | Провайдер; всегда указывайте явно. |
group | Нет | boolean | Группировка предложений; /market-group группирует независимо от этого флага. |
{
"provider": "CSGO",
"page": 1,
"take": 24,
"group": true
}{
"data": [
{
"id": "listing_id",
"sku": "listing_id",
"catalogSku": "catalog_sku",
"originalMarketName": "AK-47 | Redline (Field-Tested)",
"marketSlug": "ak-47-redline-field-tested",
"marketName": {
"first": "AK-47",
"second": "Redline"
},
"provider": "CSGO",
"price": 42.5,
"marketPrice": 45,
"image": "https://cdn.skinsty.com/example-item.png",
"preview": "https://cdn.skinsty.com/example-item.png",
"count": 1,
"tradable": true,
"marketable": true,
"isInMarket": true,
"isCatalog": false,
"float": 0.21,
"stickers": [],
"keychains": [],
"gems": [],
"attributes": [],
"props": [],
"groups": [
{
"id": "listing_id",
"sku": "listing_id",
"catalogSku": "catalog_sku",
"originalMarketName": "AK-47 | Redline (Field-Tested)",
"marketSlug": "ak-47-redline-field-tested",
"marketName": {
"first": "AK-47",
"second": "Redline"
},
"provider": "CSGO",
"price": 42.5,
"marketPrice": 45,
"image": "https://cdn.skinsty.com/example-item.png",
"preview": "https://cdn.skinsty.com/example-item.png",
"count": 1,
"tradable": true,
"marketable": true,
"isInMarket": true,
"isCatalog": false,
"float": 0.21,
"stickers": [],
"keychains": [],
"gems": [],
"attributes": [],
"props": []
}
]
}
],
"meta": {
"page": 1,
"take": 24,
"itemsCount": 1,
"planItemsCount": 1,
"countWithoutGroup": 1,
"pagesCount": 1,
"hasPrev": false,
"hasNext": false
}
}Список доступных фильтров для выбранного провайдера.
https://api-market.skinsty.com/filters?provider=CSGO| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
provider | Да | string | Провайдер, для которого нужны фильтры. |
Тело запроса не требуется. Параметры ниже передаются в URL.
{
"provider": "CSGO"
}[
{
"id": "filter_id",
"provider": {
"id": 1,
"sku": "CSGO",
"type": "CSGO",
"name": {
"en": "CS2",
"ru": "CS2"
},
"icon": ""
},
"status": "Active",
"filterGroup": [],
"type": "Price",
"order": 1,
"sku": "price",
"icon": null,
"filterAttributes": []
}
]Full_list: полный каталог файлом
Отдельная файловая выгрузка полного каталога пока недоступна. URL Full_list и DTO файла ещё не опубликованы.
Планируемая выгрузка
Полный список предложений планируется публиковать JSON-файлом отдельно для каждого provider и обновлять раз в 5–10 минут. После запуска выгрузки изменения между снимками можно будет применять по событиям. Сейчас используйте последовательные запросы /market с сохранением continuation offsets.
RPS и API-ключ
RPS — число запросов в секунду. Общий подтверждённый лимит на пользовательский api_key в текущем API не опубликован.
Статус лимита
Для отдельного внешнего API целевой ориентир — 5 RPS на api_key, суммарно по всем методам и клиентам с этим ключом. Этот контракт ещё не включён. Не воспринимайте его как действующую квоту текущего API.
Поведение клиента
Используйте очередь запросов и кеширование. При 429 остановите повторы на время Retry-After, если он присутствует; иначе увеличивайте задержку между попытками. После таймаута покупки сначала проверяйте checkout, повтор выполняйте с тем же Idempotency-Key.
Карточка предмета
Получение конкретного предмета, похожих предложений и минимальных цен для автопокупки.
Возвращает карточку предмета. Можно передать itemId, если нужен конкретный листинг.
https://api-market.skinsty.com/item/:sku?id=:itemId| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
sku | Да | string | SKU предмета или группы. |
id | Нет | string | ID конкретного листинга. |
exact | Нет | "1" | Не подменять выбранное предложение другим листингом. |
Тело запроса не требуется. Параметры ниже передаются в URL.
{
"sku": "ak-47-redline-field-tested",
"id": "listing_id",
"exact": "1"
}{
"id": "listing_id",
"sku": "listing_id",
"catalogSku": "catalog_sku",
"originalMarketName": "AK-47 | Redline (Field-Tested)",
"marketSlug": "ak-47-redline-field-tested",
"marketName": {
"first": "AK-47",
"second": "Redline"
},
"provider": "CSGO",
"price": 42.5,
"marketPrice": 45,
"image": "https://cdn.skinsty.com/example-item.png",
"preview": "https://cdn.skinsty.com/example-item.png",
"count": 1,
"tradable": true,
"marketable": true,
"isInMarket": true,
"isCatalog": false,
"float": 0.21,
"stickers": [],
"keychains": [],
"gems": [],
"attributes": [],
"props": []
}Возвращает похожие предметы с учетом фильтров и пагинации.
https://api-market.skinsty.com/similar-items/:sku{
"provider": "CSGO",
"page": 1,
"take": 12
}{
"data": [
{
"id": "listing_id",
"sku": "listing_id",
"catalogSku": "catalog_sku",
"originalMarketName": "AK-47 | Redline (Field-Tested)",
"marketSlug": "ak-47-redline-field-tested",
"marketName": {
"first": "AK-47",
"second": "Redline"
},
"provider": "CSGO",
"price": 42.5,
"marketPrice": 45,
"image": "https://cdn.skinsty.com/example-item.png",
"preview": "https://cdn.skinsty.com/example-item.png",
"count": 1,
"tradable": true,
"marketable": true,
"isInMarket": true,
"isCatalog": false,
"float": 0.21,
"stickers": [],
"keychains": [],
"gems": [],
"attributes": [],
"props": []
}
],
"meta": {
"page": 1,
"take": 12,
"itemsCount": 1,
"planItemsCount": 1,
"countWithoutGroup": 1,
"pagesCount": 1,
"hasPrev": false,
"hasNext": false
}
}Минимальная цена на маркете и в автопокупке для выбранного предмета.
https://api-market.skinsty.com/market/trade/prices/:skuТело запроса не требуется. Параметры ниже передаются в URL.
{
"sku": "listing_id"
}{
"marketPrice": 42.5,
"autoBuyPrice": 40
}Покупка предметов
Перед покупкой проверьте доступность предметов, затем создайте операцию покупки и отслеживайте активные обмены.
Стандартная покупка
Поле sku в /market/check и /market/buy — ID конкретного предложения из каталога, а не название предмета. Передавайте массив объектов. /market/buy возвращает checkoutId и результаты по каждому предмету: accepted | partial | retry_required | rejected. Успешный checkout ещё не означает завершение Steam-обмена. Используйте Idempotency-Key для повтора одной и той же покупки.
Покупка через очередь
Для POST /market/checkout используйте один UUID в заголовках X-Checkout-Id и Idempotency-Key. Сохраните checkoutId ответа и проверяйте GET /market/checkout/:checkoutId. Статусы обработки: queued | processing | completed | rejected | failed. result появляется после обработки и содержит RPurchaseCheckoutDto.
{
"Content-Type": "application/json",
"Authorization": "Bearer <access_token>",
"Idempotency-Key": "unique-purchase-id"
}{
"Content-Type": "application/json",
"Authorization": "Bearer <access_token>",
"X-Checkout-Id": "e1d74ed0-a842-4fc0-b64d-cbfda50ca4bb",
"Idempotency-Key": "e1d74ed0-a842-4fc0-b64d-cbfda50ca4bb"
}Проверяет, доступны ли предметы перед покупкой.
https://api-market.skinsty.com/market/check| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
sku | Да | string | SKU покупаемого предмета. |
[
{
"sku": "listing_id"
}
][
{
"sku": "listing_id",
"available": true
}
]Создает покупку и запускает очередь трейда.
https://api-market.skinsty.com/market/buy| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
sku | Да | string | SKU предмета. Перед покупкой желательно проверить через /market/check. |
[
{
"sku": "listing_id"
}
]{
"checkoutId": "e1d74ed0-a842-4fc0-b64d-cbfda50ca4bb",
"status": "accepted",
"acceptedItems": [
{
"sku": "listing_id",
"available": true,
"transactionId": "transaction_id",
"offerGroupId": "offer_group_id"
}
],
"unavailableItems": []
}Ставит покупку в очередь и возвращает HTTP 202; итог проверяйте по checkoutId.
https://api-market.skinsty.com/market/checkout| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
X-Checkout-Id / Idempotency-Key | Нет | UUID (headers) | Если заданы оба заголовка, их значения должны совпадать. При повторе используйте ту же пару UUID. |
[
{
"sku": "listing_id"
}
]{
"checkoutId": "e1d74ed0-a842-4fc0-b64d-cbfda50ca4bb",
"status": "queued",
"queuedItems": [
{
"sku": "listing_id",
"available": true
}
],
"unavailableItems": []
}Состояние обработки покупки после постановки в очередь.
https://api-market.skinsty.com/market/checkout/:checkoutId| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
checkoutId | Да | string | Идентификатор покупки. |
Тело запроса не требуется. Параметры ниже передаются в URL.
{
"checkoutId": "e1d74ed0-a842-4fc0-b64d-cbfda50ca4bb"
}{
"checkoutId": "e1d74ed0-a842-4fc0-b64d-cbfda50ca4bb",
"status": "completed",
"result": {
"checkoutId": "e1d74ed0-a842-4fc0-b64d-cbfda50ca4bb",
"status": "accepted",
"acceptedItems": [
{
"sku": "listing_id",
"available": true,
"transactionId": "transaction_id",
"offerGroupId": "offer_group_id"
}
],
"unavailableItems": []
}
}Инвентарь и продажа
Методы для загрузки инвентаря пользователя, выставления предметов на маркет и снятия их с продажи.
Возвращает предметы Steam-инвентаря пользователя с фильтрами и пагинацией.
https://api-market.skinsty.com/inventory| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
provider | Да | string | Игра, для которой загружается инвентарь. |
status | Нет | string | string[] | Статус предметов в инвентаре или на продаже. |
{
"provider": "CSGO",
"page": 1,
"take": 24
}{
"data": [
{
"id": "listing_id",
"sku": "listing_id",
"catalogSku": "catalog_sku",
"originalMarketName": "AK-47 | Redline (Field-Tested)",
"marketSlug": "ak-47-redline-field-tested",
"marketName": {
"first": "AK-47",
"second": "Redline"
},
"provider": "CSGO",
"price": 42.5,
"marketPrice": 45,
"image": "https://cdn.skinsty.com/example-item.png",
"preview": "https://cdn.skinsty.com/example-item.png",
"count": 1,
"tradable": true,
"marketable": true,
"isInMarket": false,
"isCatalog": false,
"float": 0.21,
"stickers": [],
"keychains": [],
"gems": [],
"attributes": [],
"props": [],
"isOwn": true
}
],
"meta": {
"page": 1,
"take": 24,
"itemsCount": 1,
"planItemsCount": 1,
"countWithoutGroup": 1,
"pagesCount": 1,
"hasPrev": false,
"hasNext": false
}
}Запускает обновление инвентаря из Steam.
https://api-market.skinsty.com/inventory/steam-fetch?provider=CSGOТело запроса не требуется. Параметры ниже передаются в URL.
{
"provider": "CSGO"
}{
"status": "queued",
"retryAfter": 20
}Выставляет предметы или меняет цену уже выставленных предложений. Требуется активное расширение.
https://api-market.skinsty.com/inventory/item-to-market| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
items[].itemId | Да | string | ID предмета из инвентаря. |
items[].price | Нет | number | Цена продажи. |
{
"items": [
{
"itemId": "inventory_item_id",
"price": 25.5
}
]
}{
"all": 1,
"market": 1
}Снимает выбранные предметы с продажи.
https://api-market.skinsty.com/inventory/remove-item-from-market{
"items": [
{
"itemId": "inventory_item_id"
}
]
}trueСтатусы сделок
state описывает этап Steam-обмена, displayStatus — состояние для отображения, status — финансовый статус транзакции. Эти значения не взаимозаменяемы.
Этапы и отмены
state: Created, NeedSellerApprove, NeedBuyerApprove, InEscrow, Success, Timeout, Canceled, Finished. displayStatus: created, processing, waiting_seller, waiting_buyer, buyer_declined, seller_declined, declined, trade_error, on_hold, success, buyer_canceled_after_hold, seller_canceled_after_hold, timeout. При отмене учитывайте cancelActor (buyer | seller | system), cancelPhase (before_transfer | after_transfer) и cancelReason.
Финансовый статус
status: Pending | Hold | SUCCESS | FAILED. InEscrow / on_hold означает удержание, а не окончательный расчёт. Возврат и штраф могут приходить отдельными полями returnedAmount, netReturnedAmount, penaltyAmount и compensationAmount.
Активные и недавно завершённые сделки пользователя.
https://api-market.skinsty.com/market/trading| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
type | Нет | purchase | sale | Тип истории; не BUY / SELL. |
{}[
{
"tID": "transaction_id",
"checkoutId": "e1d74ed0-a842-4fc0-b64d-cbfda50ca4bb",
"tradeOfferId": "1234567890",
"type": "buy",
"name": {
"first": "AK-47",
"second": "Redline"
},
"price": 42.5,
"currency": "USD",
"icon": "https://cdn.skinsty.com/example-item.png",
"state": "NeedBuyerApprove",
"displayStatus": "waiting_buyer",
"cancelActor": null,
"cancelPhase": null,
"cancelReason": null,
"createdAt": "2026-10-28T09:00:00.000Z",
"expiredAt": "2026-10-28T09:10:00.000Z",
"item": {
"id": "listing_id",
"sku": "listing_id",
"catalogSku": "catalog_sku",
"originalMarketName": "AK-47 | Redline (Field-Tested)",
"marketSlug": "ak-47-redline-field-tested",
"marketName": {
"first": "AK-47",
"second": "Redline"
},
"provider": "CSGO",
"price": 42.5,
"marketPrice": 45,
"image": "https://cdn.skinsty.com/example-item.png",
"preview": "https://cdn.skinsty.com/example-item.png",
"count": 1,
"tradable": true,
"marketable": true,
"isInMarket": true,
"isCatalog": false,
"float": 0.21,
"stickers": [],
"keychains": [],
"gems": [],
"attributes": [],
"props": []
}
}
]Активные обмены без недавно завершённых.
https://api-market.skinsty.com/market/trade/activeТело запроса не требуется. Параметры ниже передаются в URL.
{}[
{
"tID": "transaction_id",
"checkoutId": "e1d74ed0-a842-4fc0-b64d-cbfda50ca4bb",
"tradeOfferId": "1234567890",
"type": "buy",
"name": "AK-47 | Redline (Field-Tested)",
"price": 42.5,
"currency": "USD",
"icon": "https://cdn.skinsty.com/example-item.png",
"state": "NeedBuyerApprove",
"displayStatus": "waiting_buyer",
"cancelActor": null,
"cancelPhase": null,
"cancelReason": null,
"createdAt": "2026-10-28T09:00:00.000Z",
"expiredAt": "2026-10-28T09:10:00.000Z",
"item": {
"id": "listing_id",
"sku": "listing_id",
"catalogSku": "catalog_sku",
"originalMarketName": "AK-47 | Redline (Field-Tested)",
"marketSlug": "ak-47-redline-field-tested",
"marketName": {
"first": "AK-47",
"second": "Redline"
},
"provider": "CSGO",
"price": 42.5,
"marketPrice": 45,
"image": "https://cdn.skinsty.com/example-item.png",
"preview": "https://cdn.skinsty.com/example-item.png",
"count": 1,
"tradable": true,
"marketable": true,
"isInMarket": true,
"isCatalog": false,
"float": 0.21,
"stickers": [],
"keychains": [],
"gems": [],
"attributes": [],
"props": []
},
"proposePrice": 42.5,
"status": "Pending",
"updatedAt": "2026-10-28T09:01:00.000Z"
}
]Баланс, пополнения и выводы
Текущий баланс и история только пополнений и выводов. Покупки, продажи и сделки отслеживайте в разделе статусов сделок.
Доступный и замороженный баланс
amount — доступный баланс. frozenPurchases — резерв покупок; frozenSales — выручка на удержании; frozenReferrals — реферальные начисления на удержании; frozenWithdrawals — резерв выводов с комиссиями. Их сумма равна frozenTotal. reserved включает покупки и выводы, hold — продажи и реферальные начисления; frozenItems — сумма покупок, продаж и реферальных начислений. Эти агрегаты не нужно прибавлять к категориям. Для истории заморозок отправляйте type: frozen и необязательный frozenCategory: purchase, sale, referral или withdrawal; для выводов — type: withdrawal.
{
"type": "withdrawal",
"page": 1,
"take": 20,
"sort": {
"createdAt": "DESC"
}
}Текущий баланс пользователя.
https://api-market.skinsty.com/market/wallet/balanceТело запроса не требуется. Параметры ниже передаются в URL.
{}{
"amount": 120.5,
"currency": "USD",
"reserved": 35,
"hold": 20,
"frozenPurchases": 25,
"frozenSales": 18,
"frozenReferrals": 2,
"frozenTotal": 55,
"frozenItems": 45,
"frozenWithdrawals": 10
}История пополнений или выводов с обязательным выбором типа в интеграции.
https://api-market.skinsty.com/market/wallet/history| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
type | Да | replenishment | withdrawal | Пополнения или выводы. Значения REFILL / WITHDRAW не используются. |
page / take | Нет | integer | Номер страницы от 1; размер от 1 до 150. |
transactionStatus | Нет | Pending | Hold | SUCCESS | FAILED | Точный регистр значения статуса. |
from / to | Нет | ISO 8601 string | Диапазон дат. |
sort | Нет | { createdAt: "ASC" | "DESC" } | Порядок по времени. |
{
"type": "replenishment",
"page": 1,
"take": 20,
"sort": {
"createdAt": "DESC"
}
}{
"data": [
{
"tID": "deposit_transaction_id",
"type": "refill",
"amount": 50,
"commission": 0,
"total": 50,
"description": "Deposit",
"status": "SUCCESS",
"message": "",
"currency": "USD",
"paymentService": "payment_provider",
"amountBefore": 70.5,
"resolvedAt": "2026-10-28T09:00:00.000Z",
"expiredAt": "2026-10-28T09:00:00.000Z"
}
],
"meta": {
"page": 1,
"take": 20,
"itemsCount": 1,
"pagesCount": 1,
"hasPrev": false,
"hasNext": false
}
}Запросы на покупку и торг
Автопокупка, список запросов пользователя и предложения торга по предметам.
Создает запрос на покупку предмета по заданным фильтрам и цене.
https://api-market.skinsty.com/market/trade/new| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
provider | Да | string | Провайдер предмета. |
price | Да | { from: number; to: number } | Диапазон цены для запроса. |
countToBuy | Да | number | Количество предметов для покупки. |
{
"provider": "CSGO",
"exactMarketName": "AK-47 | Redline (Field-Tested)",
"price": {
"from": 10,
"to": 35
},
"countToBuy": 1
}trueСписок запросов на покупку текущего пользователя.
https://api-market.skinsty.com/market/trade/list{
"page": 1,
"take": 20,
"price": "DESC"
}{
"data": [
{
"id": "autobuy_id",
"countToBuy": 1,
"countBought": 0,
"price": 35,
"currency": "USD",
"active": true,
"createdAt": "2026-10-28T09:00:00.000Z",
"item": {
"id": "listing_id",
"sku": "listing_id",
"catalogSku": "catalog_sku",
"originalMarketName": "AK-47 | Redline (Field-Tested)",
"marketSlug": "ak-47-redline-field-tested",
"marketName": {
"first": "AK-47",
"second": "Redline"
},
"provider": "CSGO",
"price": 42.5,
"marketPrice": 45,
"image": "https://cdn.skinsty.com/example-item.png",
"preview": "https://cdn.skinsty.com/example-item.png",
"count": 1,
"tradable": true,
"marketable": true,
"isInMarket": true,
"isCatalog": false,
"float": 0.21,
"stickers": [],
"keychains": [],
"gems": [],
"attributes": [],
"props": []
},
"minMarketPrice": 42.5,
"minAutoBuyPrice": 30,
"maxAutoBuyPrice": 35
}
],
"meta": {
"page": 1,
"take": 20,
"itemsCount": 1,
"planItemsCount": 1,
"countWithoutGroup": 1,
"pagesCount": 1,
"hasPrev": false,
"hasNext": false
}
}Создает предложение торга по предмету на продаже.
https://api-market.skinsty.com/market/bargain/new| Параметр | Обязательный | Тип | Описание |
|---|---|---|---|
itemId | Да | string | ID предмета на маркете. |
price | Да | number | Предлагаемая цена. |
{
"itemId": "market_item_id",
"price": 18.75
}trueВходящие предложения торга по предметам пользователя.
https://api-market.skinsty.com/market/bargain/income{}{
"data": [
{
"gameType": "CSGO",
"sku": "listing_id",
"item": {
"id": "listing_id",
"sku": "listing_id",
"catalogSku": "catalog_sku",
"originalMarketName": "AK-47 | Redline (Field-Tested)",
"marketSlug": "ak-47-redline-field-tested",
"marketName": {
"first": "AK-47",
"second": "Redline"
},
"provider": "CSGO",
"price": 42.5,
"marketPrice": 45,
"image": "https://cdn.skinsty.com/example-item.png",
"preview": "https://cdn.skinsty.com/example-item.png",
"count": 1,
"tradable": true,
"marketable": true,
"isInMarket": true,
"isCatalog": false,
"float": 0.21,
"stickers": [],
"keychains": [],
"gems": [],
"attributes": [],
"props": []
},
"itemPrice": 42.5,
"currency": "USD",
"proposes": 1,
"status": "Pending"
}
],
"meta": {
"page": 1,
"take": 10,
"itemsCount": 1,
"planItemsCount": 1,
"countWithoutGroup": 1,
"pagesCount": 1,
"hasPrev": false,
"hasNext": false
}
}Принимает предложение торга. Требует активное расширение браузера.
https://api-market.skinsty.com/market/bargain/accept{
"sku": "item_sku",
"userId": "123"
}trueТиповые ошибки
400 Bad Requestнекорректные параметры, расширение офлайн или предмет недоступен.
401 UnauthorizedJWT отсутствует, истёк или сессия недействительна.
403 Forbiddenдействие ограничено правилами безопасности или баном.
404 Not Foundпредмет или checkout не найден.
408 Request Timeoutистекло время ожидания покупки. Проверьте состояние checkout перед повтором.
429 Too Many Requestsпревышено ограничение запросов. Снизьте частоту и выдержите Retry-After, если заголовок присутствует; иначе увеличивайте задержку между попытками.
499 (Skinsty 2FA)требуется корректный код двухфакторной проверки в X-TwoFactorAuth. Это прикладной код Skinsty.
500 Internal Server Errorнепредвиденная ошибка сервера. Повторяйте запрос с увеличивающейся задержкой. После ошибки покупки сначала проверьте checkout; при повторе используйте прежний Idempotency-Key.
502 Bad Gatewayшлюз получил некорректный ответ от сервиса. Повторите запрос с задержкой. Ошибка может прийти от прокси, поэтому тело ответа не обязательно содержит JSON.
503 Service Unavailableсервис временно недоступен, например при прогреве каталога или технических работах. Выдержите Retry-After, если он передан; иначе увеличивайте задержку между попытками.
504 Gateway Timeoutшлюз не дождался ответа сервиса. Результат операции может быть неизвестен. Для покупки сначала проверьте checkout; при повторе используйте прежний Idempotency-Key.