API documentation

Bondom Account public API, version 1.

Get an API key

Base URL

https://skshopping.store/api/v1

All responses are JSON. The API version is in the path, so /api/v1 will not change shape underneath you.

Authentication

Send your key on every request, either way:

Authorization: Bearer bk_live_xxxxxxxx_yyyyyyyyyyyy
X-API-Key: bk_live_xxxxxxxx_yyyyyyyyyyyy

Keys are shown once at creation and stored only as a hash — we cannot recover one for you. Treat a key like a password: keep it server-side, never in browser or mobile code, and revoke it immediately if it leaks.

Scopes

read Read products, stock and your own account
orders Create orders and pay them from your wallet
sms Rent SMS numbers and read their codes

Rate limits

60 requests per minute per key, on a sliding window. Every response carries your current position:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 60

Exceeding it returns 429 with a Retry-After header. Back off for that many seconds rather than retrying immediately.

Endpoints

Method Path Scope Description
GET /ping — Health check, no authentication
GET /me read Your account and wallet balance
GET /products read List products (filters: category, in_stock_only)
GET /products/{id} read One product
POST /orders orders Buy a product using your wallet balance
GET /orders read Your orders
GET /orders/{id} read One order, with delivered items
GET /sms/countries sms Available SMS numbers and prices
POST /sms/orders sms Rent an SMS number
GET /sms/orders/{id} sms Poll an SMS order for its code

Example: buy a product

Purchases are paid from your wallet balance — top up at /wallet. There is no card flow in the API.

Request

POST https://skshopping.store/api/v1/orders
X-API-Key: bk_live_xxxxxxxx_yyyyyyyyyyyy
Content-Type: application/json

{"product_id": 2, "quantity": 1}

Response 201

{
  "id": 42,
  "status": "delivered",
  "total_price": "0.01",
  "created_at": "2026-07-26T10:15:00",
  "items": ["user@example.com|password123"]
}

Example: rent an SMS number

Rentals are charged to your wallet the moment the number is issued. If no code arrives within the delivery window the rental is refunded to your wallet automatically — you do not need to ask.

Supported countries

Availability and pricing change often, so treat this table as a snapshot and read GET /sms/countries at runtime rather than hardcoding it. Not every country is offered for every service.

country_code is the ISO 3166-1 alpha-2 code and is case-insensitive. Requesting a country a service does not offer returns 400 sms_order_failed, with the reason in message.

Request — list what is available

GET https://skshopping.store/api/v1/sms/countries?service=facebook
X-API-Key: bk_live_xxxxxxxx_yyyyyyyyyyyy

Response 200

[
  {"country": "United States", "code": "US", "price": "0.06", "success_rate": 0.92},
  {"country": "Cambodia",      "code": "KH", "price": "0.06", "success_rate": 0.88},
  {"country": "Hong Kong",     "code": "HK", "price": "0.07", "success_rate": null}
]

success_rate is the recent delivery rate, or null when there is not enough history yet. Prefer a country with a high rate when you have a choice.

Request — rent a Hong Kong number

POST https://skshopping.store/api/v1/sms/orders
X-API-Key: bk_live_xxxxxxxx_yyyyyyyyyyyy
Content-Type: application/json

{"service": "facebook", "country_code": "HK"}

Response 201

{
  "id": 128,
  "service": "facebook",
  "country": "hk",
  "phone": "85260123456",
  "status": "waiting_sms",
  "price": "0.07",
  "code": ""
}

Poll for the code

GET https://skshopping.store/api/v1/sms/orders/128
X-API-Key: bk_live_xxxxxxxx_yyyyyyyyyyyy

{"id": 128, "status": "completed", "code": "123456", ...}

Poll every few seconds, not in a tight loop — polling counts against your rate limit. status settles on completed, refunded or failed.

Errors

Every failure uses the same shape, so you only need one handler:

{
  "error": {
    "code": "insufficient_balance",
    "message": "Wallet balance $0.50 is short of $10.00.",
    "status": 402,
    "request_id": "9f2c1a77b0e34d18"
  }
}

Quote the request_id in any support message — it identifies the exact call in our logs.

Status Code Meaning
400 invalid_service A parameter was not valid
401 missing_api_key No key was sent
401 invalid_api_key Key is wrong or revoked
402 insufficient_balance Wallet balance too low — top up
403 insufficient_scope Key lacks the required scope
403 account_suspended The account is suspended
404 product_not_found No such product
404 order_not_found No such order, or not yours
409 out_of_stock Not enough stock left
429 rate_limit_exceeded Slow down; see Retry-After
400 sms_order_failed SMS rental could not be created — see message
503 provider_unavailable SMS provider is down

SDK examples

curl -X POST https://skshopping.store/api/v1/orders \
  -H "X-API-Key: $BONDOM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product_id": 2, "quantity": 1}'

Sign in with Telegram

No password. Your wallet and orders are the same here and in the Telegram bot.

Telegram asks to let the bot message you. That is how your items reach your chat.