API Skins

API

API-Dokumentation

Preise jedes CS2-Skins auf 22 Marktplätzen und deine Trading-Roboter, aus deinem eigenen Code. Ein Schlüssel für beides.

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_floatCSFloat
buff_163Buff.163
youpinYouPin898
dmarketKaufaufträgeDMarket
skinportSkinport
cs_moneycs.money
market_csgoKaufaufträgeMarket.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
steamKaufaufträgeSteam
sihSIH Market

Angebote

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

GET/v1/offers

Das 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, optional

stringDer Name eines Artikels. Für ein Paket bis 100 wiederholen. Alle gelisteten Artikel, wenn weggelassen

providersquery, optional

stringKommagetrennte 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

GET/v1/offers/{market_hash_name}

Das günstigste Angebot eines Artikels auf jedem Marktplatz. 404, wenn ihn kein Marktplatz listet.

Parameter

market_hash_namepath

stringDer URL-kodierte Name des Artikels

providersquery, optional

stringKommagetrennte 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

GET/v1/orders

Der 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, optional

stringDer Name eines Artikels. Für ein Paket bis 100 wiederholen. Alle Artikel mit Kaufauftrag, wenn weggelassen

providersquery, optional

stringKommagetrennte 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

GET/v1/orders/{market_hash_name}

Der höchste Kaufauftrag eines Artikels auf jedem Marktplatz. 404, wenn keiner einen hat.

Parameter

market_hash_namepath

stringDer URL-kodierte Name des Artikels

providersquery, optional

stringKommagetrennte 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

GET/v1/sales/summary

Eine 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, optional

stringDer Name eines Artikels. Für einen Batch von bis zu 100 wiederholen. Ohne Angabe alle in den letzten 90 Tagen verkauften Artikel

providersquery, optional

stringKommagetrennte 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

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

stringDer URL-kodierte Name des Artikels

providersquery, optional

stringKommagetrennte 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

GET/v1/items

Was 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, optional

stringDer Name eines Artikels. Für ein Paket bis 100 wiederholen. Alle Artikel, wenn weggelassen

typequery, optional

stringskin, sticker, agent, charm, patch, music_kit, graffiti, collectible, container. Kommagetrennt, beliebig

weaponquery, optional

stringWaffen-IDs: awp, ak-47, karambit, sport-gloves.... Kommagetrennt, beliebig

collectionquery, optional

stringKollektions-IDs: the-dust-2-collection.... Kommagetrennt, beliebig

containerquery, optional

stringIDs der Kisten und Pakete, aus denen er fällt: dreams-nightmares-case.... Kommagetrennt, beliebig

rarityquery, optional

stringSeltenheits-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, optional

stringNormal, StatTrak™, Souvenir, ★ oder ★ StatTrak™. Kommagetrennt, beliebig

limitquery, optional

numberDie meisten Items in der Antwort, 1 oder mehr. Weggelassen alle Items, und das limit der Antwort ist dann, wie viele sie enthält

offsetquery, optional

numberZu ü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

GET/v1/items/{market_hash_name}

Was ein Artikel ist. 404, wenn es keinen Artikel dieses Namens gibt.

Parameter

market_hash_namepath

stringDer 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

GET/v1/robots/dmarket

Deine 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

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

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

stringDie 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

GET/v1/robots/dmarket/offers

Deine 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

POST/v1/robots/dmarket/offers

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

stringDie DMarket-ID des Artikels aus dem Inventar des Kontos

min_pricebody

numberUSD, höchstens zwei Dezimalstellen

max_pricebody

numberUSD, höchstens zwei Dezimalstellen

account_idbody, optional

stringDas Konto, dem der Artikel gehört. Zum Einstellen erforderlich

market_hash_namebody, optional

stringDer 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

DELETE/v1/robots/dmarket/offers

Vergisst das Angebot: Der Robot bewegt es nicht mehr, und der Artikel bleibt zum letzten Preis auf DMarket im Verkauf.

Parameter

asset_idquery

stringDie 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

GET/v1/robots/dmarket/orders

Deine 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

POST/v1/robots/dmarket/orders

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

stringDer Name des Artikels

min_pricebody

numberUSD, höchstens zwei Dezimalstellen

max_pricebody

numberUSD, höchstens zwei Dezimalstellen

account_idbody, optional

stringDas Konto zum Kaufen. Kann weggelassen werden, wenn du ein Konto hast

amountbody, optional

numberWie 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

DELETE/v1/robots/dmarket/orders

Vergisst den Auftrag: Der Robot bewegt ihn nicht mehr, und er bleibt zum letzten Preis auf DMarket.

Parameter

market_hash_namequery

stringDer Name des Artikels

account_idquery, optional

stringDas 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

GET/v1/robots/dmarket/monitor

Jeder 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, optional

stringWörter, die alle im Namen stehen müssen

min_pricequery, optional

numberNiedrigster Kaufpreis, USD

max_pricequery, optional

numberHöchster Kaufpreis, USD

min_profitquery, optional

numberNiedrigster Gewinn nach Gebühr, USD

min_marginquery, optional

numberNiedrigste Marge, Prozent des Kaufpreises

min_gapquery, optional

numberNiedrigster Abstand zwischen bestem Auftrag und günstigstem Angebot, USD

min_liquidityquery, optional

numberNiedrigste Liquidität, 0 bis 100

max_feequery, optional

numberHöchste Gebühr, Prozent

min_units_volumequery, optional

numberMindestzahl verkaufter Artikel in typischen 15 Tagen auf DMarket (units_volume)

min_dollar_volumequery, optional

numberMindestumsatz in USD in typischen 15 Tagen auf DMarket (dollar_volume)

hidequery, optional

stringKommagetrennt: stickers, graffiti, souvenir, stattrak

comparequery, optional

stringAndere 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, optional

stringDasselbe 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, optional

stringprofit (wenn weggelassen), margin, liquidity, price oder volume (dollar_volume)

limitquery, optional

numberArtikel in der Antwort, 1 bis 100 (100, wenn weggelassen)

offsetquery, optional

numberZu ü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

GET/v1/robots/market-csgo

Deine 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

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

Die Steam-Artikel, die Market.CSGO vom Konto verkaufen kann, mit der asset_id zum Verkauf.

Parameter

account_idpath

stringDie 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

GET/v1/robots/market-csgo/offers

Deine 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

POST/v1/robots/market-csgo/offers

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

stringDie Steam-Asset-ID des Artikels aus dem Inventar des Kontos

min_pricebody

numberUSD, höchstens zwei Dezimalstellen

max_pricebody

numberUSD, höchstens zwei Dezimalstellen

account_idbody, optional

stringDas Konto, dem der Artikel gehört. Zum Einstellen erforderlich

market_hash_namebody, optional

stringDer 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

DELETE/v1/robots/market-csgo/offers

Vergisst das Angebot: Der Robot bewegt es nicht mehr, und der Artikel bleibt zum letzten Preis auf Market.CSGO im Verkauf.

Parameter

asset_idquery

stringDie 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

GET/v1/robots/market-csgo/orders

Deine 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

POST/v1/robots/market-csgo/orders

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

stringDer Name des Artikels

min_pricebody

numberUSD, höchstens zwei Dezimalstellen

max_pricebody

numberUSD, höchstens zwei Dezimalstellen

account_idbody, optional

stringDas Konto zum Kaufen. Kann weggelassen werden, wenn du ein Konto hast

amountbody, optional

numberWie 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

DELETE/v1/robots/market-csgo/orders

Vergisst den Auftrag: Der Robot bewegt ihn nicht mehr, und er bleibt zum letzten Preis auf Market.CSGO.

Parameter

market_hash_namequery

stringDer Name des Artikels

account_idquery, optional

stringDas 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.

AbonnementAnfragen / MinuteAngebots- und Auftragsanfragen / 30 Tage
Kostenlos60100
Trader1205,000
Pro30025,000
Business300100,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