API
Documentação da API
Primeiros passos
Toda requisição vai para https://api.apiskins.com e precisa da sua chave no cabeçalho X-API-KEY. As respostas são em JSON; os preços, em USD.
Uma requisição que falha responde com um status HTTP e uma mensagem de erro em JSON. Limites e erros
Toda a API também é um documento OpenAPI, para geradores de código e agentes de IA.
Marketplaces
Os nomes dos provedores para usar em providers e esperar nas respostas. Todo marketplace tem ofertas; só os marcados também têm ordens de compra.
cs_floatCSFloatbuff_163Buff.163youpinYouPin898dmarketOrdens de compraDMarketskinportSkinportcs_moneycs.moneymarket_csgoOrdens de compraMarket.CSGObuff_marketBuff.MarketwaxpeerWaxpeerlis_skinsLis-skinsskin_baronSkinBaronhalo_skinsHaloSkinswhite_marketWhite.Marketshadow_payShadowPayskinsSKINSskin_swapSkinSwapcs_dealsCS.Dealsloot_farmLoot.farmcs_tradeCS.TRADEtradeitTradeit.ggsteamOrdens de compraSteamsihSIH MarketOfertas
A oferta mais barata (menor anúncio) de cada item em cada marketplace que acompanhamos. As respostas são compactadas com gzip para clientes que aceitam, então todos os itens de todos os marketplaces vêm em uma requisição.
Acompanhamos skins de armas (normais e StatTrak™), facas, luvas, caixas e cápsulas, agentes, kits de música, emblemas, chaveiros, broches e passes. Itens de lembrança, adesivos e grafites não são acompanhados.
Ofertas de muitos itens
/v1/offersA oferta mais barata (menor anúncio) de itens em cada marketplace. Informe até 100 itens com market_hash_name para um lote, ou deixe de fora para receber todos os itens anunciados em uma resposta. Um item que nenhum marketplace anuncia fica fora da resposta.
Parâmetros
market_hash_namequery, opcionalstringNome de um item. Repita para um lote de até 100. Todos os itens anunciados se omitido
providersquery, opcionalstringMarketplaces separados por vírgula (veja Marketplaces). Todos se omitido
Requisição
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();Resposta 200
[
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"offers": [
{
"provider": "buff_163",
"price": 31.42
},
{
"provider": "cs_float",
"price": 33.1
}
]
}
]- Na assinatura grátis só a Steam é respondida: sem providers, a resposta traz apenas a Steam, e pedir outro marketplace responde 403. As assinaturas pagas recebem todos os marketplaces.
- Um marketplace que não anuncia um item fica fora das ofertas dele.
- As respostas são compactadas com gzip para clientes que aceitam (toda biblioteca HTTP aceita; no curl, adicione --compressed): todos os itens de todos os marketplaces têm cerca de 28 MB de JSON, menos de 2 MB em gzip.
Ofertas de um item
/v1/offers/{market_hash_name}A oferta mais barata de um item em cada marketplace. 404 quando nenhum o anuncia.
Parâmetros
market_hash_namepathstringO nome do item, codificado para URL
providersquery, opcionalstringMarketplaces separados por vírgula (veja Marketplaces). Todos se omitido
Requisição
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();Resposta 200
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"offers": [
{
"provider": "buff_163",
"price": 31.42
},
{
"provider": "cs_float",
"price": 33.1
}
]
}- Na assinatura grátis só a Steam é respondida: sem providers, a resposta traz apenas a Steam, e pedir outro marketplace responde 403. As assinaturas pagas recebem todos os marketplaces.
Ordens de compra
A maior ordem de compra de cada item na DMarket, na Market.CSGO e no Steam: por quanto você pode vender um item agora. A mesma chave, o mesmo limite de 30 dias e as mesmas respostas compactadas das ofertas.
Ordens de compra de muitos itens
/v1/ordersA maior ordem de compra de itens em cada marketplace que as tem: DMarket (atualizada a cada poucos segundos), Market.CSGO (a cada 15 minutos) e Steam (a cada hora). Informe até 100 itens com market_hash_name para um lote, ou deixe de fora para receber todos os itens com ordem em uma resposta. Um item sem ordem em nenhum marketplace fica de fora.
Parâmetros
market_hash_namequery, opcionalstringNome de um item. Repita para um lote de até 100. Todos os itens com ordem de compra se omitido
providersquery, opcionalstringMarketplaces separados por vírgula: dmarket, market_csgo, steam. Todos se omitido
Requisição
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();Resposta 200
[
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"orders": [
{
"provider": "dmarket",
"price": 24.51
},
{
"provider": "market_csgo",
"price": 23.822
}
]
}
]- Na assinatura grátis só a Steam é respondida: sem providers, a resposta traz apenas a Steam, e pedir outro marketplace responde 403. As assinaturas pagas recebem todos os marketplaces.
- Um marketplace sem ordem para um item fica fora das ordens dele.
- Lembranças, adesivos e grafites estão incluídos. Como nas ofertas, cada requisição respondida conta para o limite de 30 dias, e as respostas são compactadas da mesma forma.
Ordens de compra de um item
/v1/orders/{market_hash_name}A maior ordem de compra de um item em cada marketplace. 404 quando nenhum tem ordem para ele.
Parâmetros
market_hash_namepathstringO nome do item, codificado para URL
providersquery, opcionalstringMarketplaces separados por vírgula: dmarket, market_csgo, steam. Todos se omitido
Requisição
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();Resposta 200
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"orders": [
{
"provider": "dmarket",
"price": 24.51
},
{
"provider": "market_csgo",
"price": 23.822
}
]
}- Na assinatura grátis só a Steam é respondida: sem providers, a resposta traz apenas a Steam, e pedir outro marketplace responde 403. As assinaturas pagas recebem todos os marketplaces.
Histórico de vendas
Um resumo das vendas de cada item na DMarket e na Market.CSGO: quantos foram vendidos, o preço mediano e o preço médio nos últimos 7, 15, 30 e 90 dias e quanto costuma vender em 15 dias. A mesma chave, o mesmo limite de 30 dias e as mesmas respostas em gzip das ofertas.
Resumo de vendas de vários itens
/v1/sales/summaryUm resumo das vendas dos itens em cada marketplace: DMarket (atualizada a cada poucas horas) e Market.CSGO (mais ou menos a cada hora). Informe até 100 itens com market_hash_name para um lote, ou omita para receber em uma resposta todos os itens vendidos nos últimos 90 dias. Um item sem vendas nos últimos 90 dias fica de fora.
Parâmetros
market_hash_namequery, opcionalstringO nome de um item. Repita para um lote de até 100. Todos os itens vendidos nos últimos 90 dias se omitido
providersquery, opcionalstringMarketplaces separados por vírgula: dmarket, market_csgo. Ambos se omitido
Requisição
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();Resposta 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"
}
]
}
]- Precisa de uma assinatura paga: na grátis, toda requisição responde 403.
- Em cada período, sales é quantos itens foram vendidos, e median e avg são o preço mediano e o preço médio em USD. median e avg são null em um período sem vendas.
- index_volume_units (índice de volume em unidades) e index_volume_dollars (índice de volume em dólares) indicam quanto costuma vender em 15 dias: os últimos 90 dias são divididos em seis períodos de 15 dias, e um período sem vendas conta como 0. index_volume_units é a mediana das quantidades vendidas nos períodos, index_volume_dollars a mediana dos totais em USD, então um único trecho muito ativo ou parado não os altera.
- O resumo é calculado após cada passagem pelas vendas de um marketplace; updated_at indica quando.
- A Market.CSGO nos mostra no máximo as últimas 6,000 vendas de um item, então os itens mais vendidos podem mostrar last_90d, index_volume_units e index_volume_dollars baixos até termos registrado 90 dias completos.
- As fases Doppler e Gamma Doppler compartilham nomes de mercado, então um registro cobre todas as fases.
- Lembranças, adesivos e grafites estão incluídos. Como nas ofertas, cada requisição respondida conta para o limite de 30 dias, e as respostas são compactadas da mesma forma.
Resumo de vendas de um item
/v1/sales/summary/{market_hash_name}Um resumo das vendas de um item em cada marketplace. 404 se nenhum o vendeu nos últimos 90 dias.
Parâmetros
market_hash_namepathstringO nome do item, codificado para URL
providersquery, opcionalstringMarketplaces separados por vírgula: dmarket, market_csgo. Ambos se omitido
Requisição
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();Resposta 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"
}
]
}- Precisa de uma assinatura paga: na grátis, toda requisição responde 403.
Itens
O que é cada item de CS2: tipo, arma, desgaste e faixa de float, qualidade, raridade, coleções e caixas. Para filtrar itens em um marketplace, pelo mesmo market_hash_name de ofertas e ordens. Todas as skins, adesivos, agentes, chaveiros, caixas e o resto, incluindo lembranças. Como nas ofertas, cada requisição respondida conta para o limite de 30 dias.
Muitos itens
/v1/itemsO que é cada item de CS2: tipo, arma, desgaste e faixa de float, qualidade, raridade, coleções e caixas, um registro por market_hash_name, para filtrar itens em um marketplace. Todos os itens em uma resposta (cerca de 2 MB com gzip), uma página deles com limit e offset, ou até 100 informados com market_hash_name. Os filtros restringem os dois casos.
Parâmetros
market_hash_namequery, opcionalstringNome de um item. Repita para um lote de até 100. Todos os itens se omitido
typequery, opcionalstringskin, sticker, agent, charm, patch, music_kit, graffiti, collectible, container. Separados por vírgula, qualquer um deles
weaponquery, opcionalstringIds de armas: awp, ak-47, karambit, sport-gloves.... Separados por vírgula, qualquer um deles
collectionquery, opcionalstringIds de coleções: the-dust-2-collection.... Separados por vírgula, qualquer um deles
containerquery, opcionalstringIds das caixas e pacotes de onde cai: dreams-nightmares-case.... Separados por vírgula, qualquer um deles
rarityquery, opcionalstringIds de raridade: consumer, industrial, mil-spec, restricted, classified, covert, contraband, e os de adesivos e agentes (high, remarkable, exotic, extraordinary, distinguished, exceptional, superior, master). Separados por vírgula, qualquer um deles
qualityquery, opcionalstringNormal, StatTrak™, Souvenir, ★ ou ★ StatTrak™. Separados por vírgula, qualquer um deles
limitquery, opcionalnumberO máximo de itens na resposta, 1 ou mais. Todos os itens quando omitido, e o limit da resposta passa a ser quantos ela traz
offsetquery, opcionalnumberItens a pular, para a próxima página
Requisição
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();Resposta 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"
}
]
}- Precisa de uma assinatura paga: na grátis, toda requisição responde 403.
- type é skin para toda skin de arma, faca e luva (category as diferencia: knives, gloves, rifles, pistols, smgs, heavy, equipment), container para caixas, cápsulas e pacotes (category é o tipo: case, sticker_capsule, souvenir_package...).
- min_float e max_float são os floats que o item pode ter: a faixa da skin dentro do desgaste. null para itens sem float.
- details traz o que mais se sabe: Tournament, Team, Player e Effect de um adesivo, Side de um agente, data Released de um contêiner.
- As fases Doppler e Gamma Doppler compartilham nomes de mercado, então um registro cobre todas as fases.
- Como as requisições de ofertas, cada requisição respondida conta para o limite de 30 dias, não importa quantos itens traga, e as respostas são compactadas com gzip do mesmo jeito.
Um item
/v1/items/{market_hash_name}O que é um item. 404 quando não há item com esse nome.
Parâmetros
market_hash_namepathstringO nome do item, codificado para URL
Requisição
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();Resposta 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"
}- Precisa de uma assinatura paga: na grátis, toda requisição responde 403.
Robô para DMarket
Gerencie suas ofertas e ordens da DMarket com a mesma chave. As contas e suas chaves de API da DMarket são adicionadas só na página do robô, nunca pela API. Rotas de robô precisam de uma assinatura paga e contam só para o limite por minuto, nunca para o de 30 dias.
- Ofertas: qualquer número por conta. Ordens ("targets" da DMarket): até 100 por conta, limite da própria DMarket.
- A DMarket não permite alterar o preço de uma ordem: o robô a substitui por uma nova com o novo preço.
Contas e limites
/v1/robots/dmarketSuas contas da DMarket no robô (conectadas com as chaves de API da DMarket na página do robô) e os limites da sua assinatura para ele.
Requisição
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();Resposta 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"
}
]
}- Um limite null significa sem limite nosso.
- paused: a conta está acima do limite de contas da assinatura; suas ofertas e ordens aguardam.
- enabled: false significa que foi desligado na página do robô: o robô para de movê-lo, ele continua no marketplace pelo último preço e ainda conta para os limites.
Inventário de uma conta
/v1/robots/dmarket/accounts/{account_id}/inventoryOs itens no inventário da DMarket da conta, com o asset_id para vender cada um. sellable é false para itens que a DMarket não deixa anunciar.
Parâmetros
account_idpathstringO id da conta, de GET /v1/robots/dmarket
Requisição
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();Resposta 200
[
{
"asset_id": "4c1d8e2f-0b6a-4a51-9f3e-2d7c8b1a6e05",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"sellable": true,
"suggested_price": 33.1
}
]Listar ofertas
/v1/robots/dmarket/offersSuas ofertas na DMarket, em todas as contas, das mais antigas para as mais novas.
Requisição
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();Resposta 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"
}
]Anunciar ou atualizar uma oferta
/v1/robots/dmarket/offersAnuncia um item ou substitui os preços da oferta que ele já tem, encontrada por asset_id. O robô anuncia o item na DMarket e o mantém como a oferta mais barata, nunca abaixo de min_price. Sem concorrência, vende a max_price. Novos preços valem em segundos ou quando o preço destrava: um preço alterado pelo robô fica por 15 minutos.
Parâmetros
asset_idbodystringO id do item na DMarket, do inventário da conta
min_pricebodynumberUSD, no máximo duas casas decimais
max_pricebodynumberUSD, no máximo duas casas decimais
account_idbody, opcionalstringA conta dona do item. Obrigatória para anunciar
market_hash_namebody, opcionalstringO nome do item. Obrigatório para anunciar
Requisição
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();Resposta 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"
}Remover uma oferta
/v1/robots/dmarket/offersEsquece a oferta: o robô para de movê-la e o item continua à venda em DMarket pelo último preço.
Parâmetros
asset_idquerystringO id do item na DMarket, do inventário da conta
Requisição
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();Resposta 200
{
"removed": true
}- removed é false quando o robô não tinha essa oferta.
Listar ordens
/v1/robots/dmarket/ordersSuas ordens de compra na DMarket, em todas as contas, das mais antigas para as mais novas.
Requisição
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();Resposta 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"
}
]Criar ou atualizar uma ordem
/v1/robots/dmarket/ordersCria sua ordem para um item em uma conta ou substitui os preços da que já existe. O robô cria uma ordem de compra da DMarket (um "target") e a mantém como a mais alta, nunca acima de max_price. Sem concorrência, oferece min_price. A DMarket permite até 100 ordens por conta. A DMarket não muda o preço de uma ordem: cada novo preço é um novo target no lugar do antigo. Compra 1 item por vez até completar a quantidade, e uma ordem só é criada quando o preço dela cabe no saldo da conta.
Parâmetros
market_hash_namebodystringO nome do item
min_pricebodynumberUSD, no máximo duas casas decimais
max_pricebodynumberUSD, no máximo duas casas decimais
account_idbody, opcionalstringA conta para comprar. Pode ser omitida se você tem uma conta
amountbody, opcionalnumberQuantos comprar, de 1 a 100. Obrigatório para criar; só muda antes de ser colocada
Requisição
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();Resposta 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"
}- A quantidade de uma ordem colocada só diminui conforme é executada: remova e adicione de novo para comprar mais.
Remover uma ordem
/v1/robots/dmarket/ordersEsquece a ordem: o robô para de movê-la e ela continua em DMarket pelo último preço.
Parâmetros
market_hash_namequerystringO nome do item
account_idquery, opcionalstringA conta onde está a ordem. Pode ser omitida se você tem uma conta
Requisição
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();Resposta 200
{
"removed": true
}- removed é false quando o robô não tinha essa ordem.
Monitor
/v1/robots/dmarket/monitorTodos os itens na DMarket com o lucro de ter a melhor ordem de compra (buy_price, 1 centavo acima da melhor ordem) e depois a oferta mais barata (sell_price, 1 centavo abaixo da mais barata), após a taxa da DMarket para o item. As melhores ordens e ofertas da DMarket são atualizadas a cada poucos segundos, e os preços dos outros marketplaces com a frequência de cada um, de 5 em 5 minutos a cada hora. Só os filtros enviados valem: sem nenhum, todos os itens com ordem, os mais lucrativos primeiro. Um item sem oferta na DMarket também aparece, com best_offer, sell_price, profit e margin_percent null: os filtros de lucro, margem e diferença o deixam passar. dollar_volume e units_volume são o que o item costuma vender na DMarket em 15 dias: a mediana dos últimos 90 dias em seis períodos de 15 dias.
Parâmetros
qquery, opcionalstringPalavras que devem estar todas no nome
min_pricequery, opcionalnumberMenor preço de compra, USD
max_pricequery, opcionalnumberMaior preço de compra, USD
min_profitquery, opcionalnumberMenor lucro após a taxa, USD
min_marginquery, opcionalnumberMenor margem, percentual do preço de compra
min_gapquery, opcionalnumberMenor diferença entre a melhor ordem e a oferta mais barata, USD
min_liquidityquery, opcionalnumberMenor liquidez, de 0 a 100
max_feequery, opcionalnumberMaior taxa, percentual
min_units_volumequery, opcionalnumberMenos itens vendidos em 15 dias típicos na DMarket (units_volume)
min_dollar_volumequery, opcionalnumberMenos USD vendidos em 15 dias típicos na DMarket (dollar_volume)
hidequery, opcionalstringSeparados por vírgula: stickers, graffiti, souvenir, stattrak
comparequery, opcionalstringOutros marketplaces e quantos por cento acima do preço de compra deve estar o menor anúncio deles: buff_163:5,cs_float:3. Um marketplace que não anuncia o item é ignorado. Os preços voltam em compare
compare_ordersquery, opcionalstringO mesmo com as maiores ordens de outros marketplaces: market_csgo:5 (Market.CSGO ou Steam). As ordens voltam em compare_orders
sortquery, opcionalstringprofit (se omitido), margin, liquidity, price ou volume (dollar_volume)
limitquery, opcionalnumberItens na resposta, de 1 a 100 (100 se omitido)
offsetquery, opcionalnumberItens a pular, para a próxima página
Requisição
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();Resposta 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": {}
}
]
}- Precisa de uma assinatura paga, como toda rota de robô. Ao contrário delas, cada requisição respondida também conta para o limite de 30 dias, como as de ofertas, com os mesmos cabeçalhos X-Usage-Limit e X-Usage-Remaining.
Status de ofertas e ordens
pending- Ainda não anunciada nem colocada
active- No marketplace, mantida em primeiro dentro dos seus limites. Um preço alterado pelo robô fica por 15 minutos; depois disso ele acompanha o mercado a cada segundo
paused- Acima das ofertas, ordens ou contas da assinatura: espera você fazer upgrade ou remover outras
sold- Ofertas: vendida
closed- Ofertas: retirada da venda ou o item saiu do inventário. Ordens: comprada por completo ou removida. error diz o motivo, quando há
Robô para market.csgo.com
Gerencie suas ofertas e ordens da Market.CSGO com a mesma chave. As contas e suas chaves de API da Market.CSGO são adicionadas só na página do robô, nunca pela API. Rotas de robô precisam de uma assinatura paga e contam só para o limite por minuto, nunca para o de 30 dias.
- Ofertas: qualquer número por conta. Ordens: até 100 por conta, uma por item, alteradas no local.
- A moeda da conta na Market.CSGO deve ser USD. As ofertas só aparecem enquanto você está online no app ou na extensão da Market.CSGO.
Contas e limites
/v1/robots/market-csgoSuas contas da Market.CSGO no robô (conectadas com as chaves de API da Market.CSGO na página do robô) e os limites da sua assinatura para ele. O note da conta diz o que atrapalha a venda, por exemplo estar offline.
Requisição
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();Resposta 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"
}
]
}- Um limite null significa sem limite nosso.
- paused: a conta está acima do limite de contas da assinatura; suas ofertas e ordens aguardam.
- enabled: false significa que foi desligado na página do robô: o robô para de movê-lo, ele continua no marketplace pelo último preço e ainda conta para os limites.
Inventário de uma conta
/v1/robots/market-csgo/accounts/{account_id}/inventoryOs itens da Steam que a Market.CSGO pode vender da conta, com o asset_id para vender cada um.
Parâmetros
account_idpathstringO id da conta, de GET /v1/robots/market-csgo
Requisição
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();Resposta 200
[
{
"asset_id": "38215462179",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"sellable": true,
"suggested_price": 33.1
}
]Listar ofertas
/v1/robots/market-csgo/offersSuas ofertas na Market.CSGO, em todas as contas, das mais antigas para as mais novas.
Requisição
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();Resposta 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"
}
]Anunciar ou atualizar uma oferta
/v1/robots/market-csgo/offersAnuncia um item ou substitui os preços da oferta que ele já tem, encontrada por asset_id. O robô coloca o item à venda na Market.CSGO e o mantém como a oferta mais barata, nunca abaixo de min_price. Sem concorrência, vende a max_price. As ofertas só aparecem enquanto a conta está online no app ou na extensão da Market.CSGO. Novos preços valem em segundos ou quando o preço destrava: um preço alterado pelo robô fica por 15 minutos.
Parâmetros
asset_idbodystringO asset id da Steam do item, do inventário da conta
min_pricebodynumberUSD, no máximo duas casas decimais
max_pricebodynumberUSD, no máximo duas casas decimais
account_idbody, opcionalstringA conta dona do item. Obrigatória para anunciar
market_hash_namebody, opcionalstringO nome do item. Obrigatório para anunciar
Requisição
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();Resposta 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"
}Remover uma oferta
/v1/robots/market-csgo/offersEsquece a oferta: o robô para de movê-la e o item continua à venda em Market.CSGO pelo último preço.
Parâmetros
asset_idquerystringO asset id da Steam do item, do inventário da conta
Requisição
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();Resposta 200
{
"removed": true
}- removed é false quando o robô não tinha essa oferta.
Listar ordens
/v1/robots/market-csgo/ordersSuas ordens de compra na Market.CSGO, em todas as contas, das mais antigas para as mais novas.
Requisição
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();Resposta 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"
}
]Criar ou atualizar uma ordem
/v1/robots/market-csgo/ordersCria sua ordem para um item em uma conta ou substitui os preços da que já existe. O robô cria uma ordem de compra da Market.CSGO e a mantém como a mais alta, nunca acima de max_price. Sem concorrência, oferece min_price. A Market.CSGO permite uma ordem por item e até 100 por conta, e muda o preço da ordem no local.
Parâmetros
market_hash_namebodystringO nome do item
min_pricebodynumberUSD, no máximo duas casas decimais
max_pricebodynumberUSD, no máximo duas casas decimais
account_idbody, opcionalstringA conta para comprar. Pode ser omitida se você tem uma conta
amountbody, opcionalnumberQuantos comprar, de 1 a 100. Obrigatório para criar; só muda antes de ser colocada
Requisição
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();Resposta 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"
}- A quantidade de uma ordem colocada só diminui conforme é executada: remova e adicione de novo para comprar mais.
Remover uma ordem
/v1/robots/market-csgo/ordersEsquece a ordem: o robô para de movê-la e ela continua em Market.CSGO pelo último preço.
Parâmetros
market_hash_namequerystringO nome do item
account_idquery, opcionalstringA conta onde está a ordem. Pode ser omitida se você tem uma conta
Requisição
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();Resposta 200
{
"removed": true
}- removed é false quando o robô não tinha essa ordem.
Status de ofertas e ordens
pending- Ainda não anunciada nem colocada
active- No marketplace, mantida em primeiro dentro dos seus limites. Um preço alterado pelo robô fica por 15 minutos; depois disso ele acompanha o mercado a cada segundo
paused- Acima das ofertas, ordens ou contas da assinatura: espera você fazer upgrade ou remover outras
sold- Ofertas: vendida
closed- Ofertas: retirada da venda ou o item saiu do inventário. Ordens: comprada por completo ou removida. error diz o motivo, quando há
Limites e erros
Dois limites, ambos por assinatura. Cada requisição conta para o limite por minuto; uma acima dele recebe 429 com um cabeçalho Retry-After em segundos. Cada requisição respondida de ofertas, ordens de compra, vendas, itens ou do monitor também conta para o limite de 30 dias, não importa quantos itens peça; a contagem recomeça a cada 30 dias desde o início da sua assinatura, e os cabeçalhos X-Usage-Limit e X-Usage-Remaining mostram onde você está.
| Assinatura | Requisições / minuto | Requisições de ofertas e ordens / 30 dias |
|---|---|---|
| Grátis | 60 | 100 |
| Trader | 120 | 5,000 |
| Pro | 300 | 25,000 |
| Business | 300 | 100,000 |
400- Algo está errado na requisição: provedor ou tipo de item desconhecido, corpo inválido, mais de 100 itens, limite fora do intervalo
401- A chave está ausente ou incorreta
403- É preciso uma assinatura paga: para todo marketplace exceto a Steam, as rotas de resumo de vendas e de itens, e as de robô e monitor
404- Item, robô ou conta inexistente
409- Não é possível agora: acima das ofertas, ordens ou contas da assinatura, ou alteração da quantidade de uma ordem colocada
429- O limite por minuto (espere Retry-After segundos) ou o limite de 30 dias foi atingido
502- O marketplace não respondeu ao robô; tente novamente