Partner with Skins.Cash
Five ways to work with the world's most trusted CS2 skin marketplace — from media deals and APIs to wholesale trading and tournament keys.
Skin Trading API
Do you have a huge amount of skins and are looking for a fast and simple way to trade them? Skins.Cash provides APIs to make this process as easy as pie.
Step 1
Sign in through Steam and set up a Trade URL on Skins.Cash web-site using your Steam account.
Step 2
Go to Skin-Trading-Api and click on "Generate credentials". Your x-api-token and x-api-key will be displayed. Save them as you will use them for authentication. Please note that you will not be able to retrieve your x-api-token later if you lose it.
Step 3
Use our API to make a sale or check the prices of your skins on our service. When selling skins through the Trading API the money will be sent to your Skins.Cash balance and you will be able to withdraw it using any of the available payment methods.
If you have any questions, please feel free to contact us at wholesale@skins.cash.
Authorization
You need 3 headers in order to authorize your request:
— x-api-key — received after credentials generation.
— salt — any string generated by you. This can be, for example, a timestamp. We recommend regenerating a new salt value for each API call.
— signature — calculated as sha256 by concatenating the request path + salt + x-api-token.
Note that get parameters do not affect our path.
— x-api-key — 1irqrxyjaz413slz0w7ajg25pb2y63hdcet91yih
— x-api-token — 47a5df462f033785043991d3078026e0f20a016e
— salt — 1647884752
sha256(api/v2/inventory/730 + salt + x-api-token) = sha256(api/v2/inventory/730 + 1647884752 + 47a5df462f033785043991d3078026e0f20a016e) = sha256(api/v2/inventory/730164788475247a5df462f033785043991d3078026e0f20a016e) = c69062c400a4ee65503902a35c0f81c8ebe84799556b7fffbb98ac766639324d
curl --location --request GET https://skins.cash/api/v2/inventory/730 \ --header x-api-key: 1irqrxyjaz413slz0w7ajg25pb2y63hdcet91yih \ --header salt: 1647884752 \ --header signature: 1c2d829df6ea8983a5d411f505ac04518bcfb550
Basic response
All API responses will contain 3 properties:
— success — boolean value indicating whether the request was processed successfully.
— True — the request has been processed successfully.
— False — is returned in case of failure.
— error_code — integer containing the response error. See description in Error Codes section.
— data — nullable object, containing response information, or NULL in case of request failure.
Endpoints
3.1. GET https://skins.cash/api/v2/docs
3.2. GET https://skins.cash/api/v2/prices/{app_id}
3.3. GET https://skins.cash/api/v2/user
3.4. GET https://skins.cash/api/v2/inventory/{app_id}
3.5. GET https://skins.cash/api/v2/inventory/{app_id}/{asset_id}
3.6. GET https://skins.cash/api/v2/trade
3.7. GET https://skins.cash/api/v2/trade/{id}
Where app_id is the game id and has the following values:730 for CS2,570 for Dota2,440 for Team Fortress,252490 for RUST.
NOTE: the prices returned do not include any bonuses (like loyalty / welcome or any other ones). But they will be applied to your trade.
{
"success": true,
"error_code": 0,
"data": [
{
"name": "★ Stiletto Knife | Blue Steel (Field-Tested)",
"price": 44.21,
"skin_count": 10
}
]
}data.0.name — skin market hash name;data[0]price — skin price in EURO;data.0.skin_count — the maximum amount of skins of a certain kind that can be sold on Skins.Cash. For example, you have 15 Stiletto Knifes, but the skin_count = 4, so you will only be able to sell 4 of them.
In the example above, we only showed one skin, but this request returns all the items (by game) that Skins.Cash purchases at the moment.
{
"success": true,
"error_code": 0,
"data": {
"bonus": 4,
"balance": 1.02
}
}data.bonus — bonus percent, added to your items prices (your bonus is not displayed at this step and will be added to the final price);data.balance — your Skins.Cash balance in EURO.
Where app_id is the game id and has the following values:730 for CS2,570 for Dota2,440 for Team Fortress,252490 for RUST.
{
"success": true,
"error_code": 0,
"data": [
{
"name": "★ Bayonet | Doppler (Factory New)",
"price": 231.50,
"class_id": "4775653951",
"context_id": "2",
"instance_id": "188530139",
"asset_id": "25140931000",
"app_id": "730",
"price_coefficient": true
},
{
"name": "M4A1-S | Cyrex (Field-Tested)",
"price": 5.03,
"class_id": "520029997",
"context_id": "2",
"instance_id": "188530139",
"asset_id": "22875221084",
"app_id": "730",
"price_coefficient": false
}
]
}data.0.name — skin market hash namedata.0.price — skin price in EUROdata.0.class_id — steam skin class iddata.0.context_id — steam skin context iddata.0.instance_id — steam skin instance iddata.0.asset_id — steam skin iddata.0.app_id — steam app id (game id)data.0.price_coefficient — applied to Doppler skins, informing that the skin price might be increased if the skin phase is one of rare ones (like Ruby, Black Pearl etc.). You can get the price of such an item by using the endpoint below.
In order to use this endpoint, you have to call this endpoint first:
GET https://skins.cash/api/v2/inventory/{app_id}
Where app_id is the game id and has the following values:730 for CS2,570 for Dota2,440 for Team Fortress,252490 for RUST.
asset_id — item asset_id from the response of previous request.
{
"success": true,
"error_code": 0,
"data": {
"price": 564.12
}
}data.price — price of the skin with a certain paint index.
In order to use this endpoint, you have to call this endpoint first:
GET https://skins.cash/api/v2/inventory/{app_id}
{
"skins": [
{
"instance_id": "188530139",
"class_id": "520029997",
"asset_id": "22875221084",
"app_id": "730"
},
{
"instance_id": "1625510296",
"class_id": "1988065996",
"asset_id": "9699264676",
"app_id": "570"
}
],
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=334332623&token=NWFB6Fbt",
"expected_min_sum": 12.32
}skins — required parameter, list of Steam skins that you want to sell;trade_url — optional parameter, steam user trade URL. If absent in request — trade URL set for user on Skins.Cash would be used.expected_min_sum — optional parameter, sets the minimum price that you are willing to sell this skin for.
curl --location --request POST 'skins.cash/api/v2/trade' \
--header 'salt: 1656004976 \
--header 'signature: 2a93aa450a6087c3bf556d7f1aa188d07dee3b7e255cd3210b29e0b595219a9b \
--header 'Content-Type: application/json' \
--data-raw ' { "items": [ { "name": "AWP | Pink DDPAT (Field-Tested)", "price": 12.03, "class_id": "2325911658", "context_id": "2", "instance_id": "480085569", "asset_id": "22529100891", "app_id": "730", "price_coefficient": false } {
"success": true,
"error_code": 0,
"data": {
"id": 4062480,
"hash": "86d646bf-91cd-421a-88db-beb87f66a839",
"sum": 5.04
}
}data.id — Skins.Cash trade unique identifierhash — unique trade comment, added to each trade on Steam. Always compare this hash with the trade on Steam to prevent scam.data.sum — final trade amount, that will be transferred to your balance after trade is processed on Steam.
{
"success": true,
"error_code": 0,
"data": {
"id": 4062480,
"hash": "f10af2c4-b0f0-4e7c-9f66-a45ce0f73500",
"sum": 8.21,
"steam_trade_id": "5079486596",
"status": 21,
"status_description": "Payed"
}
}id, hash, sum — same as in the previous response;steam_trade_id — nullable, id of the trade on Steam;status — internal Skins.Cash trade status;status_description — human readable Skins.Cash trade status.
Error codes
| Status name | Description | Code |
|---|---|---|
| STATUS_NEW | Trade was accepted, but is not created on Steam yet | 0 |
| STATUS_CREATED | Trade was created on Steam | 2 |
| STATUS_COMPLETED | Trade was accepted by both parties | 3 |
| STATUS_CREATION_FAILED | Trade creation failed. Most likely, because of Steam issues | -1 |
| STATUS_PAID | Payment in progress | 20 |
| STATUS_PAYMENT_IN_PROGRESS | Trade has been paid | 21 |
| STATUS_CANCELLED | Trade was canceled by Skins.Cash. Normally this happens if the trade wasn't accepted by the user after 5 minutes | 6 |
| STATUS_DECLINED | Trade was declined by user | 7 |
| STATUS_ERROR | An error occurred. General error on Steam | 90 |
| STATUS_VAC_BAN_ERROR | VAC Ban Error | 91 |
| STATUS_TRADE_URL_ERROR | Trade URL Error - please check if you are using a trade URL that corresponds to your Steam account | 92 |
| STATUS_HOLD_ERROR | Account Hold Error - Steam account limitation | 93 |
| STATUS_ITEM_NOT_FOUND | Item(s) not found in your inventory | 94 |
| STATUS_SERVICE_UNAVAILABLE | Steam unavailable | 95 |
| STATUS_CLOSE_FOR_TRADES | Account not available for trading - most likely because of privacy issues | 96 |
| STATUS_TRADE_LOCKED | Trading locked - account banned for trading | 97 |
Bonus types
| Bonus name | Human-readable bonus name | Description |
|---|---|---|
| LOYALTY_BONUS_NAME | loyalty | Accumulative loyalty bonus for a trade |
| WELCOME_BONUS_NAME | welcome | Bonus applied to the first trade |
| GLOBAL_BONUS_DEFAULT_NAME | default_global | Global bonus set by admin |
| REFERRAL_BONUS_NAME | referral | Accumulative bonus depending on referees' revenue |
| WHOLESALE_BONUS_NAME | wholesale | Wholesale bonus set by admin on request |
| CODE_BONUS_NAME | code | General name for any other bonus |
| ONETIME_WHOLESALE_BONUS_DEFAULT_NAME | default_onetime_wholesale | Onetime wholesale set by admin on request |
| PROMO_SKIN_BONUS_NAME | promo_skin | Bonus for opening n part of skin feature |

