İçeriğe geç
API

FACEIT API

Oyuncu sayfaları ve topluluk botları için seviye, ELO ve maç istatistikleri. WOK anahtarınızı kullanın; ayrı bir FACEIT anahtarı gerekmez.

FACEIT verisi nereden geliyor? FACEIT’in web sitesinin kullandığı arayüz üzerinden alınır. WOK anahtarınızla kimlik doğrulayın; ayrı bir FACEIT anahtarı gerekmez. Desteklenen uç noktalar API belgelerinde yer alır.

FACEIT seviyesi ve istatistikleri: dahil, anahtarsız. IP başına günde 2 ücretsiz sorgu. Kayıt gerekmez.

Developer guide · English

From SteamID64 to FACEIT ELO, stats and recent matches

Build a player card or community bot with the existing FACEIT routes. Start with one profile request; load statistics with available map and competition breakdowns, or a separate recent-match page, only when needed.

Preview three player-card results: returned metrics, missing data and a failed history request.

Which FACEIT API and key should I use?

Choose the integration for your task. WOK is an independent service; a WOK key and an official FACEIT Data API key are not interchangeable.

IntegrationUse it forKey and coverage
WOK APIA player card or bot combining a public Steam profile with FACEIT CS2 ELO, level, lifetime stats and recent matches.Keep your WOK key on your server. The profile, stats and history routes below define supported coverage. WOK adapts data from the FACEIT website interface; it does not promise the complete official Data API.
FACEIT Data APIAn application integrating directly with FACEIT's documented player, team and competition resources.Create an app in the FACEIT Developer Portal and use its FACEIT key according to the official documentation. That key does not authenticate a request to WOK.

FACEIT Data API · Official API key guide

WOK routes and request parameters · Combine Steam identity and FACEIT · Add public CS2 inventory items

  1. Resolve the playerSend a SteamID64 as game_player_id with game=cs2. Read ELO and level from games.cs2.faceit_elo and games.cs2.skill_level.
  2. Keep the FACEIT player IDUse the returned player_id in the stats and history paths. A SteamID64 or nickname is not a replacement for that identifier.
  3. Fetch only the extra data you needRead lifetime for aggregate statistics. Optional segments[] contains Map or Competition breakdowns with the source mode in the same response. A Competition label is a competition ID, not a resolved name. Read items[] for matches; optional match_stats.Headshots is a count, not a percentage. Select a page with an explicit HTTP request using page from 0 through 100 and limit from 1 through 20. Page positions can shift.

Download the FACEIT fields and pagination guide (Markdown) for data bounds, optional fields and an explicit HTTP page request. SDK 1.3.0 requests only the first history page.

Store WOK_API_KEY and a 17-digit WOK_STEAM_ID in your server environment. Use a Players or all-purpose key with FACEIT access; no separate FACEIT key is needed. Never expose the WOK key in browser code, a bot message or a public URL.

Three requests with cURL

# Set WOK_API_KEY and WOK_STEAM_ID in your server environment.
set -eu
curl --fail-with-body --max-time 35 --get \
  -H "Authorization: Bearer $WOK_API_KEY" \
  "https://woksteamapi.com/faceit/data/v4/players" \
  --data-urlencode "game=cs2" \
  --data-urlencode "game_player_id=$WOK_STEAM_ID"

# Copy player_id from that response into WOK_FACEIT_PLAYER_ID.
curl --fail-with-body --max-time 35 \
  -H "Authorization: Bearer $WOK_API_KEY" \
  "https://woksteamapi.com/faceit/data/v4/players/$WOK_FACEIT_PLAYER_ID/stats/cs2"
curl --fail-with-body --max-time 35 \
  -H "Authorization: Bearer $WOK_API_KEY" \
  "https://woksteamapi.com/faceit/data/v4/players/$WOK_FACEIT_PLAYER_ID/history?game=cs2&limit=5"
Complete Python client
# Python 3: install requests; set WOK_API_KEY and WOK_STEAM_ID.
import json
import os
import re
import requests

steam_id = os.environ["WOK_STEAM_ID"]
if not re.fullmatch(r"[0-9]{17}", steam_id):
    raise SystemExit("WOK_STEAM_ID must be a 17-digit SteamID64")
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['WOK_API_KEY']}"

def read(path, params=None, *, allow_missing=False):
    response = session.get("https://woksteamapi.com" + path,
                           params=params, timeout=(5, 30),
                           allow_redirects=False)
    if allow_missing and response.status_code == 404:
        return None
    response.raise_for_status()  # Stop on key, quota or source errors.
    return response.json()

profile = read("/faceit/data/v4/players", {
    "game": "cs2", "game_player_id": steam_id,
}, allow_missing=True)
if profile is None:
    raise SystemExit("No FACEIT CS2 profile for this SteamID64")
player_id = profile.get("player_id", "")
if not re.fullmatch(r"[A-Za-z0-9-]{1,64}", player_id):
    raise SystemExit("The profile did not return a valid player_id")
# These two extra calls are optional: omit data your page does not need.
stats = read(f"/faceit/data/v4/players/{player_id}/stats/cs2")
history = read(f"/faceit/data/v4/players/{player_id}/history",
               {"game": "cs2", "limit": 5})
print(json.dumps({
    "nickname": profile.get("nickname"),
    "rank": profile.get("games", {}).get("cs2", {}),
    "lifetime": stats.get("lifetime", {}),
    "recent_matches": history.get("items", []),
}, indent=2))
Complete Node.js client
// Node.js 18+: set WOK_API_KEY and WOK_STEAM_ID on your server.
const key = process.env.WOK_API_KEY;
const steamId = process.env.WOK_STEAM_ID;
if (!key || !/^[0-9]{17}$/.test(steamId || "")) {
  throw new Error("Set WOK_API_KEY and a 17-digit WOK_STEAM_ID");
}
async function read(path, params = {}, allowMissing = false) {
  const url = new URL(path, "https://woksteamapi.com");
  url.search = new URLSearchParams(params);
  const response = await fetch(url, {
    headers: { Authorization: `Bearer ${key}` },
    signal: AbortSignal.timeout(35_000),
    redirect: "error"
  });
  if (allowMissing && response.status === 404) return null;
  if (!response.ok) throw new Error(`WOK HTTP ${response.status}`);
  return response.json();
}
const profile = await read("/faceit/data/v4/players", {
  game: "cs2", game_player_id: steamId
}, true);
if (!profile) throw new Error("No FACEIT CS2 profile for this SteamID64");
if (!/^[A-Za-z0-9-]{1,64}$/.test(profile.player_id || "")) {
  throw new Error("The profile did not return a valid player_id");
}
const playerPath = `/faceit/data/v4/players/${encodeURIComponent(profile.player_id)}`;
// Optional reads: request only what the player page needs.
const stats = await read(`${playerPath}/stats/cs2`);
const history = await read(`${playerPath}/history`, { game: "cs2", limit: "5" });
console.log({ nickname: profile.nickname, rank: profile.games?.cs2,
  lifetime: stats.lifetime, recent_matches: history.items });

These clients make at most three requests and stop on an error; they do not automatically retry. The complete workflow uses three quota units when all calls are admitted. Each profile, stats or history call costs one unit, including cache hits. GET /v1/key reports access, remaining quota and reset times without consuming a request unit.

Read the response without inventing missing data

lifetime metrics such as Matches, Wins and Average K/D Ratio are strings when present. Missing fields are unavailable, not zero. Recent-match rows can contain finished_at (Unix seconds), elo, elo_delta and match_stats with map, score, kills and deaths. Escape names and labels before displaying them as HTML.

Handle absence, access and temporary failures separately

ResponseMeaning and next action
Profile HTTP 404No FACEIT player was found for that SteamID and game. Do not label this as a Steam account failure.
Stats HTTP 200, lifetime:{}No lifetime statistics were returned. Keep the profile; leave the missing statistics blank.
History HTTP 200, items:[]No recent matches were returned. This does not invalidate the player profile.
HTTP 400 / 422Check identifiers and query values; history limit must be between 1 and 20.
HTTP 401 / 403 / 402Check key validity, endpoint access and account/quota state. Fix the cause before repeating calls.
HTTP 429 / 503Respect Retry-After when supplied. Stop a polling loop until the rate or availability condition clears.
HTTP 502The FACEIT source is temporarily unavailable. Keep a previously saved result marked stale; use a bounded later retry rather than replacing it with a zero rank.

Cache age and source scope

Profile and lifetime snapshots use a configurable cache TTL of six hours by default. A cached rank can lag a newly finished match. Recent history has no persistent result cache and makes a separate bounded source request; it still depends on FACEIT availability and does not guarantee immediate publication of a finished match. These responses do not expose an observation timestamp or exact cache age, so do not infer freshness from the time your client fetched them.

WOK adapts confirmed public website-source fields; it does not promise complete official FACEIT API coverage. Optional memberships and friends_count do not prove paid status or a complete friends list. Steam profiles and inventories are separate requests, and no endpoint unlocks private Steam data.

Turn FACEIT responses into a player card

Three fictional examples show what a player page can display. These are not real players, customer results or current FACEIT observations. Profile, stats and history below are excerpts from separate HTTP responses; the outer profile, stats, history and http_status labels are local comparison notes, not a new API envelope.

Profile, lifetime statistics and one returned match

Example playerELO 1450 · Level 6120 matches · 68 winsAverage K/D: 1.10Returned match: +20 ELO · 12 headshots
Compare saved responses with this card
{
  "profile": {
    "http_status": 200,
    "body": {
      "player_id": "example-player",
      "nickname": "Example player",
      "games": {
        "cs2": {
          "faceit_elo": 1450,
          "skill_level": 6
        }
      }
    }
  },
  "stats": {
    "http_status": 200,
    "body": {
      "lifetime": {
        "Matches": "120",
        "Wins": "68",
        "Average K/D Ratio": "1.10"
      }
    }
  },
  "history": {
    "http_status": 200,
    "body": {
      "start": 0,
      "end": 1,
      "items": [
        {
          "match_id": "example-match",
          "game_id": "cs2",
          "elo": 1450,
          "elo_delta": 20,
          "match_stats": {
            "Kills": "24",
            "Deaths": "16",
            "Headshots": "12"
          }
        }
      ]
    }
  }
}

12 is the headshot count in that match, not a percentage. The lifetime average K/D describes aggregate statistics, not that match's K/D. One returned row does not establish a complete match history.

Profile found, optional data not returned

Example playerELO 1450 · Level 6Matches: unavailableAverage K/D: unavailableNo recent matches returned
Compare saved responses with this card
{
  "profile": {
    "http_status": 200,
    "body": {
      "player_id": "example-player",
      "nickname": "Example player",
      "games": {
        "cs2": {
          "faceit_elo": 1450,
          "skill_level": 6
        }
      }
    }
  },
  "stats": {
    "http_status": 200,
    "body": {
      "lifetime": {}
    }
  },
  "history": {
    "http_status": 200,
    "body": {
      "start": 0,
      "end": 0,
      "items": []
    }
  }
}

Keep the successful profile and returned rank. Empty lifetime and items do not prove the player has never played. Do not turn an absent match count into 0 or display K/D 0.00.

Zero counters returned, history temporarily unavailable

Example playerELO 1450 · Level 60 matches · 0 wins in the lifetime responseAverage K/D: unavailableHistory temporarily unavailable
Compare saved responses with this card
{
  "profile": {
    "http_status": 200,
    "body": {
      "player_id": "example-player",
      "nickname": "Example player",
      "games": {
        "cs2": {
          "faceit_elo": 1450,
          "skill_level": 6
        }
      }
    }
  },
  "stats": {
    "http_status": 200,
    "body": {
      "lifetime": {
        "Matches": "0",
        "Wins": "0"
      }
    }
  },
  "history": {
    "http_status": 502
  }
}

The string "0" is a returned value; the absent Average K/D Ratio stays unknown. HTTP 502 belongs to the history request: it does not invalidate the saved successful profile or mean there are no matches. These separate responses can describe different source snapshots.

These responses expose no observation timestamp or exact cache age: do not label a card "updated now" from page load time. The request clients above intentionally stop on an error. If your application should keep a card when an optional call fails, save the successful profile first, then handle a stats or history failure separately. Comparing these examples sends no requests and consumes no quota.

Run a combined Steam and FACEIT player card

Download the Steam + FACEIT Python example and follow its setup and run instructions. Use the resolved SteamID64 to join the two services; keep Steam identity and FACEIT rank in separate fields. A missing FACEIT account does not invalidate a Steam profile, and missing rank or lifetime metrics should remain unavailable rather than becoming zero. Keep the WOK key on your server.

Full API reference · OpenAPI contract · Add a Steam profile · CS2 integration map · Check plans and request limits

Oyuncu istatistikleri ve maç geçmişi

FACEIT API

Oyuncu sayfaları ve topluluk botları için seviye, ELO ve maç istatistikleri. WOK anahtarınızı kullanın; ayrı bir FACEIT anahtarı gerekmez.

Free Developer ile her 30 günde 1.000 istek. Ödeme gerekmez.

FACEITJSON
GET/faceit/data/v4/players
{
  "games": {
    "cs2": {
      "skill_level": 10,
      "faceit_elo": 2100
    }
  }
}

Örnek alanlar. Değerler temsilidir.

API referansını inceleyin

Steam profilinden ürününüze

Eşyaları ve fiyatları görmek için herkese açık bir Steam profili girin

IP başına günde 2 ücretsiz sorgu. Kayıt gerekmez.

Örnek envanterCS2

Örnek değerler, güncel piyasa fiyatları değil

Oyuncularınız zaten burada

Sekiz oyunun envanter verileri

Entegrasyon

Neler alıyorsunuz

Envanterlere, fiyatlara ve oyuncu verilerine tek bir HTTP API üzerinden erişin.

API referansını inceleyin
/v1/inventory

Envanterler ve eşya fiyatları

CS2, Rust, TF2, Dota 2, PUBG, s&box, Unturned ve PAYDAY 2 için eşyalar ve envanter değerleri. Yanıt, mevcut fiyatları ve fiyatı bulunmayan eşyaları belirtir.

/faceit/data/v4

Steam profilleri ve FACEIT istatistikleri

WOK anahtarınızla profilleri, FACEIT seviyesini, ELO’yu ve maç istatistiklerini ekleyin. Ayrı bir FACEIT anahtarı gerekmez.

/v1/inventories

Oyuncu listeleri için toplu istekler

Bir toplu istekte en fazla 20 oyuncu ve dört oyun; her oyuncu-oyun çifti için ayrı sonuç. İstenen her çift bir kota birimi tüketir.

meta.cache_age

Verilerin güncelliğini görün

Envanterin önbellek yaşını ve fiyat kaynaklarını inceleyin. Geçerli bir kayıtlı envanteri yeniden taramadan yerel katalogdan fiyatları güncelleyin.

İstek hacminize göre maliyetleri karşılaştırın

Aynı sayıda istek için WOK, SteamWebAPI ve SteamApis envanter API’sinin maliyeti

30,00030 günlük istek sayısı
Hizmet Aylık maliyet Dahil olan istekler Dakikadaki istek sayısı
WOK- -30 gün içinİsteğe bağlı otomatik yenileme Dahil olan istekler-30 gün için Dakikadaki istek sayısı-
SteamWebAPI- -aylık Dahil olan istekler-aylık Dakikadaki istek sayısı-
SteamApisİstek paketi -aylık Dahil olan istekler-aylık Dakikadaki istek sayısıYayımlanmamış
Nasıl karşılaştırıyoruz

Bir oyuncu ve bir oyun için standart envanter sorguları; toplu istekler ve zorunlu yenileme hariçtir. Diğer uç noktalar ve dahil olan veriler hizmete göre değişir.

Hesaplama, isteklerin gün boyunca eşit dağıldığı 30 günlük kullanımı temel alır. Yayımlanan aylık, günlük ve dakikalık limitler dikkate alınır. Trafik artışları için pay bırakın.

WOK planları varsayılan olarak ön ödemelidir. Yeni bir 30 günlük plan için ödeme sırasında Stripe ile otomatik yenilemeyi seçebilirsiniz.

SteamApis: yayımlanan aşım ücretleri dahil en düşük istek maliyeti. Paket aşımı için ilgili seçeneğin etkin olması ve hesap bakiyesinin yeterli olması gerekir. Envanter API’sinin dakikalık limiti kamuya açıklanmamıştır. Bu bir maliyet tahminidir; seçilen istek hacmini işleme kapasitesi doğrulanmamıştır.

WOK: önce ihtiyaca uygun hazır bir plan seçilir. Kota paketleri yalnızca hiçbir plan seçilen hacmi karşılamadığında eklenir. Her 45 $ paket, mevcut kota sıfırlanana kadar 1 milyon birim ve günlük 50 bin birim ekler. Paketler tek seferlik satın alınır ve dakika limitini artırmaz. Anahtar başına üst sınırlar geçerlidir. Tahmin, yeni bir 30 günlük dönemi esas alır.

Yayımlanan dakika limitleri: WOK Ultra 1200 / Titan 2000 kota birimi; SteamWebAPI Inventory High+ 200 istek. Toplu çağrılar birden fazla WOK birimi tüketebilir.

4 oyundaki 20 oyuncuyu kapsayan tek toplu çağrı 80 kota birimi tüketir; çağrı başına en fazla 80 oyuncu-oyun çifti desteklenir.

Resmî fiyatlarSteamWebAPISteamApis

WOK fiyatları güncel plan kataloğundan alınırRakip fiyatlarının kontrol tarihi

İlk isteğiniz

İlk envanter isteğiniz

Bir anahtar alın, sunucunuzda saklayın ve herkese açık bir envanteri sorgulayın. curl, Python veya JavaScript ile başlayın.

Steam envanter API entegrasyonu: toplu istek ve anlık görüntü

# Keep WOK_API_KEY on the server
curl --fail-with-body \
  -H "Authorization: Bearer $WOK_API_KEY" \
  "https://woksteamapi.com/v1/inventory?steam_id=$STEAM_ID&game=cs2"
API başvurusu

Tüm herkese açık uç noktalar tek yerde

Çalışan servisin kesin parametreleri, yanıt biçimleri ve durum kodları.

Kimlik doğrulama

Veri endpointlerinde Authorization: Bearer kullanın. Farklı kaynaklardan tarayıcı istekleri (CORS) desteklenmez; WOK anahtarınızı sunucunuzda saklayın. Health herkese açıktır. Uyumlu envanter eski query parametresi key değerini de kabul eder.

Temel URLhttps://woksteamapi.com

Tür güvenli bir istemci kurun

Bu belgelerdeki yöntemler için 1.3.0 sürümünü indirin.

npm ve PyPI sürümleri ayrı yayımlanır. Kurulumdan önce dosyaları doğrulayın ve API anahtarlarını sunucunuzda tutun.

Derleme bildirimi ve sağlama toplamları · SHA256SUMS

Start here · one WOK key

Connect a server or agent in three calls

The same WOK API key works for every included game and player endpoint. WOK holds the Steam Web API key on its servers.

  1. Get your WOK keyCopy it from your account and store it on your server as WOK_API_KEY. Send Authorization: Bearer <WOK_API_KEY>; never send a WOK key to Steam or put it in a URL.
  2. Check the keyCall GET /v1/key. It reports whether the key is active and how much quota remains without spending a request.
  3. Choose a game and endpointUse GET /v1/inventory?steam_id=STEAMID64&game=rust for Rust inventory. Change only game for another named game. Rust achievements and playtime have separate routes below.
curl -H "Authorization: Bearer ${WOK_API_KEY}" "https://woksteamapi.com/v1/key"
curl -H "Authorization: Bearer ${WOK_API_KEY}" "https://woksteamapi.com/v1/inventory?steam_id=${STEAM_ID}&game=rust"
curl -H "Authorization: Bearer ${WOK_API_KEY}" "https://woksteamapi.com/v1/rust/achievements?steam_id=${STEAM_ID}"

Use a 17-digit SteamID64 for Rust stats and friends. Inventory and profile routes also accept profile URLs and vanity names. Read the complete integration guide for response fields, errors and examples.

Game parameter for inventory, prices, catalog and history
GamegameSteam AppIDAdditional routes
Counter-Strike 2cs2730CS2 inspect with add-on
Rustrust252490/v1/rust/stats, /v1/rust/achievements, /v1/rust/playtime
Dota 2dota2570Inventory, prices, catalog, history
Team Fortress 2tf2440Inventory, prices, catalog, history
PUBGpubg578080Inventory, prices, catalog, history
s&boxsandbox590830Inventory, prices, catalog, history
Unturnedunturned304930Inventory, prices, catalog, history
PAYDAY 2payday2218620Inventory, prices, catalog, history
Guides · English

Choose an integration path

Working examples, supported games and the limits your application should handle.

Steam Envanter API Fiyatları

Ücretsiz bir anahtarla başlayın veya ücretli bir plan seçin. Tek seferlik ödeme ya da Stripe üzerinden otomatik yenileme.

Faturalama dönemi

3 aylık peşin ödemede %5, 6 aylık ödemede %10, 12 aylık ödemede %15 tasarruf edin. Tek seferde tahsil edilir; eklentiler ayrı ücretlendirilir.

OPTIONAL ADD-ONS

Yalnızca entegrasyonunuzun ihtiyacı olanları ekleyin

Aktif aboneliğiniz için bir eklenti alın. Ödeme ve etkinleştirme otomatiktir.

SELF-SERVICE

Aktif aboneliği seçip ödeyin. Onaydan sonra özellik otomatik etkinleşir.

Sorular

Canlı servis durumu

WOK sistemleri

API trafiğini sunan aynı üretim düğümünün güncel herkese açık durumu.

Genel durumÜretim kontrol ediliyor
Son kontrol...
Herkese açık APIChecking

HTTP sağlığı ve uygulama yanıtı

Uygulama süreciChecking

Üretim süreci bu denetime yanıt verdi

VeritabanıChecking

Canlı bir veritabanı okuması tamamlandı

Bu tarayıcı oturumundaki kontroller

Her işaret, sayfa açıkken alınan gerçek bir sağlık yanıtıdır.

GET /healthz

Geliştirmeye başlayın

Bir sonraki fikriniz bir istekle başlar

Free Developer ile her 30 günde 1.000 istek. Ödeme gerekmez.

Ücretsiz API anahtarı alın