API Skins

API

Documentazione API

I prezzi di ogni skin di CS2 su 22 marketplace e i tuoi robot di trading, dal tuo codice. Una sola chiave per entrambi.

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_floatCSFloat
buff_163Buff.163
youpinYouPin898
dmarketOrdini di acquistoDMarket
skinportSkinport
cs_moneycs.money
market_csgoOrdini di acquistoMarket.CSGO
buff_marketBuff.Market
waxpeerWaxpeer
lis_skinsLis-skins
skin_baronSkinBaron
halo_skinsHaloSkins
white_marketWhite.Market
shadow_payShadowPay
skinsSKINS
skin_swapSkinSwap
cs_dealsCS.Deals
loot_farmLoot.farm
cs_tradeCS.TRADE
tradeitTradeit.gg
steamOrdini di acquistoSteam
sihSIH Market

Offerte

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

GET/v1/offers

L'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, facoltativo

stringIl nome di un oggetto. Ripetilo per un lotto fino a 100. Tutti gli oggetti in vendita se omesso

providersquery, facoltativo

stringMarketplace 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

GET/v1/offers/{market_hash_name}

L'offerta più economica di un oggetto su ogni marketplace. 404 se nessuno lo ha.

Parametri

market_hash_namepath

stringIl nome dell'oggetto, codificato per URL

providersquery, facoltativo

stringMarketplace 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

GET/v1/orders

L'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, facoltativo

stringIl nome di un oggetto. Ripetilo per un lotto fino a 100. Tutti gli oggetti con un ordine se omesso

providersquery, facoltativo

stringMarketplace 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

GET/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_namepath

stringIl nome dell'oggetto, codificato per URL

providersquery, facoltativo

stringMarketplace 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

GET/v1/sales/summary

Un 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, facoltativo

stringIl nome di un oggetto. Ripetilo per un lotto fino a 100. Tutti gli oggetti venduti negli ultimi 90 giorni se omesso

providersquery, facoltativo

stringMarketplace 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

GET/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_namepath

stringIl nome dell'oggetto, codificato per URL

providersquery, facoltativo

stringMarketplace 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

GET/v1/items

Che 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, facoltativo

stringIl nome di un oggetto. Ripetilo per un lotto fino a 100. Tutti gli oggetti se omesso

typequery, facoltativo

stringskin, sticker, agent, charm, patch, music_kit, graffiti, collectible, container. Separati da virgole, uno qualsiasi

weaponquery, facoltativo

stringId delle armi: awp, ak-47, karambit, sport-gloves.... Separati da virgole, uno qualsiasi

collectionquery, facoltativo

stringId delle collezioni: the-dust-2-collection.... Separati da virgole, uno qualsiasi

containerquery, facoltativo

stringId delle casse e dei pacchetti da cui proviene: dreams-nightmares-case.... Separati da virgole, uno qualsiasi

rarityquery, facoltativo

stringId 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, facoltativo

stringNormal, StatTrak™, Souvenir, ★ o ★ StatTrak™. Separati da virgole, uno qualsiasi

limitquery, facoltativo

numberIl numero massimo di oggetti nella risposta, 1 o più. Tutti gli oggetti se omesso, e il limit della risposta è allora quanti ne contiene

offsetquery, facoltativo

numberOggetti 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

GET/v1/items/{market_hash_name}

Che cos'è un oggetto. 404 se non esiste un oggetto con quel nome.

Parametri

market_hash_namepath

stringIl 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

GET/v1/robots/dmarket

I 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

GET/v1/robots/dmarket/accounts/{account_id}/inventory

Gli 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_idpath

stringL'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

GET/v1/robots/dmarket/offers

Le 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

POST/v1/robots/dmarket/offers

Mette 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_idbody

stringL'id DMarket dell'oggetto, dall'inventario dell'account

min_pricebody

numberUSD, al massimo due decimali

max_pricebody

numberUSD, al massimo due decimali

account_idbody, facoltativo

stringL'account proprietario dell'oggetto. Obbligatorio per metterlo in vendita

market_hash_namebody, facoltativo

stringIl 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

DELETE/v1/robots/dmarket/offers

Dimentica l'offerta: il robot non la muove più e l'oggetto resta in vendita su DMarket all'ultimo prezzo.

Parametri

asset_idquery

stringL'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

GET/v1/robots/dmarket/orders

I 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

POST/v1/robots/dmarket/orders

Inserisce 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_namebody

stringIl nome dell'oggetto

min_pricebody

numberUSD, al massimo due decimali

max_pricebody

numberUSD, al massimo due decimali

account_idbody, facoltativo

stringL'account con cui comprare. Omettibile se hai un solo account

amountbody, facoltativo

numberQuanti 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

DELETE/v1/robots/dmarket/orders

Dimentica l'ordine: il robot non lo muove più e resta su DMarket all'ultimo prezzo.

Parametri

market_hash_namequery

stringIl nome dell'oggetto

account_idquery, facoltativo

stringL'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

GET/v1/robots/dmarket/monitor

Ogni 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, facoltativo

stringParole che devono esserci tutte nel nome

min_pricequery, facoltativo

numberPrezzo di acquisto minimo, USD

max_pricequery, facoltativo

numberPrezzo di acquisto massimo, USD

min_profitquery, facoltativo

numberProfitto minimo al netto della commissione, USD

min_marginquery, facoltativo

numberMargine minimo, percentuale del prezzo di acquisto

min_gapquery, facoltativo

numberDivario minimo tra miglior ordine e offerta più economica, USD

min_liquidityquery, facoltativo

numberLiquidità minima, da 0 a 100

max_feequery, facoltativo

numberCommissione massima, percentuale

min_units_volumequery, facoltativo

numberMinimo di oggetti venduti in 15 giorni tipici su DMarket (units_volume)

min_dollar_volumequery, facoltativo

numberMinimo di USD venduti in 15 giorni tipici su DMarket (dollar_volume)

hidequery, facoltativo

stringSeparati da virgole: stickers, graffiti, souvenir, stattrak

comparequery, facoltativo

stringAltri 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, facoltativo

stringLo stesso con gli ordini più alti di altri marketplace: market_csgo:5 (Market.CSGO o Steam). Gli ordini tornano in compare_orders

sortquery, facoltativo

stringprofit (se omesso), margin, liquidity, price o volume (dollar_volume)

limitquery, facoltativo

numberOggetti nella risposta, da 1 a 100 (100 se omesso)

offsetquery, facoltativo

numberOggetti 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

GET/v1/robots/market-csgo

I 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

GET/v1/robots/market-csgo/accounts/{account_id}/inventory

Gli oggetti Steam che Market.CSGO può vendere dall'account, con l'asset_id per vendere ciascuno.

Parametri

account_idpath

stringL'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

GET/v1/robots/market-csgo/offers

Le 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

POST/v1/robots/market-csgo/offers

Mette 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_idbody

stringL'asset id Steam dell'oggetto, dall'inventario dell'account

min_pricebody

numberUSD, al massimo due decimali

max_pricebody

numberUSD, al massimo due decimali

account_idbody, facoltativo

stringL'account proprietario dell'oggetto. Obbligatorio per metterlo in vendita

market_hash_namebody, facoltativo

stringIl 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

DELETE/v1/robots/market-csgo/offers

Dimentica l'offerta: il robot non la muove più e l'oggetto resta in vendita su Market.CSGO all'ultimo prezzo.

Parametri

asset_idquery

stringL'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

GET/v1/robots/market-csgo/orders

I 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

POST/v1/robots/market-csgo/orders

Inserisce 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_namebody

stringIl nome dell'oggetto

min_pricebody

numberUSD, al massimo due decimali

max_pricebody

numberUSD, al massimo due decimali

account_idbody, facoltativo

stringL'account con cui comprare. Omettibile se hai un solo account

amountbody, facoltativo

numberQuanti 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

DELETE/v1/robots/market-csgo/orders

Dimentica l'ordine: il robot non lo muove più e resta su Market.CSGO all'ultimo prezzo.

Parametri

market_hash_namequery

stringIl nome dell'oggetto

account_idquery, facoltativo

stringL'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.

AbbonamentoRichieste / minutoRichieste di offerte e ordini / 30 giorni
Gratis60100
Trader1205,000
Pro30025,000
Business300100,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