Appearance
Public API: Steam Refill From SIH Balance
This API lets an SIH user with an enabled public API key refill a Steam account by charging their SIH balance.
The flow is two-step:
POST /p/api/v1.0/steam/checkvalidates the Steam account and returns atransactionId.POST /p/api/v1.0/steam/payuses thattransactionIdto charge SIH balance and complete the refill.
The transactionId is bound to the API key owner and expires after 1 hour.
Base URL
text
https://core.steaminventoryhelper.comhttps://core.steaminventoryhelper.comAuthentication
Send the user's public API key in the api-key header:
http
api-key: <USER_API_KEY>
content-type: application/jsonapi-key: <USER_API_KEY>
content-type: application/jsonThe API key must be:
- generated by the user;
- enabled by the user;
- not disallowed by an administrator;
- owned by a user account that is not locked.
Authentication failures return JSON errors, for example:
json
{
"success": false,
"error": "No API key provided"
}{
"success": false,
"error": "No API key provided"
}Other possible authentication errors include:
Unauthorized: invalid API key.Unauthorized: user is locked by administrator.Access denied: the API key is disabled, enable it in your account settings.Access denied: API key disabled by the administrator.Access denied: API key disabled by the administrator. Comment: <admin comment>
Rate Limit
Each endpoint is limited independently to 1 request per 10 seconds per authenticated user. For example, check and pay have separate limits for the same user.
Rate limit response:
json
{
"success": false,
"error": "Rate limit exceeded",
"retryAfter": 10
}{
"success": false,
"error": "Rate limit exceeded",
"retryAfter": 10
}Step 1: Check Steam Account
http
POST /p/api/v1.0/steam/checkPOST /p/api/v1.0/steam/checkValidates a Steam account name and creates a short-lived transactionId for the payment step.
Request Body
json
{
"steamUsername": "igb53"
}{
"steamUsername": "igb53"
}Fields:
steamUsername(string, required): Steam profile name. It is trimmed before use, must be non-empty, and must be at most 64 characters.
Example Request
bash
curl 'https://core.steaminventoryhelper.com/p/api/v1.0/steam/check' \
-H 'content-type: application/json' \
-H 'api-key: <USER_API_KEY>' \
--data-raw '{"steamUsername":"igb53"}'curl 'https://core.steaminventoryhelper.com/p/api/v1.0/steam/check' \
-H 'content-type: application/json' \
-H 'api-key: <USER_API_KEY>' \
--data-raw '{"steamUsername":"igb53"}'Success Response
json
{
"success": true,
"message": "Steam account found successfully",
"transactionId": "d34cb700-fcf9-4cab-89b1-7a6b552a0df5"
}{
"success": true,
"message": "Steam account found successfully",
"transactionId": "d34cb700-fcf9-4cab-89b1-7a6b552a0df5"
}Save transactionId; it is required by POST /p/api/v1.0/steam/pay.
Error Responses
Invalid steamUsername:
json
{
"success": false,
"error": "steamUsername cannot be empty"
}{
"success": false,
"error": "steamUsername cannot be empty"
}Steam account not found or rejected by the payment provider:
json
{
"success": false,
"message": "Steam account not found"
}{
"success": false,
"message": "Steam account not found"
}Service configuration or internal errors:
json
{
"success": false,
"error": "Internal server error"
}{
"success": false,
"error": "Internal server error"
}Step 2: Pay From SIH Balance
http
POST /p/api/v1.0/steam/payPOST /p/api/v1.0/steam/payCharges the user's SIH balance and sends the refill payment to Steam through the payment provider.
The request must use a transactionId returned by POST /p/api/v1.0/steam/check for the same API key owner.
Request Body
json
{
"steamUsername": "igb53",
"amount": 50,
"currency": "RUB",
"transactionId": "d34cb700-fcf9-4cab-89b1-7a6b552a0df5"
}{
"steamUsername": "igb53",
"amount": 50,
"currency": "RUB",
"transactionId": "d34cb700-fcf9-4cab-89b1-7a6b552a0df5"
}Fields:
steamUsername(string, required): Same Steam account name used in the check step.amount(number, required): Refill amount in RUB.currency(string, required): Must beRUB.transactionId(string, required): Value returned by the check step. Must be 10 to 100 characters and not expired.extended(boolean, optional): Accepted by schema but not used by the current payment logic.
Amount limits:
- minimum:
50 RUB; - maximum:
9433 RUB.
The balance charge includes the refill amount converted to USD plus a 6% commission. The endpoint also applies cashback: default 0.5% of the converted refill amount, or the user's active Steam refill promo code bonus if present.
Example Request
bash
curl 'https://core.steaminventoryhelper.com/p/api/v1.0/steam/pay' \
-H 'content-type: application/json' \
-H 'api-key: <USER_API_KEY>' \
--data-raw '{"steamUsername":"igb53","amount":50,"currency":"RUB","transactionId":"d34cb700-fcf9-4cab-89b1-7a6b552a0df5"}'curl 'https://core.steaminventoryhelper.com/p/api/v1.0/steam/pay' \
-H 'content-type: application/json' \
-H 'api-key: <USER_API_KEY>' \
--data-raw '{"steamUsername":"igb53","amount":50,"currency":"RUB","transactionId":"d34cb700-fcf9-4cab-89b1-7a6b552a0df5"}'Success Response
json
{
"status": "success",
"message": "Payment completed successfully",
"paymentAmount": 50,
"cashback": 0.003
}{
"status": "success",
"message": "Payment completed successfully",
"paymentAmount": 50,
"cashback": 0.003
}Response fields:
status:successwhen payment is completed.message: Human-readable result.paymentAmount: Paid refill amount in RUB.cashback: Cashback credited to SIH balance in USD.
Idempotency
A successful transactionId is marked as used for 24 hours.
If the same transactionId is submitted again, the API attempts to return the existing successful payment instead of charging the balance again.
Example idempotent response:
json
{
"status": "success",
"message": "Payment already completed",
"paymentAmount": 0.047,
"commission": 0.003,
"cashback": 0
}{
"status": "success",
"message": "Payment already completed",
"paymentAmount": 0.047,
"commission": 0.003,
"cashback": 0
}Error Responses
Invalid or expired transactionId:
json
{
"success": false,
"error": "Invalid or expired transactionId"
}{
"success": false,
"error": "Invalid or expired transactionId"
}transactionId belongs to another user:
json
{
"success": false,
"error": "TransactionId does not belong to this user"
}{
"success": false,
"error": "TransactionId does not belong to this user"
}Invalid amount:
json
{
"success": false,
"error": "Minimum amount is 50 RUB"
}{
"success": false,
"error": "Minimum amount is 50 RUB"
}Unsupported currency:
json
{
"success": false,
"error": "Only RUB currency is supported"
}{
"success": false,
"error": "Only RUB currency is supported"
}Not enough SIH balance:
json
{
"success": false,
"error": "Not enough balance",
"balance": 1.25,
"required": 2.4
}{
"success": false,
"error": "Not enough balance",
"balance": 1.25,
"required": 2.4
}Temporary cache or transaction validation problem:
json
{
"success": false,
"error": "Service temporarily unavailable, please try again"
}{
"success": false,
"error": "Service temporarily unavailable, please try again"
}Payment provider failure:
json
{
"success": false,
"error": "Payment failed"
}{
"success": false,
"error": "Payment failed"
}Status Codes
200: Request processed. Some provider validation failures may still returnsuccess: false.400: Invalid input, invalid transaction, not enough balance, or payment provider failure.401: Missing or invalid API key.403: API key/user is not allowed, account is locked, or transaction belongs to another user.429: Rate limit exceeded.500: Internal service error or currency rate error.503: Temporary cache/transaction validation failure.
Integration Notes
- Always call
checkimmediately beforepay. - Do not reuse a
transactionIdfor a different Steam account, amount, user, or API key. - Retry
paywith the sametransactionIdonly when the previous request timed out or the client did not receive a response. - The SIH balance is charged only after the transaction ownership, rates, amount, and balance checks pass.