Introduction
Welcome to SkinThunder Public API documentation! You can use our API to access various functionality on our site.
We have language bindings in Shell and JavaScript! You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right.
Authentication
Our API uses API keys to allow access to the API. You can register a new API key on your Profile page.
We expect the API key to be included in all API requests to the server in a header that looks like the following:
x-auth-skinthunder: YOUR_API_KEY
Test Authentication
curl -X GET "https://skinthunder.com/api/public/ping" \
-H "x-auth-skinthunder: YOUR_API_KEY"
const apiKey = "YOUR_API_KEY";
fetch("https://skinthunder.com/api/public/ping", {
method: "GET",
headers: {
"x-auth-skinthunder": apiKey,
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error(error));
The above command returns JSON structured like this (success):
{
"ack": "success",
"message": "Authentication success for user ID USER_ID"
}
The above command returns JSON structured like this (error):
{
"ack": "error",
"message": "Authentication failed"
}
This endpoint tests if the authentication works.
HTTP Request
GET https://skinthunder.com/api/public/ping
Inventory
Reload Inventory
curl -X POST "https://skinthunder.com/api/public/reLoadInventory" \
-H "x-auth-skinthunder: YOUR_API_KEY" \
-H "Content-Type: application/json"
const apiKey = "YOUR_API_KEY";
fetch("https://skinthunder.com/api/public/reLoadInventory", {
method: "POST",
headers: {
"x-auth-skinthunder": apiKey,
"Content-Type": "application/json",
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error(error));
The above command returns JSON structured like this (success):
{
"ack": "success",
"message": "Inventory load initiated"
}
The above command returns JSON structured like this (error):
{
"ack": "error",
"message": "Unknown error: ERROR_MESSAGE"
}
This endpoint initiates an inventory reload.
HTTP Request
POST https://skinthunder.com/api/public/reLoadInventory
Load Inventory
curl -X POST "https://skinthunder.com/api/public/inventory" \
-H "x-auth-skinthunder: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"page": 1,
"perPage": 1000,
"query": "",
"sort": "marketPriceDESC",
"userItemStatus": "depositable"
}'
const apiKey = "YOUR_API_KEY";
const requestBody = {
page: 1,
perPage: 1000,
query: "",
sort: "marketPriceDESC",
userItemStatus: "depositable",
};
fetch("https://skinthunder.com/api/public/inventory", {
method: "POST",
headers: {
"x-auth-skinthunder": apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify(requestBody),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error(error));
The above command returns JSON structured like this (status: ok):
{
"status": "ok",
"list": {
"count": 1,
"pages": 1,
"page": 1,
"items": [
{
"appid": "730",
"contextid": "2",
"assetid": "20182474900",
"classid": "4236900232",
"instanceid": "480149972",
"amount": "1",
"id": "20182474900",
"currency": 0,
"background_color": "",
"icon_url": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpou-jxcjhhwszFI2kb092sgIWIqPv9NLPF2DMAuZIiibzDo933jQzk_UNvajz1IIXEclU8ZluF_gXtlO3s18K56cjXiSw0Ji5XUV8",
"icon_url_large": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpou-jxcjhhwszFI2kb092sgIWIqPv9NLPFqWdQ-sJ0xLGQpNumiwG2_UI-NmHzIoaWe1M4ZVuB-gK8xu26gcLv6Z7KmyZm73U8pSGKNCKmBkk",
"descriptions": [
{
"type": "html",
"value": "Exterior: Minimal Wear"
},
{
"type": "html",
"value": " "
},
{
"type": "html",
"value": "This item features StatTrak™ technology, which tracks certain statistics when equipped by its owner.",
"color": "99ccff"
},
{
"type": "html",
"value": " "
},
{
"type": "html",
"value": "StatTrak™ Confirmed Kills: 1997",
"color": "CF6A32"
},
{
"type": "html",
"value": "*Stats for this item will reset when used in Steam Trading or Community Market",
"color": "ff4040"
},
{
"type": "html",
"value": " "
},
{
"type": "html",
"value": "A strong open-area LMG, the M249 is the perfect choice for players willing to trade a slow fire rate for increased accuracy and a high ammo capacity. Excavated from Aztec ruins, parts of this M249 have rusted and been covered in moss.\n\n<i>Never trust a rope bridge</i>"
},
{
"type": "html",
"value": " "
},
{
"type": "html",
"value": "The CS20 Collection",
"color": "9da1a9"
},
{
"type": "html",
"value": " "
},
{
"type": "html",
"value": "<br><div id=\"sticker_info\" name=\"sticker_info\" title=\"Sticker\" style=\"border: 2px solid rgb(102, 102, 102); border-radius: 6px; width=100; margin:4px; padding:8px;\"><center><img width=64 height=48 src=\"https://steamcdn-a.akamaihd.net/apps/730/icons/econ/stickers/broken_fang/ancient_marauder.49d998ead3b818169682db8ea07c2ae5dc0ddcf7.png\"><br>Sticker: Ancient Marauder</center></div>"
}
],
"tradable": 1,
"actions": [
{
"link": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S%owner_steamid%A%assetid%D16198368983913894896",
"name": "Inspect in Game..."
}
],
"name": "StatTrak™ M249 | Aztec",
"name_color": "CF6A32",
"type": "StatTrak™ Restricted Machinegun",
"market_name": "StatTrak™ M249 | Aztec (Minimal Wear)",
"market_hash_name": "StatTrak™ M249 | Aztec (Minimal Wear)",
"market_actions": [
{
"link": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20M%listingid%A%assetid%D16198368983913894896",
"name": "Inspect in Game..."
}
],
"commodity": 0,
"market_tradable_restriction": 7,
"marketable": 1,
"tags": [
{
"category": "Type",
"internal_name": "CSGO_Type_Machinegun",
"localized_category_name": "Type",
"localized_tag_name": "Machinegun",
"category_name": "Type",
"name": "Machinegun"
},
{
"category": "Weapon",
"internal_name": "weapon_m249",
"localized_category_name": "Weapon",
"localized_tag_name": "M249",
"category_name": "Weapon",
"name": "M249"
},
{
"category": "ItemSet",
"internal_name": "set_community_24",
"localized_category_name": "Collection",
"localized_tag_name": "The CS20 Collection",
"category_name": "Collection",
"name": "The CS20 Collection"
},
{
"category": "Quality",
"internal_name": "strange",
"localized_category_name": "Category",
"localized_tag_name": "StatTrak™",
"color": "CF6A32",
"category_name": "Category",
"name": "StatTrak™"
},
{
"category": "Rarity",
"internal_name": "Rarity_Mythical_Weapon",
"localized_category_name": "Quality",
"localized_tag_name": "Restricted",
"color": "8847ff",
"category_name": "Quality",
"name": "Restricted"
},
{
"category": "Exterior",
"internal_name": "WearCategory1",
"localized_category_name": "Exterior",
"localized_tag_name": "Minimal Wear",
"category_name": "Exterior",
"name": "Minimal Wear"
}
],
"botInfo": {
"wear": "Minimal Wear",
"vanilla": false,
"shortWear": "MW",
"rarity": "StatTrak™ Restricted Machinegun",
"inspectInSteam": "https://steamcommunity.com/profiles/765611989710277777/inventory/#730_2_20182474900",
"inspectInGame": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S765611989710277777A20182474900D16198368983913894896",
"tradeBan": null,
"stickers": [
{
"market_hash_name": "Ancient Marauder",
"icon_url": "https://steamcdn-a.akamaihd.net/apps/730/icons/econ/stickers/broken_fang/ancient_marauder.49d998ead3b818169682db8ea07c2ae5dc0ddcf7.png"
}
],
"steamid": "765611989710277777",
"names": {
"name1": "StatTrak™ M249",
"name2": "Aztec",
"name3": ["Minimal Wear", "Restricted", "Machinegun"]
}
},
"webApiInfo": {
"retail_price": 2.07,
"market_price": 2.64,
"market_difference": -21.59,
"category_id": 45,
"is_featured": false,
"is_private": false,
"is_auction": false,
"is_exchangable": false,
"screenshot": "",
"phase": "",
"phase_id": 0,
"in_trade": false,
"in_cart": false,
"deposited_item": false,
"owned_by_skinthunder": false,
"owned_by_user": true,
"is_listed": false,
"is_p2p_able": true,
"private_hash": "",
"in_p2p_trade": {
"status": false
},
"seller": {
"steam_id": "765611989710277777",
"level": 5,
"details": {
"SteamId": "765611989710277777",
"CommunityVisibilityState": 3,
"ProfileState": 1,
"PersonaName": "UserName",
"LastLogoff": 0,
"CommentPermission": 0,
"ProfileUrl": "https://steamcommunity.com/profiles/765611989710277777/",
"Avatar": "https://avatars.akamai.steamstatic.com/7dec9af3c5d71f20de43923311c3b8c6eb9f5.jpg",
"AvatarMedium": "https://avatars.akamai.steamstatic.com/7dec9af3c5d71f20de43923311c3b8c6eb9f5_medium.jpg",
"AvatarFull": "https://avatars.akamai.steamstatic.com/7dec9af3c5d71f20de43923311c3b8c6eb9f5_full.jpg",
"PersonaState": 0,
"RealName": null,
"PrimaryClanId": "1035827914704777777",
"TimeCreated": 1561012567,
"PersonaStateFlags": 0
},
"average_trade_time": 0,
"percentage_of_successful_trades": 0,
"last_active": "2023-05-10T08:35:41.69"
}
},
"detailInfo": {
"stickers": [
{
"slot": 2,
"sticker_id": 4682,
"wear": null,
"scale": null,
"rotation": null,
"tint_id": null
}
],
"accountid": null,
"itemid": "20182474900",
"defindex": 14,
"paintindex": 902,
"rarity": 4,
"quality": 9,
"paintwear": 0.1266733556985855,
"paintseed": 88,
"killeaterscoretype": 0,
"killeatervalue": 1997,
"customname": null,
"inventory": 257,
"origin": 8,
"questid": null,
"dropreason": null,
"musicindex": null,
"entindex": null,
"floatvalue": 0.1266733556985855,
"differentFromLastUpdate": true
}
}
],
"filters": {
"perPage": 1000,
"page": 1,
"query": "",
"sort": "marketPriceDESC",
"userItemStatus": "depositable"
}
}
}
The above command returns JSON structured like this (status: pending):
{
"status": "pending"
}
The above command returns JSON structured like this (status: error):
{
"status": "error",
"statusCode": int,
"message": string
}
This endpoint loads your inventory.
HTTP Request
POST https://skinthunder.com/api/public/inventory
Query Parameters
Parameter | Default | Description |
---|---|---|
page | 1 | The page number. |
perPage | 20 | The number of items to be displayed per page. |
query | "" | The search query. |
sort | "" | The sort order. Can be one of:
|
userItemStatus | "" | The status of the user item. Can be one of:
|
DetailInfo Parameter
Parameter | Default | Description |
---|---|---|
detailInfo | null | An object that contains detailed information about the skin. This parameter can have three possible values: 1. null - detailed information has not been loaded. In this case, it is recommended to make a repeated request.2. {} - an empty object. This means that this skin does not have detailed information.3. An object with detailed information. It contains various parameters of the skin, for example, information about stickers, float value, rarity, quality, etc. |
List Items
curl -X POST https://skinthunder.com/api/public/list \
-H 'x-auth-skinthunder:: <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '[
{
"itemId": "30584687063",
"price": 324.99,
"isScreenshotEnabled": false,
"isPrivateEnabled": false,
"isFeaturedEnabled": false,
"isExchangable": true
}
]'
const data = [
{
itemId: "30584687063",
price: 324.99,
isScreenshotEnabled: false,
isPrivateEnabled: false,
isFeaturedEnabled: false,
isExchangable: true,
},
];
fetch("https://skinthunder.com/api/public/list", {
method: "POST",
headers: {
"x-auth-skinthunder": "<YOUR_API_KEY>",
"Content-Type": "application/json",
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => {
console.error("Error:", error);
});
The above command returns JSON structured like this (status: ok):
{
"status": "ok",
"message": "success"
}
This endpoint allows you to list multiple items.
HTTP Request
POST /api/public/list
Query Parameters
Parameter | Description |
---|---|
itemId |
The item ID. |
price |
The price of the item in US dollars. |
isScreenshotEnabled |
Boolean indicating if screenshot is enabled. |
isPrivateEnabled |
Boolean indicating if the item is private. |
isFeaturedEnabled |
Boolean indicating if the item is featured. |
isExchangable |
Boolean indicating if the item is exchangable. |
Update Items
curl -X POST https://skinthunder.com/api/public/list \
-H 'x-auth-skinthunder:: <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '[
{
"itemId": "30584687063",
"price": 324.99,
"isListed": true,
"isPrivateEnabled": false,
"isFeaturedEnabled": false,
"isExchangable": true
}
]'
const data = [
{
itemId: "30584687063",
price: 324.99,
isListed: true,
isPrivateEnabled: false,
isFeaturedEnabled: false,
isExchangable: true,
},
];
fetch("https://skinthunder.com/api/public/list", {
method: "POST",
headers: {
"x-auth-skinthunder": "<YOUR_API_KEY>",
"Content-Type": "application/json",
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => {
console.error("Error:", error);
});
The above command returns JSON structured like this (status: ok):
{
"status": "ok",
"message": "success"
}
This endpoint allows you to update multiple items.
HTTP Request
POST /api/public/list
Query Parameters
Parameter | Description |
---|---|
itemId |
The item ID. |
price |
The price of the item in US dollars. |
isListed |
Boolean indicating whether the item is listed for sale or not listed for sale. Must be true if you want to update item data. |
isPrivateEnabled |
Boolean indicating if the item is private. |
isFeaturedEnabled |
Boolean indicating if the item is featured. |
isExchangable |
Boolean indicating if the item is exchangable. |
Remove Items
curl -X POST https://skinthunder.com/api/public/list \
-H 'x-auth-skinthunder:: <YOUR_API_KEY>' \
-H 'Content-Type: application/json' \
-d '[
{
"itemId": "30584687063",
"price": 324.99,
"isListed": false,
}
]'
const data = [
{
itemId: "30584687063",
price: 324.99,
isListed: false,
},
];
fetch("https://skinthunder.com/api/public/list", {
method: "POST",
headers: {
"x-auth-skinthunder": "<YOUR_API_KEY>",
"Content-Type": "application/json",
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => {
console.error("Error:", error);
});
The above command returns JSON structured like this (status: ok):
{
"status": "ok",
"message": "success"
}
This endpoint allows you to remove multiple items.
HTTP Request
POST /api/public/list
Query Parameters
Parameter | Description |
---|---|
itemId |
The item ID. |
price |
The price of the item in US dollars. |
isListed |
Boolean indicating whether the item is listed for sale or not listed for sale. Must be false if you want to remove item from sale. |
Account Details
curl -X GET \
https://skinthunder.com/api/public/accountDetails \
-H 'Content-Type: application/json' \
-H 'x-auth-skinthunder: <YOUR_API_KEY>'
fetch("https://skinthunder.com/api/public/accountDetails", {
method: "GET",
headers: {
"Content-Type": "application/json",
"x-auth-skinthunder:": "<YOUR_API_KEY>",
},
})
.then((response) => response.json())
.then((data) => console.log(data))
.catch((error) => console.error("Error:", error));
On a successful request, the server responds with a JSON object containing various account details. Here's an example of a successful response::
{
"totalBalance": 3386.27,
"withdrawableBalance": 1961.27,
"withdrawableItems": 0,
"sellingItems": 29,
"playerSummary": {
"steamId": "765611989710277777",
"communityVisibilityState": 3,
"profileState": 1,
"personaName": "UserName",
"lastLogoff": 0,
"commentPermission": 0,
"profileUrl": "https://steamcommunity.com/profiles/765611989710277777/",
"avatar": "https://avatars.akamai.steamstatic.com/7dec9af3c5d71f20de43923311c3b8c6eb9f5.jpg",
"avatarMedium": "https://avatars.akamai.steamstatic.com/7dec9af3c5d71f20de43923311c3b8c6eb9f5_medium.jpg",
"avatarFull": "https://avatars.akamai.steamstatic.com/7dec9af3c5d71f20de43923311c3b8c6eb9f5_full.jpg",
"personaState": 0,
"realName": null,
"primaryClanId": "1035827914704777777",
"timeCreated": 1561012567,
"personaStateFlags": 0
},
"preferences": {
"tradeUrl": "https://steamcommunity.com/tradeoffer/new/?partner=1010777777&token=dsfdfsf",
"cookieConsentAccepted": true,
"apiTermsAccepted": false
},
"lastInventoryUpdate": "2023-06-28T14:10:31.023",
"type": "PREMIUM",
"typeAutoPayType": null,
"typeNextAutoPay": null,
"typePaidTill": null,
"email": "user@email.com",
"emailVerified": true,
"userLevel": 5,
"commissionKey": "PREMIUM",
"commissions": {
"basePercent": 0.0,
"privateListingMinPercent": 0.0,
"privateListingMaxAbsolute": 0.0,
"featuredListingMinPercent": 0.0,
"featuredListingMinAbsolute": 0.0
},
"notifications": 31,
"lastActive": "2023-06-28T14:35:41.797"
}
This API endpoint is used to retrieve detailed information about your account.
HTTP Request
GET /api/public/accountDetails
Errors
Error Code | Meaning |
---|---|
400 | Bad Request |
401 | Unauthorized |
403 | Forbidden |
404 | Not Found |
405 | Method Not Allowed |
406 | Not Acceptable |
410 | Gone |
429 | Too Many Requests |
500 | Internal Server Error |
503 | Service Unavailable |