API
API-Dokumentation
Erste Schritte
Jede Anfrage geht an https://api.apiskins.com und braucht deinen Schlüssel im Header X-API-KEY. Antworten sind JSON; Preise sind USD.
Eine fehlgeschlagene Anfrage antwortet mit einem HTTP-Status und einer Fehlermeldung in JSON. Limits und Fehler
Die gesamte API gibt es auch als OpenAPI-Dokument, für Codegeneratoren und KI-Agenten.
Marktplätze
Die Anbieternamen für providers und in Antworten. Jeder Marktplatz hat Angebote; nur die markierten haben auch Kaufaufträge.
cs_floatCSFloatbuff_163Buff.163youpinYouPin898dmarketKaufaufträgeDMarketskinportSkinportcs_moneycs.moneymarket_csgoKaufaufträgeMarket.CSGObuff_marketBuff.MarketwaxpeerWaxpeerlis_skinsLis-skinsskin_baronSkinBaronhalo_skinsHaloSkinswhite_marketWhite.Marketshadow_payShadowPayskinsSKINSskin_swapSkinSwapcs_dealsCS.Dealsloot_farmLoot.farmcs_tradeCS.TRADEtradeitTradeit.ggsteamKaufaufträgeSteamsihSIH MarketAngebote
Das günstigste Angebot (niedrigster Preis) jedes Artikels auf jedem erfassten Marktplatz. Antworten sind für Clients, die es akzeptieren, gzip-komprimiert, sodass jeder Artikel auf jedem Marktplatz in einer Anfrage kommt.
Wir erfassen Waffen-Skins (normal und StatTrak™), Messer, Handschuhe, Kisten und Kapseln, Agenten, Musikkits, Aufnäher, Anhänger, Pins und Pässe. Souvenir-Artikel, Sticker und Graffiti werden nicht erfasst.
Angebote vieler Artikel
/v1/offersDas günstigste Angebot (niedrigster Preis) von Artikeln auf jedem Marktplatz. Nenne bis zu 100 Artikel mit market_hash_name als Paket oder lass es weg für alle gelisteten Artikel in einer Antwort. Ein Artikel, den kein Marktplatz listet, fehlt in der Antwort.
Parameter
market_hash_namequery, optionalstringDer Name eines Artikels. Für ein Paket bis 100 wiederholen. Alle gelisteten Artikel, wenn weggelassen
providersquery, optionalstringKommagetrennte Marktplätze (siehe Marktplätze). Alle, wenn weggelassen
Anfrage
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();Antwort 200
[
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"offers": [
{
"provider": "buff_163",
"price": 31.42
},
{
"provider": "cs_float",
"price": 33.1
}
]
}
]- Im kostenlosen Abonnement wird nur Steam beantwortet: ohne providers enthält die Antwort nur Steam, und die Abfrage eines anderen Marktplatzes antwortet 403. Bezahlte Abonnements bekommen alle Marktplätze.
- Ein Marktplatz, der einen Artikel nicht listet, fehlt in dessen Angeboten.
- Antworten sind für Clients, die es akzeptieren, gzip-komprimiert (jede HTTP-Bibliothek; bei curl --compressed hinzufügen): Jeder Artikel auf jedem Marktplatz sind etwa 28 MB JSON, unter 2 MB mit gzip.
Angebote eines Artikels
/v1/offers/{market_hash_name}Das günstigste Angebot eines Artikels auf jedem Marktplatz. 404, wenn ihn kein Marktplatz listet.
Parameter
market_hash_namepathstringDer URL-kodierte Name des Artikels
providersquery, optionalstringKommagetrennte Marktplätze (siehe Marktplätze). Alle, wenn weggelassen
Anfrage
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();Antwort 200
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"offers": [
{
"provider": "buff_163",
"price": 31.42
},
{
"provider": "cs_float",
"price": 33.1
}
]
}- Im kostenlosen Abonnement wird nur Steam beantwortet: ohne providers enthält die Antwort nur Steam, und die Abfrage eines anderen Marktplatzes antwortet 403. Bezahlte Abonnements bekommen alle Marktplätze.
Kaufaufträge
Der höchste Kaufauftrag jedes Artikels auf DMarket, Market.CSGO und Steam: wofür du einen Artikel jetzt verkaufen kannst. Derselbe Schlüssel, dasselbe 30-Tage-Limit und dieselben komprimierten Antworten wie bei Angeboten.
Kaufaufträge vieler Artikel
/v1/ordersDer höchste Kaufauftrag von Artikeln auf jedem Marktplatz, der welche hat: DMarket (alle paar Sekunden aktualisiert), Market.CSGO (alle 15 Minuten) und Steam (stündlich). Nenne bis zu 100 Artikel mit market_hash_name als Paket oder lass es weg für alle Artikel mit Kaufauftrag in einer Antwort. Ein Artikel ohne Auftrag fehlt.
Parameter
market_hash_namequery, optionalstringDer Name eines Artikels. Für ein Paket bis 100 wiederholen. Alle Artikel mit Kaufauftrag, wenn weggelassen
providersquery, optionalstringKommagetrennte Marktplätze: dmarket, market_csgo, steam. Alle, wenn weggelassen
Anfrage
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();Antwort 200
[
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"orders": [
{
"provider": "dmarket",
"price": 24.51
},
{
"provider": "market_csgo",
"price": 23.822
}
]
}
]- Im kostenlosen Abonnement wird nur Steam beantwortet: ohne providers enthält die Antwort nur Steam, und die Abfrage eines anderen Marktplatzes antwortet 403. Bezahlte Abonnements bekommen alle Marktplätze.
- Ein Marktplatz ohne Kaufauftrag für einen Artikel fehlt in dessen Aufträgen.
- Souvenirs, Sticker und Graffiti sind enthalten. Wie bei Angeboten zählt jede beantwortete Anfrage zum 30-Tage-Limit, und Antworten werden genauso komprimiert.
Kaufaufträge eines Artikels
/v1/orders/{market_hash_name}Der höchste Kaufauftrag eines Artikels auf jedem Marktplatz. 404, wenn keiner einen hat.
Parameter
market_hash_namepathstringDer URL-kodierte Name des Artikels
providersquery, optionalstringKommagetrennte Marktplätze: dmarket, market_csgo, steam. Alle, wenn weggelassen
Anfrage
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();Antwort 200
{
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"orders": [
{
"provider": "dmarket",
"price": 24.51
},
{
"provider": "market_csgo",
"price": 23.822
}
]
}- Im kostenlosen Abonnement wird nur Steam beantwortet: ohne providers enthält die Antwort nur Steam, und die Abfrage eines anderen Marktplatzes antwortet 403. Bezahlte Abonnements bekommen alle Marktplätze.
Verkaufshistorie
Eine Zusammenfassung der Verkäufe jedes Artikels auf DMarket und Market.CSGO: wie viele verkauft wurden, Median- und Durchschnittspreis der letzten 7, 15, 30 und 90 Tage und was typische 15 Tage bringen. Derselbe Schlüssel, dasselbe 30-Tage-Limit und dieselben gzip-Antworten wie bei Angeboten.
Verkaufszusammenfassung mehrerer Artikel
/v1/sales/summaryEine Zusammenfassung der Verkäufe von Artikeln auf jedem Marktplatz: DMarket (alle paar Stunden aktualisiert) und Market.CSGO (etwa stündlich). Gib bis zu 100 Artikel mit market_hash_name für einen Batch an oder lass es weg, um alle in den letzten 90 Tagen verkauften Artikel in einer Antwort zu erhalten. Ein Artikel ohne Verkäufe in den letzten 90 Tagen fehlt.
Parameter
market_hash_namequery, optionalstringDer Name eines Artikels. Für einen Batch von bis zu 100 wiederholen. Ohne Angabe alle in den letzten 90 Tagen verkauften Artikel
providersquery, optionalstringKommagetrennte Marktplätze: dmarket, market_csgo. Beide, wenn weggelassen
Anfrage
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();Antwort 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"
}
]
}
]- Braucht ein bezahltes Abonnement: im kostenlosen antwortet jede Anfrage 403.
- In jedem Zeitraum gibt sales an, wie viele Artikel verkauft wurden, median und avg ihren Median- und Durchschnittspreis in USD. median und avg sind null bei einem Zeitraum ohne Verkäufe.
- index_volume_units (Volumenindex in Stück) und index_volume_dollars (Volumenindex in Dollar) sagen, was typische 15 Tage bringen: Die letzten 90 Tage werden in sechs Zeiträume von 15 Tagen geteilt, ein Zeitraum ohne Verkäufe zählt als 0. index_volume_units ist der Median der verkauften Stückzahlen je Zeitraum, index_volume_dollars der Median ihrer USD-Summen, sodass ein einzelner sehr aktiver oder toter Abschnitt sie nicht verändert.
- Eine Zusammenfassung wird nach jedem Durchlauf über die Verkäufe eines Marktplatzes berechnet; updated_at sagt, wann.
- Market.CSGO zeigt uns höchstens die letzten 6,000 Verkäufe eines Artikels, daher können die meistverkauften Artikel niedrige Werte bei last_90d, index_volume_units und index_volume_dollars zeigen, bis wir volle 90 Tage erfasst haben.
- Doppler- und Gamma-Doppler-Phasen teilen sich ihre Marktnamen, ein Datensatz deckt also jede Phase ab.
- Souvenirs, Sticker und Graffiti sind enthalten. Wie bei Angeboten zählt jede beantwortete Anfrage zum 30-Tage-Limit, und Antworten werden genauso komprimiert.
Verkaufszusammenfassung eines Artikels
/v1/sales/summary/{market_hash_name}Eine Zusammenfassung der Verkäufe eines Artikels auf jedem Marktplatz. 404, wenn ihn in den letzten 90 Tagen keiner verkauft hat.
Parameter
market_hash_namepathstringDer URL-kodierte Name des Artikels
providersquery, optionalstringKommagetrennte Marktplätze: dmarket, market_csgo. Beide, wenn weggelassen
Anfrage
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();Antwort 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"
}
]
}- Braucht ein bezahltes Abonnement: im kostenlosen antwortet jede Anfrage 403.
Artikel
Was jeder CS2-Artikel ist: Typ, Waffe, Abnutzung und Float-Bereich, Qualität, Seltenheit, Kollektionen und Kisten. Zum Filtern von Artikeln auf einem Marktplatz, über denselben market_hash_name wie Angebote und Aufträge. Jeder Skin, Sticker, Agent, Anhänger, jede Kiste und der Rest, Souvenirs inklusive. Wie bei Angeboten zählt jede beantwortete Anfrage zum 30-Tage-Limit.
Viele Artikel
/v1/itemsWas jeder CS2-Artikel ist: Typ, Waffe, Abnutzung und Float-Bereich, Qualität, Seltenheit, Kollektionen und Kisten, ein Datensatz pro market_hash_name, zum Filtern von Artikeln auf einem Marktplatz. Alle Artikel in einer Antwort (etwa 2 MB mit gzip), eine Seite davon mit limit und offset, oder bis zu 100 per market_hash_name genannt. Die Filter schränken beides ein.
Parameter
market_hash_namequery, optionalstringDer Name eines Artikels. Für ein Paket bis 100 wiederholen. Alle Artikel, wenn weggelassen
typequery, optionalstringskin, sticker, agent, charm, patch, music_kit, graffiti, collectible, container. Kommagetrennt, beliebig
weaponquery, optionalstringWaffen-IDs: awp, ak-47, karambit, sport-gloves.... Kommagetrennt, beliebig
collectionquery, optionalstringKollektions-IDs: the-dust-2-collection.... Kommagetrennt, beliebig
containerquery, optionalstringIDs der Kisten und Pakete, aus denen er fällt: dreams-nightmares-case.... Kommagetrennt, beliebig
rarityquery, optionalstringSeltenheits-IDs: consumer, industrial, mil-spec, restricted, classified, covert, contraband sowie die für Sticker und Agenten (high, remarkable, exotic, extraordinary, distinguished, exceptional, superior, master). Kommagetrennt, beliebig
qualityquery, optionalstringNormal, StatTrak™, Souvenir, ★ oder ★ StatTrak™. Kommagetrennt, beliebig
limitquery, optionalnumberDie meisten Items in der Antwort, 1 oder mehr. Weggelassen alle Items, und das limit der Antwort ist dann, wie viele sie enthält
offsetquery, optionalnumberZu überspringende Artikel, für die nächste Seite
Anfrage
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();Antwort 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"
}
]
}- Braucht ein bezahltes Abonnement: im kostenlosen antwortet jede Anfrage 403.
- type ist skin für jeden Waffen-Skin, jedes Messer und jeden Handschuh (category unterscheidet sie: knives, gloves, rifles, pistols, smgs, heavy, equipment), container für Kisten, Kapseln und Pakete (category ist ihre Art: case, sticker_capsule, souvenir_package...).
- min_float und max_float sind die möglichen Floats des Artikels: der eigene Bereich des Skins innerhalb seiner Abnutzung. null bei Artikeln ohne Float.
- details enthält weitere Angaben: Tournament, Team, Player und Effect eines Stickers, Side eines Agenten, Released-Datum eines Containers.
- Doppler- und Gamma-Doppler-Phasen teilen sich ihre Marktnamen, ein Datensatz deckt also jede Phase ab.
- Wie Angebotsanfragen zählt jede beantwortete Anfrage zum 30-Tage-Limit, egal wie viele Items sie enthält, und Antworten werden genauso mit gzip komprimiert.
Ein Artikel
/v1/items/{market_hash_name}Was ein Artikel ist. 404, wenn es keinen Artikel dieses Namens gibt.
Parameter
market_hash_namepathstringDer URL-kodierte Name des Artikels
Anfrage
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();Antwort 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"
}- Braucht ein bezahltes Abonnement: im kostenlosen antwortet jede Anfrage 403.
Roboter für DMarket
Verwalte deine DMarket-Angebote und -Aufträge mit demselben Schlüssel. Konten und ihre DMarket-API-Schlüssel werden nur auf der Roboter-Seite hinzugefügt, nie über die API. Roboter-Routen brauchen ein bezahltes Abonnement und zählen nur zum Minutenlimit, nie zum 30-Tage-Limit.
- Angebote: beliebig viele pro Konto. Aufträge (DMarket-„Targets“): bis zu 100 pro Konto, DMarkets eigenes Limit.
- DMarket kann den Preis eines Auftrags nicht ändern: Der Roboter ersetzt ihn durch einen neuen zum neuen Preis.
Konten und Limits
/v1/robots/dmarketDeine DMarket-Konten im Roboter (auf der Roboter-Seite mit ihren DMarket-API-Schlüsseln verbunden) und die Limits deines Abonnements dafür.
Anfrage
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();Antwort 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"
}
]
}- Ein Limit von null bedeutet kein Limit unsererseits.
- paused: Das Konto liegt über den Konten deines Abonnements; seine Angebote und Aufträge warten.
- enabled: false bedeutet, dass es auf der Robot-Seite ausgeschaltet wurde: Der Robot bewegt es nicht mehr, es bleibt zum letzten Preis auf dem Marktplatz und zählt weiter zu den Limits.
Inventar eines Kontos
/v1/robots/dmarket/accounts/{account_id}/inventoryDie Artikel im DMarket-Inventar des Kontos, mit der asset_id zum Verkauf. sellable ist false bei Artikeln, die DMarket nicht einstellen lässt.
Parameter
account_idpathstringDie ID des Kontos aus GET /v1/robots/dmarket
Anfrage
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();Antwort 200
[
{
"asset_id": "4c1d8e2f-0b6a-4a51-9f3e-2d7c8b1a6e05",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"sellable": true,
"suggested_price": 33.1
}
]Angebote auflisten
/v1/robots/dmarket/offersDeine Angebote auf DMarket, auf allen Konten, älteste zuerst.
Anfrage
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();Antwort 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"
}
]Angebot einstellen oder aktualisieren
/v1/robots/dmarket/offersStellt einen Artikel ein oder überschreibt die Preise seines Angebots, gefunden über asset_id. Der Roboter stellt den Artikel auf DMarket ein und hält ihn als günstigstes Angebot, nie unter min_price. Ohne Konkurrenz verkauft er zu max_price. Neue Preise gelten binnen Sekunden oder wenn der Preis entsperrt wird: Ein vom Roboter geänderter Preis bleibt 15 Minuten.
Parameter
asset_idbodystringDie DMarket-ID des Artikels aus dem Inventar des Kontos
min_pricebodynumberUSD, höchstens zwei Dezimalstellen
max_pricebodynumberUSD, höchstens zwei Dezimalstellen
account_idbody, optionalstringDas Konto, dem der Artikel gehört. Zum Einstellen erforderlich
market_hash_namebody, optionalstringDer Name des Artikels. Zum Einstellen erforderlich
Anfrage
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();Antwort 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"
}Angebot entfernen
/v1/robots/dmarket/offersVergisst das Angebot: Der Robot bewegt es nicht mehr, und der Artikel bleibt zum letzten Preis auf DMarket im Verkauf.
Parameter
asset_idquerystringDie DMarket-ID des Artikels aus dem Inventar des Kontos
Anfrage
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();Antwort 200
{
"removed": true
}- removed ist false, wenn der Roboter kein solches Angebot hatte.
Aufträge auflisten
/v1/robots/dmarket/ordersDeine Kaufaufträge auf DMarket, auf allen Konten, älteste zuerst.
Anfrage
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();Antwort 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"
}
]Auftrag platzieren oder aktualisieren
/v1/robots/dmarket/ordersPlatziert deinen Auftrag für einen Artikel auf einem Konto oder überschreibt die Preise des vorhandenen. Der Roboter platziert einen DMarket-Kaufauftrag (ein „Target“) und hält ihn am höchsten, nie über max_price. Ohne Konkurrenz bietet er min_price. DMarket erlaubt bis zu 100 Aufträge pro Konto. DMarket kann den Preis eines Auftrags nicht ändern: Jeder neue Preis ist ein neues Target anstelle des alten. Er kauft jeweils 1 Artikel, bis die Menge erreicht ist, und ein Auftrag wird nur platziert, wenn sein Preis das Guthaben des Kontos nicht übersteigt.
Parameter
market_hash_namebodystringDer Name des Artikels
min_pricebodynumberUSD, höchstens zwei Dezimalstellen
max_pricebodynumberUSD, höchstens zwei Dezimalstellen
account_idbody, optionalstringDas Konto zum Kaufen. Kann weggelassen werden, wenn du ein Konto hast
amountbody, optionalnumberWie viele gekauft werden, 1 bis 100. Zum Platzieren erforderlich; nur vor dem Platzieren änderbar
Anfrage
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();Antwort 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"
}- Die Menge eines platzierten Auftrags sinkt nur mit der Ausführung: Entferne ihn und füge ihn neu hinzu, um mehr zu kaufen.
Auftrag entfernen
/v1/robots/dmarket/ordersVergisst den Auftrag: Der Robot bewegt ihn nicht mehr, und er bleibt zum letzten Preis auf DMarket.
Parameter
market_hash_namequerystringDer Name des Artikels
account_idquery, optionalstringDas Konto des Auftrags. Kann weggelassen werden, wenn du ein Konto hast
Anfrage
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();Antwort 200
{
"removed": true
}- removed ist false, wenn der Roboter keinen solchen Auftrag hatte.
Monitor
/v1/robots/dmarket/monitorJeder Artikel auf DMarket mit dem Gewinn, sein bester Kaufauftrag (buy_price, 1 Cent über dem besten Auftrag) und dann sein günstigstes Angebot (sell_price, 1 Cent unter dem günstigsten) zu werden, nach DMarkets Gebühr für diesen Artikel. DMarkets beste Aufträge und Angebote werden alle paar Sekunden aktualisiert, die Preise der anderen Marktplätze so oft, wie jeder sich aktualisiert, von alle 5 Minuten bis stündlich. Nur gesendete Filter gelten: ohne sie jeder Artikel mit Kaufauftrag, die profitabelsten zuerst. Ein Artikel ohne Angebot auf DMarket erscheint auch, mit best_offer, sell_price, profit und margin_percent als null: Die Filter für Gewinn, Marge und Abstand lassen ihn durch. dollar_volume und units_volume zeigen, was sich auf DMarket typischerweise in 15 Tagen verkauft: der Median der letzten 90 Tage in sechs 15-Tage-Abschnitten.
Parameter
qquery, optionalstringWörter, die alle im Namen stehen müssen
min_pricequery, optionalnumberNiedrigster Kaufpreis, USD
max_pricequery, optionalnumberHöchster Kaufpreis, USD
min_profitquery, optionalnumberNiedrigster Gewinn nach Gebühr, USD
min_marginquery, optionalnumberNiedrigste Marge, Prozent des Kaufpreises
min_gapquery, optionalnumberNiedrigster Abstand zwischen bestem Auftrag und günstigstem Angebot, USD
min_liquidityquery, optionalnumberNiedrigste Liquidität, 0 bis 100
max_feequery, optionalnumberHöchste Gebühr, Prozent
min_units_volumequery, optionalnumberMindestzahl verkaufter Artikel in typischen 15 Tagen auf DMarket (units_volume)
min_dollar_volumequery, optionalnumberMindestumsatz in USD in typischen 15 Tagen auf DMarket (dollar_volume)
hidequery, optionalstringKommagetrennt: stickers, graffiti, souvenir, stattrak
comparequery, optionalstringAndere Marktplätze und um wie viel Prozent ihr niedrigster Preis über dem Kaufpreis liegen muss: buff_163:5,cs_float:3. Ein Marktplatz, der den Artikel nicht listet, wird übersprungen. Ihre Preise kommen in compare zurück
compare_ordersquery, optionalstringDasselbe mit den höchsten Kaufaufträgen anderer Marktplätze: market_csgo:5 (Market.CSGO oder Steam). Ihre Aufträge kommen in compare_orders zurück
sortquery, optionalstringprofit (wenn weggelassen), margin, liquidity, price oder volume (dollar_volume)
limitquery, optionalnumberArtikel in der Antwort, 1 bis 100 (100, wenn weggelassen)
offsetquery, optionalnumberZu überspringende Artikel, für die nächste Seite
Anfrage
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();Antwort 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": {}
}
]
}- Braucht ein bezahltes Abo, wie jede Robot-Route. Anders als diese zählt jede beantwortete Anfrage auch zum 30-Tage-Limit, wie Angebotsanfragen, mit denselben Headern X-Usage-Limit und X-Usage-Remaining.
Status von Angeboten und Aufträgen
pending- Noch nicht eingestellt oder platziert
active- Auf dem Marktplatz, innerhalb deiner Limits vorn gehalten. Ein vom Roboter geänderter Preis bleibt 15 Minuten; danach beobachtet er den Markt jede Sekunde
paused- Über den Angeboten, Aufträgen oder Konten deines Abonnements: wartet, bis du upgradest oder andere entfernst
sold- Angebote: verkauft
closed- Angebote: vom Verkauf genommen oder der Artikel hat das Inventar verlassen. Aufträge: vollständig gekauft oder entfernt. error nennt den Grund, falls es einen gibt
Roboter für market.csgo.com
Verwalte deine Market.CSGO-Angebote und -Aufträge mit demselben Schlüssel. Konten und ihre Market.CSGO-API-Schlüssel werden nur auf der Roboter-Seite hinzugefügt, nie über die API. Roboter-Routen brauchen ein bezahltes Abonnement und zählen nur zum Minutenlimit, nie zum 30-Tage-Limit.
- Angebote: beliebig viele pro Konto. Aufträge: bis zu 100 pro Konto, einer pro Artikel, direkt geändert.
- Die Kontowährung auf Market.CSGO muss USD sein. Angebote erscheinen nur, solange du in der App oder Browser-Erweiterung von Market.CSGO online bist.
Konten und Limits
/v1/robots/market-csgoDeine Market.CSGO-Konten im Roboter (auf der Roboter-Seite mit ihren Market.CSGO-API-Schlüsseln verbunden) und die Limits deines Abonnements dafür. Das Feld note eines Kontos nennt, was dem Verkauf im Weg steht, etwa offline zu sein.
Anfrage
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();Antwort 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"
}
]
}- Ein Limit von null bedeutet kein Limit unsererseits.
- paused: Das Konto liegt über den Konten deines Abonnements; seine Angebote und Aufträge warten.
- enabled: false bedeutet, dass es auf der Robot-Seite ausgeschaltet wurde: Der Robot bewegt es nicht mehr, es bleibt zum letzten Preis auf dem Marktplatz und zählt weiter zu den Limits.
Inventar eines Kontos
/v1/robots/market-csgo/accounts/{account_id}/inventoryDie Steam-Artikel, die Market.CSGO vom Konto verkaufen kann, mit der asset_id zum Verkauf.
Parameter
account_idpathstringDie ID des Kontos aus GET /v1/robots/market-csgo
Anfrage
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();Antwort 200
[
{
"asset_id": "38215462179",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"sellable": true,
"suggested_price": 33.1
}
]Angebote auflisten
/v1/robots/market-csgo/offersDeine Angebote auf Market.CSGO, auf allen Konten, älteste zuerst.
Anfrage
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();Antwort 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"
}
]Angebot einstellen oder aktualisieren
/v1/robots/market-csgo/offersStellt einen Artikel ein oder überschreibt die Preise seines Angebots, gefunden über asset_id. Der Roboter stellt den Artikel auf Market.CSGO zum Verkauf und hält ihn als günstigstes Angebot, nie unter min_price. Ohne Konkurrenz verkauft er zu max_price. Angebote erscheinen nur, solange das Konto in der App oder Browser-Erweiterung von Market.CSGO online ist. Neue Preise gelten binnen Sekunden oder wenn der Preis entsperrt wird: Ein vom Roboter geänderter Preis bleibt 15 Minuten.
Parameter
asset_idbodystringDie Steam-Asset-ID des Artikels aus dem Inventar des Kontos
min_pricebodynumberUSD, höchstens zwei Dezimalstellen
max_pricebodynumberUSD, höchstens zwei Dezimalstellen
account_idbody, optionalstringDas Konto, dem der Artikel gehört. Zum Einstellen erforderlich
market_hash_namebody, optionalstringDer Name des Artikels. Zum Einstellen erforderlich
Anfrage
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();Antwort 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"
}Angebot entfernen
/v1/robots/market-csgo/offersVergisst das Angebot: Der Robot bewegt es nicht mehr, und der Artikel bleibt zum letzten Preis auf Market.CSGO im Verkauf.
Parameter
asset_idquerystringDie Steam-Asset-ID des Artikels aus dem Inventar des Kontos
Anfrage
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();Antwort 200
{
"removed": true
}- removed ist false, wenn der Roboter kein solches Angebot hatte.
Aufträge auflisten
/v1/robots/market-csgo/ordersDeine Kaufaufträge auf Market.CSGO, auf allen Konten, älteste zuerst.
Anfrage
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();Antwort 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"
}
]Auftrag platzieren oder aktualisieren
/v1/robots/market-csgo/ordersPlatziert deinen Auftrag für einen Artikel auf einem Konto oder überschreibt die Preise des vorhandenen. Der Roboter platziert einen Market.CSGO-Kaufauftrag und hält ihn am höchsten, nie über max_price. Ohne Konkurrenz bietet er min_price. Market.CSGO erlaubt einen Auftrag pro Artikel und bis zu 100 pro Konto und ändert den Preis direkt.
Parameter
market_hash_namebodystringDer Name des Artikels
min_pricebodynumberUSD, höchstens zwei Dezimalstellen
max_pricebodynumberUSD, höchstens zwei Dezimalstellen
account_idbody, optionalstringDas Konto zum Kaufen. Kann weggelassen werden, wenn du ein Konto hast
amountbody, optionalnumberWie viele gekauft werden, 1 bis 100. Zum Platzieren erforderlich; nur vor dem Platzieren änderbar
Anfrage
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();Antwort 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"
}- Die Menge eines platzierten Auftrags sinkt nur mit der Ausführung: Entferne ihn und füge ihn neu hinzu, um mehr zu kaufen.
Auftrag entfernen
/v1/robots/market-csgo/ordersVergisst den Auftrag: Der Robot bewegt ihn nicht mehr, und er bleibt zum letzten Preis auf Market.CSGO.
Parameter
market_hash_namequerystringDer Name des Artikels
account_idquery, optionalstringDas Konto des Auftrags. Kann weggelassen werden, wenn du ein Konto hast
Anfrage
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();Antwort 200
{
"removed": true
}- removed ist false, wenn der Roboter keinen solchen Auftrag hatte.
Status von Angeboten und Aufträgen
pending- Noch nicht eingestellt oder platziert
active- Auf dem Marktplatz, innerhalb deiner Limits vorn gehalten. Ein vom Roboter geänderter Preis bleibt 15 Minuten; danach beobachtet er den Markt jede Sekunde
paused- Über den Angeboten, Aufträgen oder Konten deines Abonnements: wartet, bis du upgradest oder andere entfernst
sold- Angebote: verkauft
closed- Angebote: vom Verkauf genommen oder der Artikel hat das Inventar verlassen. Aufträge: vollständig gekauft oder entfernt. error nennt den Grund, falls es einen gibt
Limits und Fehler
Zwei Limits, beide pro Abo. Jede Anfrage zählt zum Minutenlimit; eine darüber bekommt 429 mit einem Retry-After-Header in Sekunden. Jede beantwortete Anfrage nach Angeboten, Kaufaufträgen, Verkäufen, Items oder dem Monitor zählt außerdem zum 30-Tage-Limit, egal wie viele Items sie nennt; die Zählung beginnt alle 30 Tage ab dem Start deines Abos neu, und die Header X-Usage-Limit und X-Usage-Remaining zeigen, wo du stehst.
| Abonnement | Anfragen / Minute | Angebots- und Auftragsanfragen / 30 Tage |
|---|---|---|
| Kostenlos | 60 | 100 |
| Trader | 120 | 5,000 |
| Pro | 300 | 25,000 |
| Business | 300 | 100,000 |
400- Etwas an der Anfrage stimmt nicht: unbekannter Anbieter oder Artikeltyp, fehlerhafter Body, mehr als 100 Artikel, Limit außerhalb des Bereichs
401- Der Schlüssel fehlt oder ist falsch
403- Ein bezahltes Abonnement ist nötig: für jeden Marktplatz außer Steam, die Routen der Verkaufsübersicht und der Items sowie die Roboter- und Monitor-Routen
404- Kein solcher Artikel, Roboter oder Konto
409- Derzeit nicht möglich: über den Angeboten, Aufträgen oder Konten des Abonnements oder Änderung der Menge eines platzierten Auftrags
429- Das Minutenlimit (warte Retry-After Sekunden) oder das 30-Tage-Limit ist erreicht
502- Der Marktplatz hat dem Roboter nicht geantwortet; versuche es erneut