Skip to content

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:

  1. POST /p/api/v1.0/steam/check validates the Steam account and returns a transactionId.
  2. POST /p/api/v1.0/steam/pay uses that transactionId to 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.com
https://core.steaminventoryhelper.com

Authentication

Send the user's public API key in the api-key header:

http
api-key: <USER_API_KEY>
content-type: application/json
api-key: <USER_API_KEY>
content-type: application/json

The 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/check
POST /p/api/v1.0/steam/check

Validates 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/pay
POST /p/api/v1.0/steam/pay

Charges 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 be RUB.
  • 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: success when 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 return success: 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 check immediately before pay.
  • Do not reuse a transactionId for a different Steam account, amount, user, or API key.
  • Retry pay with the same transactionId only 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.