API Skins

API

Dokumentacja API

Ceny każdego skina CS2 na 22 marketplace'ach i Twoje roboty handlowe z Twojego kodu. Jeden klucz do wszystkiego.

Pierwsze kroki

Każde żądanie idzie na https://api.apiskins.com i wymaga Twojego klucza w nagłówku X-API-KEY. Odpowiedzi są w JSON; ceny w USD.

Nieudane żądanie zwraca status HTTP i komunikat błędu w JSON. Limity i błędy

Całe API jest też dokumentem OpenAPI dla generatorów kodu i agentów AI.

Marketplace'y

Nazwy dostawców do parametru providers i w odpowiedziach. Każdy marketplace ma oferty; tylko oznaczone mają też zlecenia kupna.

cs_floatCSFloat
buff_163Buff.163
youpinYouPin898
dmarketZlecenia kupnaDMarket
skinportSkinport
cs_moneycs.money
market_csgoZlecenia kupnaMarket.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
steamZlecenia kupnaSteam
sihSIH Market

Oferty

Najtańsza oferta (najniższa cena) każdego przedmiotu na każdym śledzonym marketplace. Odpowiedzi są kompresowane gzip dla klientów, którzy to obsługują, więc wszystkie przedmioty ze wszystkich marketplace'ów przychodzą w jednym żądaniu.

Śledzimy skiny broni (zwykłe i StatTrak™), noże, rękawice, skrzynki i kapsuły, agentów, zestawy muzyczne, naszywki, zawieszki, odznaki i przepustki. Przedmioty pamiątkowe, naklejki i graffiti nie są śledzone.

Oferty wielu przedmiotów

GET/v1/offers

Najtańsza oferta (najniższa cena) przedmiotów na każdym marketplace. Podaj do 100 przedmiotów przez market_hash_name jako paczkę lub pomiń, by dostać wszystkie wystawione przedmioty w jednej odpowiedzi. Przedmiot, którego nie ma na żadnym marketplace, jest pomijany.

Parametry

market_hash_namequery, opcjonalnie

stringNazwa przedmiotu. Powtórz dla paczki do 100. Jeśli pominięte, wszystkie wystawione przedmioty

providersquery, opcjonalnie

stringMarketplace'y po przecinku (zob. Marketplace'y). Jeśli pominięte, wszystkie

Żądanie

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();

Odpowiedź 200

[
  {
    "market_hash_name": "AK-47 | Redline (Field-Tested)",
    "offers": [
      {
        "provider": "buff_163",
        "price": 31.42
      },
      {
        "provider": "cs_float",
        "price": 33.1
      }
    ]
  }
]
  • W darmowej subskrypcji odpowiedź obejmuje tylko Steam: bez providers zawiera sam Steam, a prośba o inny marketplace dostaje 403. Płatne subskrypcje dostają wszystkie marketplace'y.
  • Marketplace, który nie ma przedmiotu, jest pomijany w jego ofertach.
  • Odpowiedzi są kompresowane gzip dla klientów, którzy to obsługują (każda biblioteka HTTP; w curl dodaj --compressed): wszystkie przedmioty na wszystkich marketplace'ach to około 28 MB JSON i poniżej 2 MB w gzip.

Oferty jednego przedmiotu

GET/v1/offers/{market_hash_name}

Najtańsza oferta jednego przedmiotu na każdym marketplace. 404, gdy nie ma go nigdzie.

Parametry

market_hash_namepath

stringNazwa przedmiotu zakodowana w URL

providersquery, opcjonalnie

stringMarketplace'y po przecinku (zob. Marketplace'y). Jeśli pominięte, wszystkie

Żądanie

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();

Odpowiedź 200

{
  "market_hash_name": "AK-47 | Redline (Field-Tested)",
  "offers": [
    {
      "provider": "buff_163",
      "price": 31.42
    },
    {
      "provider": "cs_float",
      "price": 33.1
    }
  ]
}
  • W darmowej subskrypcji odpowiedź obejmuje tylko Steam: bez providers zawiera sam Steam, a prośba o inny marketplace dostaje 403. Płatne subskrypcje dostają wszystkie marketplace'y.

Zlecenia kupna

Najwyższe zlecenie kupna każdego przedmiotu na DMarket, Market.CSGO i Steam: za ile możesz sprzedać przedmiot teraz. Ten sam klucz, ten sam limit 30-dniowy i te same skompresowane odpowiedzi co przy ofertach.

Zlecenia kupna wielu przedmiotów

GET/v1/orders

Najwyższe zlecenie kupna przedmiotów na marketplace'ach, które je mają: DMarket (odświeżany co kilka sekund), Market.CSGO (co 15 minut) i Steam (co godzinę). Podaj do 100 przedmiotów przez market_hash_name jako paczkę lub pomiń, by dostać wszystkie przedmioty ze zleceniem w jednej odpowiedzi. Przedmiot bez zlecenia jest pomijany.

Parametry

market_hash_namequery, opcjonalnie

stringNazwa przedmiotu. Powtórz dla paczki do 100. Jeśli pominięte, wszystkie przedmioty ze zleceniem

providersquery, opcjonalnie

stringMarketplace'y po przecinku: dmarket, market_csgo, steam. Jeśli pominięte, wszystkie

Żądanie

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();

Odpowiedź 200

[
  {
    "market_hash_name": "AK-47 | Redline (Field-Tested)",
    "orders": [
      {
        "provider": "dmarket",
        "price": 24.51
      },
      {
        "provider": "market_csgo",
        "price": 23.822
      }
    ]
  }
]
  • W darmowej subskrypcji odpowiedź obejmuje tylko Steam: bez providers zawiera sam Steam, a prośba o inny marketplace dostaje 403. Płatne subskrypcje dostają wszystkie marketplace'y.
  • Marketplace bez zlecenia na przedmiot jest pomijany w jego zleceniach.
  • Przedmioty pamiątkowe, naklejki i graffiti są uwzględnione. Jak przy ofertach, każde obsłużone żądanie liczy się do limitu 30-dniowego, a odpowiedzi są tak samo kompresowane.

Zlecenia kupna jednego przedmiotu

GET/v1/orders/{market_hash_name}

Najwyższe zlecenie kupna jednego przedmiotu na każdym marketplace. 404, gdy nigdzie go nie ma.

Parametry

market_hash_namepath

stringNazwa przedmiotu zakodowana w URL

providersquery, opcjonalnie

stringMarketplace'y po przecinku: dmarket, market_csgo, steam. Jeśli pominięte, wszystkie

Żądanie

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();

Odpowiedź 200

{
  "market_hash_name": "AK-47 | Redline (Field-Tested)",
  "orders": [
    {
      "provider": "dmarket",
      "price": 24.51
    },
    {
      "provider": "market_csgo",
      "price": 23.822
    }
  ]
}
  • W darmowej subskrypcji odpowiedź obejmuje tylko Steam: bez providers zawiera sam Steam, a prośba o inny marketplace dostaje 403. Płatne subskrypcje dostają wszystkie marketplace'y.

Historia sprzedaży

Podsumowanie sprzedaży każdego przedmiotu na DMarket i Market.CSGO: ile sprzedano, mediana i średnia cena z ostatnich 7, 15, 30 i 90 dni oraz ile zwykle sprzedaje się w 15 dni. Ten sam klucz, ten sam limit 30-dniowy i te same odpowiedzi gzip co przy ofertach.

Podsumowanie sprzedaży wielu przedmiotów

GET/v1/sales/summary

Podsumowanie sprzedaży przedmiotów na każdym marketplace: DMarket (odświeżane co kilka godzin) i Market.CSGO (mniej więcej co godzinę). Podaj do 100 przedmiotów przez market_hash_name, aby wysłać partię, lub pomiń parametr, aby w jednej odpowiedzi dostać wszystkie przedmioty sprzedane w ostatnich 90 dniach. Przedmiot bez sprzedaży w ostatnich 90 dniach jest pomijany.

Parametry

market_hash_namequery, opcjonalnie

stringNazwa przedmiotu. Powtórz dla partii do 100. Po pominięciu wszystkie przedmioty sprzedane w ostatnich 90 dniach

providersquery, opcjonalnie

stringMarketplace'y po przecinku: dmarket, market_csgo. Jeśli pominięte, oba

Żądanie

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();

Odpowiedź 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"
      }
    ]
  }
]
  • Wymaga płatnej subskrypcji: w darmowej każde zapytanie dostaje 403.
  • W każdym okresie sales to liczba sprzedanych przedmiotów, a median i avg to ich mediana i średnia cena w USD. Dla okresu bez sprzedaży median i avg mają wartość null.
  • index_volume_units (indeks wolumenu w sztukach) i index_volume_dollars (indeks wolumenu w dolarach) mówią, ile zwykle sprzedaje się w 15 dni: ostatnie 90 dni dzieli się na sześć okresów po 15 dni, a okres bez sprzedaży liczy się jako 0. index_volume_units to mediana liczby sprzedanych przedmiotów w okresach, index_volume_dollars to mediana ich sum w USD, więc jeden bardzo aktywny lub martwy okres ich nie zmienia.
  • Podsumowanie jest obliczane po każdym przejściu przez sprzedaż na marketplace; kiedy, pokazuje updated_at.
  • Market.CSGO pokazuje nam najwyżej 6,000 ostatnich sprzedaży przedmiotu, więc przy najczęściej sprzedawanych przedmiotach last_90d, index_volume_units i index_volume_dollars mogą być zaniżone, dopóki nie zapiszemy pełnych 90 dni.
  • Fazy Doppler i Gamma Doppler dzielą nazwy rynkowe, więc jeden rekord obejmuje każdą fazę.
  • Przedmioty pamiątkowe, naklejki i graffiti są uwzględnione. Jak przy ofertach, każde obsłużone żądanie liczy się do limitu 30-dniowego, a odpowiedzi są tak samo kompresowane.

Podsumowanie sprzedaży jednego przedmiotu

GET/v1/sales/summary/{market_hash_name}

Podsumowanie sprzedaży jednego przedmiotu na każdym marketplace. 404, gdy żaden nie sprzedał go w ostatnich 90 dniach.

Parametry

market_hash_namepath

stringNazwa przedmiotu zakodowana w URL

providersquery, opcjonalnie

stringMarketplace'y po przecinku: dmarket, market_csgo. Jeśli pominięte, oba

Żądanie

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();

Odpowiedź 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"
    }
  ]
}
  • Wymaga płatnej subskrypcji: w darmowej każde zapytanie dostaje 403.

Przedmioty

Czym jest każdy przedmiot CS2: typ, broń, zużycie i zakres float, jakość, rzadkość, kolekcje i skrzynki. Do filtrowania przedmiotów na marketplace, po tym samym market_hash_name co oferty i zlecenia. Każdy skin, naklejka, agent, zawieszka, skrzynka i reszta, w tym pamiątkowe. Jak przy ofertach, każde obsłużone zapytanie liczy się do limitu 30-dniowego.

Wiele przedmiotów

GET/v1/items

Czym jest każdy przedmiot CS2: typ, broń, zużycie i zakres float, jakość, rzadkość, kolekcje i skrzynki, jeden rekord na market_hash_name, do filtrowania przedmiotów na marketplace. Wszystkie przedmioty w jednej odpowiedzi (około 2 MB po gzip), strona przez limit i offset albo do 100 podanych przez market_hash_name. Filtry zawężają oba warianty.

Parametry

market_hash_namequery, opcjonalnie

stringNazwa przedmiotu. Powtórz dla paczki do 100. Jeśli pominięte, wszystkie przedmioty

typequery, opcjonalnie

stringskin, sticker, agent, charm, patch, music_kit, graffiti, collectible, container. Po przecinku, dowolny z nich

weaponquery, opcjonalnie

stringId broni: awp, ak-47, karambit, sport-gloves.... Po przecinku, dowolny z nich

collectionquery, opcjonalnie

stringId kolekcji: the-dust-2-collection.... Po przecinku, dowolny z nich

containerquery, opcjonalnie

stringId skrzynek i pakietów, z których wypada: dreams-nightmares-case.... Po przecinku, dowolny z nich

rarityquery, opcjonalnie

stringId rzadkości: consumer, industrial, mil-spec, restricted, classified, covert, contraband oraz dla naklejek i agentów (high, remarkable, exotic, extraordinary, distinguished, exceptional, superior, master). Po przecinku, dowolny z nich

qualityquery, opcjonalnie

stringNormal, StatTrak™, Souvenir, ★ lub ★ StatTrak™. Po przecinku, dowolny z nich

limitquery, opcjonalnie

numberNajwięcej przedmiotów w odpowiedzi, od 1. Bez niego wszystkie przedmioty, a limit w odpowiedzi to ich liczba

offsetquery, opcjonalnie

numberPrzedmioty do pominięcia, dla następnej strony

Żądanie

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();

Odpowiedź 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"
    }
  ]
}
  • Wymaga płatnej subskrypcji: w darmowej każde zapytanie dostaje 403.
  • type to skin dla każdego skina broni, noża i rękawic (category je rozróżnia: knives, gloves, rifles, pistols, smgs, heavy, equipment), container dla skrzynek, kapsuł i pakietów (category to ich rodzaj: case, sticker_capsule, souvenir_package...).
  • min_float i max_float to możliwe floaty przedmiotu: własny zakres skina w ramach zużycia. null dla przedmiotów bez float.
  • details zawiera pozostałe dane: Tournament, Team, Player i Effect naklejki, Side agenta, datę Released pojemnika.
  • Fazy Doppler i Gamma Doppler dzielą nazwy rynkowe, więc jeden rekord obejmuje każdą fazę.
  • Jak zapytania o oferty, każde obsłużone zapytanie liczy się do limitu 30-dniowego, niezależnie od liczby przedmiotów, a odpowiedzi są tak samo kompresowane gzipem.

Jeden przedmiot

GET/v1/items/{market_hash_name}

Czym jest jeden przedmiot. 404, gdy nie ma przedmiotu o tej nazwie.

Parametry

market_hash_namepath

stringNazwa przedmiotu zakodowana w URL

Żądanie

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();

Odpowiedź 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"
}
  • Wymaga płatnej subskrypcji: w darmowej każde zapytanie dostaje 403.

Robot dla DMarket

Zarządzaj ofertami i zleceniami DMarket tym samym kluczem. Konta i ich klucze API DMarket dodaje się tylko na stronie robota, nigdy przez API. Trasy robota wymagają płatnej subskrypcji i liczą się tylko do limitu minutowego, nigdy do 30-dniowego.

  • Oferty: dowolna liczba na konto. Zlecenia („targety” DMarket): do 100 na konto, własny limit DMarket.
  • DMarket nie pozwala zmienić ceny zlecenia: robot zastępuje je nowym po nowej cenie.

Konta i limity

GET/v1/robots/dmarket

Twoje konta DMarket w robocie (połączone kluczami API DMarket na stronie robota) i limity Twojej subskrypcji dla niego.

Żądanie

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();

Odpowiedź 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"
    }
  ]
}
  • Limit null oznacza brak naszego limitu.
  • paused: konto przekracza limit kont subskrypcji; jego oferty i zlecenia czekają.
  • enabled: false oznacza wyłączenie na stronie robota: robot nie zmienia już ceny, pozycja zostaje na marketplace'ie po ostatniej cenie i nadal liczy się do limitów.

Ekwipunek konta

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

Przedmioty w ekwipunku DMarket konta z asset_id do sprzedaży każdego. sellable to false dla przedmiotów, których DMarket nie pozwala wystawić.

Parametry

account_idpath

stringId konta z GET /v1/robots/dmarket

Żądanie

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();

Odpowiedź 200

[
  {
    "asset_id": "4c1d8e2f-0b6a-4a51-9f3e-2d7c8b1a6e05",
    "market_hash_name": "AK-47 | Redline (Field-Tested)",
    "sellable": true,
    "suggested_price": 33.1
  }
]

Lista ofert

GET/v1/robots/dmarket/offers

Twoje oferty na DMarket na wszystkich kontach, najstarsze najpierw.

Żądanie

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();

Odpowiedź 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"
  }
]

Wystaw ofertę lub ją zaktualizuj

POST/v1/robots/dmarket/offers

Wystawia przedmiot lub nadpisuje ceny jego istniejącej oferty, znalezionej po asset_id. Robot wystawia przedmiot na DMarket i utrzymuje go jako najtańszą ofertę, nigdy poniżej min_price. Bez konkurencji sprzedaje po max_price. Nowe ceny działają w kilka sekund lub po odblokowaniu ceny: cena zmieniona przez robota zostaje na 15 minut.

Parametry

asset_idbody

stringId przedmiotu na DMarket z ekwipunku konta

min_pricebody

numberUSD, maksymalnie dwa miejsca po przecinku

max_pricebody

numberUSD, maksymalnie dwa miejsca po przecinku

account_idbody, opcjonalnie

stringKonto będące właścicielem przedmiotu. Wymagane przy wystawianiu

market_hash_namebody, opcjonalnie

stringNazwa przedmiotu. Wymagana przy wystawianiu

Żądanie

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();

Odpowiedź 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"
}

Usuń ofertę

DELETE/v1/robots/dmarket/offers

Zapomina ofertę: robot przestaje ją zmieniać, a przedmiot zostaje w sprzedaży na DMarket po ostatniej cenie.

Parametry

asset_idquery

stringId przedmiotu na DMarket z ekwipunku konta

Żądanie

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();

Odpowiedź 200

{
  "removed": true
}
  • removed to false, gdy robot nie miał takiej oferty.

Lista zleceń

GET/v1/robots/dmarket/orders

Twoje zlecenia kupna na DMarket na wszystkich kontach, najstarsze najpierw.

Żądanie

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();

Odpowiedź 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"
  }
]

Złóż zlecenie lub je zaktualizuj

POST/v1/robots/dmarket/orders

Składa zlecenie na przedmiot na koncie lub nadpisuje ceny istniejącego. Robot składa zlecenie DMarket („target”) i utrzymuje je jako najwyższe, nigdy powyżej max_price. Bez konkurencji oferuje min_price. DMarket pozwala na 100 zleceń na konto. DMarket nie może zmienić ceny zlecenia: każda nowa cena to nowy target zamiast starego. Kupuje po 1 przedmiocie, aż kupi całą ilość, a zlecenie jest składane tylko wtedy, gdy jego cena mieści się w saldzie konta.

Parametry

market_hash_namebody

stringNazwa przedmiotu

min_pricebody

numberUSD, maksymalnie dwa miejsca po przecinku

max_pricebody

numberUSD, maksymalnie dwa miejsca po przecinku

account_idbody, opcjonalnie

stringKonto do kupowania. Można pominąć, jeśli masz jedno konto

amountbody, opcjonalnie

numberIle kupić, od 1 do 100. Wymagane przy składaniu; zmienia się tylko przed złożeniem

Żądanie

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();

Odpowiedź 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"
}
  • Ilość złożonego zlecenia tylko maleje wraz z realizacją: usuń je i dodaj ponownie, by kupić więcej.

Usuń zlecenie

DELETE/v1/robots/dmarket/orders

Zapomina zlecenie: robot przestaje je zmieniać, a ono zostaje na DMarket po ostatniej cenie.

Parametry

market_hash_namequery

stringNazwa przedmiotu

account_idquery, opcjonalnie

stringKonto, na którym jest zlecenie. Można pominąć, jeśli masz jedno konto

Żądanie

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();

Odpowiedź 200

{
  "removed": true
}
  • removed to false, gdy robot nie miał takiego zlecenia.

Monitor

GET/v1/robots/dmarket/monitor

Każdy przedmiot na DMarket z zyskiem z bycia najlepszym zleceniem (buy_price, 1 cent powyżej najlepszego zlecenia), a potem najtańszą ofertą (sell_price, 1 cent poniżej najtańszej), po prowizji DMarket dla tego przedmiotu. Najlepsze zlecenia i oferty DMarket są odświeżane co kilka sekund, ceny innych marketplace'ów tak często, jak każdy z nich się aktualizuje, od co 5 minut do co godzinę. Działają tylko wysłane filtry: bez nich każdy przedmiot ze zleceniem, najbardziej zyskowne najpierw. Przedmiot bez oferty na DMarket też się pojawia, z best_offer, sell_price, profit i margin_percent równymi null: filtry zysku, marży i różnicy go przepuszczają. dollar_volume i units_volume to typowa sprzedaż na DMarket w 15 dni: mediana z ostatnich 90 dni w sześciu odcinkach po 15 dni.

Parametry

qquery, opcjonalnie

stringSłowa, które wszystkie muszą być w nazwie

min_pricequery, opcjonalnie

numberNajniższa cena kupna, USD

max_pricequery, opcjonalnie

numberNajwyższa cena kupna, USD

min_profitquery, opcjonalnie

numberNajniższy zysk po prowizji, USD

min_marginquery, opcjonalnie

numberNajniższa marża, procent ceny kupna

min_gapquery, opcjonalnie

numberNajmniejsza różnica między najlepszym zleceniem a najtańszą ofertą, USD

min_liquidityquery, opcjonalnie

numberNajniższa płynność, od 0 do 100

max_feequery, opcjonalnie

numberNajwyższa prowizja, procent

min_units_volumequery, opcjonalnie

numberNajmniej przedmiotów sprzedanych w typowe 15 dni na DMarket (units_volume)

min_dollar_volumequery, opcjonalnie

numberNajmniej USD sprzedaży w typowe 15 dni na DMarket (dollar_volume)

hidequery, opcjonalnie

stringPo przecinku: stickers, graffiti, souvenir, stattrak

comparequery, opcjonalnie

stringInne marketplace'y i o ile procent powyżej ceny kupna musi być ich najniższa cena: buff_163:5,cs_float:3. Marketplace bez przedmiotu jest pomijany. Ich ceny wracają w compare

compare_ordersquery, opcjonalnie

stringTo samo z najwyższymi zleceniami innych marketplace'ów: market_csgo:5 (Market.CSGO lub Steam). Ich zlecenia wracają w compare_orders

sortquery, opcjonalnie

stringprofit (domyślnie), margin, liquidity, price lub volume (dollar_volume)

limitquery, opcjonalnie

numberPrzedmioty w odpowiedzi, od 1 do 100 (100, jeśli pominięte)

offsetquery, opcjonalnie

numberPrzedmioty do pominięcia, dla następnej strony

Żądanie

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();

Odpowiedź 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": {}
    }
  ]
}
  • Wymaga płatnej subskrypcji, jak każda trasa robota. W przeciwieństwie do nich każde obsłużone zapytanie liczy się też do limitu 30-dniowego, jak zapytania o oferty, z tymi samymi nagłówkami X-Usage-Limit i X-Usage-Remaining.

Statusy ofert i zleceń

pending
Jeszcze nie wystawione ani złożone
active
Na marketplace, utrzymywane na czele w Twoich limitach. Cena zmieniona przez robota zostaje na 15 minut; potem obserwuje rynek co sekundę
paused
Ponad oferty, zlecenia lub konta subskrypcji: czeka, aż ulepszysz plan lub usuniesz inne
sold
Oferty: sprzedano
closed
Oferty: zdjęte ze sprzedaży lub przedmiot opuścił ekwipunek. Zlecenia: kupione w całości lub usunięte. Pole error podaje przyczynę, jeśli jest

Robot dla market.csgo.com

Zarządzaj ofertami i zleceniami Market.CSGO tym samym kluczem. Konta i ich klucze API Market.CSGO dodaje się tylko na stronie robota, nigdy przez API. Trasy robota wymagają płatnej subskrypcji i liczą się tylko do limitu minutowego, nigdy do 30-dniowego.

  • Oferty: dowolna liczba na konto. Zlecenia: do 100 na konto, po jednym na przedmiot, zmieniane na miejscu.
  • Walutą konta na Market.CSGO musi być USD. Oferty są widoczne tylko wtedy, gdy jesteś online w aplikacji lub rozszerzeniu Market.CSGO.

Konta i limity

GET/v1/robots/market-csgo

Twoje konta Market.CSGO w robocie (połączone kluczami API Market.CSGO na stronie robota) i limity Twojej subskrypcji dla niego. Pole note konta mówi, co przeszkadza w sprzedaży, np. brak połączenia.

Żądanie

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();

Odpowiedź 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"
    }
  ]
}
  • Limit null oznacza brak naszego limitu.
  • paused: konto przekracza limit kont subskrypcji; jego oferty i zlecenia czekają.
  • enabled: false oznacza wyłączenie na stronie robota: robot nie zmienia już ceny, pozycja zostaje na marketplace'ie po ostatniej cenie i nadal liczy się do limitów.

Ekwipunek konta

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

Przedmioty Steam, które Market.CSGO może sprzedać z konta, z asset_id do sprzedaży każdego.

Parametry

account_idpath

stringId konta z GET /v1/robots/market-csgo

Żądanie

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();

Odpowiedź 200

[
  {
    "asset_id": "38215462179",
    "market_hash_name": "AK-47 | Redline (Field-Tested)",
    "sellable": true,
    "suggested_price": 33.1
  }
]

Lista ofert

GET/v1/robots/market-csgo/offers

Twoje oferty na Market.CSGO na wszystkich kontach, najstarsze najpierw.

Żądanie

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();

Odpowiedź 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"
  }
]

Wystaw ofertę lub ją zaktualizuj

POST/v1/robots/market-csgo/offers

Wystawia przedmiot lub nadpisuje ceny jego istniejącej oferty, znalezionej po asset_id. Robot wystawia przedmiot na Market.CSGO i utrzymuje go jako najtańszą ofertę, nigdy poniżej min_price. Bez konkurencji sprzedaje po max_price. Oferty są widoczne tylko wtedy, gdy konto jest online w aplikacji lub rozszerzeniu Market.CSGO. Nowe ceny działają w kilka sekund lub po odblokowaniu ceny: cena zmieniona przez robota zostaje na 15 minut.

Parametry

asset_idbody

stringSteam asset id przedmiotu z ekwipunku konta

min_pricebody

numberUSD, maksymalnie dwa miejsca po przecinku

max_pricebody

numberUSD, maksymalnie dwa miejsca po przecinku

account_idbody, opcjonalnie

stringKonto będące właścicielem przedmiotu. Wymagane przy wystawianiu

market_hash_namebody, opcjonalnie

stringNazwa przedmiotu. Wymagana przy wystawianiu

Żądanie

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();

Odpowiedź 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"
}

Usuń ofertę

DELETE/v1/robots/market-csgo/offers

Zapomina ofertę: robot przestaje ją zmieniać, a przedmiot zostaje w sprzedaży na Market.CSGO po ostatniej cenie.

Parametry

asset_idquery

stringSteam asset id przedmiotu z ekwipunku konta

Żądanie

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();

Odpowiedź 200

{
  "removed": true
}
  • removed to false, gdy robot nie miał takiej oferty.

Lista zleceń

GET/v1/robots/market-csgo/orders

Twoje zlecenia kupna na Market.CSGO na wszystkich kontach, najstarsze najpierw.

Żądanie

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();

Odpowiedź 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"
  }
]

Złóż zlecenie lub je zaktualizuj

POST/v1/robots/market-csgo/orders

Składa zlecenie na przedmiot na koncie lub nadpisuje ceny istniejącego. Robot składa zlecenie Market.CSGO i utrzymuje je jako najwyższe, nigdy powyżej max_price. Bez konkurencji oferuje min_price. Market.CSGO pozwala na jedno zlecenie na przedmiot i do 100 zleceń na konto oraz zmienia cenę zlecenia na miejscu.

Parametry

market_hash_namebody

stringNazwa przedmiotu

min_pricebody

numberUSD, maksymalnie dwa miejsca po przecinku

max_pricebody

numberUSD, maksymalnie dwa miejsca po przecinku

account_idbody, opcjonalnie

stringKonto do kupowania. Można pominąć, jeśli masz jedno konto

amountbody, opcjonalnie

numberIle kupić, od 1 do 100. Wymagane przy składaniu; zmienia się tylko przed złożeniem

Żądanie

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();

Odpowiedź 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"
}
  • Ilość złożonego zlecenia tylko maleje wraz z realizacją: usuń je i dodaj ponownie, by kupić więcej.

Usuń zlecenie

DELETE/v1/robots/market-csgo/orders

Zapomina zlecenie: robot przestaje je zmieniać, a ono zostaje na Market.CSGO po ostatniej cenie.

Parametry

market_hash_namequery

stringNazwa przedmiotu

account_idquery, opcjonalnie

stringKonto, na którym jest zlecenie. Można pominąć, jeśli masz jedno konto

Żądanie

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();

Odpowiedź 200

{
  "removed": true
}
  • removed to false, gdy robot nie miał takiego zlecenia.

Statusy ofert i zleceń

pending
Jeszcze nie wystawione ani złożone
active
Na marketplace, utrzymywane na czele w Twoich limitach. Cena zmieniona przez robota zostaje na 15 minut; potem obserwuje rynek co sekundę
paused
Ponad oferty, zlecenia lub konta subskrypcji: czeka, aż ulepszysz plan lub usuniesz inne
sold
Oferty: sprzedano
closed
Oferty: zdjęte ze sprzedaży lub przedmiot opuścił ekwipunek. Zlecenia: kupione w całości lub usunięte. Pole error podaje przyczynę, jeśli jest

Limity i błędy

Dwa limity, oba na subskrypcję. Każde zapytanie liczy się do limitu na minutę; zapytanie ponad niego dostaje 429 z nagłówkiem Retry-After w sekundach. Każde obsłużone zapytanie o oferty, zlecenia kupna, sprzedaże, przedmioty lub monitor liczy się też do limitu 30-dniowego, niezależnie od liczby przedmiotów; licznik zaczyna się od nowa co 30 dni od początku subskrypcji, a nagłówki X-Usage-Limit i X-Usage-Remaining pokazują, ile zostało.

SubskrypcjaŻądania / minutaŻądania ofert i zleceń / 30 dni
Darmowy60100
Trader1205,000
Pro30025,000
Business300100,000
400
Coś jest nie tak z żądaniem: nieznany dostawca lub typ przedmiotu, błędna treść, ponad 100 przedmiotów, limit poza zakresem
401
Brak klucza lub klucz błędny
403
Wymagana płatna subskrypcja: dla każdego marketplace'u poza Steam, tras podsumowania sprzedaży i przedmiotów oraz robota i monitora
404
Nie ma takiego przedmiotu, robota ani konta
409
Teraz niemożliwe: ponad oferty, zlecenia lub konta subskrypcji albo zmiana ilości złożonego zlecenia
429
Osiągnięto limit na minutę (odczekaj Retry-After sekund) albo limit 30-dniowy
502
Marketplace nie odpowiedział robotowi; spróbuj ponownie