OPSkins API
The OPSkins API uses a consistent, unified request and response system, and it supports per-method versioning.
Terms of Use
NEVER SHARE YOUR API KEY WITH ANYONE. YOUR API KEY GRANTS FULL, UNRESTRICTED ACCESS TO YOUR OPSKINS ACCOUNT.
The OPSkins API is provided by OPSkins on an “as is” and “as available” basis. OPSkins makes no representations or warranties of any kind, express or implied, as to the operation of the OPSkinss API. OPSkins will not be liable for any damages of any kind arising from the use of, or inability to use the OPSkins API; including, but not limited to: direct, indirect, incidental, punitive, and consequential damages, whether in contract, tort, or otherwise. Your API key may be revoked at any time for any reason at the discretion of the OPSkins staff. You are responsible for the security of the API key that you are provided; you may not share it with anyone. If you feel your API key has been compromised, revoke and change it immediately. All other OPSkins Terms still apply.
SDKs
- Node.js: @opskins/api
Postman collection
You can use Postman to test OPSkins API with your account API key.
Required to support Postman Collection Format v2.1.
Use next files to Import to the Postman Application:
collection: Opskins.postman_collection.json
environment: Opskins.postman_environment.json
Next open imported environment and setup your API key for api_key
.
Requests
Much like Steam's WebAPI, requests to our API use the format https://api.opskins.com/IInterfaceName/MethodName/v1/.
For GET requests, you should pass your input in the query string (e.g. https://api.opskins.com/IExample/ExampleMethod/v1/?foo=bar&bar=11&baz=22). If a particular method requires POST requests, then ALL of your input parameters (including your key, if not supplying it using HTTP basic authorization) MUST be sent in the request body in standard urlencoded format (the same format used by HTTP when posting an HTML <form>).
If you are currently logged in on opskins.com, then your login cookies will be used to authenticate your requests. All calls to the API should use your API key, however, as cookie authentication is only meant for internal use by OPSkins. Your API key will override any login cookies.
All requests MUST be made over HTTPS. HTTP is not supported and will redirect to HTTPS.
API key and auth hash
{{AUTH_HASH}} calculation examples:
Shell
echo -n 'your_api_key_value:' | base64
PHP
echo base64_encode('your_api_key_value' . ':');
Node.js
console.log(Buffer.from("your_api_key_value" + ":", "ascii").toString("base64"))
Most requests require authentication, and those that don't are marked. To authenticate, you'll need your API key from your account page. We prefer that you send your key as your username in HTTP Basic authorization, but you can also supply it as a key GET or POST parameter (depending on the request method).
In this documentation we use {{AUTH_HASH}} in Authorization header. To calculate your {{AUTH_HASH}} you need to base-64 encode your API key with colon. See examples in the right side panel.
OAuth
OPSkins uses an implementation of standard OAuth 2.0 to enable users to grant access to parts of their accounts to community applications.
If you are not familiar with OAuth, please view our visual OPSkins OAuth overview/guide. It's very important that you integrate OAuth properly into your site, otherwise we reserve the right to revoke your access.
Please only use
permanent
duration for one-time "Link your account with OPSkins". Do not sendduration=permanent
for signing in users. See this image for an explanation.OPSkins OAuth works automatically with WAX Trade API as well.
Before getting started with OAuth, you will need OAuth client credentials, which can be generated using the OPSkins API. Before you generate credentials, you will need to determine if your client can keep a secret or not.
Client Credentials
Your OAuth Client ID
Regardless of whether your client keeps a secret or not, it will be issued a client_id
, which will be used to identify
it with the OPSkins API.
Note: In this context, a "client" is the site or app that communicates with the OPSkins API. You need only one client ID per site or application that uses the OAuth API, so don't create separate client credentials per user who authenticates with your app.
Each OPSkins account is limited to 20 active OAuth clients.
Secret-Keeping Clients
If your client uses a restricted-access server (for example, your client is a website), then your client will need to
keep a secret. In your CreateClient call, specify can_keep_secret=1
(or omit it, as the default is 1). This will result in a secret being generated for you and sent in the response.
Keep this secret somewhere safe, but also private, as it cannot be retrieved again (it's hashed on the server-side)
and you will need to invalidate and reset it if you lose it.
Once you have a secret, you will need to use it to authenticate your requests for access tokens.
Non-Secret-Keeping Clients
If your client runs directly on end-user hardware and does not have a trusted server making calls to the OPSkins API,
then your client cannot keep a secret. In your CreateClient call, specify can_keep_secret=0
and no secret will be generated for your client. You will need to generate and store a secret on each client device,
which will be used to authenticate your requests for access tokens.
Scopes
- Please only use
permanent
duration for one-time "Link your account with OPSkins". Do not sendduration=permanent
for signing in users. See this image for an explanation.
OAuth makes use of scopes to limit what a token may have access to in a user's account. These are the scopes that may currently be requested:
Scope Name | Access |
---|---|
identity_basic |
Grants access to retrieve basic details about the user: WAX Trade URL, UserID, SteamID, Username, Avatar, and Preferred Language & Currency. Endpoints: (OPSkins) IUser/GetProfile & (WAX Trade) IUser/GetProfile & ITrade/GetTradeURL. |
trades |
Grants access to send, receive, and act on WAX Trade offers on the user's behalf. Users are asked for 2FA. Endpoints: ITrade |
items |
Grants access to view items in the user's OPSkins inventory, WAX Trade inventory, OPSkins purchase history, and WAX Trade trade history |
transfer_items |
Grants access to transfer items between OPSkins and WAX Trade. Endpoints: IInventory/TransferToTradeSite & IItem/WithdrawToOpskins |
instant_sell_recent_items |
Grants access to able to instant-sell user's recently unboxed items on WAX Trade (max 15 minutes old). Endpoints: IItem/InstantSellRecentItems |
balance |
Grants access to view current wallet balances. |
purchase_keys |
Grants access to purchase WAX Keys on user's behalf. Endpoints: ISales/BuyKeys |
open_cases |
Grants access to accept case opening trade offers on user's behalf. Endpoints: ITrade/AcceptOffer |
deposit |
Grants access to deposit items into the user's account |
Below are heavyweight scopes & should not be needed for most applications. You may still use them if you must:
Scope Name | Access |
---|---|
identity |
Grants access to Full Name, Email, UserID, SteamID, Subscription Details, and other user profile details & settings. Endpoints: same as identity_basic above. |
trades_no_2fa |
Grants access to send, receive, and act on WAX Trade offers on the user's behalf. Users are not asked for 2FA, ideal for mobile apps. Endpoints: ITrade |
manage_items |
Grants access to manage and edit prices in the user's OPSkins listings and to transfer items between OPSkins and WAX Trade |
withdraw |
Grants access to withdraw items from the user's account |
Below are restricted scopes:
- Please open a support ticket if you are interested in using any of these scopes.
Scope Name | Access |
---|---|
edit_account |
Grants access to edit the user's account details |
payments |
Grants access to make payments to and from the user's account |
purchase |
Grants access to purchase OPSkins items on the user's behalf |
cashout |
Grants access to request cashouts from the user's OPSkins account, to cancel cashouts on the user's behalf, and to change the user's cashout addresses |
convert |
Grants access to convert currencies in the user's OPSkins account |
Authenticating Users
Example URL:
https://oauth.opskins.com/v1/authorize?client_id=ff371b045307&state=1234567&duration=permanent&mobile=1&scope=identity+items&response_type=code
OAuth generally has two uses: to authenticate users (i.e. to determine their identity), and to grant access to a user account (i.e. to perform actions on their behalf). Regardless of the purpose for which you will be using OAuth, you will need to start by authorizing a user.
Start by directing the user, in a browser, to this URL: https://oauth.opskins.com/v1/authorize
- Please only use
permanent
duration for one-time "Link your account with OPSkins". Do not sendduration=permanent
for signing in users. See this image for an explanation.
Include these parameters in the query string:
Parameter | Required | Description |
---|---|---|
client_id |
Your OAuth client's client_id | |
response_type |
code (the literal string "code") |
|
state |
A random value that you've generated and stored securely (either in client memory, for applications which run on a client device, or in a server-side session, for applications which run on a server) | |
duration |
permanent (the literal string "permanent"); specify this if you want to maintain permanent access to the user's account (with a refresh token). Access can be revoked by the user on their account page. Please do not send this when signing in users, only use for a "Link your account with OPSkins" feature. |
|
mobile |
1 (the literal string "1"); specify this if you are prompting the user in a mobile or embedded environment; this will remove the navigation bar from the authorization page |
|
scope |
A space-separated list of scopes that you're requesting access to. If omitted, defaults to only identity_basic . |
If the user is not already logged into OPSkins, they will be prompted to sign in. Once signed in, the user will be shown
a list of scopes that are being requested by the OAuth client and buttons to approve or deny the request. Whichever
button the user clicks, they will be redirected back to the OAuth client's set redirect_uri
.
Example Redirect URI:
http://return-uri.com/?state=1234567&code=efGkwbUfi9RG9DOv
These parameters will be present in the query string:
Parameter | Present If... | Description |
---|---|---|
state |
Always | The state value that was passed to the authorize call. Use this to make sure that the authorization request originated from your app. |
error |
The user denied access | access_denied (the literal string) |
code |
The user approved access | An authorization code that you can exchange for a bearer token. |
Getting a Bearer Token
You will use bearer tokens to access the OPSkins API on a user's behalf.
Get a bearer token from this URL: https://oauth.opskins.com/v1/access_token
This endpoint may only be accessed using the HTTP POST method, and you must authenticate with HTTP Basic
authorization. The username for HTTP Basic authorization is your client_id
, and the password is your client secret
(if your client has one), or a random string that you generated and saved securely on the user's device
(if your client doesn't have a secret).
If you're using a device-specific string, you must use the same device secret to refresh your bearer token using a refresh token.
Using an authorization code
Example Request
curl --request POST \
--url https://oauth.opskins.com/v1/access_token \
--header 'Authorization: Basic ZmYzNzFiMDQ1MzA3OiRuR3dZVmRhQEBQRXJLQVVwRyNrSFEmWUExTClBKlgx' \
--data grant_type=authorization_code \
--data code=efGkwbUfi9RG9DOv
Example Response
{
"access_token": "AQAAAAQAAAAAAAVd4P////9Z3Sdf3C+GZhYgJzVwBLYfjo+n8LIAzj+JaAippILcmeX2e2o=",
"token_type": "bearer",
"expires_in": 1800,
"scope": "identity items",
"refresh_token": "6EnU6ZvGi5OoBcSpGs2V4PkcgfBgwr1V"
}
If you have an authorization code from the user authorization flow, you can exchange it for a bearer token by POSTing with these urlencoded parameters:
Parameter | Required | Description |
---|---|---|
grant_type |
authorization_code (the literal string) |
|
code |
(the authorization code you received in your return URL) |
Note that authorization codes are valid for a single use only.
Using a refresh token
Example Request
curl --request POST \
--url https://oauth.opskins.com/v1/access_token \
--header 'Authorization: Basic ZmYzNzFiMDQ1MzA3OiRuR3dZVmRhQEBQRXJLQVVwRyNrSFEmWUExTClBKlgx' \
--data grant_type=refresh_token \
--data refresh_token=6EnU6ZvGi5OoBcSpGs2V4PkcgfBgwr1V
Example Response
{
"access_token": "AQAAAAQAAAAAAAVd4P////9Z3Sdf3C+GZhYgJzVwBLYfjo+n8LIAzj+JaAippILcmeX2e2o=",
"token_type": "bearer",
"expires_in": 1800,
"scope": "identity items"
}
If you have a refresh token (i.e. you've already authorized the user in the past), you can use it to get a new bearer token by POSTing with these urlencoded parameters:
Parameter | Required | Description |
---|---|---|
grant_type |
refresh_token (the literal string) |
|
refresh_token |
(your refresh token) |
Note that refresh tokens can be used to get a bearer token an unlimited number of times.
Response
Regardless of what you use to request a bearer token, the response will look like this (JSON-encoded):
Parameter | Description |
---|---|
access_token |
Your new bearer token |
token_type |
bearer (the literal string) |
expires_in |
The number of seconds after which this bearer token will expire |
scope |
A space-separated list of scopes this new bearer token has access to |
refresh_token |
A new refresh token. Not always present in this response (see below) |
Note that bearer tokens expire after a relatively short amount of time (currently 30 minutes). After a bearer token expires, you will need to use a refresh token to get a new one (refresh tokens can be used to get an unlimited number of bearer tokens).
If you're exchanging an authorization code for a bearer token, and you did not request duration=permanent
, then you
will not receive a refresh token in this response. Your bearer token will expire, after which time access to the user's
account will no longer be available (unless you authorize them again).
If you're exchanging a refresh token for a bearer token, you may or may not receive a refresh token in this response. If you don't receive a new refresh token, then the refresh token you just received is still valid. If you do receive a new refresh token, then your old refresh token is no longer valid and has been replaced with the new one you just received.
Refresh tokens do not expire from disuse, but they do get rotated periodically after being used in the manner described in the preceding paragraph.
Signing a User Out
Example Request
curl --request POST \
--url https://oauth.opskins.com/v1/revoke_token \
--header 'Authorization: Basic ZmYzNzFiMDQ1MzA3OiRuR3dZVmRhQEBQRXJLQVVwRyNrSFEmWUExTClBKlgx' \
--data token_type=refresh \
--data token=6EnU6ZvGi5OoBcSpGs2V4PkcgfBgwr1V
Example Response
{
"success": true
}
If you did not request permanent access to a user's account, then you don't need to do anything to "sign the user out". Their bearer token will automatically expire.
If you requested permanent access and received a refresh token, then when you no longer need access to the user's account, you should revoke the refresh token.
To do so, make an HTTP POST to this URL: https://oauth.opskins.com/v1/revoke_token
This endpoint may only be accessed using the HTTP POST method, and you must authenticate with HTTP Basic authorization.
The username for HTTP Basic authorization is your client_id
, and the password is your client secret (if your client has one),
or the random string that you initially used to get the refresh token (if your client doesn't have a secret).
Include these urlencoded parameters in the request body:
Parameter | Required | Description |
---|---|---|
token_type |
refresh (the literal string) |
|
token |
(the refresh token you wish to revoke) |
If your token is invalid, you will receive an error response. If your token is valid (and has thus been revoked), you will receive
this JSON response: {"success": true}
Error Responses
Example Error Response
{
"error": "invalid_grant",
"error_description": "Provided refresh token does not exist, has been revoked, or does not belong to this client"
}
Errors in calling the OAuth API will generate standard error responses. These responses are JSON-encoded objects.
Parameter | Description |
---|---|
error |
An error code |
error_description |
A human-readable error message |
OAuth Error Codes
Error Code | Description |
---|---|
invalid_request |
Your request was not well-formed (e.g. you were missing an input parameter) |
invalid_client |
Your client credentials were incorrect |
invalid_grant |
Your authorization code or refresh token is invalid |
unauthorized_client |
Your OAuth client credentials are not authorized to do what you're trying to do |
unsupported_grant_type |
You're trying to use a grant_type that this server doesn't support |
invalid_scope |
You requested a scope that does not exist or that you aren't entitled to request |
insufficient_scope |
You tried to perform an operation that requires a scope you don't have |
access_denied |
The user denied access to their account |
invalid_token |
The bearer token you tried to use is not valid |
Calling the API
Example Request
curl --request GET \
--url 'https://api.opskins.com/ITest/TestAuthed/v1/' \
--header 'Authorization: Bearer AQAAAAQAAAAAAAVd4P////9Z3Sdf3C+GZhYgJzVwBLYfjo+n8LIAzj+JaAippILcmeX2e2o='
Example Invalid Bearer Token Response
{
"error": "invalid_token",
"error_description": "Bearer token is not valid"
}
Example Invalid Scope Response
{
"error": "insufficient_scope",
"error_description": "You lack the required scope to perform this action"
}
Now that you have a bearer token, you can call the standard OPSkins API on behalf of the user who authorized the bearer token to you. To do so, call the API as normal with this header:
Authorization: Bearer <your bearer token>
If your bearer token is invalid, you will receive a 401 response like shown to the right.
Possible error_description
messages are:
Bearer token is not valid
Bearer token has expired
Bearer token has been revoked
Note that some API endpoints are not accessible over OAuth, and most require a specific scope to be accessed. If you try to call something for which you lack the appropriate scope, you will receive a 403 response like shown to the right.
See the OPSkins API documentation for which scope is required by each endpoint.
Responses
Example of a successful request to ITest/TestAuthed/v1:
{
"status": 1,
"time": 1498104663,
"balance": 5124,
"credits": 0,
"response": {
"uid": 12345,
"id64": "76561197960287930"
}
}
Example of a failed request to ISales/EditPrice/v1 due to attempt to update an item's price to the same price it's already listed at:
{
"status": 2012,
"time": 1498105136,
"message": "Price has not changed."
}
The API's response encoding can be controlled by the format input parameter. Currently, these formats are supported:
- json - Plain, basic JSON. No unnecessary whitespace. This is the default if you don't explicitly specify a format.
- json_pretty - JSON with pretty-printing (newlines and indentation). Useful for development, but wasteful bandwidth- and memory-wise for application usage.
- vdf - Valve's KeyValues format. null is represented by an empty string. Quotes, backslashes, and newlines in keys or values will be backslash-escaped (e.g. a quote is \", a newline is \n). Requests which are unauthenticated, malformed, or otherwise incorrect will result in non-200 HTTP response codes. Successful requests (wherein "successful" means that your input was well-formed, not that the requested operation succeeded) will result in 200 status codes. Non-200 responses are not guaranteed to be encoded in your desired format, and will most likely be HTML instead.
These are the top-level properties which may be defined in the response object for responses bearing a 200 HTTP response code:
status
Always present. This is a numeric error code, or 1OK
on success.time
Always present. This is the server's current Unix time. You should not consider this time to be authoritative or correct (i.e. don't use us to sync your clock). The intention behind providing it is to allow you to determine clock skew when decoding timestamps returned in our API.message
Not always present, but frequently present when status is not 1 (indicating request failure). When present, this is usually a human-readable error message which MAY be localized to the first language specified in the request's Accept-Language header.current_page
Present only when the current method's output may be paginated. When present, this is the current page number. You may request a different page using the page input parameter.total_pages
Present only when current_page is. This is the total number of pages in the output listing.response
Not always present. When present, it is the method-specific output of your API request. It is usually, but not always, an object.
Top-level Balance Properties:
Note that if you are displaying user balance on your website via OAuth, you must display using balance_in_keys
as the number of keys the user can purchase; balance
& credits
will always be 0
.
- balance
Not always present, but usually present in the response of requests that may affect your account balance. When present, it is your account's current USD balance in USD cents, as an integer (divide by 100 to get USD).
- credits
Present whenever balance
is. This is your account's OP Credit balance, as an integer.
- balance_in_keys
Present whenever balance
is. Only outputted for OAuth - Number of keys purchasable with balance
& credits
. Always a whole number. Each key is worth 2.50
USD.
- balance_restricted
Present whenever balance
is, not outputted with OAuth. Balance that's restricted in US cents.
- credits_restricted
Present whenever balance
is, not outputted with OAuth. OP Credit balance that's restricted.
- cryptoBalances
Cryptocurrency balances object
Headers
The X-Queries-Remaining header contains the number of API queries that you're allowed to make with your API key today. This isn't defined if your API key has no daily query limit. This number resets daily at midnight EDT.
Some API methods may be cached for a period of time. For methods which are cached, X-Cache-Status may be either fresh or cached, depending on whether the data is fresh.
Error Codes
1xxx: User Account Error
Code | Error | Meaning |
---|---|---|
1000 | GENERIC_USER_ACCOUNT_ERROR | This code indicates that there was a generic error which involved a problem with your user account. Further details are unavailable. |
1001 | NOT_ENOUGH_COINS | This code indicates that the operation failed because your account balance is insufficient (we refer to funds as "coins" internally). |
1002 | ACCESS_DENIED | The operation failed because your account does not have necessary permissions. |
1003 | NOT_LOGGED_IN | The operation failed because you are not authenticated. |
1004 | LISTING_LIMIT_EXCEEDED | The operation failed because you have too many items listed under your account. |
1005 | NO_MORE_FREE_USES | The operation failed because you tried to use a paid feature for free (e.g. you tried to feature an item using a free featured listing from a subscription purchase), but your account has no more free uses of that item. |
1006 | INVALID_PASSWORD | The supplied password was incorrect. |
1007 | PASSWORD_UNSET | Your account does not have a password set on it. |
1008 | TOO_MANY_PASSWORD_ATTEMPTS | You have gotten too many passwords wrong, and you must wait. |
1009 | UNACCEPTABLE_PASSWORD | That password does not satisfy the password requirements. |
1010 | TWOFACTOR_INCORRECT | The supplied two-factor authentication code was not correct. |
1011 | USERNAME_TAKEN | That username has already been taken by another account. |
1012 | UNACCEPTABLE_USERNAME | That username does not satisfy the username requirements. |
1013 | EMAIL_UNVERIFIED | Your account's email address has not been verified. |
1014 | NO_MORE_FREE_USES | You requested a free usage of something (e.g. featured listing), but your account doesn't have any more free uses remaining. |
1015 | UNACCEPTABLE_EMAIL | That email address can't be used. Try another one. |
1016 | NOT_ALLOWED_IN_COUNTRY | Country location is not allow to make action. |
1017 | NEEDS_EMAIL_CODE | Verification code from email is required to perform action. |
1018 | EMAIL_UNSET | Request or user should have email. |
1019 | WHITELIST_REQUIRED | Whitelist required. |
1020 | NEEDS_PHONE_CODE | SMS phone code is required. |
1021 | TRADE_URL_UNSET | User required to have trade url. |
1022 | INVENTORY_FULL | Account inventory reached items limit. |
1023 | ACCOUNT_NOT_SETUP | Account is not setuped. |
2xxx: Internal Error
Code | Error | Meaning |
---|---|---|
2000 | GENERIC_INTERNAL_ERROR | The operation failed due to a problem on our end. Further details are unavailable. |
2001 | DATABASE_ERROR | The operation failed due to a problem with our database. Please try again in a few moments. |
2002 | NOT_FOUND | The operation failed because the requested item (be it a user, a listing, etc.) was not found. |
2003 | BAD_STATE | The operation failed because the requested object is in a bad state. The requested operation cannot be completed while the object is in its current state. |
2004 | NO_MATCHING_ITEMS_FOUND | Similar to NOT_FOUND, this indicates that the operation failed because we couldn't find anything matching your query. |
2005 | BOT_UNAVAILABLE | The operation failed because a bot that is needed to complete the operation is currently unavailable, most likely due to Steam issues. Please try again in a few moments. |
2006 | PAYMENT_GATEWAY_UNAVAILABLE | The operation failed because a required payment gateway is not available. |
2007 | CANNOT_CREATE_DIRECTORY | We weren't able to create a directory on our end. |
2008 | FILE_UPLOAD_ERROR | The operation failed due to an error in the file upload. |
2009 | FILE_UPLOAD_ALREADY_EXISTS | The file you are trying to upload already exists on the server. |
2010 | CANNOT_DELETE_FILE | A requested file could not be deleted. |
2011 | BOT_FULL | A required bot is full, and cannot accept any more items. |
2012 | ALREADY_IN_THAT_STATE | You are trying to change the state of an object, but the object is already in the desired state. |
2013 | LOCKED | The requested object is locked and cannot be changed. |
2014 | PRICE_HAS_CHANGED | The price on the requested object has changed. |
2015 | ENCRYPTION_KEY_INVALID | The encryption key you tried to use is not valid. |
2016 | DISABLED | The requested endpoint or system is currently disabled. |
2018 | EXPIRED | Expired. |
2019 | EMPTY_DATA | Data is empty. |
2020 | FAILED_TO_CONVERT_CRYPTO | Failed to make crypto exchange. |
3xxx: User Error
Code | Error | Meaning |
---|---|---|
3000 | BAD_INPUT | The input to your request was malformed or otherwise bad. |
3001 | UNACCEPTABLE_ITEM | When listing an item: we cannot accept that item for sale at this time. When editing an existing item: the requested operation cannot apply to that item. |
3002 | DUPLICATE_ITEM | - You're trying to list an item that is already on sale - You tried to list the same item in the same request twice - You tried to list two patterned CS:GO items with identical names and differing prices in the same trade |
3003 | UNACCEPTABLE_PRICE | You can't list that item for that price. |
3004 | DIFFERENT_BOTS_NOT_ALLOWED | You can't make this request for items on different bots (all items in the request must reside on the same bot) |
3005 | BAD_REQUEST | Your request was missing some data, or it was otherwise bad. |
3006 | TOO_MANY_REDEMPTIONS | This object has been redeemed too many times. |
3007 | CAPTCHA_INVALID | Your CAPTCHA solution was incorrect, or you need to supply a CAPTCHA solution to complete this action. |
3008 | RATE_LIMIT_EXCEEDED | You have been doing that action too frequently, and you must wait. |
3009 | NOT_PURCHASABLE | Item is not purchaseble. |
3010 | EMPTY_CART | Cart is empty. |
3011 | BUYERS_CLUB_ONLY | Allowed for Buyers Club. |
3012 | MISSING_DEPENDENCY | |
3013 | CART_TOTAL_CHANGED | |
3014 | REQUEST_OR_FILE_TOO_LARGE | |
3015 | UNACCEPTABLE_FILE_TYPE | |
3016 | SUPPORT_TICKET_ALREADY_CREATED | |
3017 | INSUFFICIENT_BALANCE | |
3018 | NOT_PURCHASABLE_WITH_SPECIFIED_CURRENCY |
4xxx: Third Party Error
Code | Error | Meaning |
---|---|---|
4000 | STEAM_UNAVAILABLE | Steam is currently not available. Please try again later when Steam is working. |
4001 | STEAM_LIMIT | We've run into a Steam limitation (e.g. maximum number of trade offers, maximum number of items). |
4002 | STEAM_UNAVAILABLE_CACHED | Steam is currently not available (we didn't actually check this time, but it failed recently so we're delaying requests so we don't slam Steam). Please try again later when Steam is working. |
4003 | THIRD_PARTY_UNAVAILABLE | A third-party service is currently not available. |
4004 | STEAM_OFFER_FAILURE | |
4005 | ORDER_UNFULFILLED |
Trade Offer Status Codes
Where a trade offer ID is expected, these codes may be provided instead.
Code | Meaning |
---|---|
-1 | A trade offer has not yet been sent, or a trade offer was sent but wasn't accepted in the allotted time and it has been canceled |
-2 | Either the user or the bot has too many trade offers out and cannot send any more |
-3 | The user cannot trade right now due to a ban or a trade cooldown (e.g. Steam Guard) |
-4 | A trade offer was sent but the user declined or countered it |
-5 | The user's trade URL is wrong or their inventory is full |
-9 | There was some unknown error; support will need to repair this item manually |
-10 | Steam reports that this item's ID does not exist anymore. If the item is in the system, support will need to repair it manually |
Standard Sale Object
Standard Sale Object example
{
"id": 35880764,
"amount": 2,
"showcase": 0,
"color": "D2D2D2",
"img": "https://steamcommunity-a.opskins.media/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXU5A1PIYQNqhpOSV-fRPasw8rsUFJ5KBFZv668FFYwnfKfcG9HvN7iktaOkqD1auLTxD5SvZYgiLvFpo7xjVLh-kdrYWnzcoGLMlhpsyM-5vg",
"inspect": null,
"type": "Base Grade Container",
"classid": "1432174707",
"instanceid": "0",
"market_name": "Revolver Case",
"market_hash_name": "Revolver Case",
"appid": 730,
"contextid": "2",
"assetid": "7337546177",
"assetid_old": null,
"bot_id": 702,
"state": 2,
"bumptime": null,
"wear": "",
"stickers": [],
"val_1": null,
"market_fee_app": null,
"flags": {
"tf2_uncraftable": false,
"trade_locked": false,
"has_screenshots": false,
"screenshot_is_video": false,
"steam_commodity": false,
"is_trade_restricted": false
},
"attributes": {},
"instant_sell_enabled": true,
"is_your_item": false
}
Newer API methods output what we call "Standard Sale Objects" when you query them for details about a sale or an item in your OPSkins inventory. Each standard sale object has the properties listed here, although some methods might add or remove properties (which will be noted in their documentation).
Parameter | Type | Description |
---|---|---|
id | int | The item's sale ID |
amount | int | The item's price, in USD cents. If the item is not on sale, it's the item's previous sale price. If the item was deposited into your OPSkins inventory, this will be a garbage value |
showcase | int | Indicates whether the item is privately listed (-1 ), featured (1 ), or has no special showcase (0 ) |
color | string | The item's "color" from Steam, in hex (e.g. "AABBCC") |
img | URL (string) | A full URL to the item's image |
inspect | URL (string) | The item's inspect link, or null if not applicable |
type | string | The item's "type" string from Steam, e.g. "Base Grade Container" |
classid | string | The item's Steam classid, as a string |
instanceid | string | The item's Steam instanceid, as a string |
market_name | string | The item's Steam market name (which is the name displayed on the site) |
market_hash_name | string | The item's Steam market_hash_name, which is usually identical to its market_name |
appid | int | The Steam AppID of the app which owns this item (e.g. 730 for CS:GO) |
contextid | string | The Steam contextid which owns this item, as a string |
assetid | string | The item's unique asset ID, as a string. null if not available. Sometimes referred to as a third-party item id. |
assetid_old | string | This item's unique asset ID before the item was transferred to a historical state. null if the trade is active or there is no associated asset ID. |
def_id | int | Definition ID. A unique & unchanging identifier for this item's meta data, regardless of app. |
bot_id | int | The internal OPSkins ID of the bot which is holding, will hold, or has held this item. You can map this to a SteamID using IStatus/GetBotList. |
state | int | The item's state. You can map this to a string using ISales/GetSaleStatuses |
bumptime | int | The Unix timestamp of when this item was last bumped |
wear | float | The item's wear, as a string, or null if not applicable |
stickers | array-object | An array of objects for each sticker applied to this item. |
--sticker_id | int | |
--wear | string | |
val_1 | int | The item's "val_1" value, which is always an integer (or null if not applicable). For TF2, this is an Unusual item's effect index. For CS:GO, this is a pattern index. |
market_fee_app | int | The AppID of the owning game for a Steam trading card, emoticon, etc. null if not applicable |
escrow_ends | int | Unix timestamp when escrow/trade lock ends (null if N/A) |
flags | object | An object containing the following boolean properties |
--tf2_uncraftable | bool | Indicates whether this item is uncraftable in TF2 |
--trade_locked | bool | Indicates whether this item is on a temporary trade lock (e.g. H1Z1). Deprecated at this point as H1Z1 has removed trade locks. |
--has_screenshots | bool | Indicates whether this item has an Instant Field Inspection |
--screenshot_is_video | bool | If this item has an Instant Field Inspection, indicates whether there is a video available in addition to screenshots |
--steam_commodity | bool | Indicates whether Steam considers this item to be a "commodity" (e.g. uses buy orders only on the Steam Community Market) |
--is_trade_restricted | bool | Is this sale restricted, meaning cannot be sold, cannot be withdrawn, etc. |
attributes | object | Various item-specific attributes in no particular format |
instant_sell_enabled | bool | Can this item be instant-sold? |
is_your_item | bool | Only present when relevant. This is true if you own this item, or false otherwise. |
Standard Transaction Object
Example Standard Transaction Object
{
"id": 245178376,
"timestamp": 1548047249,
"updated_timestamp": null,
"type": 6,
"type_name": "Customer Support",
"state": 1,
"state_name": "Completed",
"currency": 1,
"target_item": null,
"amount": 100000,
"amount_restricted": 0,
"amount_nocashout": 0,
"new_balance": 11202000,
"new_balance_restricted": 0,
"new_balance_nocashout": 102000,
"amount_refunded": 0,
"amount_restricted_refunded": 0,
"amount_nocashout_refunded": 0,
"comment": "Credit for being a great customer."
}
Parameter | Type | Description |
---|---|---|
id | int | |
timestamp | int | |
updated_timestamp | int | |
type | int | The type of transaction this is |
state | int | This transaction's current state |
target_item | int | Sale ID/invoice ID/etc with which this transaction is associated |
amount | int | USD cents difference. Negative means you lost money, positive means you gained money |
amount_restricted | int | USD cents difference (restricted). Negative means you lost money, positive means you gained money |
amount_nocashout | int | The USD cents difference in your non-cashoutable balance (i.e. how much of this transaction affected your non-cashoutable balance |
new_balance | int | Your new account balance after this transaction was finished |
new_balance_restricted | int | Your new account balance that's restricted after this transaction was finished |
new_balance_nocashout | int | Your new non-cashoutable balance after this transaction was finished |
amount_refunded | int | How much of this transaction was refunded (sign will be opposite of "amount"; e.g. if fully refunded, "amount" + "amount_refunded" = 0) |
amount_refunded_restricted | int | How much of this transaction's restricted change was refunded (sign will be opposite of "amount_restricted") |
amount_nocashout_refunded | int | How much of this transaction's non-cashoutable change was refunded (sign will be opposite of "amount_nocashout") |
comment | string | A comment to go along with this transaction |
Interfaces
ICashout
Processor IDs
Some of the API methods documented on this page will either consume or output processor IDs. These are integers which represent a particular cashout processor. The current cashout processor IDs are:
1
PayPal3
Bitcoin5
Skrill
Cashout Addresses
Before a cashout may be requested, you first need to set your processor address. Most processors (everything except Bitcoin) will not allow you to change your cashout address once set, unless you contact support (for security reasons). If you have had two-factor authentication enabled on your account for at least 14 days, you may change your cashout addresses for these processors at any time, although you will be required to provide your latest two-factor authentication code.
Cancel Pending Cashout
Request example:
curl --request POST \
--url 'https://api.opskins.com/ICashout/CancelPendingCashout/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
-d cashoutid=43
Response returns JSON structured like this:
{
"status": 1,
"time": 1513761121
}
Attempts to cancel a pending cashout. If we are currently working on processing cashouts, this may return error code 2013 LOCKED. In this case, simply try again in a minute or so
HTTP Request
POST https://api.opskins.com/ICashout/CancelPendingCashout/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
cashoutid | int | The ID of the cashout you wish to cancel |
Output
Parameter | Type | Description |
---|---|---|
none |
Get Address
Request example:
curl --request GET \
--url 'https://api.opskins.com/ICashout/GetAddress/v1/?processor=1' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"processor_name": "PayPal",
"address": "email@example.com",
"timestamp": 1482499687,
"can_change": false,
"change_requires_twofactor": true
}
}
Get your saved cashout address for a particular processor.
HTTP Request
GET https://api.opskins.com/ICashout/GetAddress/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
processor | int | The ID of the processor you want to query |
Output
Parameter | Type | Description |
---|---|---|
processor_name | string | The name of the processor |
address | string | Your saved address, or null if not yet saved |
timestamp | int | The Unix timestamp of when you saved this address, or null if not yet saved |
can_change | bool | A boolean indicating whether you can change this address by calling SetAddress again right now |
change_requires_twofactor | bool | A boolean indicating whether you will need to provide a two-factor code to change this address |
Get Bitcoin Instant Cashout Rate
Request example:
curl --request GET \
--url 'https://api.opskins.com/ICashout/GetBitcoinInstantCashoutRate/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"usd_rate": 10656.75
}
}
Get the current approximate BTC/USD exchange rate which will be used if you request an instant Bitcoin cashout.
HTTP Request
GET https://api.opskins.com/ICashout/GetBitcoinInstantCashoutRate/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
usd_rate | float | The price per 1 BTC, in USD (dollars, not cents) |
Get Cashoutable Balance
Request example:
curl --request GET \
--url 'https://api.opskins.com/ICashout/GetCashoutableBalance/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"total_balance": 4546899,
"pending_cashout_balance": 126500,
"deposited_balance": 0,
"cashoutable_balance": 4420399
}
}
Get your account's balance, including how much of your balance can be cashed out.
HTTP Request
GET https://api.opskins.com/ICashout/GetCashoutableBalance/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
total_balance | int | Your total (spendable) account balance, in USD cents |
pending_cashout_balance | int | The sum of all your pending cashouts, in USD cents |
deposited_balance | int | How much of your balance was deposited through a payment provider, in USD cents. This amount cannot be cashed out |
cashoutable_balance | int | The total amount of money you have that can be cashed out, in USD cents. This is your total_balance minus your pending_cashout_balance and your deposited_balance |
Get Ethereum Instant Cashout Rate
Request example:
curl --request GET \
--url 'https://api.opskins.com/ICashout/GetEthereumInstantCashoutRate/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"usd_rate": 802.95
}
}
HTTP Request
GET https://api.opskins.com/ICashout/GetEthereumInstantCashoutRate/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
usd_rate | float | USD rate in dollars |
Get Pending Cashouts
Request example:
curl --request GET \
--url 'https://api.opskins.com/ICashout/GetPendingCashouts/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513760722,
"response": {
"cashouts": [
{
"id": 43,
"amount": 500,
"address": "email@example.com",
"timestamp": 1508488149,
"processor": 1,
"priority": true
},
{
"id": 44,
"amount": 10000,
"address": "1F1tAaz5x1HUXrCNLbtMDqcw6o5GNn4xqX",
"timestamp": 1513760707,
"processor": 3,
"priority": false
}
]
}
}
Retrieves a list of pending cashouts on your account
HTTP Request
GET https://api.opskins.com/ICashout/GetPendingCashouts/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
cashouts | array-object | An array of objects, each of which represents a cashout and has these properties: |
id | int | The cashout ID |
amount | int | The amount to be cashed out, in USD cents |
address | string | The address to which the cashout will be sent |
timestamp | int | A Unix timestamp representing when this cashout was requested |
processor | int | The ID of the processor which this cashout will be sent via |
priority | bool | A boolean indicating whether this is a priority cashout (which will incur extra fees) |
Request Bitcoin
Request example:
curl --request POST \
--url 'https://api.opskins.com/ICashout/RequestBitcoin/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
-d amount=1000
Response returns JSON structured like this:
{
"status": 1,
"time": 1513762337,
"response": {
"address": "1F1tAaz5x1HUXrCNLbtMDqcw6o5GNn4xqX",
"cashoutid": 45,
"priority": false
}
}
Request a Bitcoin cashout. You must have first set your Bitcoin address using SetAddress. Your account needs to be whitelisted for standard Bitcoin cashouts (but not for instant ones); if you aren't, then this will fail with error code 1019 WHITELIST_REQUIRED.
Instant cashouts are not available for cashout requests below a certain USD size. This threshold is subject to change without notice. If you try to request an instant cashout that's too small, this will fail with error code 3003 UNACCEPTABLE_PRICE. If you request an instant cashout and instant Bitcoin cashouts are unavailable, this will fail with error code 2016 DISABLED.
You can see the approximate exchange rate we will use for an instant Bitcoin cashout using the GetBitcoinInstantCashoutRate method.
HTTP Request
POST https://api.opskins.com/ICashout/RequestBitcoin/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
amount | int | The amount you wish to cashout, in USD cents | |
priority | int | Pass 1 if you want an instant Bitcoin cashout, or 0 if you want a standard one |
Output
Parameter | Type | Description |
---|---|---|
address | string | The Bitcoin address where this cashout will be sent |
cashoutid | int | The ID of the newly-created cashout request |
priority | string | A boolean indicating whether this cashout request is for a priority/instant cashout |
bitcoin_txn_id | string | Only present if this was an instant cashout. This is the Bitcoin transaction ID (which is a hex-string hash) which was just paid to you |
bitcoin_amount_satoshis | int | Only present if this was an instant cashout. This is the amount of BTC you received, in satoshis (0.00000001 BTC) |
Request Ethereum
Request example:
curl --request POST \
--url 'https://api.opskins.com/ICashout/RequestEthereum/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
-d amount=10000
Response returns JSON structured like this:
{
"status": 1,
"time": 1513764992,
"balance": 4533815,
"credits": 6780,
"response": {
"address": "0xC2D7CF95645D33006175B78989035C7c9061d3F9",
"cashoutid": 61,
"priority": true,
"ethereum_txn_id": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
"ether_amount_wei": "248120000000000000"
}
}
Request a Bitcoin cashout. You must have first set your Bitcoin address using SetAddress. Your account needs to be whitelisted for standard Bitcoin cashouts (but not for instant ones); if you aren't, then this will fail with error code 1019 WHITELIST_REQUIRED.
Instant cashouts are not available for cashout requests below a certain USD size. This threshold is subject to change without notice. If you try to request an instant cashout that's too small, this will fail with error code 3003 UNACCEPTABLE_PRICE. If you request an instant cashout and instant Bitcoin cashouts are unavailable, this will fail with error code 2016 DISABLED.
You can see the approximate exchange rate we will use for an instant Bitcoin cashout using the GetBitcoinInstantCashoutRate method.
HTTP Request
POST https://api.opskins.com/ICashout/RequestEthereum/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
amount | int | The amount you wish to cashout, in USD cents | |
priority | int | Pass 1 if you want an instant Bitcoin cashout, or 0 if you want a standard one |
Output
Parameter | Type | Description |
---|---|---|
address | string | The Ethereum address where this cashout will be sent |
cashoutid | int | The ID of the newly-created cashout request |
priority | string | A boolean indicating whether this cashout request is for a priority/instant cashout |
ethereum_txn_id | string | Ethereum transaction ID |
ether_amount_wei | string | Amount in wei |
Request PayPal
Request example:
curl --request POST \
--url 'https://api.opskins.com/ICashout/RequestPayPal/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
-d amount=1000 \
-d priority=1
Response returns JSON structured like this:
{
"status": 1,
"time": 1513766605,
"response": {
"address": "email@example.com",
"cashoutid": 62,
"priority": true
}
}
Request a cashout via PayPal. PayPal cashouts carry a base fee of around 2.9% which is charged by PayPal. You must have first set your PayPal address using SetAddress. In some situations (typically PayPal service outages) we must disable the ability to request priority cashouts. In this case, if you request a priority cashout, you will receive an error code of 2016 LOCKED.
HTTP Request
POST https://api.opskins.com/ICashout/RequestPayPal/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
amount | int | The amount you wish to cashout, in USD cents | |
priority | int | Pass 1 if you want an instant Bitcoin cashout, or 0 if you want a regular one |
Output
Parameter | Type | Description |
---|---|---|
address | string | The Bitcoin address where this cashout will be sent |
cashoutid | int | The ID of the newly-created cashout request |
priority | string | A boolean indicating whether this cashout request is for a priority/instant cashout |
Request Skrill
Request example:
curl --request POST \
--url 'https://api.opskins.com/ICashout/RequestSkrill/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
-d amount=1000
Response returns JSON structured like this:
{
"status": 1,
"time": 1513766605,
"response": {
"address": "email@example.com",
"cashoutid": 63,
"priority": true,
"skrill_txn_id": 497029,
"skrill_txn_status": 2,
"skrill_txn_status_msg": "processed"
}
}
Request a Skrill cashout. Skrill cashouts are always instant and carry a flat 5% fee. You must have first set your Skrill address using SetAddress. In event of a Skrill service outage, you may receive error code 2006 PAYMENT_GATEWAY_UNAVAILABLE. In this situation, your account will not be charged, and you should try again in an hour or so. If OPSkins must disable Skrill cashouts at any time, this will fail with error code 2016 DISABLED.
Because of their instant nature, Skrill cashouts cannot be canceled.
HTTP Request
POST https://api.opskins.com/ICashout/RequestSkrill/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
amount | int | The amount you wish to cashout, in USD cents |
Output
Parameter | Type | Description |
---|---|---|
address | string | The email address where the payment was sent |
cashoutid | int | The ID of the newly-created (and paid) cashout request |
skrill_txn_id | int | The ID of the Skrill payment transaction (see Skrill's documentation) |
skrill_txn_status | int | An integer representing the status of the Skrill payment transaction |
skrill_txn_status_msg | string | A string representing the status of the Skrill payment transaction |
Set Address
Request example:
curl --request POST \
--url 'https://api.opskins.com/ICashout/SetAddress/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
-d processor=6 \
-d address=0xC2D7CF95645D33006175B78989035C7c9061d3F9
Response returns JSON structured like this:
{
"status": 1,
"time": 1513763085,
"response": {
"processor_name": "Ethereum",
"address": "0xC2D7CF95645D33006175B78989035C7c9061d3F9",
"html": "Your Ethereum cashout address has been updated successfully."
}
}
Set your saved cashout address for a particular processor. This will only update the address which will be used for cashout requests you create in the future; any pending cashout requests will still be paid to the address on file at time of request. If you want to change the address to which those requests will be sent, then you will need to cancel those requests and create new ones.
HTTP Request
POST https://api.opskins.com/ICashout/SetAddress/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
processor | int | The ID of the processor you want to use | |
address | string | Your cashout address | |
twofactor_code | string | Optional if setting your address for the first time, or updating your Bitcoin address. Required otherwise. This is your current TOTP authentication code. |
Output
Parameter | Type | Description |
---|---|---|
processor_name | string | The name of the processor, as a string |
address | string | Your newly saved address |
html | string | Message |
ICrypto
Convert Currencies
Request example:
curl --request POST \
--url 'https://api.opskins.com/ICrypto/ConvertCurrencies/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"convert_from":1,"convert_to":101,"convert_amount":1}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1548976502,
"balance": 250,
"credits": 0,
"balance_restricted": 0,
"credits_restricted": 0,
"cryptoBalances": {
"ETH": "0.150330727600721575",
"WAX": "20336.643803550000000000"
},
"response": {
"converted": true
}
}
HTTP Request
POST https://api.opskins.com/ICrypto/ConvertCurrencies/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
convert_from | int | Currency ID | |
convert_to | int | Currency ID | |
convert_amount | float | Amount. For USD, in US Dollars, not cents. | |
cashoutable | boolean | Set to true to convert from cashoutable balance |
Output
Parameter | Type | Description |
---|---|---|
converted | bool | true if converted |
Get Address
Request example:
curl --request GET \
--url 'https://api.opskins.com/ICrypto/GetAddress/v1/?currency_id=102' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513864287,
"response": {
"currency_id": "102",
"currency_code": "wax",
"address": ""
}
}
Get User's saved wallet's address
HTTP Request
GET https://api.opskins.com/ICrypto/GetAddress/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
currency_id | int | Currency ID |
Output
Parameter | Type | Description |
---|---|---|
currency_id | string | |
currency_code | string | |
address | string |
Get Crypto Converted Amount
Request example:
curl --request GET \
--url 'https://api.opskins.com/ICrypto/GetCryptoConvertedAmount/v1?convert_from=1&convert_amount=10' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513867387,
"response": {
"rates": {
"eth": "0.131181949363767540",
"wax": "15.80505414"
}
}
}
HTTP Request
GET https://api.opskins.com/ICrypto/GetCryptoConvertedAmount/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
convert_from | int | Currency ID | |
convert_amount | int | Amount |
Output
Parameter | Type | Description |
---|---|---|
rates | object | Converted rates |
Get Currencies
Request example:
curl --request GET \
--url 'https://api.opskins.com/ICrypto/GetCurrencies/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1517904122,
"response": {
"currencies": [
{
"index": 102,
"code": "wax",
"name": "WAX Token",
"name_short": "WAX",
"logo": "https://opskins.com/images/crypto-logos/wax.png"
}
]
}
}
Get info about available cryptocurrencies
HTTP Request
GET https://api.opskins.com/ICrypto/GetCurrencies/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
currencies | array-object | |
index | int | Internal cryptocurrency index (ID) |
code | string | Cryptocurrency code |
name | string | Full name of the cryptocurrency |
name_short | string | Short name of the cryptocurrency |
logo | string(URL) | Cryptocurrency logotype URL |
Get Withdraw List
Request example:
curl --request GET \
--url 'https://api.opskins.com/ICrypto/GetWithdrawList/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513864473,
"response": {
"statuses": [
{
"status_id": 1,
"name": "Pending"
},
{
"status_id": 2,
"name": "Success"
},
{
"status_id": 3,
"name": "Failure"
}
],
"count": "0",
"items": []
}
}
Get paginated list of user's crypto withdrawals
HTTP Request
GET https://api.opskins.com/ICrypto/GetWithdrawList/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
page | int | Page |
Output
Parameter | Type | Description |
---|---|---|
statuses | array-object | List of available ststuses |
status_id | int | |
name | string | |
count | string | Items count |
items | array-object | |
status | int | |
timestamp | int | |
currency_id | int | |
crypto | string | |
amount | int | |
address | string | |
comments | string | |
crypto_txid | string |
Set Address
Request example:
curl --request POST \
--url 'https://api.opskins.com/ICrypto/SetAddress/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"currency_id":101,"address":"0xC2D7cF95645d33006175B78989035c7C9061D3f9"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513864287,
"response": {
"currency_id": "101",
"currency_code": "eth",
"address": "0xC2D7cF95645d33006175B78989035c7C9061D3f9"
}
}
Save User's wallet's address
HTTP Request
POST https://api.opskins.com/ICrypto/SetAddress/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
currency_id | int | Currency ID | |
address | string | Wallet address |
Output
Parameter | Type | Description |
---|---|---|
currency_id | int | |
currency_code | string | |
address | string |
Withdraw
Request example:
curl --request POST \
--url 'https://api.opskins.com/ICrypto/Withdraw/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"currency_id":101,"amount":1}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513864287,
"response": {
"withdrawn_amount": "1.000000000000000000",
"crypto_txid": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
"new_balance": "10.000000000000000000",
"new_withdrawable_balance": "10.000000000000000000"
}
}
Withdrawing cryptos
HTTP Request
POST https://api.opskins.com/ICrypto/Withdraw/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
currency_id | int | Currency ID | |
amount | int | Amount | |
address | string | Wallet address if user has no any |
Output
Parameter | Type | Description |
---|---|---|
withdrawn_amount | string | |
crypto_txid | string | |
new_balance | string | |
new_withdrawable_balance | string |
IFeed
Get Homepage Banners
Request example:
curl --request GET \
--url 'https://api.opskins.com/IFeed/GetHomepageBanners/v1/'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"banners": [
{
"desktop_img": "https://opskins.com/images/banners/homeheading-en-default.jpg",
"mobile_img": "https://opskins.com/images/banners/homeheading-mobile-en-default.jpg",
"caption": "Get started buying and selling in-game skins and virtual items today.",
"call_to_action_label": "Join Now",
"call_to_action_url": "https://opskins.com/?loc=login",
"is_external_call_to_action": false
},
{
"desktop_img": "https://opskins.com/images/banners/homeheading-en-ethcashout.jpg",
"mobile_img": "https://opskins.com/images/banners/homeheading-mobile-en-ethcashout.jpg",
"caption": "You can now cashout your OPSkins Wallet Funds to Ethereum and Bitcoin.",
"call_to_action_label": "See Details",
"call_to_action_url": "https://blog.opskins.com/instant-no-fee-bitcoin-cashouts-now-live/",
"is_external_call_to_action": true
}
]
}
}
Get Home page banners
HTTP Request
GET https://api.opskins.com/IFeed/GetHomepageBanners/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
banners | array-object | |
desktop_img | string | Bigger banner image url |
mobile_img | string | Smaller banner image url |
caption | string | Banner's caption (localized) |
call_to_action_label | string | Call to action label (localized) |
call_to_action_url | string | Call to action url |
is_external_call_to_action | bool | Is it external link? |
Get Featured Sales
Request example:
curl --request GET \
--url 'https://api.opskins.com/IFeed/GetFeatured/v1/'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"featured": [
{
"appid": 730,
"sales": [
{
"id": 37218730,
"amount": 21500,
"showcase": 1,
"color": "8650AC",
"img": "https://steamcommunity-a.opskins.media/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpotLu8JAllx8zJYAJG7dG3h4OehMj4OrzZgiVT7Jdz2euS84_x3wSyrxY_ZGr1dYGdcFBvZFnQ8gTvyOzng8K0uszB1zI97SQtQxI0",
"inspect": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198254158431A7412443167D4633331731617786154",
"type": "? StatTrak™ Covert Knife",
"classid": "721059643",
"instanceid": "188530170",
"market_name": "★ StatTrak™ Bayonet | Damascus Steel (Factory New)",
"market_hash_name": "★ StatTrak™ Bayonet | Damascus Steel (Factory New)",
"appid": 730,
"contextid": "2",
"assetid": "7412443167",
"bot_id": 328,
"state": 2,
"bumptime": 1473293439,
"wear": "0.059836708009243",
"stickers": [],
"val_1": 410,
"market_fee_app": null,
"escrow_ends": null,
"flags": {
"tf2_uncraftable": false,
"trade_locked": false,
"has_screenshots": false,
"screenshot_is_video": false,
"steam_commodity": false
}
},
{
"id": 36956310,
"amount": 120000,
"showcase": 1,
"color": "8650AC",
"img": "https://steamcommunity-a.opskins.media/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpovbSsLQJf3qr3czxb49KzgL-Kmsj2P7rSnXtU6dd9teTA5475jV2urhcDPzCkfMKLIwRvYwrWqVS8wezpjcS_78_Mn3Bruykj7HbfzhPm00xLOLc-jPXNHELeWfLcbrqw2A",
"inspect": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198219365715A7387729825D7683743778350955982",
"type": "? Covert Knife",
"classid": "1897901789",
"instanceid": "188530139",
"market_name": "★ M9 Bayonet | Doppler (Factory New)",
"market_hash_name": "★ M9 Bayonet | Doppler (Factory New)",
"appid": 730,
"contextid": "2",
"assetid": "7387729825",
"bot_id": 124,
"state": 2,
"bumptime": 1473290674,
"wear": "0.0093218917027116",
"stickers": [],
"val_1": 417,
"market_fee_app": null,
"escrow_ends": null,
"flags": {
"tf2_uncraftable": false,
"trade_locked": false,
"has_screenshots": true,
"screenshot_is_video": true,
"steam_commodity": false
}
}
]
}
]
}
}
Get featured sales
HTTP Request
GET https://api.opskins.com/IFeed/GetFeatured/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
featured | array-object | An array of objects containing list of applications and featured sales |
appid | integer | Application ID |
sales | array-object | Array of featured sales for the application. Each object is Standard Sale Object |
IInventory
Deposit
Request example:
curl --request POST \
--url 'https://api.opskins.com/IInventory/Deposit/v1/' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"items":"[{\"appid\":730,\"contextid\":2,\"assetid\":\"8916807344\"}]"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"tradeoffer_id": 1458892,
"tradeoffer_error": null,
"bot_id": 593,
"bot_id64": "76561197973578969",
"security_token": "CkjkNS",
"sales": [
{
"saleid": 37246531,
"appid": 730,
"contextid": "2",
"assetid": "8916807344",
"market_name": "Nova | Predator (Field-Tested)",
"price": 10,
"addons": []
}
]
}
}
Add between 1 and 50 items (upper cap subject to change) to your On-Site Inventory.
This will fail if any of the items passed in already have sales with active trade offers out. If there's a matching sale for an item that doesn't have a trade offer out, it will automatically be deleted.
This works identically to ISales/ListItems/v1
minus the price
and addons
parameters.
HTTP Request
GET https://api.opskins.com/IInventory/Deposit/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
items | string | A JSON-encoded array of objects. One object for each item you wish to list. Each object should contain these properties: | |
appid | int | The Steam AppID of the game which owns this item (e.g. 730 for CS:GO, 440 for TF2, 570 for Dota 2) | |
contextid | string | The Steam context ID which contains this item (2 for Valve games, 6 for Steam Community items, 1 for H1Z1, etc.). When you right-click on an item in your Steam inventory and copy its URL, the context ID is the second number after the hash. | |
assetid | string | The Steam asset ID of the item. This is also known as just the item's id |
Output
Parameter | Type | Description |
---|---|---|
tradeoffer_id | int | If we were able to successfully send a trade offer, this is its ID. If error, this is null. |
tradeoffer_error | string | If we weren't able to send a trade offer, this is an error message string. If there was no error, this is null |
bot_id | string | The internal OPSkins ID of the storage account to which these sales were assigned. |
bot_id64 | string | The 64-bit SteamID of the storage account to which these sales were assigned. This is the account that's sending a trade offer. |
security_token | string | The 6-character security token that is included in the trade offer message. |
sales | array-object | An array containing objects describing the sales that were created. Each object has these properties: |
saleid | int | The OPSkins internal ID of this sale |
appid | int | The Steam AppID for this item |
contextid | string | The Steam context ID in which this item resides in your inventory |
assetid | string | The current asset ID of this item in your inventory |
market_name | string | The name of this item |
price | int | The list price of this item in USD cents (typically set to $99,999.99) |
addons | array-string | An array containing strings for each addon this item has |
Get Instant Sale Inventory
Request example:
curl --request GET \
--url 'https://api.opskins.com/IInventory/GetInstantSaleInventory/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"items": [
{
"id": 37246435,
"id_parent": 35994866,
"name": "Mr Grimmmz AR-15",
"inspect": null,
"type": "Skin",
"appid": 433850,
"contextid": "1",
"assetid": "169270531706182691",
"classid": "1943905157",
"instanceid": "0",
"bot_id": 587,
"bot_id64": "76561198262531747",
"added_time": 1502271146,
"offer_id": null,
"offer_declined": false,
"offer_untradable": false,
"requires_support": false,
"can_repair": null,
"instantsell_credits": 2505,
"instantsell_money": 2505,
"has_stickers": false
}
],
"commodities": {
"AK-47 | Emerald Pinstripe (Field-Tested)": {
"name": "AK-47 | Emerald Pinstripe (Field-Tested)",
"type": "Restricted Rifle",
"appid": 730,
"contextid": "2",
"classid": "469457057",
"instanceid": "480085569",
"instantsell_credits": 90,
"instantsell_money": 90,
"amount": 4
},
"AK-47 | Frontside Misty (Minimal Wear)": {
"name": "AK-47 | Frontside Misty (Minimal Wear)",
"type": "Classified Rifle",
"appid": 730,
"contextid": "2",
"classid": "1310726693",
"instanceid": "188530139",
"instantsell_credits": 871,
"instantsell_money": 871,
"amount": 1
}
}
}
}
Get the contents of the current user's OSI that are instant-sellable, with prices
HTTP Request
GET https://api.opskins.com/IInventory/GetInstantSaleInventory/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
items | array-object | |
id | int | OPSkins sale ID of the item |
id_parent | int | Sale ID of the item that created this |
name | string | Steam name of the item |
inspect | string | Inspect link, if inspectable |
type | string | Steam "type" of the item |
appid | int | Steam AppID of the game that owns this item |
contextid | string | ContextID that owns this item |
assetid | string | Steam AssetID of the item |
classid | string | The item's Steam classid |
bot_id | int | Internal ID of the bot holding this item |
bot_id64 | string | SteamID of the bot holding this item |
added_time | int | The Unix timestamp for when this item was added to your OPSkins inventory |
offer_id | string | If a trade offer was successfully sent, this is its ID as a string. If we weren't able to send a trade offer, this is null |
offer_declined | bool | Was an offer sent, and then declined by the user? |
offer_untradable | bool | Did we attempt to send an offer, and were we unable to because the user can't trade or has bad trade URL? |
requires_support | bool | Does this item need support intervention? |
can_repair | bool | If item requires support, can you try to self-repair it? |
instantsell_credits | int | |
instantsell_money | int | |
has_stickers | bool | |
commodities | object | Each property name is item market name |
name | string | Steam name of the item |
type | string | Steam "type" of the item |
appid | int | Steam AppID of the game that owns this item |
contextid | string | ContextID that owns this item |
classid | string | The item's Steam classid |
instanceid | string | The item's Steam instanceid |
instantsell_credits | int | |
instantsell_money | int | |
amount | int |
Get Inventory v1
Request example:
curl --request GET \
--url 'https://api.opskins.com/IInventory/GetInventory/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"limits": {
"730": {
"free_slots": 20
}
},
"items": [
{
"id": 37246116,
"id_parent": 37163694,
"name": "AK-47 | Black Laminate (Battle-Scarred)",
"market_hash_name": "AK-47 | Black Laminate (Battle-Scarred)",
"inspect": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198254952801A7409960970D918957424684059103",
"type": "Mil-Spec Grade Rifle",
"appid": 730,
"contextid": "2",
"assetid": "7409960970",
"classid": "1837803532",
"instanceid": "0",
"img": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhoyszJemkV4N27q4KcqP_xMq3I2GhTupQpi7DCrY2m3AzkrkZrZWz3cdCRcQBraQvX_lPtxOjugJO07svXiSw0Sdo_N6Y",
"wear": 0.62874603271484,
"bot_id": 469,
"bot_id64": "76561198254952801",
"added_time": 1486029172,
"offer_id": null,
"offer_declined": false,
"offer_untradable": false,
"requires_support": false,
"can_repair": null
},
{
"id": 37246543,
"id_parent": 37245493,
"name": "AK-47 | Redline (Field-Tested)",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"inspect": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198216283564A7413350509D2361120003424397777",
"type": "Classified Rifle",
"appid": 730,
"contextid": "2",
"assetid": "7413350509",
"classid": "1440245414",
"instanceid": "480085569",
"img": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhjxszJemkV09-5lpKKqPrxN7LEmyVQ7MEpiLuSrYmnjQO3-UdsZGHyd4_Bd1RvNQ7T_FDrw-_ng5Pu75iY1zI97bhLsvQz",
"wear": 0.22321608662605,
"bot_id": 26,
"bot_id64": "76561198216283564",
"added_time": 1513277676,
"offer_id": null,
"offer_declined": false,
"offer_untradable": false,
"requires_support": false,
"can_repair": null
}
]
}
}
Gets the contents of your OPSkins inventory. This method is paginated, and will return up to per_page
(Default: 10,000) results per page.
HTTP Request
GET https://api.opskins.com/IInventory/GetInventory/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
The response of this method is an array of objects, where each object has these properties
Parameter | Type | Description |
---|---|---|
items | array-object | |
id | int | OPSkins sale ID of the item |
id_parent | int | Sale ID of the item that created this |
name | string | Steam name of the item |
inspect | string | Inspect link, if inspectable |
type | string | Steam "type" of the item |
appid | int | Steam AppID of the game that owns this item |
contextid | string | ContextID that owns this item (as a string) |
assetid | int | Steam AssetID of the item |
bot_id | int | Internal ID of the bot holding this item |
bot_id64 | string | SteamID of the bot holding this item |
added_time | int | The Unix timestamp for when this item was added to your OPSkins inventory |
offer_id | string | If there's an active offer out, the offerID. If one is queued, 0. If no offer and none queued, null. Numbers are strings. |
offer_declined | bool | Was an offer sent, and then declined by the user? |
offer_untradable | bool | Did we attempt to send an offer, and were we unable to because the user can't trade or has bad trade URL? |
requires_support | bool | Does this item need support intervention? |
can_repair | bool | If item requires support, can you try to self-repair it? |
Get Inventory v2
Request example:
curl --request GET \
--url 'https://api.opskins.com/IInventory/GetInventory/v2/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"current_page": 1,
"total_pages": 1,
"response": {
"limits": {
"730": {
"free_slots": 20
}
},
"items": [
{
"id": 37246112,
"amount": 8139,
"showcase": 0,
"color": "D2D2D2",
"img": "https://steamcommunity-a.opskins.media/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot621FA957PHEcDB9_9W7hIyOqPv9NLPF2G5VuZQl072WodSkjQTn_UU-YTqncYaccFc2NQyBqVXqxuzqhZG7uc_XiSw0f3y6kYU",
"inspect": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198300519336A7237478879D11817448509333327943",
"type": "Classified Sniper Rifle",
"classid": "310810014",
"instanceid": "188530139",
"market_name": "AWP | BOOM (Factory New)",
"market_hash_name": "AWP | BOOM (Factory New)",
"appid": 730,
"contextid": "2",
"assetid": "7237478879",
"bot_id": 678,
"state": 7,
"bumptime": 1486027762,
"wear": "0.063811652362347",
"stickers": [],
"val_1": 174,
"market_fee_app": null,
"escrow_ends": null,
"flags": {
"tf2_uncraftable": false,
"trade_locked": false,
"has_screenshots": false,
"screenshot_is_video": false,
"steam_commodity": false
},
"id_parent": 34167691,
"added_time": 1486027762,
"offer_id": null,
"offer_declined": false,
"offer_untradable": false,
"requires_support": false,
"can_repair": null
},
{
"id": 37246122,
"amount": 1379,
"showcase": 0,
"color": "D2D2D2",
"img": "https://steamcommunity-a.opskins.media/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpou-6kejhh3szDeDBN4tOJh5WFhf7nNoTdn2xZ_It33uqVp9-m3gfmrRY4ZGnzINfHdgA4ZwmFqwLrkLzqhpS_v86dnSZlpGB8smE_CYHw",
"inspect": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198299823364A7412352294D14457202162449228456",
"type": "Restricted Rifle",
"classid": "992233855",
"instanceid": "480085569",
"market_name": "M4A4 | Daybreak (Factory New)",
"market_hash_name": "M4A4 | Daybreak (Factory New)",
"appid": 730,
"contextid": "2",
"assetid": "7412352294",
"bot_id": 803,
"state": 7,
"bumptime": 1486032137,
"wear": "0.03229545801878",
"stickers": [],
"val_1": 471,
"market_fee_app": null,
"escrow_ends": null,
"flags": {
"tf2_uncraftable": false,
"trade_locked": false,
"has_screenshots": false,
"screenshot_is_video": false,
"steam_commodity": false
},
"id_parent": 37216480,
"added_time": 1486032137,
"offer_id": null,
"offer_declined": false,
"offer_untradable": false,
"requires_support": false,
"can_repair": null
}
]
}
}
Gets the contents of your OPSkins inventory. This method is paginated, and will return up to per_page
(Default: 10,000) results per page.
HTTP Request
GET https://api.opskins.com/IInventory/GetInventory/v2/
Input
Parameter | Type | Required | Description |
---|---|---|---|
page | int | Page number to request. Defaults to 1. | |
per_page | int | Number of items per page to return. Defaults to 10000. If you pass a value larger than 10,000, then it will be capped to 10,000. |
Output
Parameter | Type | Description |
---|---|---|
limits | int | An object whose keys represent an application id |
{app_id} | int | Steam Application ID. In this case, CS:GO. This key is dynamic and based off of which games we currently restrict inventory sizes for. |
free_slots | int | How many slots are available in your On-Site Inventory for this game |
items | array-object | An array of Standard Sale Objects, which also additionally have the following properties: |
id_parent | int | The OPSkins ID of the item you purchased which created this item. For example, if you bought item #12345 and ended up with item #23456 in your OPSkins inventory, then id will be 23456 and id_parent will be 12345. |
added_time | int | The Unix timestamp for when this item was added to your OPSkins inventory |
offer_id | string | If a trade offer was successfully sent, this is its ID as a string. If we weren't able to send a trade offer, this is null |
offer_declined | bool | If there was previously a withdrawal trade offer for this item but it was declined, this is true. |
offer_untradable | bool | If we previously attempted to send a withdrawal trade offer for this item but we were unable to due to a bad trade URL or another trading restriction (e.g. Steam Guard), this is true. |
requires_support | bool | If this item has a problem and requires support intervention before it can be withdrawn or relisted, this is true. |
can_repair | bool | If this item requires support but you can attempt to self-repair it, this is true. |
Get Steam Instant Sell Items
Request example:
curl --request GET \
--url 'https://api.opskins.com/IInventory/GetSteamInstantSellItems/v1/?appid=730&contextid=2' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"items": [
{
"classid": "469444882",
"instanceid": "302028390",
"id": "9845903946",
"instantsell_credits": 1,
"instantsell_money": 1
},
{
"classid": "310777133",
"instanceid": "302028390",
"id": "9840987581",
"instantsell_credits": 2,
"instantsell_money": 2
}
],
"descriptions": {
"469444882_302028390": {
"name": "Tec-9 | Urban DDPAT",
"market_name": "Tec-9 | Urban DDPAT (Field-Tested)",
"market_hash_name": "Tec-9 | Urban DDPAT (Field-Tested)",
"fraudwarnings": [],
"commodity": 0,
"img": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpoor-mcjhoyszMdS1D-OOjhoK0mvLwOq7c2D4B6pwijLiXpt6s3lDkrkJvZG-hLI7Ee1M7YVmC8gO-kunrjZK1tJXXiSw0uDynv1g",
"color": "D2D2D2",
"type": "Consumer Grade Pistol",
"actions": [
{
"link": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20SA%assetid%D2937662689715671410",
"name": "Inspect in Game..."
}
],
"descriptions": [],
"restricted": false
},
"310777133_302028390": {
"name": "Dual Berettas | Contractor",
"market_name": "Dual Berettas | Contractor (Well-Worn)",
"market_hash_name": "Dual Berettas | Contractor (Well-Worn)",
"fraudwarnings": [],
"commodity": 0,
"img": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpos7asPwJfwPz3YTBB09GzkImemrmnMuvQxTtXu5Eh2r6SpdTx3lbjrxZla2nwddWSc1Q3Y1-BrgDrwO_nm9bi60mswaUQ",
"color": "D2D2D2",
"type": "Consumer Grade Pistol",
"actions": [
{
"link": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20SA%assetid%D9414819751196385396",
"name": "Inspect in Game..."
}
],
"descriptions": [],
"restricted": false
}
},
"commodities": {
"Nova | Candy Apple (Minimal Wear)": {
"classid": "310780494",
"instanceid": "302028390",
"amount": 1,
"id": "9227373883",
"pos": 22,
"instantsell_credits": 2,
"instantsell_money": 2
},
"StatTrak™ Dual Berettas | Ventilators (Factory New)": {
"classid": "1704312304",
"instanceid": "188530564",
"amount": 1,
"id": "8666175075",
"pos": 33,
"instantsell_credits": 49,
"instantsell_money": 49
}
}
}
}
Get Steam Instant Sell Items
HTTP Request
GET https://api.opskins.com/IInventory/GetSteamInstantSellItems/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
appid | integer | The Steam AppID of the game which owns this item (e.g. 730 for CS:GO, 440 for TF2, 570 for Dota 2) | |
contextid | integer | The Steam context ID which contains this item (2 for Valve games, 6 for Steam Community items, 1 for H1Z1, etc.). When you right-click on an item in your Steam inventory and copy its URL, the context ID is the second number after the hash. |
Output
Parameter | Type | Description |
---|---|---|
items | array-object | |
classid | string | The item's Steam classid |
instanceid | string | The item's Steam instanceid |
id | int | |
instantsell_credits | int | |
instantsell_money | int | |
descriptions | object | Each property name is item market name |
name | string | Steam name of the item |
market_name | string | Steam name of the item |
market_hash_name | string | The item's Steam market_hash_name, which is usually identical to its market_name |
fraudwarnings | array | |
commodity | int | |
img | string | |
color | string | |
type | string | |
actions | array-object | |
link | string | |
name | string | |
descriptions | array | |
restricted | boolean | |
commodities | object | Each property name is item market name |
classid | string | The item's Steam classid |
instanceid | string | The item's Steam instanceid |
amount | int | |
id | int | |
pos | int | |
instantsell_credits | int | |
instantsell_money | int |
RedeemToGiftCode
Request example:
curl --request POST \
--url 'https://api.opskins.com/IInventory/RedeemToGiftCode/v1/' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"sale_ids":"12345678","name_first":"Jake","name_last":"Smith","email":"jake.smith@email.com"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1543950023,
"response": {
"code": "A1B2CD-E3FG4H-5IJ67K-LMN890",
"sale_ids": [
309421829
],
"message": "Your item has been redeemed"
}
}
Redeems a digital item. Not accessible until December 10th 2018.
HTTP Request
POST https://api.opskins.com/IInventory/RedeemToGiftCode/v1/
Notes
sale_ids
key was kept for consistency with other redemption endpoints, but this endpoint only supports processing a single sale id at a time.
This endpoint only works for Non-Collectibles items at this time.
Input
Parameter | Type | Required | Description |
---|---|---|---|
sale_ids | string | Only supports a single sale id at this time. Item must be in your OPSkins inventory and not in an error state. | |
name_first | string | User's first name for delivery | |
name_last | string | User's last name for delivery | |
string | User's email address for delivery. This is where any redemption information, such as CD keys, will be sent. |
Output
Parameter | Type | Description |
---|---|---|
sale_ids | array | The sale IDs you redeemed |
code | string | The Gift Code key that will redeem the same item from the sale. |
message | string | A readable message for the front-end to display on redemption |
RedeemDigitalItem
Request example:
curl --request POST \
--url 'https://api.opskins.com/IInventory/RedeemDigitalItem/v1/' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"sale_ids":"12345678,12345679","name_first":"Jake","name_last":"Smith","email":"jake.smith@email.com"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1543950023,
"response": {
"sale_ids": [
309421829
],
"message": "Your 1 item(s) have been redeemed"
}
}
Redeems a digital item. Not accessible until December 10th 2018.
HTTP Request
POST https://api.opskins.com/IInventory/RedeemDigitalItem/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
sale_ids | string | A comma-separated list of item IDs. Items must be in your OPSkins inventory and not in an error state. | |
name_first | string | User's first name for delivery | |
name_last | string | User's last name for delivery | |
string | User's email address for delivery. This is where any redemption information, such as CD keys, will be sent. |
Output
Parameter | Type | Description |
---|---|---|
sale_ids | array | The sale IDs you redeemed |
message | string | A readable message for the front-end to display on redemption |
Redeem Physical Item
Request example:
curl --request POST \
--url 'https://api.opskins.com/IInventory/RedeemPhysicalItem/v1/' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"sale_ids":"12345678,12345679","address_id":1234,"expected_shipping_cost":1234}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1543950023,
"response": {
"redeemed_irls": [
{
"id": 1234,
"type": 2,
"type_name": "PHYSICAL_GOODS",
"state": 1,
"state_name": "PROCESSING",
"shipped_item": null,
"digital_address": null,
"sale_id": 123455678,
"user_id": 123456,
"internal_app_id": 20,
"def_id": 3000,
"create_time": 1543950023
}
]
}
}
HTTP Request
POST https://api.opskins.com/IInventory/RedeemPhysicalItem/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
sale_ids | string | Sale ID that is in your On-Site inventory and physically redeemable | |
address_id | int | Address ID from the result of IUser/SaveAddress or IUser/GetAddresses | |
expected_shipping_cost | int | How much, in cents, you're expecting to pay in shipping/handling/fees total. Expected result obtained from ISales/GetShippingPrice. Request will fail if this is not an exact match. |
Output
Parameter | Type | Description |
---|---|---|
sale_ids | array | The sale IDs you redeemed |
message | string | A readable message for the front-end to display on redemption |
TransferToTradeSite
Request example:
curl --request POST \
--url 'https://api.opskins.com/IInventory/TransferToTradeSite/v1/' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"items":"37246521,37246519"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1528302276,
"response": {
"item_count": 1,
"error_count": 0,
"items": {
"495152840": {
"id": 2418,
"sku": 1131,
"wear": 0.12115149199963,
"pattern_index": null,
"preview_urls": null,
"eth_inspect": null,
"trade_hold_expires": null,
"internal_app_id": 2,
"inspect": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198299226805A14458963896D16195198146817842130",
"name": null,
"category": null,
"color": null,
"image": {
"300px": "https://steamcommunity-a.akamaihd.net/economy/image//300fx300f",
"600px": "https://steamcommunity-a.akamaihd.net/economy/image//600fx600f"
},
"suggested_price": null,
"paint_index": 0
}
}
}
}
Request a transfer of your items on OPSkins.com to trade.opskins.com
HTTP Request
POST https://api.opskins.com/IInventory/TransferToTradeSite/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
items | string | A comma-separated list of item IDs. Items must be in your OPSkins inventory or be on sale and do not have an outstanding trade offer or require support. |
Output
Parameter | Type | Description |
---|---|---|
item_count | int | Number of total items selected for transfer. |
error_count | int | Number of items that failed to transfer. |
items | array-object | Array of sales/items. In the following format: |
(Sale ID) | int | OPSkins Sale ID |
(Standard Item Object) | object | See in Trade Docs: Standard Item Object |
Withdraw
Request example:
curl --request POST \
--url 'https://api.opskins.com/IInventory/Withdraw/v1/' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"items":"37246521,37246519"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"offers": [
12345
]
}
}
Requests a withdrawal trade offer for one or more items in your OPSkins inventory.
HTTP Request
POST https://api.opskins.com/IInventory/Withdraw/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
items | string | A comma-separated list of item IDs. Must be items in your OPSkins inventory that do not have an outstanding trade offer and do not require support. | |
delivery_id64 | string | Steam id64 of the account to send the item to (contact support to enable this functionality on your account) | |
delivery_token | string | Steam trade url token parameter of the account (contact support to enable this functionality on your account) |
|
delivery_message | string | Optional delivery message to send instead of the standard OPSkins one. (contact support to enable this functionality on your account) |
Output
Parameter | Type | Description |
---|---|---|
offers | array-object | An array of objects (one per bot), each with the following structure: |
bot_id | int | The internal ID of the bot which sent (or tried to send) the trade offer |
tradeoffer_id | string | If we were able to successfully send a trade offer, this is its ID. If error, this is null. |
tradeoffer_error | string | If we were not able to send a trade offer, this is a string containing an error message. If no error, this is null. |
items | array-int | An array of OPSkins item IDs in this trade offer |
offer_link | string(URL) | In case of the one trade offer this link will be presented |
Withdraw Crypto Asset
Request example:
curl --request POST \
--url 'https://api.opskins.com/IInventory/WithdrawCryptoAsset/v1/' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"saleid":37246521,"address":"0xC2D7CF95645D33006175B78989035C7c9061d3F9"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"from_address": "0xC2D7cF95645d33006175B78989035c7C9061D3f9",
"txid": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}
}
Requests a withdrawal trade offer for one or more items in your OPSkins inventory.
HTTP Request
POST https://api.opskins.com/IInventory/WithdrawCryptoAsset/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
saleid | int | Sale ID | |
address | string | Address |
Output
Parameter | Type | Description |
---|---|---|
from_address | string | An array of objects (one per bot), each with the following structure: |
txid | string | Etherium transaction id |
ILocalization
Get Countries Regions
Request example:
curl --request GET \
--url 'https://api.opskins.com/ILocalization/GetCountriesRegions/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"countries": [
{
"name": "United States & Canada",
"phone_code": "+1",
"code": "US",
"country_id": 1228,
"regions": [
{
"name": "Alabama",
"abbreviation": "AL"
},
{
"name": "Alaska",
"abbreviation": "AK"
},
{
"name": "Arizona",
"abbreviation": "AZ"
},
{
"name": "Arkansas",
"abbreviation": "AR"
},
{
"name": "California",
"abbreviation": "CA"
}
]
}
]
}
}
Get the countries & regions
HTTP Request
GET https://api.opskins.com/ILocalization/GetCountriesRegions/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
countries | array-object | List of countries |
name | string | Country name (localized) |
phone_code | string | Phone Code |
code | string | 2 character country code |
country_id | string | 4 digit country id |
regions | array-object | List of regions |
name | string | Region name |
abbreviation | string | 3 character region abbreviation |
Get Site Languages
Request example:
curl --request GET \
--url 'https://api.opskins.com/ILocalization/GetSiteLanguages/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"lang": [
{
"code": "en",
"native": "English",
"en_translated": "English"
},
{
"code": "zh",
"native": "中文",
"en_translated": "Chinese"
},
{
"code": "ru",
"native": "Русский",
"en_translated": "Russian"
},
{
"code": "de",
"native": "Deutsch",
"en_translated": "German"
}
]
}
}
Get's the languages available for the site
HTTP Request
GET https://api.opskins.com/ILocalization/GetSiteLanguages/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
lang | array-object | |
code | string | ISO 639-1 2 letter language code |
native | string | Language name in native characters |
en_translated | string | Language name translated to English |
IOAuth
Create Client
Request example:
curl --request POST \
--url https://api.opskins.com/IOAuth/CreateClient/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data name=TestApp2 \
--data redirect_uri=http://localhost:1234
Response returns JSON structured like this:
{
"status": 1,
"time": 1535408581,
"response": {
"secret": "$nGwYVda@@PErKAUpG#kHQ&YA1L)A*X1",
"client": {
"client_id": "ff371b045307",
"name": "TestApp2",
"redirect_uri": "http://localhost:1234",
"time_created": 1535407757,
"has_secret": true
}
}
}
Create a new OAuth client.
HTTP Request
POST https://api.opskins.com/IOAuth/CreateClient/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
name | string | Name for this client, to be displayed to users when they are prompted to approve access | |
redirect_uri | string | URI to which users are redirected after approving or denying access | |
can_keep_secret | bool | Set this to 0 if your client cannot keep a secret and will maintain per-token secrets (see OAuth documentation). Default 1 |
Output
Parameter | Type | Description |
---|---|---|
secret | string/null | If your client can keep a secret, this is its new secret. If not, this is null. Record this somewhere safe, as it cannot be retrieved again later. |
client | object | Object representing the newly-created client |
client_id | string | The OAuth client's hexadecimal string ID (used as username in HTTP Basic auth) |
name | string | User-supplied name for the client, which is displayed to users when they approve access |
redirect_uri | string | The URI to which users are redirected after approving or denying access |
time_created | int | Unix timestamp for when the client was created |
has_secret | bool | true if this client has a secret, false if it is expected to main per-token secrets |
Delete Client
Request example:
curl --request POST \
--url https://api.opskins.com/IOAuth/DeleteClient/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data client_id=ff371b045307
Response returns JSON structured like this:
{
"status": 1,
"time": 1535408581
}
Delete an OAuth client that you own, and invalidate all of its tokens.
HTTP Request
POST https://api.opskins.com/IOAuth/DeleteClient/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
client_id | string | Hexadecimal client_id of the client you want to delete |
Output
none
Get Owned Client List
Request example:
curl --request GET \
--url https://api.opskins.com/IOAuth/GetOwnedClientList/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1535408581,
"response": {
"clients": [
{
"client_id": "c757f21d1f54",
"name": "TestApp1",
"redirect_uri": "http://localhost",
"time_created": 1491512781,
"has_secret": false
},
{
"client_id": "ff371b045307",
"name": "TestApp2",
"redirect_uri": "http://localhost:1234",
"time_created": 1535407757,
"has_secret": true
}
]
}
}
Get a list of all OAuth clients owned by the authenticated user.
HTTP Request
GET https://api.opskins.com/IOAuth/GetOwnedClientList/v1/
Input
none
Output
Parameter | Type | Description |
---|---|---|
clients | object-array | Array containing objects representing each client. |
client_id | string | The OAuth client's hexadecimal string ID (used as username in HTTP Basic auth) |
name | string | User-supplied name for the client, which is displayed to users when they approve access |
redirect_uri | string | The URI to which users are redirected after approving or denying access |
time_created | int | Unix timestamp for when the client was created |
has_secret | bool | true if this client has a secret, false if it is expected to main per-token secrets |
Reset Client Secret
Request example:
curl --request POST \
--url https://api.opskins.com/IOAuth/ResetClientSecret/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data client_id=ff371b045307
Response returns JSON structured like this:
{
"status": 1,
"time": 1535408581,
"response": {
"secret": "$nGwYVda@@PErKAUpG#kHQ&YA1L)A*X1",
"client": {
"client_id": "ff371b045307",
"name": "TestApp2",
"redirect_uri": "http://localhost:1234",
"time_created": 1535407757,
"has_secret": true
}
}
}
Reset the secret for a secret-bearing OAuth client that you own. If you use this, a new secret will be generated and the old one will no longer work.
Does not work if the client_id you pass does not keep a secret.
HTTP Request
POST https://api.opskins.com/IOAuth/ResetClientSecret/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
client_id | string | Hexadecimal client_id of the client you want to reset the secret for |
Output
Parameter | Type | Description |
---|---|---|
secret | string | The newly-generated secret. Record this somewhere safe, as it cannot be retrieved again later. |
client | object | Object representing the newly-reset client |
client_id | string | The OAuth client's hexadecimal string ID (used as username in HTTP Basic auth) |
name | string | User-supplied name for the client, which is displayed to users when they approve access |
redirect_uri | string | The URI to which users are redirected after approving or denying access |
time_created | int | Unix timestamp for when the client was created |
has_secret | bool | true if this client has a secret, false if it is expected to main per-token secrets |
Update Client
Request example:
curl --request POST \
--url https://api.opskins.com/IOAuth/UpdateClient/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data client_id=ff371b045307 \
--data name=TestApp2 \
--data redirect_uri=http://localhost:1234
Response returns JSON structured like this:
{
"status": 1,
"time": 1535408581,
"response": {
"client": {
"client_id": "ff371b045307",
"name": "TestApp2",
"redirect_uri": "http://localhost:1234",
"time_created": 1535407757,
"has_secret": true
}
}
}
Update an OAuth client that you own. At least one of name
and redirect_uri
is required.
HTTP Request
POST https://api.opskins.com/IOAuth/UpdateClient/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
client_id | string | Hexadecimal client_id of the client you want to update | |
name | string | Name for this client, to be displayed to users when they are prompted to approve access | |
redirect_uri | string | URI to which users are redirected after approving or denying access |
Output
Parameter | Type | Description |
---|---|---|
client | object | Object representing the newly-updated client |
client_id | string | The OAuth client's hexadecimal string ID (used as username in HTTP Basic auth) |
name | string | User-supplied name for the client, which is displayed to users when they approve access |
redirect_uri | string | The URI to which users are redirected after approving or denying access |
time_created | int | Unix timestamp for when the client was created |
has_secret | bool | true if this client has a secret, false if it is expected to main per-token secrets |
IPayments
Create Bitcoin Payment
Request example:
curl --request POST \
--url 'https://api.opskins.com/IPayments/CreateBitcoinPayment/v1' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"amount": 1000}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513606752,
"response": {
"complete": false,
"address": "2N9wct7ukKa9GtiSyNLx1rCdzgKbiMZ89Zy",
"usd_amt": 1000,
"btc_amt": 59000,
"expires": 1513607652
}
}
Create Bitcoin payment
HTTP Request
POST https://api.opskins.com/IPayments/CreateBitcoinPayment/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
amount | int | Amount of payment | |
overwrite_old | bool | Set to replace old payment |
Output
Parameter | Type | Description |
---|---|---|
complete | bool | |
address | string | Bitcoin address |
usd_amt | int | Payment amount |
btc_amt | int | Bitcoint amount (satoshis) |
expires | int | Expiration time |
Get Bitcoin Address
Example retrieving Bitcoin address:
curl --request GET \
--url 'http://api.opskins.com/IPayments/GetBitcoinAddress/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Example creating new Bitcoin address:
curl --request GET \
--url 'http://api.opskins.com/IPayments/GetBitcoinAddress/v1/?require_new=1' \
--header 'authorization: Basic {{AUTH_HASH}}'
Both examples returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"address": "2N9wct7ukKa9GtiSyNLx1rCdzgKbiMZ89Zy"
}
}
Get users's Bitcoin address
HTTP Request
GET https://api.opskins.com/IPayments/GetBitcoinAddress/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
require_new | bool | To add new Bitcoin address set to true |
Output
Parameter | Type | Description |
---|---|---|
address | object | Current or new Bitcoin address (view require_new parameter) |
Get Bitcoin Payment Status
Request example:
curl --request GET \
--url 'http://api.opskins.com/IPayments/GetBitcoinPaymentStatus/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513606752,
"response": {
"complete": true,
"invoice_id": 8952414,
"btc_id": "2fcedfe9830b95681d5659067944f92bb0869e714a5cbcde209cd6c165000826",
"confirmations": 5648,
"confirmations_required": 5
}
}
Get Bitcoin payment status
HTTP Request
GET https://api.opskins.com/IPayments/GetBitcoinPaymentStatus/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
complete | bool | |
invoice_id | int | Invoice id |
btc_id | int | Hash of the transaction |
confirmations | int | Number of blocks this transaction has been part of the blockchain |
confirmations_required | int | Number of confirmations required to credit payment |
Get Ethereum Address
Request example:
curl --request GET \
--url 'http://api.opskins.com/IPayments/GetEthereumAddress/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513860736,
"response": {
"address": "0xC2D7cF95645d33006175B78989035c7C9061D3f9",
"deploying": false,
"confirmations_required": 12
}
}
Get Bitcoin payment status
HTTP Request
GET https://api.opskins.com/IPayments/GetEthereumAddress/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
address | string | |
deploying | bool | |
confirmations_required | int |
IPricing
Get All Lowest List Prices
Request example:
curl --request GET \
--url 'https://api.opskins.com/IPricing/GetAllLowestListPrices/v1/?appid=730'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"AK-47 | Aquamarine Revenge (Battle-Scarred)": {
"price": 700,
"quantity": 32
},
"AK-47 | Aquamarine Revenge (Factory New)": {
"price": 2500,
"quantity": 29
},
"AK-47 | Aquamarine Revenge (Field-Tested)": {
"price": 1127,
"quantity": 42
},
"AK-47 | Aquamarine Revenge (Minimal Wear)": {
"price": 1643,
"quantity": 49
},
"AK-47 | Aquamarine Revenge (Well-Worn)": {
"price": 989,
"quantity": 20
},
"AK-47 | Black Laminate (Battle-Scarred)": {
"price": 615,
"quantity": 3
},
"AK-47 | Black Laminate (Factory New)": {
"price": 9566,
"quantity": 4
},
"AK-47 | Black Laminate (Field-Tested)": {
"price": 577,
"quantity": 17
}
}
}
Get all lowest prices
HTTP Request
GET https://api.opskins.com/IPricing/GetAllLowestListPrices/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
appid | integer | Application ID |
Output
Parameter | Type | Description |
---|---|---|
{market_name} | object | Price data for the item |
price | int | Minimal item price |
quantity | int | Total items |
Get Instant Sell Price v1
Request example:
curl --request GET \
--url 'https://api.opskins.com/IPricing/GetInstantSellPrice/v1/?market_name=Flip Knife | Spacerox (Minimal Wear)&appid=1912&contextid=1' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1533561248,
"response": {
"suggested_price_usd": 15183,
"instant_sell_price_usd": 13664,
"instant_sell_price_credits": 12345,
"instant_sell_price_credits_overrides": {
"trade_recent": 54321
}
}
}
Get InstantSell price for an item
HTTP Request
GET https://api.opskins.com/IPricing/GetInstantSellPrice/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
market_name | string | The full name of an item - Example: Weapon Skin (Wear Tier) |
|
appid | int | The application id | |
contextid | int | The context id under the appid |
Output
Parameter | Type | Description |
---|---|---|
suggested_price_usd | int | The current suggested price in US cents |
instant_sell_price_usd | int | The instant sell price in US cents |
instant_sell_price_credits | int | The instant sell price in Credits |
instant_sell_price_credits_overrides | object | Overrides for the instant sell price |
trade_recent | int | Instant sell price when using Trade API IItem/InstantSellRecentItem |
Get Price List v1
Request example:
curl --request GET \
--url 'https://api.opskins.com/IPricing/GetPriceList/v1/?appid=730' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"AK-47 | Aquamarine Revenge (Battle-Scarred)": {
"2017-12-14": {
"price": 998
}
},
"AK-47 | Aquamarine Revenge (Factory New)": {
"2017-12-14": {
"price": 2848
}
},
"AK-47 | Aquamarine Revenge (Field-Tested)": {
"2017-12-14": {
"price": 1475
}
},
"AK-47 | Aquamarine Revenge (Minimal Wear)": {
"2017-12-14": {
"price": 2061
}
},
"AK-47 | Aquamarine Revenge (Well-Worn)": {
"2017-12-14": {
"price": 1245
}
}
}
}
Get price list for the application
HTTP Request
GET https://api.opskins.com/IPricing/GetPriceList/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
appid | integer | Application ID |
Output
Parameter | Type | Description |
---|---|---|
{market_name} | object | Price data for the item |
{date} | object | Item data for the date |
price | int | Item price |
Get Price List v2
Request example:
curl --request GET \
--url 'https://api.opskins.com/IPricing/GetPriceList/v2/?appid=730'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"AK-47 | Aquamarine Revenge (Battle-Scarred)": {
"2017-12-14": {
"mean": 994,
"min": 886,
"max": 1084,
"normalized_mean": 998,
"normalized_min": 979,
"normalized_max": 1021,
"std_dev": 30
}
},
"AK-47 | Aquamarine Revenge (Factory New)": {
"2017-12-14": {
"mean": 2888,
"min": 1950,
"max": 3675,
"normalized_mean": 2848,
"normalized_min": 2730,
"normalized_max": 2999,
"std_dev": 341
}
},
"AK-47 | Aquamarine Revenge (Field-Tested)": {
"2017-12-14": {
"mean": 1499,
"min": 1399,
"max": 2274,
"normalized_mean": 1475,
"normalized_min": 1399,
"normalized_max": 1605,
"std_dev": 124
}
},
"AK-47 | Aquamarine Revenge (Minimal Wear)": {
"2017-12-14": {
"mean": 2069,
"min": 1854,
"max": 2745,
"normalized_mean": 2061,
"normalized_min": 1965,
"normalized_max": 2152,
"std_dev": 121
}
}
}
}
Get price list for the application
HTTP Request
GET https://api.opskins.com/IPricing/GetPriceList/v2/
Input
Parameter | Type | Required | Description |
---|---|---|---|
appid | integer | Application ID |
Output
Parameter | Type | Description |
---|---|---|
{market_name} | object | Price data for the item |
{date} | object | Item data for the date |
mean | int | |
min | int | |
max | int | |
normalized_mean | int | |
normalized_min | int | |
normalized_max | int | |
std_dev | int |
Get Suggested Prices v1
Request example:
curl --request GET \
--url 'http://api.opskins.com/IPricing/GetSuggestedPrices/v1/?appid=730&items[0]=AK-47%20|%20Aquamarine%20Revenge%20%28Battle-Scarred%29&items[1]=AK-47%20|%20Aquamarine%20Revenge%20%28Factory%20New%29' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"prices": {
"AK-47 | Aquamarine Revenge (Battle-Scarred)": {
"opskins_price": 995,
"market_price": 1163,
"opskins_lowest_price": 700
},
"AK-47 | Aquamarine Revenge (Factory New)": {
"opskins_price": 2865,
"market_price": 3402,
"opskins_lowest_price": 2500
}
}
}
}
Get suggested prices for the application
HTTP Request
GET https://api.opskins.com/IPricing/GetSuggestedPrices/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
appid | string | Application ID | |
items | array-string | List of item market names (Max: 10 items) |
Output
Parameter | Type | Description |
---|---|---|
prices | object | |
{market_name} | object | Price data for the item |
opskins_price | int | OPSkins suggested price |
market_price | int | Market price |
opskins_lowest_price | int | OPSkins lowest price |
Get Suggested Prices v2
Request example:
curl --request GET \
--url 'http://api.opskins.com/IPricing/GetSuggestedPrices/v2/?appid=730' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"AK-47 | Aquamarine Revenge (Battle-Scarred)": {
"op_7_day": 995,
"op_30_day": 995
},
"AK-47 | Aquamarine Revenge (Factory New)": {
"op_7_day": 2865,
"op_30_day": 2865
},
"AK-47 | Aquamarine Revenge (Field-Tested)": {
"op_7_day": 1459,
"op_30_day": 1459
},
"AK-47 | Aquamarine Revenge (Minimal Wear)": {
"op_7_day": 2057,
"op_30_day": 2057
},
"AK-47 | Aquamarine Revenge (Well-Worn)": {
"op_7_day": 1235,
"op_30_day": 1235
},
"AK-47 | Black Laminate (Battle-Scarred)": {
"op_7_day": 799,
"op_30_day": 799
}
}
}
Get suggested prices for the application
HTTP Request
GET https://api.opskins.com/IPricing/GetSuggestedPrices/v2/
Input
Parameter | Type | Required | Description |
---|---|---|---|
appid | string | Application ID |
Output
Parameter | Type | Description |
---|---|---|
prices | object | |
{market_name} | object | Price data for the item |
op_7_day | int | OPSkins suggested 7-days price |
op_30_day | int | OPSkins suggested 30-days price |
ISales
Bump Items
Request example:
curl --request POST \
--url 'https://api.opskins.com/ISales/BumpItems/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'content-type: application/json; charset=utf-8' \
--data '{"items":"37246542"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"sales": {
"37246542": {
"status": 1,
"message": "OK"
}
}
}
}
Bump one or more items you've listed for sale to the top of the browse page and the featured (default) sort for search. Will cost $0.50 per item, but will use any free bump credits you may have (e.g. from a premium membership) first.
It is possible for bumping to fail for some items in this batch and to succeed for others.
The top-level balance
property will be present in this method's response, containing your up-to-date account balance.
HTTP Request
POST https://api.opskins.com/ISales/BumpItems/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
items | string | A list of sale IDs of items you want to bump, separated by commas (max 100). For example: 1234,5678,9012 |
Output
Parameter | Type | Description |
---|---|---|
sales | object | An object whose keys are sale IDs and values are objects of the following structure: |
status | int | An ErrorCode value representing the status of the bump request for this item. Will be 1 (OK) on success. |
message | string | A string containing an error message on fail, or OK on success |
Buy Items
Request example:
curl --request POST \
--url 'https://api.opskins.com/ISales/BuyItems/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'content-type: application/json; charset=utf-8' \
--data '{"saleids":"37245493","total":737}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"balance": 12237157,
"response": {
"items": [
{
"saleid": 37245493,
"new_itemid": 37246543,
"name": "AK-47 | Redline (Field-Tested)",
"bot_id": 26
}
]
}
}
Purchase one or more items and deliver them to your OPSkins inventory. Once purchased, the item(s) can be delivered to your Steam inventory using IInventory/Withdraw. To prevent bot sniping, this endpoint will only purchase listings which have been publicly visible for at least ten minutes, and are not currently limited to Buyers Club members.
If this request succeeds, then it will contain a root-level balance
property (and some others) containing your new account balances after the purchase.
HTTP Request
POST https://api.opskins.com/ISales/BuyItems/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
saleids | string | A comma-separated list of sale IDs for the items you wish to purchase. 300 maximum. | |
total | int | The total cost of these items, in USD cents. For example, if you are purchasing a $2 item and a $1.23 item, then this should be 323. The request will fail if this does not match the actual total. | |
allow_trade_locked | boolean | When using API-Key-based authentication, this parameter is required in order to purchase items that are currently trade-locked by Valve (meaning you wont be able to withdraw them until the lock expires). | |
send_to_trade | boolean | If 1 , endpoint will automatically transfer items to WAX Trade after the transaction. Default is 0 . |
Output
Parameter | Type | Description |
---|---|---|
items | array-object | An array of objects for the items you purchased. Each object has these properties: |
saleid | int | The OPSkins sale ID of the item. This will be one of the IDs you passed in your request. |
new_itemid | int | The new OPSkins ID of the item in your OPSkins inventory. This is the ID you will pass to Withdraw in order to withdraw the item to your Steam inventory. This will become the item's sale ID if you choose to re-list it. |
item_id | int | This particular item's unique Asset ID |
name | string | The name of the item |
bot_id | int | The internal OPSkins ID of the bot which is holding this item |
Buy Keys
Request example:
curl --request POST \
--url 'https://api.opskins.com/ISales/BuyKeys/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'content-type: application/json; charset=utf-8' \
--data '{"count": 5, "market_name": "WAX Key", "send_to_trade": 1}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1542907684,
"response": {
"isales_buyitems_v1": {
"status": 1,
"time": 1542907684,
"balance": 500005888,
"response": {
"items": [
{
"saleid": 309421382,
"new_itemid": 309421392,
"item_id": 142,
"name": "WAX Key",
"bot_id": 0
}
]
}
}
}
}
{
"status": 1,
"time": 1542867970,
"response": {
"isales_buyitems_v1": {
"status": 2000,
"time": 1542867970,
"message": "Buy succeeded but could not transfer items to WAX Trade",
"balance": 500005888,
"response": {
"items": [
{
"saleid": 309421362,
"new_itemid": 309421370,
"item_id": 174,
"name": "WAX Key",
"bot_id": 0
}
]
}
}
}
}
Allows an easy way to purchase keys.
Third-party websites may use the limited scope purchase_keys
to purchase keys on behalf of users.
Keys available to purchase & the prices are shown below.
Only keys listed at the price listed will be purchased.
Available Keys:
WAX Key
$2.50
Notes:
This endpoint may return a
status
of1
, but theISales/BuyItems/v1
endpoint may still fail.If using OAuth, wallet balance information (as standard from ISales/BuyItems) will not be shown unless
balance
scope is available.
HTTP Request
POST https://api.opskins.com/ISales/BuyKeys/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
count | int | Quantity of keys wished to be purchased. Max 100 . Default 1 . |
|
market_name | string | Market name of the key e.g. WAX Key (default) |
|
send_to_trade | boolean | If 1 , endpoint will automatically transfer items to WAX Trade after the transaction. Default is 1 . |
Output
Parameter | Type | Description |
---|---|---|
isales_buyitems_v1 | mixed | Full response from ISales/BuyItems/v1 |
Edit Price
Request example:
curl --request POST \
--url 'https://api.opskins.com/ISales/EditPrice/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'content-type: application/json; charset=utf-8' \
--data '{"saleid":37246283,"price":100}'
Failed response example:
{
"status": 3003,
"time": 1512020202,
"message": "Price must be between $0.02 and $99,999.99."
}
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": [
{
"id": 318778733,
"amount": 8835,
"wear": "37.9857886421",
"timestamp": 1512020841
},
{
"id": 221773734,
"amount": 812,
"wear": null,
"timestamp": 1318326341
}
]
}
Edits the price of an item you currently have listed. If the item is in your OPSkins inventory, it lists it for sale.
HTTP Request
POST https://api.opskins.com/ISales/EditPrice/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
saleid | int | The ID of the sale/item you want to edit the price for (must be yours) | |
price | int | The new price for your item, in USD cents. For example, to list an item for $4.00, use 400 |
Output
Parameter | Type | Description |
---|---|---|
relisted | bool | true if the item was in your OPSkins inventory and has been re-listed, or false if it was already listed and its price has simply been edited |
Edit Price Multi
Request example:
curl --request POST \
--url 'https://api.opskins.com/ISales/EditPriceMulti/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'content-type: application/json; charset=utf-8' \
--data '{"items":{"37246122": 200}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"message": "Assuming all item IDs are valid, belong to you, and are not currently queued for a price update, their prices have been queued for update."
}
Queue price updates for up to 500 items. On success, this method will return an HTTP 202 Accepted status code and will respond immediately. The actual price updates will be queued and will be processed in the background. This will fail if you attempt to queue a price update for an item which already has a queued price update. Price update errors will not be reported and will be silently dropped in the background. For example, requests to edit the prices of items you do not own or which do not exist will be accepted, but will not actually be processed.
HTTP Request
POST https://api.opskins.com/ISales/EditPriceMulti/v1/
Input
Items must be in format items[itemid]=price
Parameter | Type | Required | Description |
---|---|---|---|
items | array-object | An associative array (using PHP terminology) where keys are OPSkins sale IDs and values are new prices, in USD cents. For example, items[12345]=100&items[12346]=53 will set the price of sale 12345 to $1.00 USD and will set the price of sale 12346 to $0.53 USD. |
Output
Success http code is 202
Parameter | Type | Description |
---|---|---|
none |
Get Active Trade Offers
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetActiveTradeOffers/v1' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"offers": {
"15480545": {
"saleids": [
37246122
],
"bot_id": 49,
"bot_id64": "76561198184630606",
"type": "pickup"
},
"16365901": {
"saleids": [
39822450
],
"bot_id": 165,
"bot_id64": "76561198253047240",
"type": "withdrawal",
"recipient_id64": "76561197960287930"
}
}
}
}
Get the list of active trade offers which our bots have sent you.
HTTP Request
GET https://api.opskins.com/ISales/GetActiveTradeOffers/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
offers | object | An object whose keys are Steam trade offer IDs, and values are objects each with this structure: |
saleids | int-array | An array containing the OPSkins sale IDs of the items in this offer |
bot_id | int | The internal OPSkins ID of the bot which sent this trade |
bot_id64 | string | The 64-bit SteamID of the bot which sent this trade |
type | string | A string, which may be one of pickup , return , or withdrawal |
recipient_id64 | string | If this trade offer was sent to a recipient other than your own Steam account (e.g. via delivery_id64 in IInventory/Withdraw) then this is the 64-bit SteamID (as a string) where the trade offer was sent. Not present if sent to your own account. |
Get Bump Confirmation
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetBumpConfirmation/v1' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"should_confirm": true,
"credits": 2,
"confirm_message": "This will consume one of your 2 free bump credits and your item will be placed at the top of the sales lists. Are you sure you wish to do this?"
}
}
Check if bump item should be confirmed
HTTP Request
GET https://api.opskins.com/ISales/GetBumpConfirmation/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
should_confirm | bool | |
credits | int | |
confirm_message | string |
Get Last Sales
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetLastSales/v1/?appid=730&market_name=AK-47+%7C+Redline+%28Field-Tested%29&contextid=2' \
--header 'authorization: Basic {{AUTH_HASH}}'
Failed response example:
{
"status": 2002,
"time": 1512020202,
"message": "No matches"
}
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": [
{
"id": 318778733,
"amount": 8835,
"wear": "37.9857886421",
"timestamp": 1512020841
},
{
"id": 221773734,
"amount": 812,
"wear": null,
"timestamp": 1318326341
}
]
}
Get data about the most recent sales for a given item.
HTTP Request
GET https://api.opskins.com/ISales/GetLastSales/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
appid | int | The Steam AppID of the game which owns the item you're interested in | |
contextid | int | The Steam context ID for the item you're interested in | |
market_name | string | The full market name of the item you're interested in, for example: "AK-47 | |
val_1 | int | If you're interested in a particular variant of the item, this is its unusual effect index (for TF2) or pattern/paint index (for CS:GO) |
Output
The response of this method is an array of objects, where each object has these properties
Parameter | Type | Description |
---|---|---|
id | int | The sale ID of the item that sold |
amount | int | The amount the item sold for, in USD cents |
wear | string | The item's wear as a float, or null if unknown or not applicable |
timestamp | int | The Unix timestamp of when this item sold |
Get Listing Limit
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetListingLimit/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"listing_limit": 100
}
}
Get the current limit of how many items you can list for sale in one request. This limit is subject to change periodically (usually it only goes up, but it is possible that we may need to decrease it at some point). This is not an account-based listing limit; this is only a limit on how many items can be listed in one sale queue (via the website) or one call to ListItems (via the API).
HTTP Request
GET https://api.opskins.com/ISales/GetListingLimit/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
listing_limit | int | The current listing limit |
Get Sale Details
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetSaleDetails/v1/?saleid=37245499' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"sale": {
"id": 37245499,
"amount": 737,
"showcase": 0,
"color": "D2D2D2",
"img": "https://steamcommunity-a.opskins.media/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpot7HxfDhjxszJemkV09-5lpKKqPrxN7LEmyVQ7MEpiLuSrYmnjQO3-UdsZGHyd4_Bd1RvNQ7T_FDrw-_ng5Pu75iY1zI97bhLsvQz",
"inspect": "steam://rungame/730/76561202255233023/+csgo_econ_action_preview%20S76561198216283564A7413350573D12442333357827425599",
"type": "Classified Rifle",
"classid": "1907377366",
"instanceid": "188530139",
"market_name": "AK-47 | Redline (Field-Tested)",
"market_hash_name": "AK-47 | Redline (Field-Tested)",
"appid": 730,
"contextid": "2",
"assetid": "7413350573",
"bot_id": 26,
"state": 2,
"bumptime": 1473310277,
"wear": "",
"stickers": [],
"val_1": null,
"market_fee_app": null,
"escrow_ends": null,
"flags": {
"tf2_uncraftable": false,
"trade_locked": false,
"has_screenshots": false,
"screenshot_is_video": false,
"steam_commodity": false
},
"is_your_item": false
}
}
}
Get specific public details about one sale
HTTP Request
GET https://api.opskins.com/ISales/GetSaleDetails/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
saleid | int | ||
uid | int | If the item is not yours and you know who owns it, pass their SteamID or OPSkins uid here (required for private listings or OSI items) |
Output
Get Sales v1
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetSales/v1/?type=1' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"current_page": 1,
"total_pages": 1,
"response": [
{
"id": 35553209,
"price": 3,
"commission": null,
"tax": null,
"classid": "1432174790",
"instanceid": "302028390",
"img": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpopL-zJAt21uH3Yi19-N2mkb-GkvP9JrafwmlS7JQnj-jEp96k2gPk_Ec5Z2ilJ9DAdgc7MwvS8lS6wejsg8K0vIOJlyVNyxsIvg",
"appid": 730,
"contextid": "2",
"assetid": "7110023844",
"name": "R8 Revolver | Bone Mask (Field-Tested)",
"bot": 49,
"offerid": "-1",
"state": 1,
"escrow_end_date": 0,
"list_time": 1472452964,
"bump_time": 1472452964,
"last_updated": 0,
"sale_time": null,
"security_token": "vYZHvI",
"wear": null,
"txid": null,
"trade_locked": false,
"repair_attempted": false,
"addons": [],
"bot_id64": "76561198184630606"
},
{
"id": 35632727,
"price": 3,
"commission": null,
"tax": null,
"classid": "310776632",
"instanceid": "302028390",
"img": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpopbmkOVUw7ODHTi1P7-O6nYeDg7n3YL6Bw2lQ7cZy27yTp9X00Qztrxc4Y2DwLYCRJw9tZQ3ZrAPrx-a-m9bi67t5CePh",
"appid": 730,
"contextid": "2",
"assetid": "7299893428",
"name": "SCAR-20 | Contractor (Minimal Wear)",
"bot": 121,
"offerid": "-1",
"state": 1,
"escrow_end_date": 0,
"list_time": 1472488549,
"bump_time": 1472488549,
"last_updated": 0,
"sale_time": null,
"security_token": "UjxJRL",
"wear": null,
"txid": null,
"trade_locked": false,
"repair_attempted": false,
"addons": [],
"bot_id64": "76561198251470926"
}
]
}
Gets a list of item sales for your account. This endpoint is paginated, and will return up to per_page (Default: 10,000) results per page.
HTTP Request
GET https://api.opskins.com/ISales/GetSales/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
type | int | Sale status filter | |
appid | int | If provided, limit results to sales for this Steam AppID. If not provided, return all apps. | |
after_saleid | int | If provided, limit results to sales with IDs greater than this. | |
page | int | Page number to request. Defaults to 1. | |
per_page | int | Number of items per page to return. Defaults to 10000. If you pass a value larger than 10,000, then it will be capped to 10,000. | |
sort | string | Sorts the results by the chosen sort type. If not provided, returns results by ascending sale ID. |
type
acceptable values
1
- Awaiting pickup; you created a listing but haven't deposited the item yet. The item may also be in a trade hold or trade locked.2
- On sale3
- Sold, but not delivered to the buyer yet4
- Sold and delivered. You have been paid at this point.5
- You requested that the item be returned, but it hasn't been delivered to you yet.6
- The item has been returned to your account.
sort
acceptable values
See ISales/GetSortTypes/v1 response values
Output
response
is an array of sale objects, containing these properties:
Parameter | Type | Description |
---|---|---|
id | int | The sale ID of the item |
price | int | The sale price of the item, in USD cents |
commission | int | If the item is sold, how much commission OPSkins took, in USD cents. If not sold, null |
tax | int | If the item is sold, how much tax was taken, in USD cents. If not sold, null |
classid | string | The Steam class ID of the item |
instanceid | string | The Steam instance ID of the item |
appid | int | The AppID of the game to which this item belongs |
contextid | string | The Steam context ID to which this item belongs |
assetid | string | If the item is currently on the bot or awaiting pickup, its Steam asset ID |
name | string | The name of the item |
bot | int | The internal ID of the bot to which this item is assigned |
bot_id64 | string | The 64-bit SteamID of the bot to which this item is assigned |
offerid | string | The ID of the trade offer in which this item is being picked up or returned. null if the item is sold. There are some special values that have certain meaning |
state | int | An integer representing what state this item is in |
escrow_end_date | int | A Unix timestamp representing when the item will come out of a Steam trade hold. If trade_locked is set, then this is the date when the item will come out of its trade lock. |
list_time | int | A Unix timestamp representing when the item was listed (or deposited, if it's been deposited) |
bump_time | int | A Unix timestamp representing when the item was last bumped |
last_updated | int | A Unix timestamp representing when the item last changed state, or had its price edited. May be 0 for older sales. |
security_token | string | The security token that the bot will send in the trade offer. |
wear | float | The item's wear, as a float. null if unknown or not applicable. |
txid | int | If the item was sold and delivered, this is the transaction ID in which you got paid. |
trade_locked | bool | This will be true if the item is currently trade locked (H1Z1). |
repair_attempted | bool | This will be true if the item is in an errored state, and a repair has been attempted and failed. |
addons | string-array | An array containing strings for addons that are applied to this item. |
offerid
constants
0
- A trade offer has been queued for this item, but hasn't been sent yet-1
- There is no trade offer active for this item, but you could request one to be sent-3
- We couldn't send you a trade offer because you currently can't trade. Request a trade to be sent once you can trade.-4
- We sent you a trade offer, but you declined or countered it. You can request a new trade to be sent.-5
- We tried to send you a trade offer, but your Trade URL was wrong or your inventory is full. You can request a new trade to be sent once you've fixed it.-9
- There was an unknown error when we were trying to send the trade offer. You can try to repair the sale, or contact support for assistance.-10
- When we tried to send the trade offer, Steam reported that the item no longer exists. You can try to repair the sale, or contact support for assistance.
state
constants
1
- Awaiting pickup; you created a listing but haven't deposited the item yet. The item may also be in a trade hold or trade locked.2
- On sale3
- Sold, but not delivered to the buyer yet4
- Sold and delivered. You have been paid at this point.5
- You requested that the item be returned, but it hasn't been delivered to you yet.6
- The item has been returned to your account.
addons
constants
featured
- The item has been featuredprivate
- The item has been listed privatelyscreenshots
- The item has an Instant Field Inspection
Get Sales v2
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetSales/v2/?state=2' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"current_page": 1,
"total_pages": 1,
"response": {
"sales": [
{
"id": 37246359,
"amount": 10,
"showcase": 0,
"color": "7D6D00",
"img": "https://steamcommunity-a.opskins.media/economy/image/fWFc82js0fmoRAP-qOIPu5THSWqfSmTELLqcUywGkijVjZULUrsm1j-9xgEIUwsUSQnjtj9GmvfqDOCLDa4EyIgw4MQF2GRpx1kvbOfhaW81JlHGAqJfCqdu9gu0DyJi7J43V4TiuasILoAwZyfz",
"inspect": null,
"type": "Level 5 Revolver",
"classid": "123",
"instanceid": "0",
"market_name": "L'Etranger",
"market_hash_name": "L'Etranger",
"appid": 440,
"contextid": "2",
"assetid": "5100409999",
"bot_id": 643,
"state": 2,
"bumptime": 1491379552,
"wear": null,
"stickers": [],
"val_1": null,
"market_fee_app": null,
"escrow_ends": null,
"flags": {
"tf2_uncraftable": false,
"trade_locked": false,
"has_screenshots": false,
"screenshot_is_video": false,
"steam_commodity": false,
"requires_support": false,
"repair_attempted": false,
"deposit_into_inventory": false
},
"is_your_item": true,
"commission": null,
"tax": null,
"offer_id": "-1",
"listtime": 1491379552,
"updatetime": 1491379552,
"saletime": null,
"credit_txid": null,
"security_token": "KHnlGU"
}
]
}
}
Gets a list of item sales for your account.
HTTP Request
GET https://api.opskins.com/ISales/GetSales/v2/
Input
Parameter | Type | Required | Description |
---|---|---|---|
state | int | Sale status filter | |
appid | int | If provided, limit results to sales for this Steam AppID. If not provided, return all apps. | |
after_saleid | int | If provided, limit results to sales with IDs greater than this. | |
page | int | Page number to request. Defaults to 1. | |
per_page | int | Number of items per page to return. Defaults to 10000. If you pass a value larger than 10,000, then it will be capped to 10,000. | |
sort | string | Sorts the results by the chosen sort type. If not provided, returns results by ascending sale ID. |
type
acceptable values
1
- Awaiting pickup; you created a listing but haven't deposited the item yet. The item may also be in a trade hold or trade locked.2
- On sale3
- Sold, but not delivered to the buyer yet4
- Sold and delivered. You have been paid at this point.5
- You requested that the item be returned, but it hasn't been delivered to you yet.6
- The item has been returned to your account.
sort
acceptable values
See ISales/GetSortTypes/v1 response values
Output
Parameter | Type | Description |
---|---|---|
sales | array-object | Array of sales. Each object is Standard Sale Object |
offerid
constants
0
- A trade offer has been queued for this item, but hasn't been sent yet-1
- There is no trade offer active for this item, but you could request one to be sent-3
- We couldn't send you a trade offer because you currently can't trade. Request a trade to be sent once you can trade.-4
- We sent you a trade offer, but you declined or countered it. You can request a new trade to be sent.-5
- We tried to send you a trade offer, but your Trade URL was wrong or your inventory is full. You can request a new trade to be sent once you've fixed it.-9
- There was an unknown error when we were trying to send the trade offer. You can try to repair the sale, or contact support for assistance.-10
- When we tried to send the trade offer, Steam reported that the item no longer exists. You can try to repair the sale, or contact support for assistance.
state
constants
1
- Awaiting pickup; you created a listing but haven't deposited the item yet. The item may also be in a trade hold or trade locked.2
- On sale3
- Sold, but not delivered to the buyer yet4
- Sold and delivered. You have been paid at this point.5
- You requested that the item be returned, but it hasn't been delivered to you yet.6
- The item has been returned to your account.
addons
constants
featured
- The item has been featuredprivate
- The item has been listed privatelyscreenshots
- The item has an Instant Field Inspection
Get Sale Statuses
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetSaleStatuses/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"statuses": [
{
"key": 1,
"name": "Awaiting Pickup"
},
{
"key": 2,
"name": "On Sale"
},
{
"key": 3,
"name": "Awaiting Delivery"
},
{
"key": 4,
"name": "Sold"
},
{
"key": 5,
"name": "Return Requested"
},
{
"key": 6,
"name": "Returned"
}
]
}
}
Returns a list of possible sale states and localized strings that go with them
HTTP Request
GET https://api.opskins.com/ISales/GetSaleStatuses/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
statuses | array-object | |
key | integer | Option's value |
name | string | Option's display name |
Get Search Schema
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetSearchSchema/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"global": [
{
"key": "app",
"type": "dropdown",
"name": "Game",
"values": [
{
"value": "730_2",
"name": "Counter-Strike: Global Offensive"
}
]
},
{
"key": "search_item",
"type": "text",
"name": "Search",
"placeholder": "Name"
},
{
"type": "range",
"name": "Range",
"step": 0.01,
"min": 0.02,
"max": 99999.99,
"low": {
"key": "min",
"placeholder": "Minimum price"
},
"high": {
"key": "max",
"placeholder": "Maximum price"
}
},
{
"key": "sort",
"type": "dropdown",
"name": "Sorting",
"values": [
{
"value": "f",
"name": "Featured"
},
{
"value": "lh",
"name": "Price: Low → High"
},
{
"value": "hl",
"name": "Price: High → Low"
}
]
}
],
"apps": {
"440": [
{
"key": "stat",
"type": "dropdown",
"name": "Strange",
"values": [
{
"value": "",
"name": "",
"small_name": "Strange: Don't Care"
},
{
"value": 1,
"name": "Yes",
"small_name": "Only Strange"
},
{
"value": 0,
"name": "No",
"small_name": "No Strange"
}
]
},
{
"key": "exterior",
"type": "dropdown",
"name": "Exterior",
"values": [
{
"value": "",
"name": "",
"small_name": "Any Exterior"
},
{
"value": "fn",
"name": "Factory New"
},
{
"value": "mw",
"name": "Minimal Wear"
},
{
"value": "ft",
"name": "Field-Tested"
},
{
"value": "ww",
"name": "Well-Worn"
},
{
"value": "bs",
"name": "Battle-Scarred"
}
]
}
],
"730": [
{
"key": "stat",
"type": "dropdown",
"name": "StatTrak",
"values": [
{
"value": "",
"name": "",
"small_name": "StatTrak: Don't Care"
},
{
"value": 1,
"name": "Yes",
"small_name": "Only StatTrak"
},
{
"value": 0,
"name": "No",
"small_name": "No StatTrak"
}
]
},
{
"key": "grade",
"type": "dropdown",
"name": "Grade",
"values": [
{
"value": "",
"name": "",
"small_name": "Any Grade"
},
{
"value": "cg",
"name": "Consumer Grade"
}
]
},
{
"key": "exterior",
"type": "dropdown",
"name": "Exterior",
"values": [
{
"value": "",
"name": "",
"small_name": "Any Exterior"
},
{
"value": "fn",
"name": "Factory New"
},
{
"value": "mw",
"name": "Minimal Wear"
}
]
},
{
"key": "souvenir",
"type": "dropdown",
"name": "Souvenir",
"values": [
{
"value": "",
"name": "",
"small_name": "Souvenir: Don't Care"
},
{
"value": 1,
"name": "Yes",
"small_name": "Only Souvenir"
},
{
"value": 0,
"name": "No",
"small_name": "No Souvenir"
}
]
},
{
"type": "range",
"name": "Wear",
"min": 0,
"max": 100,
"low": {
"placeholder": "Minimum wear %",
"key": "wear_range_low"
},
"high": {
"placeholder": "Maximum wear %",
"key": "wear_range_high"
}
},
{
"key": "type",
"type": "dropdown",
"name": "Type",
"values": [
{
"value": "",
"name": "",
"small_name": "Any Type"
},
{
"value": "k",
"name": "Knife"
},
{
"value": "p",
"name": "Pistol"
}
],
"extended_view": true
},
{
"key": "phase",
"type": "dropdown",
"name": "Phase",
"values": [
{
"value": "",
"name": "",
"small_name": "Any Phase"
},
{
"value": "dr",
"name": "Doppler: Ruby"
}
],
"extended_view": true
},
{
"key": "vanilla",
"type": "checkbox",
"name": "Vanilla Skins Only",
"small_name": "Vanilla Only",
"help": "Only search for items with their default skin coloring",
"extended_view": true
},
{
"key": "screenshot",
"type": "checkbox",
"name": "Instant Field Inspection Only",
"small_name": "Field Inspection Only",
"help": "Only search for items that have Instant Field Inspection available",
"extended_view": true
},
{
"key": "want_stickers",
"type": "dropdown",
"name": "Stickers",
"values": [
{
"value": "",
"name": "",
"small_name": "Stickers: Don't Care"
},
{
"value": 1,
"name": "Yes",
"small_name": "Only Stickers"
},
{
"value": 0,
"name": "No",
"small_name": "No Stickers"
}
]
},
{
"key": "stickers",
"type": "text",
"name": "Sticker",
"help": "Start typing a sticker and click on the name to find only skins with ALL the specified stickers",
"placeholder": "Sticker",
"class": "sticker_search",
"extended_view": true
}
],
"578080": []
}
}
}
Get the search schema to search the store
HTTP Request
GET https://api.opskins.com/ISales/GetSearchSchema/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
{app_id}
can be "global" - global properties for any application, or specified application id.
Parameter | Type | Description |
---|---|---|
{app_id} | array-object | An array of fields that should be present when searching for any app (includes the app selection dropdown). The "app" key is the only required field. |
key | string | The key of the field; this is the key you should use when sending this field in a search. Not present for "range" types. |
type | string | One of dropdown, text, range, checkbox. If this isn't one of the recognized values, the field should be ignored. |
name | string | The localized label that should be displayed to the user for this field |
placeholder | string | A placeholder that can go inside this input when it's blank (for text fields). May not always be present. Will not be null; simply won't be present. |
step | number | Only present for "range" fields, and not always. If defined, then the values for the range should only be allowed to step by this amount (e.g. 0.01). If not present, allow any number input. |
min | number | Only present for "range" fields, but not always. If defined, then the values for the range should only be allowed to be at least this amount. |
max | number | Only present for "range" fields, but not always. If defined, then the values for the range should only be allowed to be at most this amount. |
low | object | Only present for "range" fields, always. |
placeholder | string | Not always present. This is a placeholder for the low end of the range input field. |
key | string | This is the key you should send for the low end of the range. |
high | object | Only present for "range" fields, always. |
placeholder | string | Not always present. This is a placeholder for the high end of the range input field. |
key | string | This is the key you should send for the high end of the range. |
values | array-object | Only present for "dropdown" fields, always. These are the valid options for the field. |
value | string | This is the value that should be sent if the user selects the option |
name | string | This is the localized name that should be displayed in the option |
help | string | Only present for "checkbox" types. This is a label that describes what the checkbox does (use "name" as the actual box's label, this is extra help text). |
extended_view | bool | Optional parameter. If present and equal to true, then the field should be present only in extended search form (if applicable) |
apps | object | This is an object. Keys are AppIDs (without contextids). Values are arrays of inputs in identical format to "global" above. |
Get Shipping Price v1
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetSearchSchema/v1/?sale_id=123&country=US&zip_code=99703' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1544553297,
"response": {
"shipping": 2161,
"fees": 0,
"handling": 0
}
}
Gets shipping fees for physical goods that can be redeemed.
HTTP Request
GET https://api.opskins.com/ISales/GetShippingPrice/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
sale_id | int | Sale ID | |
country | string | ISO-Alpha2 country code | |
zip_code | string/int | Sale ID |
Output
Parameter | Type | Description |
---|---|---|
shipping | int | Shipping price in USD cents |
fees | int | Fees (import/duties etc) in USD cents |
handling | int | Handling fees in USD cents |
Total fees are the sum of the above outputs. You must have this amount in your account balance in order to redeem this item.
Get Sort Types
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetSortTypes/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"sort": [
{
"key": "new",
"name": "Newest listings"
},
{
"key": "oldest_bump",
"name": "Oldest Bump Time"
},
{
"key": "last_sold",
"name": "Last Sold"
},
{
"key": "featured",
"name": "Featured"
},
{
"key": "not_featured",
"name": "Not Featured"
},
{
"key": "private",
"name": "Private"
},
{
"key": "price_desc",
"name": "Price Descending"
},
{
"key": "price_asc",
"name": "Price Ascending"
},
{
"key": "alpha",
"name": "Alphabetical"
},
{
"key": "bot",
"name": "Assigned Account"
},
{
"key": "activity_old",
"name": "Last Activity (Old to New)"
},
{
"key": "activity_new",
"name": "Last Activity (New to Old)"
}
]
}
}
Returns a list of possible sales sort types.
Them can be used for sort
value in next methods:
- ISales/GetSales_v1
- ISales/GetSales_v2
HTTP Request
GET https://api.opskins.com/ISales/GetSortTypes/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
sort | array-object | |
key | string | Option's value |
name | string | Option's display name |
Get Supported Steam Apps
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/GetSupportedSteamApps/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"apps": [
{
"name": "Counter-Strike: Global Offensive",
"name_short": "CS:GO",
"appid": 730,
"contextid": 2,
"icon": "https://steamcdn-a.opskins.media/steamcommunity/public/images/apps/730/69f7ebe2735c366c65c0b33dae00e12dc40edbe4.jpg",
"thumb": "https://opskins.com/images/game-thumb-csgo.jpg",
"disabled": false
}
]
}
}
Get's all currently supported Steam Applications
HTTP Request
GET https://api.opskins.com/ISales/GetSupportedSteamApps/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
apps | array-object | List of applications |
name | string | Name of supported game |
name_short | string | Shortened name of supported game |
appid | int | App id of supported game |
contextid | int | Context id of supported game |
icon | URL (string) | Application icon url |
thumb | URL (string) | Aplication thumb image url |
disabled | bool | Supported game is currently disabled |
Instant SellItems
Request with item data example:
curl --request POST \
--url 'https://api.opskins.com/ISales/InstantSellItems/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'content-type: application/x-www-form-urlencoded' \
--data 'total=2256&money_total=2256&items%5B0%5D%5Bname%5D=AK-47%20%7C%20Point%20Disarray%20(Field-Tested)&items%5B0%5D%5Btype%5D=Classified%20Rifle&items%5B0%5D%5Bappid%5D=730&items%5B0%5D%5Bcontextid%5D=2&items%5B0%5D%5Bclassid%5D=1867876426&items%5B0%5D%5Binstanceid%5D=188530139&items%5B0%5D%5Binstantsell_credits%5D=696&items%5B0%5D%5Binstantsell_money%5D=696&items%5B0%5D%5Bamount%5D=1&items%5B1%5D%5Bname%5D=AK-47%20%7C%20Case%20Hardened%20(Field-Tested)&items%5B1%5D%5Btype%5D=Classified%20Rifle&items%5B1%5D%5Bappid%5D=730&items%5B1%5D%5Bcontextid%5D=2&items%5B1%5D%5Bclassid%5D=1874218148&items%5B1%5D%5Binstanceid%5D=188530139&items%5B1%5D%5Binstantsell_credits%5D=1560&items%5B1%5D%5Binstantsell_money%5D=1560&items%5B1%5D%5Bamount%5D=1&instantsell=1'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"balance": 4563606,
"credits": 6780,
"response": {
"items": [
{
"saleid": 37246406,
"new_itemid": 37246527,
"name": "AK-47 | Point Disarray (Field-Tested)"
},
{
"saleid": 37246449,
"new_itemid": 37246528,
"name": "AK-47 | Case Hardened (Field-Tested)"
}
],
"items_count": 1,
"total_value": {
"usd": 225,
"credits": 0
}
}
}
Request with sale id example:
curl --request POST \
--url 'https://api.opskins.com/ISales/InstantSellItems/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'content-type: application/x-www-form-urlencoded' \
--data 'total=209&money_total=209&items%5B0%5D%5Bid%5D=37246520&instantsell=2'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"balance": 4563815,
"credits": 6780,
"response": {
"items": [
{
"saleid": 37246520,
"new_itemid": 37246530,
"name": "AK-47 | Redline (Field-Tested)"
}
],
"items_count": 1,
"total_value": {
"usd": 225,
"credits": 0
}
}
}
Instant-sell items in the user's OSI
HTTP Request
POST https://api.opskins.com/ISales/InstantSellItems/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
total | int | Total amount of credits | |
money_total | int | Total amount of USD | |
instantsell | int | 1 for credits, 2 for USD |
|
send_email_receipt | bool | Send email receipt | |
items | array-object | List of sales to instant sell. Acceptable two representation of sale items (see tables below) |
For instant sell by name
, type
and amount
use next presentation of item
- This format is restricted to accept only commodity items.
- WAX Key is not considered a commodity at this time by this endpoint.
Parameter | Type | Required | Description |
---|---|---|---|
name | string | Item market name | |
type | string | ||
amount | string |
For instant sell by sale id
use next presentation of item
Parameter | Type | Required | Description |
---|---|---|---|
id | string |
Output
Parameter | Type | Description |
---|---|---|
balance | int | New user balance |
credits | int | New user credit balance |
response | object | |
items | array-object | |
saleid | int | Old sale id |
new_itemid | int | New sale id |
item_id | int | This particular item's unique Asset ID |
name | int | Item market name |
items_count | int | Number of items sold |
total_value | obj | Total balance gained from selling the items |
usd | int | Balance gained in US cents |
credits | int | Balance gained in credits |
List Items
Request example:
curl --request POST \
--url 'https://api.opskins.com/ISales/ListItems/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'content-type: application/json; charset=utf-8' \
--data '{
"items": "[{\"appid\":730,\"contextid\":2,\"assetid\":\"188530139\",\"price\":200,\"addons\":[]}]"
}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"tradeoffer_id": 541741,
"tradeoffer_error": null,
"bot_id": 711,
"bot_id64": "76561197973578969",
"security_token": "HfQxHf",
"sales": [
{
"saleid": 37246542,
"appid": 730,
"contextid": "2",
"assetid": "380183185",
"market_name": "P90 | Module (Field-Tested)",
"price": 200,
"addons": []
}
]
}
}
Lists between 1 and 50 items for sale (upper cap subject to change). This will fail if any of the items passed in already have sales with active trade offers out. If there's a matching sale for an item that doesn't have a trade offer out, it will automatically be deleted.
HTTP Request
POST https://api.opskins.com/ISales/ListItems/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
items | string | A JSON-encoded array of objects. One object for each item you wish to list. Each object should contain these properties |
JSON-encoded item data
Parameter | Type | Required | Description |
---|---|---|---|
appid | integer | The Steam AppID of the game which owns this item (e.g. 730 for CS:GO, 440 for TF2, 570 for Dota 2) | |
contextid | integer | The Steam context ID which contains this item (2 for Valve games, 6 for Steam Community items, 1 for H1Z1, etc.). When you right-click on an item in your Steam inventory and copy its URL, the context ID is the second number after the hash. | |
assetid | string | The Steam asset ID of the item. This is also known as just the item's id |
|
price | integer | The desired list price for this item, before commission. Pass this in USD cents (formerly known as OP). For example, $20.00 is 2000. | |
showcase | integer | ||
addons | array-string | An array of strings (possible addon strings are listed below) |
addons
constants
featured
- Feature this item (costs $3.00 if you don't have a free featured credit available)screenshots
- Inspectable CS:GO items only: take screenshots of this item and display them (Instant Field Inspection). Costs 2% of list price, minimum $0.50. If you also feature this item, then the total cost of both addons is capped to $4.50.
Output
Parameter | Type | Description |
---|---|---|
tradeoffer_id | integer | If a trade offer was successfully sent, this is its ID as a string. If we weren't able to send a trade offer, this is null |
tradeoffer_error | string | If we weren't able to send a trade offer, this is an error message string. If there was no error, this is null |
bot_id | integer | The internal OPSkins ID of the storage account to which these sales were assigned |
bot_id64 | string | The 64-bit SteamID of the storage account to which these sales were assigned. This is the account that's sending a trade offer |
security_token | string | The 6-character security token that is included in the trade offer message |
sales | array-object | An array containing objects describing the sales that were created. Each object has these properties |
saleid | int | The OPSkins internal ID of this sale |
appid | int | The Steam AppID for this item |
contextid | string | The Steam context ID in which this item resides in your inventory |
assetid | string | The current asset ID of this item in your inventory |
market_name | string | The name of this item |
price | int | The list price of this item in USD cents |
addons | array-string | An array containing strings for each addon this item has |
Return Items
Request example:
curl --request POST \
--url 'https://api.opskins.com/ISales/ReturnItems/v1/' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"items": "37246039"}'
Error response example:
{
"status": 4004,
"time": 1512020202,
"message": "There was a problem sending your trade offer. Please try again later.",
"response": {
"offers": [
{
"bot_id": 365,
"items": [
37246039
],
"tradeoffer_id": null,
"tradeoffer_error": null
}
]
}
}
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"offers": [
{
"bot_id": 365,
"items": [
37246039
],
"tradeoffer_id": 454841,
"tradeoffer_error": null
}
]
}
}
Return one or more items you've listed for sale to your Steam accounts. Input items must be either on sale or awaiting return, and must not have an active trade offer out or queued. Under most circumstances, a trade offer won't be queued, but it's possible if, for example, you request that an item be returned and the bot is offline at the time of request.
This will (attempt to) send trade offers for all items in your input. If multiple trade offers must be sent, they will be sent in series. Therefore, you may wish to call this method separately for each bot that will be sending an offer (you can use GetSales to find out which bot is holding which item).
If the status
is not OK (1
), the output will still be defined (if your input was well-formed, there were no unexpected internal errors, and Steam is not completely down) in the event that the failure was due to Steam (e.g. bad trade URL, item doesn't exist anymore, trade server down).
HTTP Request
POST https://api.opskins.com/ISales/ReturnItems/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
items | string | A list of sale IDs of items you want to be returned, separated by commas. For example: 1234,5678,9012 |
Output
Parameter | Type | Description |
---|---|---|
offers | array-object | An array of objects, where each object in this array represents one trade offer that we sent (or tried to send) |
bot_id | int | The internal ID of the bot that sent (or tried to send) this trade offer |
items | array-int | An array of sale IDs which were in this offer |
tradeoffer_id | int | If the offer was successfully sent, this is its trade offer ID as a string. null on failure |
tradeoffer_error | string | If the offer couldn't be sent, this is an error message. null on success |
Return Items To Inventory
Request example:
curl --request POST \
--url 'https://api.opskins.com/ISales/ReturnItemsToInventory/v1/' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"items": "37246247"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202
}
Return one or more items that are on sale to the user's OPSkins inventory
HTTP Request
POST https://api.opskins.com/ISales/ReturnItemsToInventory/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
items | string | Comma-separated list of sale IDs |
Output
Parameter | Type | Description |
---|---|---|
none |
Search v1
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/Search/v1/?app=730_2&search_item=AK-47' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"sales": [
{
"id": 35880764,
"amount": 2,
"classid": "1432174707",
"instanceid": "0",
"img": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXU5A1PIYQNqhpOSV-fRPasw8rsUFJ5KBFZv668FFYwnfKfcG9HvN7iktaOkqD1auLTxD5SvZYgiLvFpo7xjVLh-kdrYWnzcoGLMlhpsyM-5vg",
"market_name": "Revolver Case",
"inspect": null,
"type": "Base Grade Container",
"item_id": "7337546177",
"stickers": null,
"wear": null,
"appid": 730,
"contextid": "2",
"bot_id": 702
},
{
"id": 35880765,
"amount": 2,
"classid": "1432174707",
"instanceid": "0",
"img": "-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXU5A1PIYQNqhpOSV-fRPasw8rsUFJ5KBFZv668FFYwnfKfcG9HvN7iktaOkqD1auLTxD5SvZYgiLvFpo7xjVLh-kdrYWnzcoGLMlhpsyM-5vg",
"market_name": "Revolver Case",
"inspect": null,
"type": "Base Grade Container",
"item_id": "7337546186",
"stickers": null,
"wear": null,
"appid": 730,
"contextid": "2",
"bot_id": 702
}
]
}
}
Search active OPSkins listings for particular items. To prevent bot sniping, this endpoint will only return listings which have been publicly visible for at least ten minutes, and are not currently limited to Buyers Club members. This endpoint always returns 100 listings sorted from lowest to highest price.
Input is identical to that of the main site's search page. The most important parameters are listed here.
HTTP Request
GET https://api.opskins.com/ISales/Search/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
app | string | The app you want to search in, in appid_contextid format (e.g. 730_2) |
|
search_item | string | Item name for the search |
Output
Parameter | Type | Description |
---|---|---|
sales | array-object | An array of objects containing the results of your search query. Each object has these properties: |
id | int | The item's OPSkins sale ID |
amount | int | The item's list price, in USD cents |
classid | string | The item's Steam classid at time of pickup (may have changed in trade) |
instanceid | string | The item's Steam instanceid at time of pickup (may have changed in trade) |
img | string | The item's Steam image URL (append this to https://steamcommunity-a.akamaihd.net/economy/image/) |
market_name | string | The item's name |
inspect | string | The full URL to inspect this item, if applicable. If not, then this is null |
type | string | The item's "type" as reported by Steam (e.g. Base Grade Key) |
item_id | string | The item's Steam asset ID on our storage account |
stickers | string | A string containing the stickers applied to this item, as comma-separated pairs of stickerid,wear |
wear | string | The item's floating-point wear value, between 0 and 1 if applicable. If not applicable or unknown, then null |
appid | int | The item's Steam appID |
contextid | string | The item's Steam context ID |
bot_id | int | The internal OPSkins ID of the bot which is holding this item |
Search v2
Request example:
curl --request GET \
--url 'https://api.opskins.com/ISales/Search/v2/?app=730_2&search_item=AK-47' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"sales": [
{
"id": 35880764,
"amount": 2,
"showcase": 0,
"color": "D2D2D2",
"img": "https://steamcommunity-a.opskins.media/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXU5A1PIYQNqhpOSV-fRPasw8rsUFJ5KBFZv668FFYwnfKfcG9HvN7iktaOkqD1auLTxD5SvZYgiLvFpo7xjVLh-kdrYWnzcoGLMlhpsyM-5vg",
"inspect": null,
"type": "Base Grade Container",
"classid": "1432174707",
"instanceid": "0",
"market_name": "Revolver Case",
"market_hash_name": "Revolver Case",
"appid": 730,
"contextid": "2",
"assetid": "7337546177",
"bot_id": 702,
"state": 2,
"bumptime": null,
"wear": "",
"stickers": [],
"val_1": null,
"market_fee_app": null,
"flags": {
"tf2_uncraftable": false,
"trade_locked": false,
"has_screenshots": false,
"screenshot_is_video": false,
"steam_commodity": false
},
"is_your_item": false
}
]
}
}
Search active OPSkins listings for particular items. To prevent bot sniping, this endpoint will only return listings which have been publicly visible for at least ten minutes, and are not currently limited to Buyers Club members. This endpoint always returns 100 listings sorted from lowest to highest price.
Input is identical to that of the main site's search page. The most important parameters are listed here.
HTTP Request
GET https://api.opskins.com/ISales/Search/v2/
Input
Parameter | Type | Required | Description |
---|---|---|---|
app | string | The app you want to search in, in appid_contextid format (e.g. 730_2) |
|
search_item | string | Item name for search | |
trade_locked | int | Filtering CS:GO items by trade lock status. If not sent then no filtering happens, send 1 to show only trade-locked items, 0 - only non trade-locked items |
Output
Parameter | Type | Description |
---|---|---|
sales | array-object | An array of objects containing the results of your search query. Each object is Standard Sale Object |
Set Trade-Locked Filter Value
Request example:
curl --request POST \
--url 'https://api.opskins.com/ISales/SetTradeLockedFilter/v1/' \
--header 'content-type: application/json; charset=utf-8' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--data '{"value":"2"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202
}
Set user's preference on trade-locked filter
HTTP Request
POST https://api.opskins.com/ISales/SetTradeLockedFilter/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
value | int | Trade-locked filter value. One of 1, 2, 3, where 1 means no filtering, 2 - only trade-locked items, 3 - only non trade-locked items |
Output
None
IStatus
Get Bot List
Request example:
curl --request GET \
--url 'http://api.opskins.com/IStatus/GetBotList/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"bots": {
"1": {
"id": 1,
"id64": "76561198168850067",
"online": false
},
"2": {
"id": 2,
"id64": "76561198173383125",
"online": false
},
"3": {
"id": 3,
"id64": "76561198173384045",
"online": false
}
}
}
}
Get list of bots and online statuses
HTTP Request
GET https://api.opskins.com/IStatus/GetBotList/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
bots | object | |
{id} | object | |
id | int | Internal bot id |
id64 | string | Steam Id64 of the bot |
online | bool |
ISupport
Repair Item
Request example:
curl --request POST \
--url 'https://api.opskins.com/ISupport/RepairItem/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"saleid":2402474}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"type": "item",
"bot": 58,
"repairedSaleids": [37246350],
"repaired": true
}
}
Attempts to repair a sale that is in a broken "Contact Support" state. This will also attempt to repair all other broken items on the same bot.
HTTP Request
POST https://api.opskins.com/ISupport/RepairItem/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
saleid | int | Sale ID of the item |
Output
Parameter | Type | Description |
---|---|---|
type | string | A string representing what type of item this is in your account. sale for an item you're selling, purchase for an item you purchased, item for an item in your OPSkins inventory |
bot | int | The ID of the bot which owns this item |
repairedSaleids | array-int | An array containing the IDs of other items on this bot which are also repaired (will contain the passed-in ID if it was repaired). Some or all of these may not belong to you. |
repaired | bool | true if the passed-in ID was repaired, false if it wasn't. You'll need to contact support if it's false . Will also be true if the passed-in ID was not in a bad state to begin with. |
ITest
Test
Request example:
curl --request GET \
--url 'https://api.opskins.com/ITest/Test/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513697229
}
Test
HTTP Request
GET|POST https://api.opskins.com/ITest/Test/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
none |
Test Authed
Request example:
curl --request GET \
--url 'https://api.opskins.com/ITest/TestAuthed/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1548049012,
"balance": 11202000,
"credits": 0,
"balance_restricted": 102000,
"credits_restricted": 0,
"cryptoBalances": {
"ETH": "0.000000000000000000",
"WAX": "19691.890398830000000000"
},
"response": {
"uid": 12345,
"id64": "76561197960287930"
}
}
Test authed user
HTTP Request
GET|POST https://api.opskins.com/ITest/TestAuthed/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
status | int | Response status code |
time | int | Timestamp |
balance | int | Wallet balance |
credits | int | Credits balance |
response | object | |
id | integer | Authed user ID |
id64 | string | Steam ID64, will be null if Steam is not linked. |
Test Localization
Request example:
curl --request GET \
--url 'https://api.opskins.com/ITest/TestLocalization/v1/' \
--header 'Accept-Language: ru' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513698385,
"response": {
"lang": "ru",
"test_string": "Купить и продать скины и вещи CSGO, H1Z1 и PUBG | Торговая площадка OPSkins"
}
}
Returns language code and localized test message
HTTP Request
GET|POST https://api.opskins.com/ITest/TestLocalization/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
lang | string | Language code from request header |
test_string | string | Localized message |
ITransactions
Get Failed Purchases
Request example:
curl --request GET \
--url 'http://api.opskins.com/ITransactions/GetFailedPurchases/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"total": 2,
"purchases": [
{
"market_name": "StatTrak™ SCAR-20 | Crimson Web (Factory New)",
"amount": 4500,
"reason": "Refunded from OPSkins inventory",
"sale_id": 36576252,
"date": 1480945640
},
{
"market_name": "★ StatTrak™ Karambit | Doppler (Factory New)",
"amount": 95000,
"reason": "Refunded from OPSkins inventory",
"sale_id": 37058170,
"date": 1480945638
}
]
}
}
Get the user's failed purchases
HTTP Request
GET https://api.opskins.com/ITransactions/GetFailedPurchases/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
per_page | int | Number of items to return per page (default and max is 50) | |
page | int | Page number to fetch (default 1) |
Output
Parameter | Type | Description |
---|---|---|
total | int | Total number of failed purchases |
purchases | array-object | |
sale_id | int | |
date | int | |
market_name | string | Name of the item |
reason | string | Reason of failure |
amount | int | Purchase amount in USD cents |
Get Monetary Transaction History
Request example:
curl --request GET \
--url 'http://api.opskins.com/ITransactions/GetMonetaryTransactionHistory/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"total_items": 96,
"total_spent": 17184234,
"total_cashed_out": 100000,
"total_pending": 2000000,
"transactions": [
{
"type": "purchase",
"formatted_type": "Purchase",
"status": "Paid",
"timestamp": 1483713600,
"amount": 15000,
"email": "",
"transaction_id": "",
"comments": null,
"actions": [
{
"type": "api",
"text": "Purchase",
"value": "viewEmailPurchase"
}
]
},
{
"type": "purchase",
"formatted_type": "Purchase",
"status": "Paid",
"timestamp": 1480430227,
"amount": 194100,
"email": "",
"transaction_id": "Bitcoin 46h443vf",
"comments": null,
"actions": [
{
"type": "api",
"text": "Purchase",
"value": "viewEmailPurchase"
},
{
"type": "link",
"text": "Bitcoin 46h443vf",
"value": "https://blockchain.info/tx/46h443vf"
}
]
},
{
"type": "cashout",
"formatted_type": "PayPal One-Hour Cashout",
"status": "Denied",
"timestamp": 0,
"amount": 6000,
"email": "email@example.com",
"transaction_id": "8",
"comments": "Declined by user",
"actions": []
}
]
}
}
Get Monetary Transactions - combined Cashouts, WHMCS Payments and Add Funds Payments. Sorted by timestamp in descending order
HTTP Request
GET https://api.opskins.com/ITransactions/GetMonetaryTransactionHistory/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
total_items | int | Total number of transactions |
total_spent | int | Total amount of monies spent in USD cents |
total_cashed_out | int | Total amount of monies cashed out in USD cents |
total_pending | int | Total amount of pending monies in USD cents |
transactions | array-object | List of transactions |
type | string | Transaction type. One of cashout , WHMCS_purchase , purchase |
formatted_type | string | Transaction type display name. Can contain both type (Purchase or Cashout) and provider name, e.g. Bitcoin Cashout |
status | string | Transaction Status |
timestamp | int | Transaction's timestamp |
amount | int | Transaction's amount in USD cents |
string | Email, used in transaction | |
transaction_id | string | Transaction ID. Can contain internal transaction id and/or payment provider name |
comments | string | Multi-purpose field to contain denial reason if any, staff comments, etc. |
actions | array-object | Actions associated with the record. Can be a link to external website, or a shortcut to another API endpoint |
type | string | Type of action to perform. Available values: link - open external url, api - call another api endpoint |
value | string | Value for the type above. URL in case of link, or a code for api call (should be handled by API client) |
text | string | Text to show with the action |
Get Operation Points Transaction History
Request example:
curl --request GET \
--url 'http://api.opskins.com/ITransactions/GetOperationPointsTransactionHistory/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"current_page": 1,
"total_pages": 1,
"response": {
"types": {
"2": "Purchase",
"8": "Subscription Purchase",
"12": "Mystery Item"
},
"states": {
"1": "Completed"
},
"transactions": [
{
"id": 690,
"timestamp": 1506607151,
"updated_timestamp": null,
"type": 2,
"state": 1,
"target_item": 37246479,
"amount": -55000,
"amount_nocashout": -55000,
"new_balance": 330747,
"new_balance_nocashout": 2095914,
"amount_refunded": 0,
"amount_nocashout_refunded": 0,
"comment": null
},
{
"id": 552,
"timestamp": 1497017736,
"updated_timestamp": null,
"type": 12,
"state": 1,
"target_item": null,
"amount": -11495,
"amount_nocashout": -11495,
"new_balance": 433717,
"new_balance_nocashout": 2198884,
"amount_refunded": 0,
"amount_nocashout_refunded": 0,
"comment": "Mystery Knife purchase"
}
]
}
}
Get Monetary Transactions - combined Cashouts, WHMCS Payments and Add Funds Payments. Sorted by timestamp in descending order
HTTP Request
GET https://api.opskins.com/ITransactions/GetOperationPointsTransactionHistory/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
type | int | Set to return only a specific type of transaction | |
per_page | int | Number of transactions to return per page (default and max is 10,000) | |
page | int | Page number to fetch (default 1) | |
sort | string | How should we sort the listing? Valid values are: new_old (new to old); old_new (old to new) |
Output
Parameter | Type | Description |
---|---|---|
types | object | Keys of this object are type numbers, values are that type's display string (localized) |
states | object | Keys of this object are state numbers, values are that that state's display string (localized) |
transactions | array-object | List of transactions |
id | int | |
timestamp | int | |
updated_timestamp | int | |
type | int | The type of transaction this is |
state | int | This transaction's current state |
target_item | int | Sale ID/invoice ID/etc with which this transaction is associated |
amount | int | Operation points difference. Negative means you lost money, positive means you gained money |
amount_nocashout | int | Operation points difference in your non-cashoutable balance (i.e. how much of this transaction affected your non-cashoutable balance |
new_balance | int | Your new account balance after this transaction was finished |
new_balance_nocashout | int | Your new non-cashoutable balance after this transaction was finished |
amount_refunded | int | How much of this transaction was refunded (sign will be opposite of "amount"; e.g. if fully refunded, "amount" + "amount_refunded" = 0) |
amount_nocashout_refunded | int | How much of this transaction's non-cashoutable change was refunded (sign will be opposite of "amount_nocashout") |
comment | string | A comment to go along with this transaction |
Get Purchase History
Request example:
curl --request GET \
--url 'http://api.opskins.com/ITransactions/GetPurchaseHistory/v1/?type=3' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"appids": {
"570": "Dota 2",
"730": "CS:GO",
"218620": "PAYDAY 2",
"295110": "JS",
"433850": "H1Z1"
},
"currency_types": {
"1": "USD Cents",
"2": "Operation Points"
},
"purchases": [
{
"sale_id": 37245493,
"timestamp": 1513277676,
"item_name": "AK-47 | Redline (Field-Tested)",
"appid": "730",
"amount": 737,
"amount_currency_type": 1,
"security_token": "plFceO",
"status": "Delivered to OPSkins Inventory",
"manage": null,
"refundable": null
},
{
"sale_id": 37243580,
"timestamp": 1487060264,
"item_name": "Red Bone Work Boots",
"appid": "433850",
"amount": 150,
"amount_currency_type": 1,
"security_token": "oEpbpF",
"status": "Delivered to OPSkins Inventory",
"manage": null,
"refundable": null
}
]
}
}
Get the user's wallet transaction history
HTTP Request
GET https://api.opskins.com/ITransactions/GetPurchaseHistory/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
type | int | Type of purchases to return. 3 = sold, awaiting delivery; 4 = sold and delivered | |
appid | int | Set to return purchases by a game's appid | |
currency_type | int | Set to return purchases based on currency type (Operation Points or USD cents) | |
per_page | int | Number of transactions to return per page (default and max is 10,000) | |
page | int | Page number to fetch (default 1 ) |
|
sort | string | How should we sort the listing? Valid values are: new_old (new to old); old_new (old to new) |
Output
Parameter | Type | Description |
---|---|---|
appids | object | Keys of this object are 'appid' numbers, values are that appid's display string |
currency_types | object | Keys of this object are 'currency type' numbers, values are that currency types's display string |
purchases | array-object | |
sale_id | int | |
timestamp | int | |
item_name | string | Name of the purchased item |
appid | string | The appid of the purchase |
amount | int | Purchase amount |
amount_currency_type | int | Number value of the currency type used to purchase. (Operation points or USD cents) |
security_token | string | Our storage account will respond to you with this token. This is for your protection to confirm it is an authentic OPSKINS storage account |
status | string | Status message of the purchase |
manage | string | If one exists, a description of a problem with the purchase |
refundable | int | If item is still refundable, a timestamp in unixtime the item can be refunded until |
Get Transaction Types
Request example:
curl --request GET \
--url 'http://api.opskins.com/ITransactions/GetTransactionTypes/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"types": [
{
"key": "",
"name": "All"
},
{
"key": "1",
"name": "Item Sale"
},
{
"key": "2",
"name": "Item Purchase"
},
{
"key": "3",
"name": "Bump/Feature"
},
{
"key": "4",
"name": "Cashout"
},
{
"key": "5",
"name": "Add Funds"
},
{
"key": "6",
"name": "Support Adjustment"
},
{
"key": "7",
"name": "Code/Gift Card"
},
{
"key": "8",
"name": "Subscription Purchase"
}
]
}
}
Get transaction types to create a filter
HTTP Request
GET https://api.opskins.com/ITransactions/GetTransactionTypes/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
types | array-object | |
key | string | Transaction type id |
name | string | Transaction type display name |
Get Wallet Transaction History
Request example:
curl --request GET \
--url 'http://api.opskins.com/ITransactions/GetWalletTransactionHistory/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"response": {
"types": {
"1": "Sale",
"2": "Purchase",
"5": "Add Funds",
"7": "Redeemed Code",
"8": "Subscription Purchase",
"9": "Reversal"
},
"states": {
"1": "Completed",
"2": "Refunded",
"3": "Refunded by Support"
},
"transactions": [
{
"id": 242,
"timestamp": 1483616005,
"updated_timestamp": null,
"type": 5,
"state": 1,
"target_item": 10234476,
"amount": 1000,
"amount_nocashout": 1000,
"new_balance": 12232806,
"new_balance_nocashout": 2060107,
"amount_refunded": 0,
"amount_nocashout_refunded": 0,
"comment": "PayPal Payment"
},
{
"id": 233,
"timestamp": 1482497232,
"updated_timestamp": null,
"type": 2,
"state": 1,
"target_item": 37237998,
"amount": -9054,
"amount_nocashout": -9054,
"new_balance": 12238283,
"new_balance_nocashout": 2065584,
"amount_refunded": 0,
"amount_nocashout_refunded": 0,
"comment": null
}
]
}
}
Get the user's wallet transaction history
HTTP Request
GET https://api.opskins.com/ITransactions/GetWalletTransactionHistory/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
type | int | Set to return only a specific type of transaction | |
per_page | int | Number of transactions to return per page (default and max is 10,000) | |
page | int | Page number to fetch (default 1) | |
sort | string | How should we sort the listing? Valid values are: new_old (new to old); old_new (old to new) |
Output
Parameter | Type | Description |
---|---|---|
types | object | Keys of this object are type numbers, values are that type's display string (localized) |
states | object | Keys of this object are state numbers, values are that that state's display string (localized) |
transactions | array-object | Array of Standard Transaction Object |
Transfer Funds
Request example:
curl --request POST \
--url 'https://api.opskins.com/ITransactions/TransferFunds/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"id64":76561197973578969,"amount":10}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1512020202,
"balance": 852517,
"credits": 0,
"cryptoBalances": {
"WAX": "100.000000000000000000"
},
"response": {
"amount": 10,
"recipient": "76561197973578969",
"currency": 1,
"transfer_id": 7,
"txid_sender": 46258268,
"txid_recipient": 46258269
}
}
This endpoint allows users to transfer their OPSkins balance, or their Operations Points to another user (Operation Points are used first only if it will cover the entire transaction). The receiver will only receive Operation Points, which are OPSkins Credits that can only be used to purchase items. Operation Points can not be cashed out, converted, purchase subscriptions or used for any other functionality of the site. This endpoint requires pre-approval, if you wish to use this functionality please contact support
HTTP Request
POST https://api.opskins.com/ITransactions/TransferFunds/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
id64 | int | 64-bit SteamID of recipient. Optional if uid is provided instead. |
|
uid | int | OPSkins UID of recipient. Optional if id64 is provided instead. |
|
amount | int | Amount in USD cents to transfer |
Output
Parameter | Type | Description |
---|---|---|
amount | int | Amount in USD cents that was transferred |
recipient | string OR int | Depending on input, either Recipient's 64-bit SteamID (as a string) or OPSkins UID (as a int). |
currency | int | 1 if it deducted USD from the sender, 2 if it deducted OP Credit |
transfer_id | int | The internal ID of the transfer that took place |
txid_sender | int | The wallet transaction ID in which the sender's funds were taken |
txid_recipient | int | The wallet transaction ID in which the recipient was granted funds |
Errors
Status | Code | Description |
---|---|---|
2002 | NOT_FOUND | If the specified recipient doesn't have an OPSkins account yet. |
3000 | BAD_INPUT | If id64 or uid passed in is the same as the API key owner. If amount passed in is <= 0. |
IUser
Add Subscription
Request example:
curl --request POST \
--url http://api.opskins.com/IUser/AddSubscription/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"subscriptionid":2,"auto_renew":true}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513686484,
"response": {
"id": 2,
"name": "Premium Member",
"price": 599,
"expire": 1516278482,
"active_length": 2592000,
"auto_renew": true
}
}
Add a subscription to your account
HTTP Request
POST https://api.opskins.com/IUser/AddSubscription/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
subscriptionid | int | ID of the subscription type | |
auto_renew | bool | Boolean if the subscription should auto renew after active length period. If not set, will default to false |
Output
Parameter | Type | Description |
---|---|---|
id | int | ID of the subscription type |
name | string | Name of the subscription |
price | int | Price of the subscription in USD cents |
expire | int | Timestamp of subscription expiration |
active_length | int | Amount of time (in seconds) the subscription will be active, in seconds |
auto_renew | bool | Is the subscription selected to auto renew? |
Get Account Summary
Request example:
curl --request GET \
--url http://api.opskins.com/IUser/GetAccountSummary/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513687671,
"response": {
"can_refresh": true,
"summary": {
"sold": {
"count": 3,
"amount": 10073,
"user_amount": 9066
},
"listed": {
"count": 44,
"amount": 162752,
"user_amount": 154515
},
"purchases": {
"count": 127,
"amount": 3754442,
"services": 0
}
}
}
}
Get the user's account summary
HTTP Request
GET https://api.opskins.com/IUser/GetAccountSummary/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
refresh | bool | If set to true , should we try to update these values now? Will only work if allowed at this time. |
Output
Parameter | Type | Description |
---|---|---|
can_refresh | bool | Can you manually refresh right now? |
summary | object | |
sold | object | |
count | int | Total number of sold items, all time |
amount | int | Total list price, in USD cents |
user_amount | int | Total amount earned (amount less commission), in USD cents |
listed | object | |
count | int | Total number of listed items right now |
amount | int | Total list price, in USD cents |
user_amount | int | Total potential amount earned (amount less commission), in USD cents |
purchases | object | |
count | int | Total number of bought items |
amount | int | Total amount spent, in USD cents |
services | int | Total amount spent on services, in USD cents |
Get Action History
Request example:
curl --request GET \
--url http://api.opskins.com/IUser/GetActionHistory/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status":1,
"time":1522086745,
"current_page": 1,
"total_pages": 1,
"response":{
"actions":[
{
"id":3,
"msg":"Admin changed email from <strong>lala@gmail.com</strong> to <strong></strong>",
"timestamp":0,
"ip":"",
"type":7
},
{
"id":2,
"msg":"Enabled 2FA",
"timestamp":1521565974,
"ip":"192.168.0.108",
"type":5
},
{
"id":1,
"msg":"Logged in via local",
"timestamp":1521506819,
"ip":"192.168.0.116",
"type":3
}
],
"types":{
"1":"CHANGE_PASSWORD",
"2":"CHANGE_EMAIL",
"3":"LOGIN",
"4":"LOGIN_FAILURE",
"5":"TWOFACTOR",
"6":"ENFORCE_PASSWORD",
"7":"CHANGE_EMAIL_ADMIN",
"8":"AUTH_MACHINE",
"9":"CHANGE_LANGUAGE",
"10":"CHANGE_SMS_PHONE"
}
}
}
Get the user's action history. If an action was done by an admin, IP is returned as an empty string. Login failure actions caused by no-2-factor-authentication failures are excluded from the response regardless of input parameters.
HTTP Request
GET https://api.opskins.com/IUser/GetActionHistory/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
page | int | Page number to request. Defaults to 1. | |
per_page | int | Number of action records per page to return. Defaults to 100 and capped at 5,000. | |
type_id | int | Action type ID to filter by. Accepts only valid type ID. If an invalid ID or no ID is provided, no filtering is applied. | |
sort | string | Sorting order by id . Accepts ASC or DESC in lowercase or uppercase. Defaults to DESC . |
Output
Parameter | Type | Description |
---|---|---|
actions | array | User action objects |
id | int | Action object ID |
msg | string | Action detail |
timestamp | int | UNIX timestamp |
ip | string | IP of action origin |
type | int | Action type ID |
types | object | Action types |
1 | string | Action type ID 1 |
2 | string | Action type ID 2 |
4 | string | Action type ID 4 |
5 | string | Action type ID 5 |
6 | string | Action type ID 6 |
7 | string | Action type ID 7 |
8 | string | Action type ID 8 |
9 | string | Action type ID 9 |
10 | string | Action type ID 10 |
Get Api Key Details
Request example:
curl --request GET \
--url http://api.opskins.com/IUser/GetApiKeyDetails/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513688444,
"response": {
"api_key": {
"delay": 600,
"fee_pct": 0
}
}
}
Get the user's API Key details.
HTTP Request
GET https://api.opskins.com/IUser/GetApiKeyDetails/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
api_key | object | |
delay | int | The number of seconds an API key owner has to wait before things show up in ISales/Search and how long an item has to be on sale before they can use ISales/BuyItems |
fee_pct | int | The purchase commission for this API key when using ISales/BuyItems |
Get Balance
Request example:
curl --request GET \
--url http://api.opskins.com/IUser/GetBalance/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Normal response returns JSON structured like so:
{
"status": 1,
"time": 1548021744,
"balance": 1500,
"credits": 18414,
"balance_restricted": 1500,
"credits_restricted": 500,
"cryptoBalances": {
"ETH": "0.000000000000000000",
"WAX": "19691.890398830000000000"
}
}
OAuth response returns JSON structured like so:
{
"status": 1,
"time": 1548021744,
"balance": 0,
"credits": 0,
"balance_in_keys": 79,
"cryptoBalances": {
"ETH": "0.000000000000000000",
"WAX": "19691.890398830000000000"
}
}
Get account wallet balances
HTTP Request
GET https://api.opskins.com/IUser/GetBalance/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Note that if you are displaying user balance on your website via OAuth, you must display using balance_in_keys
as the number of keys the user can purchase; balance
& credits
will always be 0
.
Parameter | Type | Description |
---|---|---|
balance | int | Wallet balance in USD (coins) -- will be 0 for OAuth, as you must use balance_in_keys |
credits | int | OP Credits -- will be 0 for OAuth, as you must use balance_in_keys |
balance_in_keys | int | Only outputted for OAuth - Number of keys purchasable with balance & credits . Always a whole number. Each key is worth 2.50 USD. |
balance_restricted | int | Restricted balance (USD) -- not outputted for OAuth |
credits_restricted | int | Restricted OP Credits -- not outputted for OAuth |
cryptoBalances | object | Cryptocurrency Balance |
-- ETH | string | Ethereum balance |
-- WAX | string | WAX Token balance |
vault | object | Vault Balance (only outputted if you have a vault, see IVault ) |
-- usd | int | Vault USD balance |
Get Convertible Balance
Request example:
curl --request GET \
--url http://api.opskins.com/IUser/GetConvertibleBalance/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513858261,
"response": {
"balances": {
"usd": "$45,458.59",
"wax": "0.00000000"
}
}
}
Get convertible balance
HTTP Request
GET https://api.opskins.com/IUser/GetConvertibleBalance/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
cashoutable | bool | Request cashoutable balances (default: true ) |
Output
Parameter | Type | Description |
---|---|---|
balances | object | |
usd | string | USD formatted balance |
wax | string | WAX balance |
Get Credits
Request example:
curl --request GET \
--url http://api.opskins.com/IUser/GetCredits/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513689230,
"response": {
"instantsell_credits": 330148
}
}
Get account wallet balance
HTTP Request
GET https://api.opskins.com/IUser/GetCredits/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
instantsell_credits | int | Instant sell credits |
Get Profile
Request example:
curl --request GET \
--url http://api.opskins.com/IUser/GetProfile/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513690697,
"response": {
"id": 1996773,
"id64": "76561198273325252",
"create_time": 1472452157,
"password_set_time": 1486644220,
"balance": {
"coins": null,
"amount_coins_nocashout": 2064444,
"credits": null
},
"showcases": 1,
"bumps": 2,
"username": "username",
"avatar": "https:\/\/steamcdn-a.akamaihd.net\/steamcommunity\/public\/images\/avatars\/fe\/fef49e7fa7e1997310d705b2a6158ff8dc1cdfeb_full.jpg",
"name": {
"first": "FirstName",
"last": "LastName"
},
"email": {
"contact_email": "email@example.com",
"verified": true,
"notifications": true
},
"twofactor": {
"enabled": false,
"enable_time": null
},
"options": {
"trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=000000000&token=pYV4zmle",
"balance_notify": 503,
"suggestion_type": 1,
"hidden_balance": true,
"private_sales_list": false
},
"preferred_lang": "en",
"sales_list": "https://opsk.in/u/000000",
"personal_info": {
"country": "US",
"region": "CA",
"city": "Los Angeles",
"postal": "90000",
"address": "0 S. Alameda Street Los Angeles",
"dob": "1999-01-02",
"phone": null,
"gov_id": "*****"
}
}
}
Get user profile info
HTTP Request
GET https://api.opskins.com/IUser/GetProfile/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
- For OAuth scope
identity
, everything below is outputted except forpersonal_info
&balance
properties. - For OAuth scope
identity_basic
, onlyid
,id64
,username
,avatar
,preferred_currency
,preferred_lang
is outputted.
Parameter | Type | Description |
---|---|---|
id | int | OPSkins user's ID |
id64 | string | User's 64-bit SteamID as a string (64-bit int does not properly decode in JavaScript). Will be null if Steam is not linked. |
create_time | int | Timestamp of user's account creation |
password_set_time | int | Timestamp of last password change |
balance | object | For OAuth: only outputted with scope balance |
coins | int | User's account balance, in USD cents |
amount_coins_nocashout | int | Not cashoutable user's account balance, in USD cents |
credits | int | User's operation points * 100 |
showcases | int | Amount of items user can feature on purchase or renewal of subscription |
username | string | Account username |
avatar | string(URL) | Account avatar image URL |
bumps | int | Amount of bumps given to user on purchase or renewal of subscription |
name | object | |
first | string | User's first name |
last | string | User's last name |
object | For OAuth: only outputted with scope identity |
|
contact_email | string | User's contact email |
verified | bool | Is user's email verified? |
notifications | bool | Does user want email notifications about items they sold, and promos? |
twofactor | object | |
enabled | bool | Does user have 2FA? |
enable_time | int | Timestamp when 2FA was accepted, null otherwise |
options | object | |
trade_url | string | User's Steam trade URL |
balance_notify | int | Balance threshold at which user wants email notification in USD cents; null if disabled |
suggestion_type | int | User's desired price suggestion type; 1 = Steam Analyst, 2 = OPSkins |
hidden_balance | bool | Does user want their balance hidden? |
private_sales_list | bool | Is user's public sales list private? |
preferred_currency | int | Preferred crypt-currency index (see: ICrypto_GetCurrencies_v1) |
preferred_lang | string | User's 2-letter language code |
sales_list | string | Short link to user's public sales list page |
personal_info | object | Available only for privileged OAuth requests |
country | string | 2-letter country code |
region | string | Region code |
city | string | City name |
postal | string | Postal code |
address | string | Street address |
dob | string | Birthdate in MM/DD/YYYY format |
phone | string | Phone number |
gov_id | string | Empty string if no gov ID number is set, or "*****" if one is |
Get Subscriptions Status
Request example:
curl --request GET \
--url http://api.opskins.com/IUser/GetSubscriptionsStatus/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513692272,
"response": {
"subscriptions": [
{
"id": 2,
"price": 599,
"showcase_count": 1,
"bump_count": 3,
"com": 5,
"name": "Premium Member",
"purchasable": true,
"active_length": 2592000,
"sales_blurb": "<center>\n<p>Sales Commission: 5%% on CS:GO items</p>\n<p>Included Bumps: 3<span id=\"bumps-left\"></span></p>\n<p>Included Featured Sales: 1<span id=\"sc-left\"></span></p>\n<p>%s for 30 days, and included extras</p>\n</center>",
"items_per_day": 0,
"item_availability_time": 300,
"is_dependent": null,
"status": null
},
{
"id": 12,
"price": 9950,
"showcase_count": 0,
"bump_count": 0,
"com": 10,
"name": "Buyers Club™ Booster Pack 10",
"purchasable": true,
"active_length": 2592000,
"sales_blurb": "<center>\n<p>Booster pack for the Buyers Club™ </p>\n<p>Add 10 additional items per day.</p>\n<p>5 minutes exclusivity on Good Deals.</p>\n<p>for %s a month!</p>\n</center>",
"items_per_day": 10,
"item_availability_time": 0,
"is_dependent": 8,
"status": {
"expire": "1506783544",
"auto_renew": "1",
"last_renewal": "1504191544",
"num_renewals": "3"
}
}
]
}
}
Get subscriptions statuses
HTTP Request
GET https://api.opskins.com/IUser/GetSubscriptionsStatus/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
response | array-object | Array of objects, where each object contains the current available subscriptions and the user's subscription status |
id | int | Unique id of subscription type |
price | int | Cost in USD cents of the subscription |
showcase_count | int | Amount of items you can Feature on purchase or renewal of subscription |
bump_count | int | Amount of Bumps you are given on purchase or renewal of subscription |
com | int | Amount of commision (in percent) you will pay |
name | string | Name of the subscription |
purchasable | bool | Is this subscription currently purchasable |
active_length | int | Amount of time (in seconds) the subscription will be active, in seconds |
sales_blurb | string | Sales description |
items_per_day | int | Number of items allowed during Good Deals exclusivity time (see item_availability_time for time length) |
item_availability_time | int | Amount of time (in seconds) for Good Deals exclusivity |
is_dependent | int | Int of parent subscription id, false if there are no dependencies |
status | object | If subscribed returns an object containing subscription details, if not, returns false |
expire | int | Unix timestamp when subscription expires |
auto_renew | bool | Is the subscription selected to auto renew? |
last_renewal | int | Unix timestamp when subscription was last renewed |
num_renewals | int | Number of subscription renewals |
Get Suggestion Types
Request example:
curl --request GET \
--url http://api.opskins.com/IUser/GetSuggestionTypes/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513692675,
"response": {
"types": [
{
"id": 1,
"name": "Steam Analyst (Market Value; Usually Higher)"
},
{
"id": 2,
"name": "OPSkins (7-Day Real Average; Usually Lower)"
}
]
}
}
Get available price suggestion types for CS:GO
HTTP Request
GET https://api.opskins.com/IUser/GetSuggestionTypes/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
types | array-object | |
id | int | Price suggestion type code |
name | string | Display name of price suggestion type |
Get Whitelist Status
Request example:
curl --request GET \
--url http://api.opskins.com/IUser/GetWhitelistStatus/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513692955,
"response": {
"is_payment_whitelisted": true,
"is_cashout_whitelisted": false
}
}
Get Payment & Cashout whitelisted status
HTTP Request
GET https://api.opskins.com/IUser/GetWhitelistStatus/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
is_payment_whitelisted | bool | true if your account is whitelisted for Payments, false if not |
is_cashout_whitelisted | bool | true if your account is whitelisted for Cashouts, false if not |
is_bitpay_whitelisted | bool | Deprecated |
Save Trade URL
Request example:
curl --request POST \
--url http://api.opskins.com/IUser/SaveTradeURL/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"trade_url":"https://steamcommunity.com/tradeoffer/new/?partner=000000000&token=00000000"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513692955
}
Update your account's trade URL.
HTTP Request
POST https://api.opskins.com/IUser/SaveTradeURL/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
trade_url | string | Your new trade URL. Must be for the Steam account linked with this OPSkins account, or else will be rejected. |
Output
Parameter | Type | Description |
---|---|---|
none |
Self Lock Account
Request example:
curl --request POST \
--url http://api.opskins.com/IUser/SelfLockAccount/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513692955
}
Issue a self-ban that requires contacting support to unlock.
HTTP Request
POST https://api.opskins.com/IUser/SelfLockAccount/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
none |
Output
Parameter | Type | Description |
---|---|---|
none |
Toggle Renew Subscription
Request example:
curl --request POST \
--url http://api.opskins.com/IUser/ToggleRenewSubscription/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"subscriptionid":2}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513694017,
"response": {
"id": 2,
"expire": 1516278482,
"auto_renew": false
}
}
Toggle auto renew on a subscription
HTTP Request
POST https://api.opskins.com/IUser/ToggleRenewSubscription/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
subscriptionid | int | ID of the subscription type |
Output
Parameter | Type | Description |
---|---|---|
id | int | ID of the subscription type |
expire | int | Timestamp of subscription expiration |
auto_renew | bool | Is the subscription selected to auto renew? |
Update Profile
Request example:
curl --request POST \
--url http://api.opskins.com/IUser/UpdateProfile/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"first_name":"Alex","last_name":"Po","email":"new_email@example.com","dob":"1990-01-01","suggestion_type":2,"email_notify":true,"hide_balance":false}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513695176,
"response": {
"updated": true,
"needs_email_verification": true,
"whitelist_removed": false
}
}
Update the user's account details and preferences.
HTTP Request
POST https://api.opskins.com/IUser/UpdateProfile/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
first_name | string | ||
last_name | string | ||
Email Address (string) | If present and not equal to current email, a verification email will be sent which must be clicked before the email changes. | ||
country | string | ||
region | string | ||
city | string | ||
postal | string | ||
address | string | ||
dob | string | Birthdate, MM/DD/YYYY | |
phone | string | ||
gov_id | string | ||
suggestion_type | string | User's desired price suggestion type; 1 = Steam Analyst, 2 = OPSkins |
|
email_notify | string | Does user want email notifications about items they sold, and promos? | |
hide_balance | string | Does user want to hide their balance in the site's UI? | |
not_canadian | string | User certifies they aren't Canadian? | |
sales_list_private | string | User wants their public sales list to be hidden? | |
enable_one_click | string | User wants to opt-into Buy Now? | |
beta_opt_in | string | User wants to opt-into beta program? | |
balance_notify | string | Balance threshold at which user wants email notification; null to disable | |
preferred_currency | int | Preferred crypt-currency index or null to remove preferred currency (see: ICrypto_GetCurrencies_v1) |
Output
Parameter | Type | Description |
---|---|---|
updated | bool | Did any fields change? |
needs_email_verification | bool | Did the user change their contact email, and if so, does it require verification? |
whitelist_removed | bool | Did this change result in the user losing their whitelist status? |
Update SMS Phone Number
Request example:
curl --request POST \
--url http://api.opskins.com/IUser/UpdateSMSPhoneNumber/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"sms_phone":"+300000000000","phone_login_verification":true}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513695176,
"response": {
"sms_phone": "+300000000000",
"phone_login_verification": true,
"validation_sms_sent": true
}
}
Add, update, or remove SMS verification phone number
HTTP Request
POST https://api.opskins.com/IUser/UpdateSMSPhoneNumber/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
sms_phone | string | SMS phone number | |
phone_login_verification | bool | Use phone login verification instead of email? |
Output
Parameter | Type | Description |
---|---|---|
sms_phone | string | Phone number used to send verification SMS |
phone_login_verification | bool | Use phone login verification instead of email? |
validation_sms_sent | bool | Was the validation SMS sent? |
Verify Phone Code
Request example:
curl --request POST \
--url http://api.opskins.com/IUser/VerifyPhoneCode/v1/ \
--header 'authorization: Basic {{AUTH_HASH}}' \
--header 'Content-Type: application/json; charset=utf-8' \
--data '{"code":"123456"}'
Response returns JSON structured like this:
{
"status": 1,
"time": 1513695176
}
Verify SMS phone number with delivered code
HTTP Request
POST https://api.opskins.com/IUser/VerifyPhoneCode/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
code | string | Verification code delivered via SMS |
Output
Parameter | Type | Description |
---|---|---|
none |
IVault
Transfer To Vault
Request example:
curl --request POST \
--url 'https://api.opskins.com/IVault/TransferToVault/v1/' \
--header 'authorization: Basic {{AUTH_HASH}}' \
-d amount=500
Response returns JSON structured like this:
{
"status": 1,
"time": 1521585751,
"balance": 97507600,
"credits": 4841,
"cryptoBalances": {
"ETH": "4.948579545454545455",
"WAX": "100000810.382771640000000000"
},
"response": {
"vault_txn": {
"id": 17,
"timestamp": 1521585751,
"type": 1,
"initiated_by_staff": false,
"amount": 500,
"new_balance": 1500,
"wallet_txn": {
"id": 46248089,
"timestamp": 1521585751,
"updated_timestamp": null,
"type": 20,
"type_name": "Vault Transfer",
"state": 1,
"state_name": "Completed",
"currency": 1,
"target_item": "17",
"amount": -500,
"amount_nocashout": 0,
"new_balance": 97507596,
"new_balance_nocashout": 0,
"amount_refunded": 0,
"amount_nocashout_refunded": 0,
"comment": "Initiated from 127.0.0.1"
}
}
}
}
Transfer some cashoutable money from your account's USD balance to your account's vault. Your account needs to be pre-setup for vault usage by OPSkins staff.
You cannot directly withdraw funds in your vault. To access your vault funds, you will need to contact OPSkins staff.
The top-level balance
property will be present in this method's response, containing your up-to-date account balance.
HTTP Request
POST https://api.opskins.com/IVault/TransferToVault/v1/
Input
Parameter | Type | Required | Description |
---|---|---|---|
amount | int | Amount in USD cents that you want to transfer to your vault. You will get an error if this is zero, negative, or greater than your cashoutable USD account balance. |
Output
Parameter | Type | Description |
---|---|---|
vault_txn | object | A VaultTransaction object representation |
id | int | The resulting VaultTransaction ID |
timestamp | int | The Unix timestamp of when the VaultTransaction was executed |
type | int | The VaultTransaction type (1 = balance to vault; 2 = vault to balance; 3 = vault deduction) |
initiated_by_staff | bool | true if this VaultTransaction was initiated by OPSkins staff |
amount | int | The amount in cents that was moved in this transaction |
new_balance | int | The new balance in cents of your vault immediately following this transaction |
wallet_txn | object/null | If there's an associated wallet transaction, this is an object representation of it. Otherwise, it's null |
id | int | The wallet transaction ID |
timestamp | int | The Unix timestamp of when the wallet transaction was executed |
updated_timestamp | int/null | The Unix timestamp of when the wallet transaction was updated, or null if not applicable |
type | int | The type code for this transaction |
type_name | string | The localized string for the type |
state | int | The state code for this transaction |
state_name | string | The localized string for the state |
currency | int | The currency code for this transaction |
target_item | string/null | If applicable, the "target" for this transaction (for vault transactions, it's the VaultTransaction id) |
amount | int/string | Amount transacted. Negative if a deduction. If fiat, USD cents. If crypto, decimal string. |
amount_nocashout | int/string | How much of the amount was deducted from/added to your account's uncashoutable balance |
new_balance | int/string | New balance immediately following the transaction |
new_balance_nocashout | int/string | Amount of your new balance immediately following the transaction that's not cashoutable |
amount_refunded | int/string | Amount of the transaction that has been reverted |
amount_nocashout_refunded | int/string | Amount of the uncashoutable portion of the transaction that has been reverted |
comment | string/null | Arbitrary comment to go with the transaction |