API
Documentazione API
Per iniziare
Ogni richiesta va a https://api.apiskins.com e richiede la tua chiave nell'intestazione X-API-KEY. Le risposte sono in JSON; i prezzi in USD.
Una richiesta non riuscita risponde con uno stato HTTP e un messaggio di errore in JSON. Limiti ed errori
Tutta l'API è anche un documento OpenAPI, per generatori di codice e agenti IA.
Marketplace
I nomi dei provider da usare in providers e da attendersi nelle risposte. Ogni marketplace ha offerte; solo quelli contrassegnati hanno anche ordini di acquisto.
cs_floatCSFloatbuff_163Buff.163youpinYouPin898dmarketOrdini di acquistoDMarketskinportSkinportcs_moneycs.moneymarket_csgoOrdini di acquistoMarket.CSGObuff_marketBuff.MarketwaxpeerWaxpeerlis_skinsLis-skinsskin_baronSkinBaronhalo_skinsHaloSkinswhite_marketWhite.Marketshadow_payShadowPayskinsSKINSskin_swapSkinSwapcs_dealsCS.Dealsloot_farmLoot.farmcs_tradeCS.TRADEtradeitTradeit.ggsteamOrdini di acquistoSteamsihSIH MarketOfferte
L'offerta più economica (prezzo più basso) di ogni oggetto su ogni marketplace monitorato. Le risposte sono compresse con gzip per i client che lo accettano, quindi ogni oggetto di ogni marketplace arriva in una sola richiesta.
Monitoriamo skin di armi (normali e StatTrak™), coltelli, guanti, casse e capsule, agenti, kit musicali, toppe, ciondoli, spille e pass. Oggetti souvenir, adesivi e graffiti non sono monitorati.
Offerte di molti oggetti
/v1/offersL'offerta più economica (prezzo più basso) degli oggetti su ogni marketplace. Indica fino a 100 oggetti con market_hash_name per un lotto, oppure omettilo per tutti gli oggetti in vendita in una risposta. Un oggetto non presente su nessun marketplace resta fuori dalla risposta.
Parametri
market_hash_namequery, facoltativostringIl nome di un oggetto. Ripetilo per un lotto fino a 100. Tutti gli oggetti in vendita se omesso
providersquery, facoltativostringMarketplace separati da virgole (vedi Marketplace). Tutti se omesso
Richiesta
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();Risposta 200
[
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"offers": [
{
"provider": "buff_163",
"price": 31.42
},
{
"provider": "cs_float",
"price": 33.1
}
]
}
]- Con l'abbonamento gratuito viene restituito solo Steam: senza providers la risposta contiene solo Steam, e chiedere un altro marketplace risponde 403. Gli abbonamenti a pagamento ricevono tutti i marketplace.
- Un marketplace che non ha un oggetto resta fuori dalle sue offerte.
- Le risposte sono compresse con gzip per i client che lo accettano (ogni libreria HTTP; con curl aggiungi --compressed): tutti gli oggetti di tutti i marketplace sono circa 28 MB di JSON, meno di 2 MB con gzip.
Offerte di un oggetto
/v1/offers/{market_hash_name}L'offerta più economica di un oggetto su ogni marketplace. 404 se nessuno lo ha.
Parametri
market_hash_namepathstringIl nome dell'oggetto, codificato per URL
providersquery, facoltativostringMarketplace separati da virgole (vedi Marketplace). Tutti se omesso
Richiesta
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();Risposta 200
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"offers": [
{
"provider": "buff_163",
"price": 31.42
},
{
"provider": "cs_float",
"price": 33.1
}
]
}- Con l'abbonamento gratuito viene restituito solo Steam: senza providers la risposta contiene solo Steam, e chiedere un altro marketplace risponde 403. Gli abbonamenti a pagamento ricevono tutti i marketplace.
Ordini di acquisto
L'ordine di acquisto più alto di ogni oggetto su DMarket, Market.CSGO e Steam: a quanto puoi vendere un oggetto adesso. La stessa chiave, lo stesso limite di 30 giorni e le stesse risposte compresse delle offerte.
Ordini di acquisto di molti oggetti
/v1/ordersL'ordine di acquisto più alto degli oggetti su ogni marketplace che li ha: DMarket (aggiornato ogni pochi secondi), Market.CSGO (ogni 15 minuti) e Steam (ogni ora). Indica fino a 100 oggetti con market_hash_name per un lotto, oppure omettilo per tutti gli oggetti con un ordine in una risposta. Un oggetto senza ordini resta fuori.
Parametri
market_hash_namequery, facoltativostringIl nome di un oggetto. Ripetilo per un lotto fino a 100. Tutti gli oggetti con un ordine se omesso
providersquery, facoltativostringMarketplace separati da virgole: dmarket, market_csgo, steam. Tutti se omesso
Richiesta
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();Risposta 200
[
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"orders": [
{
"provider": "dmarket",
"price": 24.51
},
{
"provider": "market_csgo",
"price": 23.822
}
]
}
]- Con l'abbonamento gratuito viene restituito solo Steam: senza providers la risposta contiene solo Steam, e chiedere un altro marketplace risponde 403. Gli abbonamenti a pagamento ricevono tutti i marketplace.
- Un marketplace senza ordine per un oggetto resta fuori dai suoi ordini.
- Souvenir, adesivi e graffiti sono inclusi. Come per le offerte, ogni richiesta con risposta conta per il limite di 30 giorni e le risposte sono compresse allo stesso modo.
Ordini di acquisto di un oggetto
/v1/orders/{market_hash_name}L'ordine di acquisto più alto di un oggetto su ogni marketplace. 404 se nessuno ne ha.
Parametri
market_hash_namepathstringIl nome dell'oggetto, codificato per URL
providersquery, facoltativostringMarketplace separati da virgole: dmarket, market_csgo, steam. Tutti se omesso
Richiesta
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();Risposta 200
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"orders": [
{
"provider": "dmarket",
"price": 24.51
},
{
"provider": "market_csgo",
"price": 23.822
}
]
}- Con l'abbonamento gratuito viene restituito solo Steam: senza providers la risposta contiene solo Steam, e chiedere un altro marketplace risponde 403. Gli abbonamenti a pagamento ricevono tutti i marketplace.
Cronologia delle vendite
Un riepilogo delle vendite di ogni oggetto su DMarket e Market.CSGO: quanti ne sono stati venduti, il prezzo mediano e il prezzo medio negli ultimi 7, 15, 30 e 90 giorni e quanto si vende di solito in 15 giorni. La stessa chiave, lo stesso limite di 30 giorni e le stesse risposte gzip delle offerte.
Riepilogo delle vendite di molti oggetti
/v1/sales/summaryUn riepilogo delle vendite degli oggetti su ogni marketplace: DMarket (aggiornato ogni poche ore) e Market.CSGO (circa ogni ora). Indica fino a 100 oggetti con market_hash_name per un lotto, oppure omettilo per tutti gli oggetti venduti negli ultimi 90 giorni in una risposta. Un oggetto senza vendite negli ultimi 90 giorni resta fuori.
Parametri
market_hash_namequery, facoltativostringIl nome di un oggetto. Ripetilo per un lotto fino a 100. Tutti gli oggetti venduti negli ultimi 90 giorni se omesso
providersquery, facoltativostringMarketplace separati da virgole: dmarket, market_csgo. Entrambi se omesso
Richiesta
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();Risposta 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"
}
]
}
]- Richiede un abbonamento a pagamento: con quello gratuito ogni richiesta risponde 403.
- In ogni periodo, sales indica quanti oggetti sono stati venduti, median e avg il loro prezzo mediano e medio in USD. median e avg sono null per un periodo senza vendite.
- index_volume_units (indice di volume in unità) e index_volume_dollars (indice di volume in dollari) indicano quanto si vende di solito in 15 giorni: gli ultimi 90 giorni sono divisi in sei periodi da 15 giorni, e un periodo senza vendite conta come 0. index_volume_units è la mediana del numero di oggetti venduti nei periodi, index_volume_dollars la mediana dei loro totali in USD, quindi un singolo periodo molto attivo o fermo non li sposta.
- Un riepilogo viene calcolato dopo ogni passaggio sulle vendite di un marketplace; updated_at indica quando.
- Market.CSGO ci mostra al massimo le ultime 6,000 vendite di un oggetto, quindi gli oggetti più venduti possono mostrare last_90d, index_volume_units e index_volume_dollars bassi finché non avremo registrato 90 giorni completi.
- Le fasi Doppler e Gamma Doppler condividono i nomi di mercato, quindi un record copre tutte le fasi.
- Souvenir, adesivi e graffiti sono inclusi. Come per le offerte, ogni richiesta con risposta conta per il limite di 30 giorni e le risposte sono compresse allo stesso modo.
Riepilogo delle vendite di un oggetto
/v1/sales/summary/{market_hash_name}Un riepilogo delle vendite di un oggetto su ogni marketplace. 404 se nessuno lo ha venduto negli ultimi 90 giorni.
Parametri
market_hash_namepathstringIl nome dell'oggetto, codificato per URL
providersquery, facoltativostringMarketplace separati da virgole: dmarket, market_csgo. Entrambi se omesso
Richiesta
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();Risposta 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"
}
]
}- Richiede un abbonamento a pagamento: con quello gratuito ogni richiesta risponde 403.
Oggetti
Che cos'è ogni oggetto di CS2: tipo, arma, usura e intervallo di float, qualità, rarità, collezioni e casse. Per filtrare gli oggetti su un marketplace, con lo stesso market_hash_name di offerte e ordini. Ogni skin, adesivo, agente, ciondolo, cassa e il resto, souvenir inclusi. Come per le offerte, ogni richiesta che riceve risposta conta nel limite di 30 giorni.
Molti oggetti
/v1/itemsChe cos'è ogni oggetto di CS2: tipo, arma, usura e intervallo di float, qualità, rarità, collezioni e casse, un record per market_hash_name, per filtrare gli oggetti su un marketplace. Tutti gli oggetti in una sola risposta (circa 2 MB con gzip), una pagina con limit e offset, oppure fino a 100 indicati con market_hash_name. I filtri restringono entrambi i casi.
Parametri
market_hash_namequery, facoltativostringIl nome di un oggetto. Ripetilo per un lotto fino a 100. Tutti gli oggetti se omesso
typequery, facoltativostringskin, sticker, agent, charm, patch, music_kit, graffiti, collectible, container. Separati da virgole, uno qualsiasi
weaponquery, facoltativostringId delle armi: awp, ak-47, karambit, sport-gloves.... Separati da virgole, uno qualsiasi
collectionquery, facoltativostringId delle collezioni: the-dust-2-collection.... Separati da virgole, uno qualsiasi
containerquery, facoltativostringId delle casse e dei pacchetti da cui proviene: dreams-nightmares-case.... Separati da virgole, uno qualsiasi
rarityquery, facoltativostringId di rarità: consumer, industrial, mil-spec, restricted, classified, covert, contraband, e quelli di adesivi e agenti (high, remarkable, exotic, extraordinary, distinguished, exceptional, superior, master). Separati da virgole, uno qualsiasi
qualityquery, facoltativostringNormal, StatTrak™, Souvenir, ★ o ★ StatTrak™. Separati da virgole, uno qualsiasi
limitquery, facoltativonumberIl numero massimo di oggetti nella risposta, 1 o più. Tutti gli oggetti se omesso, e il limit della risposta è allora quanti ne contiene
offsetquery, facoltativonumberOggetti da saltare, per la pagina successiva
Richiesta
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();Risposta 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"
}
]
}- Richiede un abbonamento a pagamento: con quello gratuito ogni richiesta risponde 403.
- type è skin per ogni skin di arma, coltello e guanto (category li distingue: knives, gloves, rifles, pistols, smgs, heavy, equipment), container per casse, capsule e pacchetti (category è il tipo: case, sticker_capsule, souvenir_package...).
- min_float e max_float sono i float possibili dell'oggetto: l'intervallo della skin entro la sua usura. null per oggetti senza float.
- details contiene il resto: Tournament, Team, Player ed Effect di un adesivo, Side di un agente, data Released di un contenitore.
- Le fasi Doppler e Gamma Doppler condividono i nomi di mercato, quindi un record copre tutte le fasi.
- Come le richieste di offerte, ogni richiesta che riceve risposta conta nel limite di 30 giorni, qualunque sia il numero di oggetti, e le risposte sono compresse con gzip allo stesso modo.
Un oggetto
/v1/items/{market_hash_name}Che cos'è un oggetto. 404 se non esiste un oggetto con quel nome.
Parametri
market_hash_namepathstringIl nome dell'oggetto, codificato per URL
Richiesta
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();Risposta 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"
}- Richiede un abbonamento a pagamento: con quello gratuito ogni richiesta risponde 403.
Robot per DMarket
Gestisci offerte e ordini DMarket con la stessa chiave. Gli account e le loro chiavi API DMarket si aggiungono solo nella pagina del robot, mai tramite l'API. Le rotte del robot richiedono un abbonamento a pagamento e contano solo per il limite al minuto, mai per quello di 30 giorni.
- Offerte: qualsiasi numero per account. Ordini ("target" di DMarket): fino a 100 per account, limite di DMarket.
- DMarket non consente di cambiare il prezzo di un ordine: il robot lo sostituisce con uno nuovo al nuovo prezzo.
Account e limiti
/v1/robots/dmarketI tuoi account DMarket sul robot (collegati con le chiavi API DMarket nella pagina del robot) e i limiti del tuo abbonamento per esso.
Richiesta
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();Risposta 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"
}
]
}- Un limite null significa nessun limite da parte nostra.
- paused: l'account supera quelli del tuo abbonamento; offerte e ordini restano in attesa.
- enabled: false significa disattivato nella pagina del robot: il robot non lo muove più, resta sul marketplace all'ultimo prezzo e conta ancora nei limiti.
Inventario di un account
/v1/robots/dmarket/accounts/{account_id}/inventoryGli oggetti nell'inventario DMarket dell'account, con l'asset_id per vendere ciascuno. sellable è false per gli oggetti che DMarket non consente di mettere in vendita.
Parametri
account_idpathstringL'id dell'account, da GET /v1/robots/dmarket
Richiesta
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();Risposta 200
[
{
"asset_id": "4c1d8e2f-0b6a-4a51-9f3e-2d7c8b1a6e05",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"sellable": true,
"suggested_price": 33.1
}
]Elenca le offerte
/v1/robots/dmarket/offersLe tue offerte su DMarket, su tutti gli account, dalle più vecchie.
Richiesta
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();Risposta 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"
}
]Pubblica o aggiorna un'offerta
/v1/robots/dmarket/offersMette in vendita un oggetto o sovrascrive i prezzi dell'offerta esistente, trovata tramite asset_id. Il robot mette l'oggetto in vendita su DMarket e lo tiene l'offerta più economica, mai sotto min_price. Senza concorrenza vende a max_price. I nuovi prezzi valgono entro pochi secondi o allo sblocco del prezzo: un prezzo cambiato dal robot resta per 15 minuti.
Parametri
asset_idbodystringL'id DMarket dell'oggetto, dall'inventario dell'account
min_pricebodynumberUSD, al massimo due decimali
max_pricebodynumberUSD, al massimo due decimali
account_idbody, facoltativostringL'account proprietario dell'oggetto. Obbligatorio per metterlo in vendita
market_hash_namebody, facoltativostringIl nome dell'oggetto. Obbligatorio per metterlo in vendita
Richiesta
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();Risposta 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"
}Rimuovi un'offerta
/v1/robots/dmarket/offersDimentica l'offerta: il robot non la muove più e l'oggetto resta in vendita su DMarket all'ultimo prezzo.
Parametri
asset_idquerystringL'id DMarket dell'oggetto, dall'inventario dell'account
Richiesta
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();Risposta 200
{
"removed": true
}- removed è false se il robot non aveva quell'offerta.
Elenca gli ordini
/v1/robots/dmarket/ordersI tuoi ordini di acquisto su DMarket, su tutti gli account, dai più vecchi.
Richiesta
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();Risposta 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"
}
]Inserisci o aggiorna un ordine
/v1/robots/dmarket/ordersInserisce il tuo ordine per un oggetto su un account o sovrascrive i prezzi di quello esistente. Il robot inserisce un ordine di acquisto DMarket (un "target") e lo tiene il più alto, mai sopra max_price. Senza concorrenza offre min_price. DMarket consente fino a 100 ordini per account. DMarket non può cambiare il prezzo di un ordine: ogni nuovo prezzo è un nuovo target al posto del vecchio. Compra 1 oggetto alla volta fino a raggiungere la quantità, e un ordine viene piazzato solo se il suo prezzo rientra nel saldo dell'account.
Parametri
market_hash_namebodystringIl nome dell'oggetto
min_pricebodynumberUSD, al massimo due decimali
max_pricebodynumberUSD, al massimo due decimali
account_idbody, facoltativostringL'account con cui comprare. Omettibile se hai un solo account
amountbody, facoltativonumberQuanti comprarne, da 1 a 100. Obbligatorio per inserire un ordine; cambia solo prima dell'inserimento
Richiesta
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();Risposta 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"
}- La quantità di un ordine inserito scende solo con l'esecuzione: rimuovilo e aggiungilo di nuovo per comprarne altri.
Rimuovi un ordine
/v1/robots/dmarket/ordersDimentica l'ordine: il robot non lo muove più e resta su DMarket all'ultimo prezzo.
Parametri
market_hash_namequerystringIl nome dell'oggetto
account_idquery, facoltativostringL'account dell'ordine. Omettibile se hai un solo account
Richiesta
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();Risposta 200
{
"removed": true
}- removed è false se il robot non aveva quell'ordine.
Monitor
/v1/robots/dmarket/monitorOgni oggetto su DMarket con il profitto di diventare il suo miglior ordine di acquisto (buy_price, 1 centesimo sopra il miglior ordine) e poi la sua offerta più economica (sell_price, 1 centesimo sotto la più economica), al netto della commissione DMarket per quell'oggetto. I migliori ordini e offerte di DMarket si aggiornano ogni pochi secondi, i prezzi degli altri marketplace con la frequenza di ciascuno, da ogni 5 minuti a ogni ora. Valgono solo i filtri inviati: senza filtri, ogni oggetto con un ordine, dai più redditizi. Appare anche un oggetto senza offerta su DMarket, con best_offer, sell_price, profit e margin_percent a null: i filtri di profitto, margine e divario lo lasciano passare. dollar_volume e units_volume sono ciò che l'oggetto vende di solito su DMarket in 15 giorni: la mediana degli ultimi 90 giorni in sei periodi da 15 giorni.
Parametri
qquery, facoltativostringParole che devono esserci tutte nel nome
min_pricequery, facoltativonumberPrezzo di acquisto minimo, USD
max_pricequery, facoltativonumberPrezzo di acquisto massimo, USD
min_profitquery, facoltativonumberProfitto minimo al netto della commissione, USD
min_marginquery, facoltativonumberMargine minimo, percentuale del prezzo di acquisto
min_gapquery, facoltativonumberDivario minimo tra miglior ordine e offerta più economica, USD
min_liquidityquery, facoltativonumberLiquidità minima, da 0 a 100
max_feequery, facoltativonumberCommissione massima, percentuale
min_units_volumequery, facoltativonumberMinimo di oggetti venduti in 15 giorni tipici su DMarket (units_volume)
min_dollar_volumequery, facoltativonumberMinimo di USD venduti in 15 giorni tipici su DMarket (dollar_volume)
hidequery, facoltativostringSeparati da virgole: stickers, graffiti, souvenir, stattrak
comparequery, facoltativostringAltri marketplace e di quanti punti percentuali sopra il prezzo di acquisto deve essere il loro prezzo più basso: buff_163:5,cs_float:3. Un marketplace senza l'oggetto viene saltato. I prezzi tornano in compare
compare_ordersquery, facoltativostringLo stesso con gli ordini più alti di altri marketplace: market_csgo:5 (Market.CSGO o Steam). Gli ordini tornano in compare_orders
sortquery, facoltativostringprofit (se omesso), margin, liquidity, price o volume (dollar_volume)
limitquery, facoltativonumberOggetti nella risposta, da 1 a 100 (100 se omesso)
offsetquery, facoltativonumberOggetti da saltare, per la pagina successiva
Richiesta
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();Risposta 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": {}
}
]
}- Richiede un abbonamento a pagamento, come ogni route del robot. A differenza di quelle, ogni richiesta che riceve risposta conta anche nel limite di 30 giorni, come le richieste di offerte, con le stesse intestazioni X-Usage-Limit e X-Usage-Remaining.
Stati di offerte e ordini
pending- Non ancora in vendita o inserito
active- Sul marketplace, tenuto al primo posto entro i tuoi limiti. Un prezzo cambiato dal robot resta per 15 minuti; poi controlla il mercato ogni secondo
paused- Oltre le offerte, gli ordini o gli account dell'abbonamento: attende finché non passi a un piano superiore o ne rimuovi altri
sold- Offerte: venduta
closed- Offerte: ritirata dalla vendita o l'oggetto ha lasciato l'inventario. Ordini: comprato per intero o rimosso. error indica il motivo quando c'è
Robot per market.csgo.com
Gestisci offerte e ordini Market.CSGO con la stessa chiave. Gli account e le loro chiavi API Market.CSGO si aggiungono solo nella pagina del robot, mai tramite l'API. Le rotte del robot richiedono un abbonamento a pagamento e contano solo per il limite al minuto, mai per quello di 30 giorni.
- Offerte: qualsiasi numero per account. Ordini: fino a 100 per account, uno per oggetto, modificati sul posto.
- La valuta dell'account su Market.CSGO deve essere USD. Le offerte appaiono solo mentre sei online nell'app o nell'estensione del browser di Market.CSGO.
Account e limiti
/v1/robots/market-csgoI tuoi account Market.CSGO sul robot (collegati con le chiavi API Market.CSGO nella pagina del robot) e i limiti del tuo abbonamento per esso. Il campo note di un account indica cosa ostacola la vendita, ad esempio essere offline.
Richiesta
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();Risposta 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"
}
]
}- Un limite null significa nessun limite da parte nostra.
- paused: l'account supera quelli del tuo abbonamento; offerte e ordini restano in attesa.
- enabled: false significa disattivato nella pagina del robot: il robot non lo muove più, resta sul marketplace all'ultimo prezzo e conta ancora nei limiti.
Inventario di un account
/v1/robots/market-csgo/accounts/{account_id}/inventoryGli oggetti Steam che Market.CSGO può vendere dall'account, con l'asset_id per vendere ciascuno.
Parametri
account_idpathstringL'id dell'account, da GET /v1/robots/market-csgo
Richiesta
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();Risposta 200
[
{
"asset_id": "38215462179",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"sellable": true,
"suggested_price": 33.1
}
]Elenca le offerte
/v1/robots/market-csgo/offersLe tue offerte su Market.CSGO, su tutti gli account, dalle più vecchie.
Richiesta
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();Risposta 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"
}
]Pubblica o aggiorna un'offerta
/v1/robots/market-csgo/offersMette in vendita un oggetto o sovrascrive i prezzi dell'offerta esistente, trovata tramite asset_id. Il robot mette l'oggetto in vendita su Market.CSGO e lo tiene l'offerta più economica, mai sotto min_price. Senza concorrenza vende a max_price. Le offerte appaiono solo mentre l'account è online nell'app o nell'estensione di Market.CSGO. I nuovi prezzi valgono entro pochi secondi o allo sblocco del prezzo: un prezzo cambiato dal robot resta per 15 minuti.
Parametri
asset_idbodystringL'asset id Steam dell'oggetto, dall'inventario dell'account
min_pricebodynumberUSD, al massimo due decimali
max_pricebodynumberUSD, al massimo due decimali
account_idbody, facoltativostringL'account proprietario dell'oggetto. Obbligatorio per metterlo in vendita
market_hash_namebody, facoltativostringIl nome dell'oggetto. Obbligatorio per metterlo in vendita
Richiesta
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();Risposta 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"
}Rimuovi un'offerta
/v1/robots/market-csgo/offersDimentica l'offerta: il robot non la muove più e l'oggetto resta in vendita su Market.CSGO all'ultimo prezzo.
Parametri
asset_idquerystringL'asset id Steam dell'oggetto, dall'inventario dell'account
Richiesta
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();Risposta 200
{
"removed": true
}- removed è false se il robot non aveva quell'offerta.
Elenca gli ordini
/v1/robots/market-csgo/ordersI tuoi ordini di acquisto su Market.CSGO, su tutti gli account, dai più vecchi.
Richiesta
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();Risposta 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"
}
]Inserisci o aggiorna un ordine
/v1/robots/market-csgo/ordersInserisce il tuo ordine per un oggetto su un account o sovrascrive i prezzi di quello esistente. Il robot inserisce un ordine di acquisto Market.CSGO e lo tiene il più alto, mai sopra max_price. Senza concorrenza offre min_price. Market.CSGO consente un ordine per oggetto e fino a 100 per account, e cambia il prezzo sul posto.
Parametri
market_hash_namebodystringIl nome dell'oggetto
min_pricebodynumberUSD, al massimo due decimali
max_pricebodynumberUSD, al massimo due decimali
account_idbody, facoltativostringL'account con cui comprare. Omettibile se hai un solo account
amountbody, facoltativonumberQuanti comprarne, da 1 a 100. Obbligatorio per inserire un ordine; cambia solo prima dell'inserimento
Richiesta
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();Risposta 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"
}- La quantità di un ordine inserito scende solo con l'esecuzione: rimuovilo e aggiungilo di nuovo per comprarne altri.
Rimuovi un ordine
/v1/robots/market-csgo/ordersDimentica l'ordine: il robot non lo muove più e resta su Market.CSGO all'ultimo prezzo.
Parametri
market_hash_namequerystringIl nome dell'oggetto
account_idquery, facoltativostringL'account dell'ordine. Omettibile se hai un solo account
Richiesta
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();Risposta 200
{
"removed": true
}- removed è false se il robot non aveva quell'ordine.
Stati di offerte e ordini
pending- Non ancora in vendita o inserito
active- Sul marketplace, tenuto al primo posto entro i tuoi limiti. Un prezzo cambiato dal robot resta per 15 minuti; poi controlla il mercato ogni secondo
paused- Oltre le offerte, gli ordini o gli account dell'abbonamento: attende finché non passi a un piano superiore o ne rimuovi altri
sold- Offerte: venduta
closed- Offerte: ritirata dalla vendita o l'oggetto ha lasciato l'inventario. Ordini: comprato per intero o rimosso. error indica il motivo quando c'è
Limiti ed errori
Due limiti, entrambi per abbonamento. Ogni richiesta conta nel limite al minuto; una oltre il limite riceve 429 con un'intestazione Retry-After in secondi. Ogni richiesta di offerte, ordini di acquisto, vendite, oggetti o monitor che riceve risposta conta anche nel limite di 30 giorni, qualunque sia il numero di oggetti; il conteggio riparte ogni 30 giorni dall'inizio dell'abbonamento, e le intestazioni X-Usage-Limit e X-Usage-Remaining dicono a che punto sei.
| Abbonamento | Richieste / minuto | Richieste di offerte e ordini / 30 giorni |
|---|---|---|
| Gratis | 60 | 100 |
| Trader | 120 | 5,000 |
| Pro | 300 | 25,000 |
| Business | 300 | 100,000 |
400- Qualcosa non va nella richiesta: provider o tipo di oggetto sconosciuto, corpo non valido, più di 100 oggetti, limite fuori intervallo
401- La chiave manca o è errata
403- Serve un abbonamento a pagamento: per ogni marketplace tranne Steam, le rotte del riepilogo vendite e degli oggetti, e quelle di robot e monitor
404- Oggetto, robot o account inesistente
409- Non possibile ora: oltre le offerte, gli ordini o gli account dell'abbonamento, o modifica della quantità di un ordine inserito
429- È stato raggiunto il limite al minuto (attendi Retry-After secondi) o il limite di 30 giorni
502- Il marketplace non ha risposto al robot; riprova