API
Документация API
Начало работы
Все запросы идут на https://api.apiskins.com и требуют ваш ключ в заголовке X-API-KEY. Ответы в JSON; цены в USD.
Неудачный запрос возвращает HTTP-статус и сообщение об ошибке в JSON. Лимиты и ошибки
Весь API также доступен как документ OpenAPI для генераторов кода и ИИ-агентов.
Маркетплейсы
Названия провайдеров для параметра providers и для ответов. У каждого маркетплейса есть предложения; ордера на покупку есть только у отмеченных.
cs_floatCSFloatbuff_163Buff.163youpinYouPin898dmarketОрдера на покупкуDMarketskinportSkinportcs_moneycs.moneymarket_csgoОрдера на покупкуMarket.CSGObuff_marketBuff.MarketwaxpeerWaxpeerlis_skinsLis-skinsskin_baronSkinBaronhalo_skinsHaloSkinswhite_marketWhite.Marketshadow_payShadowPayskinsSKINSskin_swapSkinSwapcs_dealsCS.Dealsloot_farmLoot.farmcs_tradeCS.TRADEtradeitTradeit.ggsteamОрдера на покупкуSteamsihSIH MarketПредложения
Самое дешёвое предложение (самая низкая цена) каждого предмета на каждом отслеживаемом маркетплейсе. Ответы сжимаются gzip для клиентов, которые это поддерживают, поэтому все предметы всех маркетплейсов приходят одним запросом.
Мы отслеживаем скины оружия (обычные и StatTrak™), ножи, перчатки, кейсы и капсулы, агентов, музыкальные наборы, нашивки, брелоки, значки и пропуска. Сувенирные предметы, наклейки и граффити не отслеживаются.
Предложения многих предметов
/v1/offersСамое дешёвое предложение (самая низкая цена) предметов на каждом маркетплейсе. Укажите до 100 предметов через market_hash_name для пакета или опустите параметр, чтобы получить все выставленные предметы одним ответом. Предмет, которого нет ни на одном маркетплейсе, в ответ не входит.
Параметры
market_hash_namequery, необязательноstringНазвание предмета. Повторите для пакета до 100. Если не указано, все выставленные предметы
providersquery, необязательноstringМаркетплейсы через запятую (см. Маркетплейсы). Если не указано, все
Запрос
type ItemOffers = {
market_hash_name: string;
offers: { provider: string; price: number }[];
};
const API_KEY = process.env.APISKINS_API_KEY!;
const params = new URLSearchParams([
["market_hash_name", "AK-47 | Redline (Field-Tested)"],
["market_hash_name", "AWP | Asiimov (Field-Tested)"],
["providers", "cs_float,buff_163"],
]);
const response = await fetch(`https://api.apiskins.com/v1/offers?${params}`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const offers: ItemOffers[] = await response.json();Ответ 200
[
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"offers": [
{
"provider": "buff_163",
"price": 31.42
},
{
"provider": "cs_float",
"price": 33.1
}
]
}
]- На бесплатной подписке отвечается только Steam: без providers ответ содержит один Steam, а запрос другого маркетплейса получает 403. Платные подписки получают все маркетплейсы.
- Маркетплейс, не продающий предмет, в его предложения не входит.
- Ответы сжимаются gzip для клиентов, которые это поддерживают (любая HTTP-библиотека; для curl добавьте --compressed): все предметы всех маркетплейсов — это около 28 MB JSON и меньше 2 MB в gzip.
Предложения одного предмета
/v1/offers/{market_hash_name}Самое дешёвое предложение одного предмета на каждом маркетплейсе. 404, если его нет ни на одном.
Параметры
market_hash_namepathstringНазвание предмета в URL-кодировке
providersquery, необязательноstringМаркетплейсы через запятую (см. Маркетплейсы). Если не указано, все
Запрос
type ItemOffers = {
market_hash_name: string;
offers: { provider: string; price: number }[];
};
const API_KEY = process.env.APISKINS_API_KEY!;
const market_hash_name = "AK-47 | Redline (Field-Tested)";
const params = new URLSearchParams([
["providers", "cs_float,dmarket"],
]);
const response = await fetch(`https://api.apiskins.com/v1/offers/${encodeURIComponent(market_hash_name)}?${params}`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const offers: ItemOffers = await response.json();Ответ 200
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"offers": [
{
"provider": "buff_163",
"price": 31.42
},
{
"provider": "cs_float",
"price": 33.1
}
]
}- На бесплатной подписке отвечается только Steam: без providers ответ содержит один Steam, а запрос другого маркетплейса получает 403. Платные подписки получают все маркетплейсы.
Ордера на покупку
Самый высокий ордер на покупку каждого предмета на DMarket, Market.CSGO и Steam: за сколько можно продать предмет прямо сейчас. Тот же ключ, тот же 30-дневный лимит и те же сжатые ответы, что и у предложений.
Ордера многих предметов
/v1/ordersСамый высокий ордер на покупку предметов на маркетплейсах, где они есть: DMarket (обновление каждые несколько секунд), Market.CSGO (каждые 15 минут) и Steam (каждый час). Укажите до 100 предметов через market_hash_name для пакета или опустите параметр, чтобы получить все предметы с ордерами одним ответом. Предмет без ордеров в ответ не входит.
Параметры
market_hash_namequery, необязательноstringНазвание предмета. Повторите для пакета до 100. Если не указано, все предметы с ордером
providersquery, необязательноstringМаркетплейсы через запятую: dmarket, market_csgo, steam. Если не указано, все
Запрос
type ItemOrders = {
market_hash_name: string;
orders: { provider: string; price: number }[];
};
const API_KEY = process.env.APISKINS_API_KEY!;
const params = new URLSearchParams([
["market_hash_name", "AK-47 | Redline (Field-Tested)"],
["market_hash_name", "AWP | Asiimov (Field-Tested)"],
["providers", "dmarket,market_csgo"],
]);
const response = await fetch(`https://api.apiskins.com/v1/orders?${params}`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const orders: ItemOrders[] = await response.json();Ответ 200
[
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"orders": [
{
"provider": "dmarket",
"price": 24.51
},
{
"provider": "market_csgo",
"price": 23.822
}
]
}
]- На бесплатной подписке отвечается только Steam: без providers ответ содержит один Steam, а запрос другого маркетплейса получает 403. Платные подписки получают все маркетплейсы.
- Маркетплейс без ордера на предмет в его ордера не входит.
- Сувенирные предметы, наклейки и граффити включены. Как и запросы предложений, каждый отвеченный запрос учитывается в 30-дневном лимите, а ответы сжимаются так же.
Ордера одного предмета
/v1/orders/{market_hash_name}Самый высокий ордер одного предмета на каждом маркетплейсе. 404, если ордеров нет нигде.
Параметры
market_hash_namepathstringНазвание предмета в URL-кодировке
providersquery, необязательноstringМаркетплейсы через запятую: dmarket, market_csgo, steam. Если не указано, все
Запрос
type ItemOrders = {
market_hash_name: string;
orders: { provider: string; price: number }[];
};
const API_KEY = process.env.APISKINS_API_KEY!;
const market_hash_name = "AK-47 | Redline (Field-Tested)";
const response = await fetch(`https://api.apiskins.com/v1/orders/${encodeURIComponent(market_hash_name)}`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const orders: ItemOrders = await response.json();Ответ 200
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"orders": [
{
"provider": "dmarket",
"price": 24.51
},
{
"provider": "market_csgo",
"price": 23.822
}
]
}- На бесплатной подписке отвечается только Steam: без providers ответ содержит один Steam, а запрос другого маркетплейса получает 403. Платные подписки получают все маркетплейсы.
История продаж
Сводка продаж каждого предмета на DMarket и Market.CSGO: сколько продано, медианная и средняя цена за последние 7, 15, 30 и 90 дней и сколько обычно продаётся за 15 дней. Тот же ключ, тот же 30-дневный лимит и такие же сжатые gzip ответы, как у предложений.
Сводка продаж многих предметов
/v1/sales/summaryСводка продаж предметов на каждой площадке: DMarket (обновляется раз в несколько часов) и Market.CSGO (примерно раз в час). Укажите до 100 предметов через market_hash_name для пакетного запроса или опустите параметр, чтобы получить одним ответом все предметы, проданные за последние 90 дней. Предмет без продаж за последние 90 дней в ответ не попадает.
Параметры
market_hash_namequery, необязательноstringНазвание предмета. Повторите для пакета до 100. Если опустить, все предметы, проданные за последние 90 дней
providersquery, необязательноstringМаркетплейсы через запятую: dmarket, market_csgo. Если не указано, оба
Запрос
type SalesPeriod = { sales: number; median: number | null; avg: number | null };
type SalesSummary = {
market_hash_name: string;
sales: {
provider: string;
last_7d: SalesPeriod;
last_15d: SalesPeriod;
last_30d: SalesPeriod;
last_90d: SalesPeriod;
index_volume_units: number;
index_volume_dollars: number;
updated_at: string;
}[];
};
const API_KEY = process.env.APISKINS_API_KEY!;
const params = new URLSearchParams([
["market_hash_name", "AK-47 | Redline (Field-Tested)"],
["market_hash_name", "AWP | Asiimov (Field-Tested)"],
["providers", "dmarket,market_csgo"],
]);
const response = await fetch(`https://api.apiskins.com/v1/sales/summary?${params}`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const sales: SalesSummary[] = await response.json();Ответ 200
[
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"sales": [
{
"provider": "market_csgo",
"last_7d": {
"sales": 154,
"median": 28.63,
"avg": 28.76
},
"last_15d": {
"sales": 310,
"median": 28.7,
"avg": 28.9
},
"last_30d": {
"sales": 620,
"median": 28.8,
"avg": 29.12
},
"last_90d": {
"sales": 1850,
"median": 29.1,
"avg": 29.4
},
"index_volume_units": 305.5,
"index_volume_dollars": 8900.25,
"updated_at": "2026-10-28T10:00:00.000Z"
}
]
}
]- Нужна платная подписка: на бесплатной каждый запрос получает 403.
- В каждом периоде sales показывает, сколько предметов продано, а median и avg — их медианную и среднюю цену в USD. Для периода без продаж median и avg равны null.
- index_volume_units (индекс объёма в штуках) и index_volume_dollars (индекс объёма в долларах) показывают, сколько обычно продаётся за 15 дней: последние 90 дней делятся на шесть периодов по 15 дней, период без продаж считается за 0. index_volume_units — медиана количества проданных предметов по периодам, index_volume_dollars — медиана их сумм в USD, поэтому один активный или мёртвый отрезок на них не влияет.
- Сводка рассчитывается после каждого прохода по продажам площадки; когда именно, показывает updated_at.
- Market.CSGO показывает нам не более 6,000 последних продаж предмета, поэтому у самых продаваемых предметов last_90d, index_volume_units и index_volume_dollars могут быть занижены, пока мы не накопим полные 90 дней.
- Фазы Doppler и Gamma Doppler используют общие рыночные названия, поэтому одна запись охватывает все фазы.
- Сувенирные предметы, наклейки и граффити включены. Как и запросы предложений, каждый отвеченный запрос учитывается в 30-дневном лимите, а ответы сжимаются так же.
Сводка продаж одного предмета
/v1/sales/summary/{market_hash_name}Сводка продаж одного предмета на каждой площадке. 404, если ни на одной его не продавали за последние 90 дней.
Параметры
market_hash_namepathstringНазвание предмета в URL-кодировке
providersquery, необязательноstringМаркетплейсы через запятую: dmarket, market_csgo. Если не указано, оба
Запрос
type SalesPeriod = { sales: number; median: number | null; avg: number | null };
type SalesSummary = {
market_hash_name: string;
sales: {
provider: string;
last_7d: SalesPeriod;
last_15d: SalesPeriod;
last_30d: SalesPeriod;
last_90d: SalesPeriod;
index_volume_units: number;
index_volume_dollars: number;
updated_at: string;
}[];
};
const API_KEY = process.env.APISKINS_API_KEY!;
const market_hash_name = "AK-47 | Redline (Field-Tested)";
const response = await fetch(`https://api.apiskins.com/v1/sales/summary/${encodeURIComponent(market_hash_name)}`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const sales: SalesSummary = await response.json();Ответ 200
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"sales": [
{
"provider": "market_csgo",
"last_7d": {
"sales": 154,
"median": 28.63,
"avg": 28.76
},
"last_15d": {
"sales": 310,
"median": 28.7,
"avg": 28.9
},
"last_30d": {
"sales": 620,
"median": 28.8,
"avg": 29.12
},
"last_90d": {
"sales": 1850,
"median": 29.1,
"avg": 29.4
},
"index_volume_units": 305.5,
"index_volume_dollars": 8900.25,
"updated_at": "2026-10-28T10:00:00.000Z"
}
]
}- Нужна платная подписка: на бесплатной каждый запрос получает 403.
Предметы
Что представляет собой каждый предмет CS2: тип, оружие, износ и диапазон float, качество, редкость, коллекции и кейсы. Для фильтрации предметов на маркетплейсе, по тому же market_hash_name, что и у предложений и ордеров. Все скины, наклейки, агенты, брелоки, кейсы и остальное, включая сувенирные. Как и запросы предложений, каждый отвеченный запрос учитывается в 30-дневном лимите.
Много предметов
/v1/itemsЧто представляет собой каждый предмет CS2: тип, оружие, износ и диапазон float, качество, редкость, коллекции и кейсы, одна запись на market_hash_name, для фильтрации предметов на маркетплейсе. Все предметы одним ответом (около 2 МБ в gzip), страница через limit и offset или до 100 по market_hash_name. Фильтры сужают оба варианта.
Параметры
market_hash_namequery, необязательноstringНазвание предмета. Повторите для пакета до 100. Если не указано, все предметы
typequery, необязательноstringskin, sticker, agent, charm, patch, music_kit, graffiti, collectible, container. Через запятую, любой из них
weaponquery, необязательноstringId оружия: awp, ak-47, karambit, sport-gloves.... Через запятую, любой из них
collectionquery, необязательноstringId коллекций: the-dust-2-collection.... Через запятую, любой из них
containerquery, необязательноstringId кейсов и наборов, из которых он выпадает: dreams-nightmares-case.... Через запятую, любой из них
rarityquery, необязательноstringId редкости: consumer, industrial, mil-spec, restricted, classified, covert, contraband, а также для наклеек и агентов (high, remarkable, exotic, extraordinary, distinguished, exceptional, superior, master). Через запятую, любой из них
qualityquery, необязательноstringNormal, StatTrak™, Souvenir, ★ или ★ StatTrak™. Через запятую, любой из них
limitquery, необязательноnumberСколько предметов вернуть максимум, от 1. Если не указано — все предметы, а limit в ответе равен их числу
offsetquery, необязательноnumberСколько предметов пропустить, для следующей страницы
Запрос
type ItemsPage = {
total: number;
limit: number;
offset: number;
items: Item[];
};
type Item = {
market_hash_name: string;
name: string;
type: "skin" | "sticker" | "agent" | "charm" | "patch" | "music_kit" | "graffiti" | "collectible" | "container";
category: string | null;
weapon: { id: string; name: string } | null;
pattern: string | null;
wear: { id: "fn" | "mw" | "ft" | "ww" | "bs"; name: string } | null;
min_float: number | null;
max_float: number | null;
quality: "Normal" | "StatTrak™" | "Souvenir" | "★" | "★ StatTrak™";
stattrak: boolean;
souvenir: boolean;
rarity: { id: string; name: string; color: string } | null;
label: string | null;
team: "both" | "ct" | "t" | null;
collections: { id: string; name: string }[];
containers: { id: string; name: string }[];
details: Record<string, string>;
image: string | null;
url: string;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const params = new URLSearchParams([
["type", "skin"],
["weapon", "awp"],
["quality", "StatTrak™"],
["limit", "1"],
]);
const response = await fetch(`https://api.apiskins.com/v1/items?${params}`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const page: ItemsPage = await response.json();Ответ 200
{
"total": 120,
"limit": 1,
"offset": 0,
"items": [
{
"market_hash_name": "StatTrak™ AWP | Asiimov (Field-Tested)",
"name": "AWP | Asiimov",
"type": "skin",
"category": "rifles",
"weapon": {
"id": "awp",
"name": "AWP"
},
"pattern": "Asiimov",
"wear": {
"id": "ft",
"name": "Field-Tested"
},
"min_float": 0.18,
"max_float": 0.38,
"quality": "StatTrak™",
"stattrak": true,
"souvenir": false,
"rarity": {
"id": "covert",
"name": "Covert",
"color": "#eb4b4b"
},
"label": null,
"team": "both",
"collections": [
{
"id": "the-phoenix-collection",
"name": "The Phoenix Collection"
}
],
"containers": [
{
"id": "operation-phoenix-weapon-case",
"name": "Operation Phoenix Weapon Case"
}
],
"details": {},
"image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLwiYbf_jdk7uW-V6V-Kf2cGFidxOp_pewnF3nhxEt0sGnSzN76dH3GOg9xC8FyEORftRe-x9PuYurq71bW3d8UnjK-0H0YSTpMGQ/512fx384f",
"url": "https://apiskins.com/skins/awp/asiimov"
}
]
}- Нужна платная подписка: на бесплатной каждый запрос получает 403.
- type равен skin для всех скинов оружия, ножей и перчаток (их различает category: knives, gloves, rifles, pistols, smgs, heavy, equipment) и container для кейсов, капсул и наборов (category — их вид: case, sticker_capsule, souvenir_package...).
- min_float и max_float — возможный float предмета: собственный диапазон скина в пределах износа. null для предметов без float.
- details содержит остальные данные: Tournament, Team, Player и Effect наклейки, Side агента, дату Released контейнера.
- Фазы Doppler и Gamma Doppler используют общие рыночные названия, поэтому одна запись охватывает все фазы.
- Как и запросы предложений, каждый отвеченный запрос учитывается в 30-дневном лимите, сколько бы предметов он ни содержал, а ответы так же сжимаются gzip.
Один предмет
/v1/items/{market_hash_name}Что представляет собой один предмет. 404, если предмета с таким названием нет.
Параметры
market_hash_namepathstringНазвание предмета в URL-кодировке
Запрос
type Item = {
market_hash_name: string;
name: string;
type: "skin" | "sticker" | "agent" | "charm" | "patch" | "music_kit" | "graffiti" | "collectible" | "container";
category: string | null;
weapon: { id: string; name: string } | null;
pattern: string | null;
wear: { id: "fn" | "mw" | "ft" | "ww" | "bs"; name: string } | null;
min_float: number | null;
max_float: number | null;
quality: "Normal" | "StatTrak™" | "Souvenir" | "★" | "★ StatTrak™";
stattrak: boolean;
souvenir: boolean;
rarity: { id: string; name: string; color: string } | null;
label: string | null;
team: "both" | "ct" | "t" | null;
collections: { id: string; name: string }[];
containers: { id: string; name: string }[];
details: Record<string, string>;
image: string | null;
url: string;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const market_hash_name = "StatTrak™ AWP | Asiimov (Field-Tested)";
const response = await fetch(`https://api.apiskins.com/v1/items/${encodeURIComponent(market_hash_name)}`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const item: Item = await response.json();Ответ 200
{
"market_hash_name": "StatTrak™ AWP | Asiimov (Field-Tested)",
"name": "AWP | Asiimov",
"type": "skin",
"category": "rifles",
"weapon": {
"id": "awp",
"name": "AWP"
},
"pattern": "Asiimov",
"wear": {
"id": "ft",
"name": "Field-Tested"
},
"min_float": 0.18,
"max_float": 0.38,
"quality": "StatTrak™",
"stattrak": true,
"souvenir": false,
"rarity": {
"id": "covert",
"name": "Covert",
"color": "#eb4b4b"
},
"label": null,
"team": "both",
"collections": [
{
"id": "the-phoenix-collection",
"name": "The Phoenix Collection"
}
],
"containers": [
{
"id": "operation-phoenix-weapon-case",
"name": "Operation Phoenix Weapon Case"
}
],
"details": {},
"image": "https://community.akamai.steamstatic.com/economy/image/i0CoZ81Ui0m-9KwlBY1L_18myuGuq1wfhWSaZgMttyVfPaERSR0Wqmu7LAocGIGz3UqlXOLrxM-vMGmW8VNxu5Dx60noTyLwiYbf_jdk7uW-V6V-Kf2cGFidxOp_pewnF3nhxEt0sGnSzN76dH3GOg9xC8FyEORftRe-x9PuYurq71bW3d8UnjK-0H0YSTpMGQ/512fx384f",
"url": "https://apiskins.com/skins/awp/asiimov"
}- Нужна платная подписка: на бесплатной каждый запрос получает 403.
Робот для DMarket
Управляйте предложениями и ордерами DMarket тем же ключом. Аккаунты и их API-ключи DMarket добавляются только на странице робота, а не через API. Маршрутам робота нужна платная подписка; они учитываются только в поминутном лимите, но не в 30-дневном.
- Предложения: любое количество на аккаунт. Ордера («таргеты» DMarket): до 100 на аккаунт, собственный лимит DMarket.
- DMarket не позволяет менять цену ордера: робот заменяет ордер новым с новой ценой.
Аккаунты и лимиты
/v1/robots/dmarketВаши аккаунты DMarket в роботе (подключённые API-ключами DMarket на странице робота) и лимиты вашей подписки для него.
Запрос
type Robot = {
robot: string;
name: string;
marketplace: string;
limits: { accounts: number; offers_per_account: number | null; orders_per_account: number | null };
accounts: { id: string; name: string; paused: boolean; enabled: boolean; balance: number | null; note: string | null; error: string | null; checked_at: string | null }[];
};
const API_KEY = process.env.APISKINS_API_KEY!;
const response = await fetch("https://api.apiskins.com/v1/robots/dmarket", {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const robot: Robot = await response.json();Ответ 200
{
"robot": "dmarket",
"name": "Robot for DMarket",
"marketplace": "DMarket",
"limits": {
"accounts": 5,
"offers_per_account": null,
"orders_per_account": 100
},
"accounts": [
{
"id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"name": "Main",
"paused": false,
"enabled": true,
"balance": 123.45,
"note": null,
"error": null,
"checked_at": "2026-10-15T08:40:00.000Z"
}
]
}- Лимит null означает отсутствие нашего лимита.
- paused: аккаунт сверх лимита аккаунтов подписки; его предложения и ордера ждут.
- enabled: false означает, что это выключено на странице робота: робот больше не двигает цену, позиция остаётся на маркетплейсе по последней цене и всё ещё учитывается в лимитах.
Инвентарь аккаунта
/v1/robots/dmarket/accounts/{account_id}/inventoryПредметы в инвентаре DMarket аккаунта с asset_id для продажи каждого. sellable равен false для предметов, которые DMarket не позволяет выставлять.
Параметры
account_idpathstringId аккаунта из GET /v1/robots/dmarket
Запрос
type InventoryItem = {
asset_id: string;
market_hash_name: string;
sellable: boolean;
suggested_price: number | null;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const account_id = "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11";
const response = await fetch(`https://api.apiskins.com/v1/robots/dmarket/accounts/${encodeURIComponent(account_id)}/inventory`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const inventory: InventoryItem[] = await response.json();Ответ 200
[
{
"asset_id": "4c1d8e2f-0b6a-4a51-9f3e-2d7c8b1a6e05",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"sellable": true,
"suggested_price": 33.1
}
]Список предложений
/v1/robots/dmarket/offersВаши предложения на DMarket на всех аккаунтах, сначала самые старые.
Запрос
type Offer = {
id: string;
account_id: string;
asset_id: string;
market_hash_name: string;
min_price: number;
max_price: number;
enabled: boolean;
price: number | null;
status: "pending" | "active" | "paused" | "sold" | "closed" | "gone";
error: string | null;
updated_at: string | null;
created_at: string;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const response = await fetch("https://api.apiskins.com/v1/robots/dmarket/offers", {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const offers: Offer[] = await response.json();Ответ 200
[
{
"id": "b3a90c55-7e1f-4c1b-8d2e-55a1c9e04f7a",
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"asset_id": "4c1d8e2f-0b6a-4a51-9f3e-2d7c8b1a6e05",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"min_price": 30,
"max_price": 40,
"enabled": true,
"price": 31.99,
"status": "active",
"error": null,
"updated_at": "2026-10-15T08:40:00.000Z",
"created_at": "2026-10-14T12:00:00.000Z"
}
]Выставить предложение или обновить его
/v1/robots/dmarket/offersВыставляет предмет или перезаписывает цены его существующего предложения, которое ищется по asset_id. Робот выставляет предмет на DMarket и держит его самым дешёвым предложением, не ниже min_price. Без конкурентов продаёт по max_price. Новые цены предложения применяются за секунды или когда цена разблокируется: изменённая роботом цена держится 15 минут.
Параметры
asset_idbodystringId предмета на DMarket из инвентаря аккаунта
min_pricebodynumberUSD, максимум два знака после запятой
max_pricebodynumberUSD, максимум два знака после запятой
account_idbody, необязательноstringАккаунт, которому принадлежит предмет. Обязателен при выставлении
market_hash_namebody, необязательноstringНазвание предмета. Обязательно при выставлении
Запрос
type Offer = {
id: string;
account_id: string;
asset_id: string;
market_hash_name: string;
min_price: number;
max_price: number;
enabled: boolean;
price: number | null;
status: "pending" | "active" | "paused" | "sold" | "closed" | "gone";
error: string | null;
updated_at: string | null;
created_at: string;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const response = await fetch("https://api.apiskins.com/v1/robots/dmarket/offers", {
method: "POST",
headers: { "X-API-KEY": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"asset_id": "4c1d8e2f-0b6a-4a51-9f3e-2d7c8b1a6e05",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"min_price": 30,
"max_price": 40
}),
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const offer: Offer = await response.json();Ответ 200
{
"id": "b3a90c55-7e1f-4c1b-8d2e-55a1c9e04f7a",
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"asset_id": "4c1d8e2f-0b6a-4a51-9f3e-2d7c8b1a6e05",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"min_price": 30,
"max_price": 40,
"enabled": true,
"price": 31.99,
"status": "active",
"error": null,
"updated_at": "2026-10-15T08:40:00.000Z",
"created_at": "2026-10-14T12:00:00.000Z"
}Удалить предложение
/v1/robots/dmarket/offersЗабывает предложение: робот больше его не двигает, а предмет остаётся в продаже на DMarket по последней цене.
Параметры
asset_idquerystringId предмета на DMarket из инвентаря аккаунта
Запрос
type Removed = { removed: boolean };
const API_KEY = process.env.APISKINS_API_KEY!;
const params = new URLSearchParams([
["asset_id", "4c1d8e2f-0b6a-4a51-9f3e-2d7c8b1a6e05"],
]);
const response = await fetch(`https://api.apiskins.com/v1/robots/dmarket/offers?${params}`, {
method: "DELETE",
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const result: Removed = await response.json();Ответ 200
{
"removed": true
}- removed равен false, если у робота не было такого предложения.
Список ордеров
/v1/robots/dmarket/ordersВаши ордера на покупку на DMarket на всех аккаунтах, сначала самые старые.
Запрос
type Order = {
id: string;
account_id: string;
market_hash_name: string;
amount: number;
min_price: number;
max_price: number;
enabled: boolean;
price: number | null;
status: "pending" | "active" | "paused" | "closed" | "gone";
placed: boolean;
error: string | null;
updated_at: string | null;
created_at: string;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const response = await fetch("https://api.apiskins.com/v1/robots/dmarket/orders", {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const orders: Order[] = await response.json();Ответ 200
[
{
"id": "0d7e4b2c-91aa-4f63-b2e8-7c35e1d8a904",
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"amount": 2,
"min_price": 25,
"max_price": 30,
"enabled": true,
"price": 28.51,
"status": "active",
"placed": true,
"error": null,
"updated_at": "2026-10-15T08:40:00.000Z",
"created_at": "2026-10-14T12:00:00.000Z"
}
]Разместить ордер или обновить его
/v1/robots/dmarket/ordersРазмещает ваш ордер на предмет на аккаунте или перезаписывает цены существующего. Робот размещает ордер DMarket («таргет») и держит его самым высоким, не выше max_price. Без конкурентов ставит min_price. DMarket разрешает до 100 ордеров на аккаунт. DMarket не может менять цену ордера: каждая новая цена — новый таргет вместо старого. Робот покупает по 1 предмету, пока не наберёт нужное количество, а ордер выставляется, только если его цена не превышает баланс аккаунта.
Параметры
market_hash_namebodystringНазвание предмета
min_pricebodynumberUSD, максимум два знака после запятой
max_pricebodynumberUSD, максимум два знака после запятой
account_idbody, необязательноstringАккаунт для покупки. Можно опустить, если аккаунт один
amountbody, необязательноnumberСколько купить, от 1 до 100. Обязательно при размещении; меняется только до размещения
Запрос
type Order = {
id: string;
account_id: string;
market_hash_name: string;
amount: number;
min_price: number;
max_price: number;
enabled: boolean;
price: number | null;
status: "pending" | "active" | "paused" | "closed" | "gone";
placed: boolean;
error: string | null;
updated_at: string | null;
created_at: string;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const response = await fetch("https://api.apiskins.com/v1/robots/dmarket/orders", {
method: "POST",
headers: { "X-API-KEY": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"amount": 2,
"min_price": 25,
"max_price": 30
}),
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const order: Order = await response.json();Ответ 200
{
"id": "0d7e4b2c-91aa-4f63-b2e8-7c35e1d8a904",
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"amount": 2,
"min_price": 25,
"max_price": 30,
"enabled": true,
"price": 28.51,
"status": "active",
"placed": true,
"error": null,
"updated_at": "2026-10-15T08:40:00.000Z",
"created_at": "2026-10-14T12:00:00.000Z"
}- Количество размещённого ордера только уменьшается по мере исполнения: удалите его и добавьте снова, чтобы купить больше.
Удалить ордер
/v1/robots/dmarket/ordersЗабывает ордер: робот больше его не двигает, а ордер остаётся на DMarket по последней цене.
Параметры
market_hash_namequerystringНазвание предмета
account_idquery, необязательноstringАккаунт, на котором находится ордер. Можно опустить, если аккаунт один
Запрос
type Removed = { removed: boolean };
const API_KEY = process.env.APISKINS_API_KEY!;
const params = new URLSearchParams([
["market_hash_name", "AK-47 | Redline (Field-Tested)"],
["account_id", "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11"],
]);
const response = await fetch(`https://api.apiskins.com/v1/robots/dmarket/orders?${params}`, {
method: "DELETE",
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const result: Removed = await response.json();Ответ 200
{
"removed": true
}- removed равен false, если у робота не было такого ордера.
Монитор
/v1/robots/dmarket/monitorВсе предметы на DMarket с прибылью от того, чтобы стать лучшим ордером (buy_price, на 1 цент выше лучшего ордера), а затем самым дешёвым предложением (sell_price, на 1 цент ниже самого дешёвого), после комиссии DMarket на этот предмет. Лучшие ордера и предложения DMarket обновляются каждые несколько секунд, цены других маркетплейсов — так часто, как обновляется каждый из них, от раза в 5 минут до раза в час. Применяются только отправленные фильтры: без них — все предметы с ордером, сначала самые прибыльные. Предмет без предложения на DMarket тоже показывается, с best_offer, sell_price, profit и margin_percent равными null: фильтры прибыли, маржи и разрыва его пропускают. dollar_volume и units_volume — сколько предмет обычно продаётся на DMarket за 15 дней: медиана за последние 90 дней, разбитых на шесть отрезков по 15 дней.
Параметры
qquery, необязательноstringСлова, которые все должны быть в названии
min_pricequery, необязательноnumberМинимальная цена покупки, USD
max_pricequery, необязательноnumberМаксимальная цена покупки, USD
min_profitquery, необязательноnumberМинимальная прибыль после комиссии, USD
min_marginquery, необязательноnumberМинимальная маржа, процент от цены покупки
min_gapquery, необязательноnumberМинимальный разрыв между лучшим ордером и самым дешёвым предложением, USD
min_liquidityquery, необязательноnumberМинимальная ликвидность, от 0 до 100
max_feequery, необязательноnumberМаксимальная комиссия, процент
min_units_volumequery, необязательноnumberМинимум предметов, проданных за типичные 15 дней на DMarket (units_volume)
min_dollar_volumequery, необязательноnumberМинимум USD продаж за типичные 15 дней на DMarket (dollar_volume)
hidequery, необязательноstringЧерез запятую: stickers, graffiti, souvenir, stattrak
comparequery, необязательноstringДругие маркетплейсы и на сколько процентов выше цены покупки должна быть их самая низкая цена: buff_163:5,cs_float:3. Маркетплейс, не продающий предмет, пропускается. Их цены возвращаются в compare
compare_ordersquery, необязательноstringТо же с самыми высокими ордерами других маркетплейсов: market_csgo:5 (Market.CSGO или Steam). Их ордера возвращаются в compare_orders
sortquery, необязательноstringprofit (по умолчанию), margin, liquidity, price или volume (dollar_volume)
limitquery, необязательноnumberПредметов в ответе, от 1 до 100 (100, если не указано)
offsetquery, необязательноnumberСколько предметов пропустить, для следующей страницы
Запрос
type Monitor = {
total: number;
limit: number;
offset: number;
items: {
market_hash_name: string;
buy_price: number;
sell_price: number | null;
best_order: number;
best_offer: number | null;
fee_percent: number;
profit: number | null;
margin_percent: number | null;
liquidity: number | null;
dollar_volume: number | null;
units_volume: number | null;
compare: Record<string, { price: number; percent_over_buy: number }>;
compare_orders: Record<string, { price: number; percent_over_buy: number }>;
}[];
};
const API_KEY = process.env.APISKINS_API_KEY!;
const params = new URLSearchParams([
["min_margin", "5"],
["min_liquidity", "50"],
["hide", "stickers,souvenir"],
["compare", "buff_163:5"],
["limit", "1"],
]);
const response = await fetch(`https://api.apiskins.com/v1/robots/dmarket/monitor?${params}`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const monitor: Monitor = await response.json();Ответ 200
{
"total": 412,
"limit": 1,
"offset": 0,
"items": [
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"buy_price": 24.6,
"sell_price": 27.49,
"best_order": 24.59,
"best_offer": 27.5,
"fee_percent": 5,
"profit": 1.52,
"margin_percent": 6.16,
"liquidity": 87,
"dollar_volume": 1830.4,
"units_volume": 74.5,
"compare": {
"buff_163": {
"price": 26.1,
"percent_over_buy": 6.1
}
},
"compare_orders": {}
}
]
}- Нужна платная подписка, как и для всех маршрутов робота. В отличие от них, каждый отвеченный запрос также учитывается в 30-дневном лимите, как запросы предложений, с теми же заголовками X-Usage-Limit и X-Usage-Remaining.
Статусы предложений и ордеров
pending- Ещё не выставлено и не размещено
active- На маркетплейсе, удерживается первым в пределах ваших лимитов. Изменённая роботом цена держится 15 минут; затем он следит за рынком каждую секунду
paused- Сверх предложений, ордеров или аккаунтов подписки: ждёт, пока вы повысите тариф или удалите другие
sold- Предложения: продано
closed- Предложения: снято с продажи или предмет покинул инвентарь. Ордера: куплено полностью или удалено. В error указана причина, если она есть
Робот для market.csgo.com
Управляйте предложениями и ордерами Market.CSGO тем же ключом. Аккаунты и их API-ключи Market.CSGO добавляются только на странице робота, а не через API. Маршрутам робота нужна платная подписка; они учитываются только в поминутном лимите, но не в 30-дневном.
- Предложения: любое количество на аккаунт. Ордера: до 100 на аккаунт, по одному на предмет, изменяются на месте.
- Валюта аккаунта на Market.CSGO должна быть USD. Предложения показываются, только пока вы онлайн в приложении или расширении браузера Market.CSGO.
Аккаунты и лимиты
/v1/robots/market-csgoВаши аккаунты Market.CSGO в роботе (подключённые API-ключами Market.CSGO на странице робота) и лимиты вашей подписки для него. Поле note аккаунта сообщает, что мешает продаже, например отсутствие онлайн.
Запрос
type Robot = {
robot: string;
name: string;
marketplace: string;
limits: { accounts: number; offers_per_account: number | null; orders_per_account: number | null };
accounts: { id: string; name: string; paused: boolean; enabled: boolean; balance: number | null; note: string | null; error: string | null; checked_at: string | null }[];
};
const API_KEY = process.env.APISKINS_API_KEY!;
const response = await fetch("https://api.apiskins.com/v1/robots/market-csgo", {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const robot: Robot = await response.json();Ответ 200
{
"robot": "market-csgo",
"name": "Robot for market.csgo.com",
"marketplace": "Market.CSGO",
"limits": {
"accounts": 5,
"offers_per_account": null,
"orders_per_account": 100
},
"accounts": [
{
"id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"name": "Main",
"paused": false,
"enabled": true,
"balance": 123.45,
"note": null,
"error": null,
"checked_at": "2026-10-15T08:40:00.000Z"
}
]
}- Лимит null означает отсутствие нашего лимита.
- paused: аккаунт сверх лимита аккаунтов подписки; его предложения и ордера ждут.
- enabled: false означает, что это выключено на странице робота: робот больше не двигает цену, позиция остаётся на маркетплейсе по последней цене и всё ещё учитывается в лимитах.
Инвентарь аккаунта
/v1/robots/market-csgo/accounts/{account_id}/inventoryПредметы Steam, которые Market.CSGO может продать с аккаунта, с asset_id для продажи каждого.
Параметры
account_idpathstringId аккаунта из GET /v1/robots/market-csgo
Запрос
type InventoryItem = {
asset_id: string;
market_hash_name: string;
sellable: boolean;
suggested_price: number | null;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const account_id = "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11";
const response = await fetch(`https://api.apiskins.com/v1/robots/market-csgo/accounts/${encodeURIComponent(account_id)}/inventory`, {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const inventory: InventoryItem[] = await response.json();Ответ 200
[
{
"asset_id": "38215462179",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"sellable": true,
"suggested_price": 33.1
}
]Список предложений
/v1/robots/market-csgo/offersВаши предложения на Market.CSGO на всех аккаунтах, сначала самые старые.
Запрос
type Offer = {
id: string;
account_id: string;
asset_id: string;
market_hash_name: string;
min_price: number;
max_price: number;
enabled: boolean;
price: number | null;
status: "pending" | "active" | "paused" | "sold" | "closed" | "gone";
error: string | null;
updated_at: string | null;
created_at: string;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const response = await fetch("https://api.apiskins.com/v1/robots/market-csgo/offers", {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const offers: Offer[] = await response.json();Ответ 200
[
{
"id": "b3a90c55-7e1f-4c1b-8d2e-55a1c9e04f7a",
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"asset_id": "38215462179",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"min_price": 30,
"max_price": 40,
"enabled": true,
"price": 31.99,
"status": "active",
"error": null,
"updated_at": "2026-10-15T08:40:00.000Z",
"created_at": "2026-10-14T12:00:00.000Z"
}
]Выставить предложение или обновить его
/v1/robots/market-csgo/offersВыставляет предмет или перезаписывает цены его существующего предложения, которое ищется по asset_id. Робот выставляет предмет на Market.CSGO и держит его самым дешёвым предложением, не ниже min_price. Без конкурентов продаёт по max_price. Предложения показываются, только пока аккаунт онлайн в приложении или расширении браузера Market.CSGO. Новые цены применяются за секунды или когда цена разблокируется: изменённая роботом цена держится 15 минут.
Параметры
asset_idbodystringSteam asset id предмета из инвентаря аккаунта
min_pricebodynumberUSD, максимум два знака после запятой
max_pricebodynumberUSD, максимум два знака после запятой
account_idbody, необязательноstringАккаунт, которому принадлежит предмет. Обязателен при выставлении
market_hash_namebody, необязательноstringНазвание предмета. Обязательно при выставлении
Запрос
type Offer = {
id: string;
account_id: string;
asset_id: string;
market_hash_name: string;
min_price: number;
max_price: number;
enabled: boolean;
price: number | null;
status: "pending" | "active" | "paused" | "sold" | "closed" | "gone";
error: string | null;
updated_at: string | null;
created_at: string;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const response = await fetch("https://api.apiskins.com/v1/robots/market-csgo/offers", {
method: "POST",
headers: { "X-API-KEY": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"asset_id": "38215462179",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"min_price": 30,
"max_price": 40
}),
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const offer: Offer = await response.json();Ответ 200
{
"id": "b3a90c55-7e1f-4c1b-8d2e-55a1c9e04f7a",
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"asset_id": "38215462179",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"min_price": 30,
"max_price": 40,
"enabled": true,
"price": 31.99,
"status": "active",
"error": null,
"updated_at": "2026-10-15T08:40:00.000Z",
"created_at": "2026-10-14T12:00:00.000Z"
}Удалить предложение
/v1/robots/market-csgo/offersЗабывает предложение: робот больше его не двигает, а предмет остаётся в продаже на Market.CSGO по последней цене.
Параметры
asset_idquerystringSteam asset id предмета из инвентаря аккаунта
Запрос
type Removed = { removed: boolean };
const API_KEY = process.env.APISKINS_API_KEY!;
const params = new URLSearchParams([
["asset_id", "38215462179"],
]);
const response = await fetch(`https://api.apiskins.com/v1/robots/market-csgo/offers?${params}`, {
method: "DELETE",
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const result: Removed = await response.json();Ответ 200
{
"removed": true
}- removed равен false, если у робота не было такого предложения.
Список ордеров
/v1/robots/market-csgo/ordersВаши ордера на покупку на Market.CSGO на всех аккаунтах, сначала самые старые.
Запрос
type Order = {
id: string;
account_id: string;
market_hash_name: string;
amount: number;
min_price: number;
max_price: number;
enabled: boolean;
price: number | null;
status: "pending" | "active" | "paused" | "closed" | "gone";
placed: boolean;
error: string | null;
updated_at: string | null;
created_at: string;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const response = await fetch("https://api.apiskins.com/v1/robots/market-csgo/orders", {
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const orders: Order[] = await response.json();Ответ 200
[
{
"id": "0d7e4b2c-91aa-4f63-b2e8-7c35e1d8a904",
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"amount": 2,
"min_price": 25,
"max_price": 30,
"enabled": true,
"price": 28.51,
"status": "active",
"placed": true,
"error": null,
"updated_at": "2026-10-15T08:40:00.000Z",
"created_at": "2026-10-14T12:00:00.000Z"
}
]Разместить ордер или обновить его
/v1/robots/market-csgo/ordersРазмещает ваш ордер на предмет на аккаунте или перезаписывает цены существующего. Робот размещает ордер Market.CSGO и держит его самым высоким, не выше max_price. Без конкурентов ставит min_price. Market.CSGO разрешает один ордер на предмет и до 100 ордеров на аккаунт и меняет цену ордера на месте.
Параметры
market_hash_namebodystringНазвание предмета
min_pricebodynumberUSD, максимум два знака после запятой
max_pricebodynumberUSD, максимум два знака после запятой
account_idbody, необязательноstringАккаунт для покупки. Можно опустить, если аккаунт один
amountbody, необязательноnumberСколько купить, от 1 до 100. Обязательно при размещении; меняется только до размещения
Запрос
type Order = {
id: string;
account_id: string;
market_hash_name: string;
amount: number;
min_price: number;
max_price: number;
enabled: boolean;
price: number | null;
status: "pending" | "active" | "paused" | "closed" | "gone";
placed: boolean;
error: string | null;
updated_at: string | null;
created_at: string;
};
const API_KEY = process.env.APISKINS_API_KEY!;
const response = await fetch("https://api.apiskins.com/v1/robots/market-csgo/orders", {
method: "POST",
headers: { "X-API-KEY": API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"amount": 2,
"min_price": 25,
"max_price": 30
}),
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const order: Order = await response.json();Ответ 200
{
"id": "0d7e4b2c-91aa-4f63-b2e8-7c35e1d8a904",
"account_id": "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"amount": 2,
"min_price": 25,
"max_price": 30,
"enabled": true,
"price": 28.51,
"status": "active",
"placed": true,
"error": null,
"updated_at": "2026-10-15T08:40:00.000Z",
"created_at": "2026-10-14T12:00:00.000Z"
}- Количество размещённого ордера только уменьшается по мере исполнения: удалите его и добавьте снова, чтобы купить больше.
Удалить ордер
/v1/robots/market-csgo/ordersЗабывает ордер: робот больше его не двигает, а ордер остаётся на Market.CSGO по последней цене.
Параметры
market_hash_namequerystringНазвание предмета
account_idquery, необязательноstringАккаунт, на котором находится ордер. Можно опустить, если аккаунт один
Запрос
type Removed = { removed: boolean };
const API_KEY = process.env.APISKINS_API_KEY!;
const params = new URLSearchParams([
["market_hash_name", "AK-47 | Redline (Field-Tested)"],
["account_id", "6f1c2e0a-41d2-4a8e-9a8c-1f5b2d7e9c11"],
]);
const response = await fetch(`https://api.apiskins.com/v1/robots/market-csgo/orders?${params}`, {
method: "DELETE",
headers: { "X-API-KEY": API_KEY },
});
if (!response.ok) {
throw new Error(`API Skins answered ${response.status}: ${(await response.json()).error}`);
}
const result: Removed = await response.json();Ответ 200
{
"removed": true
}- removed равен false, если у робота не было такого ордера.
Статусы предложений и ордеров
pending- Ещё не выставлено и не размещено
active- На маркетплейсе, удерживается первым в пределах ваших лимитов. Изменённая роботом цена держится 15 минут; затем он следит за рынком каждую секунду
paused- Сверх предложений, ордеров или аккаунтов подписки: ждёт, пока вы повысите тариф или удалите другие
sold- Предложения: продано
closed- Предложения: снято с продажи или предмет покинул инвентарь. Ордера: куплено полностью или удалено. В error указана причина, если она есть
Лимиты и ошибки
Два лимита, оба на подписку. Каждый запрос учитывается в поминутном лимите; запрос сверх него получает 429 с заголовком Retry-After в секундах. Каждый отвеченный запрос предложений, ордеров, продаж, предметов или монитора также учитывается в 30-дневном лимите, сколько бы предметов он ни содержал; счётчик обнуляется каждые 30 дней с начала подписки, а заголовки X-Usage-Limit и X-Usage-Remaining показывают текущее состояние.
| Подписка | Запросы / минута | Запросы предложений и ордеров / 30 дней |
|---|---|---|
| Бесплатно | 60 | 100 |
| Trader | 120 | 5,000 |
| Pro | 300 | 25,000 |
| Business | 300 | 100,000 |
400- Ошибка в запросе: неизвестный провайдер или тип предмета, неверное тело, больше 100 предметов, лимит вне диапазона
401- Ключ отсутствует или неверен
403- Нужна платная подписка: для всех маркетплейсов, кроме Steam, для маршрутов сводки продаж и предметов, а также робота и монитора
404- Нет такого предмета, робота или аккаунта
409- Сейчас невозможно: сверх предложений, ордеров или аккаунтов подписки либо изменение количества размещённого ордера
429- Достигнут поминутный лимит (подождите Retry-After секунд) или 30-дневный лимит
502- Маркетплейс не ответил роботу; попробуйте ещё раз