HUMKTDevelopers API v1
Back to store Log in
REST · JSON · v1

API Reference

Integrate products, SMS verification, social media services and proxies over HTTP. The API shares the balance and orders of your website account.

Base URL

https://www.humkt.cn/api/v1

Auth header

Authorization: Bearer <token>

Your API token

Log in to viewLog inSign up

Log in to see your token here. No account yet? Sign up — the API shares your website balance.

  1. Generate an API token on your profile page (Generate)
  2. Send the Authorization header with every request
  3. Call “Get balance” to verify, then integrate

Basics

Base URL: https://www.humkt.cn/api/v1 HTTPS only. Send GET parameters in the query string and POST bodies as application/x-www-form-urlencoded (the examples use --data-urlencode) or JSON. Sending Accept: application/json on every request is recommended. Examples: first run export TOKEN='your token' in your shell (the token is shown above, hidden by default). IDs, links and order numbers in the examples are made up — replace them with your own. Nothing on this page is executed automatically; order examples charge real money once you run them. Send boolean parameters as 1 or 0. Amounts are in CNY. Balance and most SMS/SMM/proxy amounts are 2-decimal strings; SMM rate is a 4-decimal string; legacy product orders return total_amount / snapshot_price and SMM batch returns created[].price as numbers. Parse each field by its actual type. Times: SMS/SMM/proxy mostly use Y-m-d H:i:s in the site's server time zone (same as the website); legacy product endpoints return created_at / updated_at as ISO 8601 with offset.

Authentication

Every request must be authenticated with one of the following (if several are sent, the first non-empty one wins in the order parameter → X-Api-Token → Bearer): ① Header Authorization: Bearer <token> (recommended; used in all examples) ② Header X-Api-Token: <token> ③ Parameter token=<token> (in a query string it ends up in access logs and history; not recommended) The token must be a string; a missing, wrong or array-valued token returns 401 UNAUTHORIZED. Restricted or frozen accounts get 403 ACCOUNT_RESTRICTED; if the API is switched off you get 503 SERVICE_DISABLED. The token row in parameter tables means "authentication required" and can be replaced by a header; it is not a business parameter.

Responses & errors

SMS / SMM / proxy: success is {"code":1,"message":"OK","data":…}; list endpoints also return meta (pagination). On failure code is 0, error is a machine-readable code and message is a (Chinese) text, with a matching HTTP status. Branch on error, not on message. A failure may carry retryable=true: nothing was charged and retrying later with the same parameters may succeed (busy, maintenance, line temporarily unavailable). If it carries data, that is the order this failure produced (already refunded, refunded=true). Account and product endpoints (legacy, unchanged for existing clients): authentication, rate-limit and disabled errors are the same as above (401 / 403 / 429 / 503 with error), but business failures (out of stock, insufficient balance, order not found, not a selectable product, …) still return HTTP 200 with code=0 and only a message, no error. Malformed parameters return the framework's native 422 {"message":…,"errors":{…}}; an unknown product returns 404.
HTTPerrorMeaning
401UNAUTHORIZEDToken missing, wrong or not a string
403ACCOUNT_RESTRICTEDAccount restricted or frozen
422VALIDATION_ERRORInvalid parameters
402INSUFFICIENT_BALANCEInsufficient balance, nothing charged
409PRICE_CHANGEDPrice changed, nothing charged. SMS / email max_price rejections include the current unit price in price; proxy max_amount rejections include the current total in amount; SMM batch includes the current total in total; other cases may carry no price field — re-query the price
404NOT_FOUNDNot found (or not yours)
422OUT_OF_STOCKOut of stock, nothing charged
429RATE_LIMITEDToo many requests; retry after Retry-After seconds
409DUPLICATE_IN_PROGRESSA request with the same order_ref is still processing; retry later with the same value
503SERVICE_DISABLEDAPI or feature temporarily disabled
422ORDER_FAILEDOrder failed. Nothing charged, or charged then rejected and refunded automatically (then data is included with refunded=true). Retry later if retryable=true
422NOT_AVAILABLEThis service / country / mailbox type cannot be bought right now; nothing charged
409 / 422CANCEL_FAILED / CANCEL_NOT_AVAILABLECannot cancel now (code already received, delivery started, too soon after ordering, …); nothing refunded. See cancel_in (SMS) or can_cancel (SMM)
422REFILL_NOT_AVAILABLERefill not available now; see can_refill / refill_available_at / warranty on the order
503UPSTREAM_UNAVAILABLECatalog or stock temporarily unavailable; retry later (nothing charged)

Rate limits & retries

Limits are counted per token and per endpoint (per minute); see the table below. Read endpoints that are not listed allow 300 per minute, and all endpoints together allow about 900 per minute per IP. Exceeding a limit returns 429 RATE_LIMITED with Retry-After, X-RateLimit-Limit and X-RateLimit-Remaining headers; back off by Retry-After. Never blindly resend an order after a network timeout. Duplicate protection differs per endpoint: · Proxy purchase: idempotency_key is required and stored on the order. Retrying with the same value returns the same order and never charges twice (including orders that returned 202). · SMS numbers and single SMM orders: optional order_ref. Within 24 h the same order_ref returns the original order; while the first request is still running you get 409 DUPLICATE_IN_PROGRESS — retry later with the same value. This is best-effort: if a server process crashes or a request runs longer than the lock (SMS 90 s, SMM 60 s) exactly-once is not guaranteed, so check your order list before retrying. · Product orders, SMM batch orders and proxy renewals have no persistent idempotency and are not safe to retry blindly. After a timeout first check whether it succeeded (products: "My orders" on the website; SMM: /smm/orders; renewals: expiry in /proxy/list). The 10-second renewal cooldown only stops double clicks and is not idempotency; do not retry a renewal that returned 202.
EndpointPer minute
POST /orders120
GET /products/{id}/items30
POST /sms/orders · GET /sms/lines60
GET /sms/orders/{id}120
POST /sms/orders/{id}/cancel · POST /sms/orders/{id}/resend60
GET /sms/orders/{id}/resend30
POST /mail/orders · POST /mail/orders/{order}/again60 (plus 30 orders per account per hour)
GET /mail/orders/{order}120
POST /mail/orders/{order}/cancel60
POST /smm/orders120
POST /smm/orders/batch20
POST /smm/orders/{order}/refill · /cancel60
POST /proxy/orders · POST /proxy/renew30
GET /proxy/price · GET /proxy/renew-price20 (shared by both)
GET /proxy/cities10
Other read endpoints300

Account

1 endpoint

Get balance

GET /api/v1/balance

Account balance in CNY as a 2-decimal string, shared by all services.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
curl -sS -G 'https://www.humkt.cn/api/v1/balance' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "message": "OK",
  "code": 1,
  "data": {
    "balance": "125.53"
  }
}

Products

7 endpoints
These are legacy endpoints: business failures return HTTP 200 with code=0 (only message) and malformed parameters return the framework's native 422 — see Responses & errors. Buying specific accounts (selectable products) ① Check is_selectable: only true allows picking. With selectable_mode=required you must pick; with optional you may pick or omit account_ids for random delivery. Products with is_selectable=false (including randomly delivered Telegram accounts) are ordered directly; account_ids is rejected. ② Page through GET /products/{id}/items and keep the account_ids you want (valid 30 minutes, price locked). ③ Call POST /orders with comma-separated account_ids and qty equal to their count (max 50 per order). The total is the sum of the chosen prices, not the product's list price. ④ Platform stock is delivered instantly; integrated accounts are delivered asynchronously (status=processing) — poll GET /orders/{trx}. If a chosen account was taken or became invalid by delivery time, only that account's price is refunded (refunded_qty increases); it is never replaced with another account. A failed order (code=0) is never charged; on "expired" or "already purchased" messages, call items again and re-pick.

List categories

GET /api/v1/categories

count covers listed, in-stock products only; a parent is the sum of its children.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
flat 0|1 No 1 for a flat list (with parent_id); default 0 = tree
curl -sS -G 'https://www.humkt.cn/api/v1/categories' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "message": "OK",
  "code": 1,
  "data": [
    {
      "id": 1,
      "name": "Facebook",
      "parent_id": null,
      "icon": null,
      "created_at": "2025-01-02T03:04:05.000000Z",
      "children": [
        {
          "id": 5,
          "name": "Facebook 老号",
          "parent_id": 1,
          "icon": null,
          "created_at": "2025-01-03T03:04:05.000000Z",
          "children": [],
          "count": 120
        }
      ],
      "count": 120
    }
  ]
}

List products

GET /api/v1/products

Paginated purchasable products. Groups (is_group=true) cannot be ordered directly; use a child id. Use is_selectable / selectable_mode to decide whether you must pick accounts first (see \"Buying specific accounts\" above). Selectable products priced per account may show price 0.00; the real price comes from items. max_qty=0 means no limit. description is plain text, up to 500 characters (Get product returns the full text).

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
q string No Keyword (name and description)
category_id integer No Filter by category
in_stock 0|1 No 1 = in stock only (default), 0 = include out of stock
seller_type string No self = platform, seller = third-party sellers
sort string No price_asc (default) | price_desc | created_at_desc
include string No Comma-separated: children, categories; when omitted both fields are empty arrays
page integer No Page, default 1
per_page integer No Items per page, default 50, max 100
all 0|1 No 1 returns every product in one response without paging (per_page=all also works). Large response — call it at most every few minutes; use paging otherwise
curl -sS -G 'https://www.humkt.cn/api/v1/products' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'category_id=5' \
  --data-urlencode 'per_page=50'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "id": 231,
      "name": "Instagram 老号",
      "price": "10.50",
      "in_stock": 50,
      "min_qty": 1,
      "max_qty": 100,
      "is_group": false,
      "is_selectable": false,
      "selectable_mode": null,
      "maintenance": false,
      "image_url": null,
      "description": "2020 年注册,带邮箱",
      "seller_type": "self",
      "seller_id": null,
      "categories": [],
      "children": []
    },
    {
      "id": 28014,
      "name": "TikTok 自选号",
      "price": "0.00",
      "in_stock": 12,
      "is_selectable": true,
      "selectable_mode": "required",
      "min_qty": 1,
      "max_qty": 100,
      "is_group": false,
      "maintenance": false,
      "image_url": null,
      "description": "2020 年注册,带邮箱",
      "seller_type": "self",
      "seller_id": null,
      "categories": [],
      "children": []
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 50,
    "total": 123,
    "last_page": 3
  }
}

Get product

GET /api/v1/products/{id}

Full description. Pass include=children,categories to get child products or categories (not included by default; both are empty arrays). Unknown or unlisted products return 404.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
id integer Yes Product id (path)
include string No children, categories (comma-separated)
curl -sS -G 'https://www.humkt.cn/api/v1/products/231' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'include=children,categories'
Response
{
  "message": "OK",
  "code": 1,
  "data": {
    "categories": [
      {
        "id": 5,
        "name": "Facebook 老号",
        "parent_id": 1
      }
    ],
    "children": [],
    "id": 231,
    "name": "Instagram 老号",
    "price": "10.50",
    "in_stock": 50,
    "min_qty": 1,
    "max_qty": 100,
    "is_group": false,
    "is_selectable": false,
    "selectable_mode": null,
    "maintenance": false,
    "image_url": null,
    "description": "2020 年注册,带邮箱",
    "seller_type": "self",
    "seller_id": null
  }
}

List selectable accounts

GET /api/v1/products/{id}/items

Only for is_selectable=true (other products return HTTP 200 with code=0). Each row carries an account_id, which is the price quote for that account: the price is locked when you list it, valid for 30 minutes, usable only by you (the account behind the token) and void once an order succeeds. Up to your 500 most recent account_ids per product are kept; very deep paging expires older ones. Sold accounts and accounts that recently failed to purchase are left out, so a page may hold fewer than per_page rows — use meta.has_more to decide whether to fetch the next page. Extra fields depend on the platform; see Response fields below. If the account catalog is temporarily unavailable you get HTTP 200 with code=0; retry later.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
id integer Yes Product id (path)
page integer No Page 1–50, default 1
per_page integer No 1–40, default 40. Some products always use 40; see meta.per_page
Response fields
FieldApplies toDescription
account_idAllToken to pass in account_ids (not the platform account id)
usernameAllPublic username; null when unknown, masked on some products (e.g. ab***yz)
profile_urlAllPublic profile link, may be null
price / currencyAllLocked price for this account (2-decimal string, CNY). Order total = sum of the chosen prices
countryMost platforms (absent on platform-stock selectable products)ISO 3166 alpha-2 code (upper case), null if unknown
followers / likes / videosTikTokFollowers / likes / videos
followers / postsInstagramFollowers / posts
premium / premium_expiresTelegramPremium flag / premium expiry (ISO 8601, null if not premium)
session_days / id_lengthTelegramDays since the session was created / digits in the user id (fewer digits = older account)
has_2fa / spam_blockTelegramTwo-step password set / restricted from messaging strangers
service / planAI accounts (ChatGPT / Grok …)Service (chatgpt / grok / claude …) / plan name (e.g. ChatGPT Plus, SuperGrok; Free for no subscription)
subscription_ends / auto_renewAI accountsSubscription expiry (ISO 8601, null without a plan) / auto-renew flag
registered_at / usage_percent / balanceAI accountsRegistration time (ISO 8601) / quota used in percent (0–100, null if unknown) / API credit balance (USD, null if unknown)
has_email / email_domain / has_phone / cookie_onlyAI accountsEmail access included / email domain / phone linked / cookie-only login (no password)
not_sold_beforeAI accountsNever sold before
date, year, followers, follows, following, posts, likes, videos, blue, has_phone, has_twofa / has_2fa, has_email / has_mail, has_cookieOther platforms (X, …)Registration date, followers, following, posts, verified badge, phone / 2FA / email attached, etc. Only fields the account actually has are returned
meta.has_more / raw_totalAllWhether another page exists / approximate total matching accounts (includes filtered ones; informational)
meta.pool_ttlAllaccount_id lifetime in seconds
curl -sS -G 'https://www.humkt.cn/api/v1/products/28014/items' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'page=1'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "account_id": "acc_5f8a3c1e9b7d4a2f6e0c8b1d3a5f7e9c",
      "username": "user1445",
      "profile_url": "https://www.tiktok.com/@user1445",
      "price": "3.50",
      "currency": "CNY",
      "country": "US",
      "followers": 1234,
      "likes": 5600,
      "videos": 18
    },
    {
      "account_id": "acc_0c2e7b9d1f4a6c8e3b5d7f9a1c3e5b7d",
      "username": "kate.mov",
      "profile_url": "https://www.tiktok.com/@kate.mov",
      "price": "4.20",
      "currency": "CNY",
      "country": null,
      "followers": 3080,
      "likes": 41200,
      "videos": 52
    }
  ],
  "meta": {
    "product_id": 28014,
    "selectable_mode": "required",
    "current_page": 1,
    "per_page": 40,
    "has_more": true,
    "raw_total": 86,
    "pool_ttl": 1800
  }
}

Batch prices

GET /api/v1/prices

Current price and stock for up to 300 products; unknown or unlisted ids are omitted.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
ids string Yes Comma-separated ids, e.g. 231,232
curl -sS -G 'https://www.humkt.cn/api/v1/prices' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'ids=231,232'
Response
{
  "message": "OK",
  "code": 1,
  "data": [
    {
      "id": 231,
      "price": "10.50",
      "in_stock": 50,
      "min_qty": 1,
      "max_qty": 100,
      "updated_at": "2026-09-24T13:10:03+00:00"
    }
  ]
}

Create order

POST /api/v1/orders

Paid from balance. If platform stock is below qty the whole order is rejected and nothing is charged; platform stock delivers instantly (status=shipped), integrated items asynchronously (status=processing) — poll with the returned trx. No persistent idempotency: after a timeout do not resend; check "My orders" on the website first. The status=processing returned here shows up as pending in Get order. Do not send currency.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
id integer Yes Product id (use a child id for groups)
qty integer Yes Quantity within min_qty–max_qty
account_ids string No For selectable products: comma-separated account_ids from the items endpoint; count must equal qty, max 50. Required when selectable_mode=required, optional otherwise (random delivery), not allowed when is_selectable=false. E.g. acc_5f8a…,acc_0c2e…
Common order failures (HTTP 200 with code=0, nothing charged)
messageCause / what to do
Для этого продукта сначала нужно указать конкретный аккаунт…selectable_mode=required but account_ids is missing
qty (x) должен быть равен количеству account_ids (y)qty does not match the number of account_ids
За один раз можно выбрать до 50 аккаунтовMore than 50 per order; split into several orders
Информация об аккаунте устарела… / Некоторые account_ids устарели или недействительны…account_id older than 30 minutes, not fetched by you, or evicted by later paging. Call items again
В account_ids есть дублирующиеся аккаунтыThe same account was passed twice
Некоторые из выбранных аккаунтов уже куплены…Some accounts were just bought by someone else. Call items again and re-pick
Товар отправляется случайным образом, выбор аккаунта не поддерживается…account_ids sent for an is_selectable=false product; remove it
Товар временно отсутствует, попробуйте позжеSupply temporarily unavailable (restocking or maintenance); retry later
Товар на обслуживании, временно недоступен для покупкиProduct under maintenance (maintenance=true); skip it for now
Продавец этого товара находится в отпуске, продажи приостановленыThe seller is on vacation; sales paused
Этот товар — Группа товаров, нельзя оформить заказ напрямую…Ordered a product group. The response includes data.is_group=true and data.variants (child id, name, price, in_stock); order a child id instead
Минимум для покупки — N шт. / максимум можно купить — N шт.qty outside min_qty–max_qty (max_qty=0 means no limit)
В наличии 0, невозможно купить / недостаточно товара, осталось всего N шт.Not enough stock for qty; nothing ordered
Недостаточно средств на балансе, невозможно завершить покупкуInsufficient balance
Вы не можете использовать баланс кошелька для покупки этого типа товаровThis kind of product cannot be paid from balance; buy it on the website with another payment method
Соблюдайте ограничения по оплате. Минимальная сумма платежа: X юанейOrder total below the minimum payment amount; increase qty
curl -sS -X POST 'https://www.humkt.cn/api/v1/orders' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'id=231' \
  --data-urlencode 'qty=1'
Response
{
  "message": "下单成功",
  "code": 1,
  "data": {
    "trx": "AJS1Y6IURTYZ",
    "order_id": 123,
    "id": 123,
    "product_id": 231,
    "total_amount": 10.5,
    "qty": 1,
    "snapshot_name": "Instagram 老号",
    "snapshot_price": 10.5,
    "status": "processing",
    "status_label": "发货中",
    "delivered": 0,
    "created_at": "2026-09-24T13:10:03.000000Z"
  }
}

Get order

GET /api/v1/orders/{trx}

status: pending / partial / shipped / refunded (fully) / unpaid.<br>items holds the delivered data and is returned only for paid orders that are not fully refunded; after a partial refund the returned accounts disappear from items (refunded_qty and refunded_amount go up).<br>refund_state: none / partial / full. delivery_type: auto / manual (delivered by the seller). after_sales_until: end of the after-sales window (ISO 8601), null if the product has none.<br>Unknown orders return HTTP 200 with code=0.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
trx string Yes trx from order creation (or order id), in the path
curl -sS -G 'https://www.humkt.cn/api/v1/orders/AJS1Y6IURTYZ' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "message": "OK",
  "code": 1,
  "data": {
    "trx": "AJS1Y6IURTYZ",
    "order_id": 123,
    "status": "shipped",
    "status_label": "已发货",
    "qty": 1,
    "delivered": 1,
    "refunded_qty": 0,
    "items": [
      "login:password"
    ],
    "product_id": 231,
    "product_name": "Instagram 老号",
    "amount": "10.50",
    "refunded_amount": "0.00",
    "refund_state": "none",
    "delivery_type": "auto",
    "after_sales_until": "2026-09-25T13:10:03+08:00",
    "created_at": "2026-09-24T13:10:03+08:00"
  }
}

SMS verification

11 endpoints
Flow: /sms/services → /sms/countries → (optional) /sms/lines → POST /sms/orders to get a number → poll /sms/active every 3–5 s for the code. If no code arrives you can cancel for a full refund; numbers that time out are cancelled and refunded automatically. Orders that received a code are not refundable.

List services

GET /api/v1/sms/services

Apps and sites you can receive codes for. min_price is the lowest price across countries. If the catalog is temporarily unavailable you get 503 UPSTREAM_UNAVAILABLE (not an empty list).

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
q string No Search keyword
curl -sS -G 'https://www.humkt.cn/api/v1/sms/services' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'q=telegram'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "id": 907,
      "name": "Telegram",
      "popular": true,
      "min_price": "2.16",
      "country_count": 158
    }
  ],
  "meta": {
    "count": 1,
    "currency": "CNY"
  }
}

Countries & prices

GET /api/v1/sms/countries

Countries for a service, in-stock first. price–price_max is the range across in-stock lines; stock is indicative.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
service_id integer Yes Service id
curl -sS -G 'https://www.humkt.cn/api/v1/sms/countries' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'service_id=907'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "id": 1,
      "name": "美国",
      "code": "us",
      "price": "10.80",
      "price_max": "11.56",
      "success_rate": 45,
      "stock": 7954,
      "voice": true,
      "recommended": true
    }
  ],
  "meta": {
    "count": 1,
    "currency": "CNY"
  }
}

Lines

GET /api/v1/sms/lines

Number lines for a service and country, in-stock first and cheapest first (line A). If you omit line when ordering, the cheapest in-stock line is used.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
service_id integer Yes Service id
country_id integer Yes Country id
curl -sS -G 'https://www.humkt.cn/api/v1/sms/lines' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'service_id=907' \
  --data-urlencode 'country_id=1'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "line": 19,
      "label": "线路 A",
      "price": "10.80",
      "success_rate": 30,
      "stock": 1104,
      "available": true,
      "areacode": false
    }
  ],
  "meta": {
    "currency": "CNY"
  }
}

Get a number

POST /api/v1/sms/orders

Charges and returns the number. Nothing is charged on out-of-stock, insufficient balance (402) or a price above max_price (409 with the current unit price). With quantity > 1 each number is billed and cancellable separately; if some are out of stock only the obtained numbers are returned, message starts with 部分成功 (partial success) and meta.obtained is the number obtained.<br>Other failures (nothing charged, HTTP 422): NOT_AVAILABLE service not sold in this country; VOICE_UNAVAILABLE no voice in this country; ORDER_FAILED could not get a number (with retryable=true the service is busy or under maintenance — retry later).<br>Repeating an order_ref returns the original order: message 已受理相同请求 and duplicate=true at the top level.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
service_id integer Yes Service id
country_id integer Yes Country id
line integer No Line from /sms/lines; defaults to the cheapest in-stock line
max_price number No Maximum unit price; returns 409 PRICE_CHANGED if higher
activation_type string No SMS (default) / VOICE (some countries only) / FLASH
areacode string No Area code (when the line supports it)
quantity integer No Numbers to get, 1–10, default 1
order_ref string No Your reference (≤64 chars, or header X-Idempotency-Key). Within 24 h the same order_ref returns the original order; best-effort, see Rate limits & retries
curl -sS -X POST 'https://www.humkt.cn/api/v1/sms/orders' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'service_id=907' \
  --data-urlencode 'country_id=1' \
  --data-urlencode 'max_price=12' \
  --data-urlencode 'order_ref=C10086'
Response
{
  "code": 1,
  "message": "下单成功",
  "data": [
    {
      "id": 58231,
      "tracking": "SMS2609245K3JQ1",
      "phone": "12025550123",
      "service_id": 907,
      "service_name": "Telegram",
      "country_id": 1,
      "country_name": "美国",
      "country_code": "us",
      "activation_type": "SMS",
      "price": "10.80",
      "status": "pending",
      "code": null,
      "full_sms": null,
      "sms_history": [],
      "time_left": 1199,
      "awaiting_resend": false,
      "refunded": false,
      "finished": false,
      "reason": null,
      "created_at": "2026-09-24 21:10:03",
      "dial_code": "1",
      "expires_at": "2026-09-24 21:30:03",
      "cancel_in": 0
    }
  ],
  "meta": {
    "requested": 1,
    "obtained": 1,
    "balance": "89.20"
  }
}

Active numbers (poll)

GET /api/v1/sms/active

All your active numbers with their codes in one call. Poll every 3–5 s instead of polling orders one by one. received lists orders whose code just arrived.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
curl -sS -G 'https://www.humkt.cn/api/v1/sms/active' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "active": [
      {
        "status": "completed",
        "code": "48213",
        "full_sms": "Telegram code: 48213",
        "time_left": 903,
        "id": 58231,
        "tracking": "SMS2609245K3JQ1",
        "phone": "12025550123",
        "service_id": 907,
        "service_name": "Telegram",
        "country_id": 1,
        "country_name": "美国",
        "country_code": "us",
        "activation_type": "SMS",
        "price": "10.80",
        "sms_history": [],
        "awaiting_resend": false,
        "refunded": false,
        "finished": false,
        "reason": null,
        "created_at": "2026-09-24 21:10:03",
        "dial_code": "1",
        "expires_at": "2026-09-24 21:30:03",
        "cancel_in": 0
      }
    ],
    "received": [
      {
        "status": "completed",
        "code": "48213",
        "full_sms": "Telegram code: 48213",
        "time_left": 903,
        "id": 58231,
        "tracking": "SMS2609245K3JQ1",
        "phone": "12025550123",
        "service_id": 907,
        "service_name": "Telegram",
        "country_id": 1,
        "country_name": "美国",
        "country_code": "us",
        "activation_type": "SMS",
        "price": "10.80",
        "sms_history": [],
        "awaiting_resend": false,
        "refunded": false,
        "finished": false,
        "reason": null,
        "created_at": "2026-09-24 21:10:03",
        "dial_code": "1",
        "expires_at": "2026-09-24 21:30:03",
        "cancel_in": 0
      }
    ]
  }
}

Get SMS order

GET /api/v1/sms/orders/{id}

status: pending / completed / cancelled / expired / refunded / failed. refunded=true means the amount went back to your balance. expires_at is when the number expires and time_left the seconds left; cancel_in is how many seconds until it can be cancelled (0 = now); dial_code is the international calling code.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
id integer Yes Order id (path)
curl -sS -G 'https://www.humkt.cn/api/v1/sms/orders/58231' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "status": "completed",
    "code": "48213",
    "full_sms": "Telegram code: 48213",
    "time_left": 903,
    "id": 58231,
    "tracking": "SMS2609245K3JQ1",
    "phone": "12025550123",
    "service_id": 907,
    "service_name": "Telegram",
    "country_id": 1,
    "country_name": "美国",
    "country_code": "us",
    "activation_type": "SMS",
    "price": "10.80",
    "sms_history": [],
    "awaiting_resend": false,
    "refunded": false,
    "finished": false,
    "reason": null,
    "created_at": "2026-09-24 21:10:03",
    "dial_code": "1",
    "expires_at": "2026-09-24 21:30:03",
    "cancel_in": 0
  }
}

List SMS orders

GET /api/v1/sms/orders

Newest first, paginated.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
status string No active / pending / completed / cancelled / expired / refunded / failed
ids string No Comma-separated order ids, max 100
page integer No Page, default 1
per_page integer No Items per page, default 50, max 100
curl -sS -G 'https://www.humkt.cn/api/v1/sms/orders' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'status=active' \
  --data-urlencode 'per_page=50'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "id": 58231,
      "tracking": "SMS2609245K3JQ1",
      "phone": "12025550123",
      "service_id": 907,
      "service_name": "Telegram",
      "country_id": 1,
      "country_name": "美国",
      "country_code": "us",
      "activation_type": "SMS",
      "price": "10.80",
      "status": "pending",
      "code": null,
      "full_sms": null,
      "sms_history": [],
      "time_left": 1199,
      "awaiting_resend": false,
      "refunded": false,
      "finished": false,
      "reason": null,
      "created_at": "2026-09-24 21:10:03",
      "dial_code": "1",
      "expires_at": "2026-09-24 21:30:03",
      "cancel_in": 0
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 50,
    "total": 12,
    "last_page": 1
  }
}

Cancel & refund

POST /api/v1/sms/orders/{id}/cancel

Only orders without a code; full refund to balance. Right after purchase wait cancel_in seconds; on 422 CANCEL_FAILED wait a moment and retry.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
id integer Yes Order id (path)
curl -sS -X POST 'https://www.humkt.cn/api/v1/sms/orders/58231/cancel' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "已取消,款项已退回余额",
  "data": {
    "status": "cancelled",
    "refunded": true,
    "time_left": 0,
    "reason": "本人主动取消,已退款",
    "id": 58231,
    "tracking": "SMS2609245K3JQ1",
    "phone": "12025550123",
    "service_id": 907,
    "service_name": "Telegram",
    "country_id": 1,
    "country_name": "美国",
    "country_code": "us",
    "activation_type": "SMS",
    "price": "10.80",
    "code": null,
    "full_sms": null,
    "sms_history": [],
    "awaiting_resend": false,
    "finished": false,
    "created_at": "2026-09-24 21:10:03",
    "dial_code": "1",
    "expires_at": "2026-09-24 21:30:03",
    "cancel_in": 0
  }
}

Finish order

POST /api/v1/sms/orders/{id}/finish

Call after you got the code and no longer need the number; it leaves the active list. Otherwise it ends when the number expires. Orders without a code return 422 INVALID_STATE.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
id integer Yes Order id (path)
curl -sS -X POST 'https://www.humkt.cn/api/v1/sms/orders/58231/finish' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "已完成",
  "data": {
    "finished": true,
    "status": "completed",
    "code": "48213",
    "full_sms": "Telegram code: 48213",
    "time_left": 903,
    "id": 58231,
    "tracking": "SMS2609245K3JQ1",
    "phone": "12025550123",
    "service_id": 907,
    "service_name": "Telegram",
    "country_id": 1,
    "country_name": "美国",
    "country_code": "us",
    "activation_type": "SMS",
    "price": "10.80",
    "sms_history": [],
    "awaiting_resend": false,
    "refunded": false,
    "reason": null,
    "created_at": "2026-09-24 21:10:03",
    "dial_code": "1",
    "expires_at": "2026-09-24 21:30:03",
    "cancel_in": 0
  }
}

Resend availability

GET /api/v1/sms/orders/{id}/resend

Whether the number can receive another code, and the fee (free=true means no charge).

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
id integer Yes Order id (path)
curl -sS -G 'https://www.humkt.cn/api/v1/sms/orders/58231/resend' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "available": true,
    "free": false,
    "price": "2.30",
    "remaining": 2,
    "reason": null
  }
}

Request another code

POST /api/v1/sms/orders/{id}/resend

Charges the fee returned above (402 INSUFFICIENT_BALANCE if your balance is too low, nothing charged); then keep polling /sms/active. A failed resend returns 422 RESEND_FAILED (nothing charged).

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
id integer Yes Order id (path)
curl -sS -X POST 'https://www.humkt.cn/api/v1/sms/orders/58231/resend' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "已请求重新发送,请等待新验证码",
  "data": {
    "awaiting_resend": true,
    "status": "completed",
    "code": "48213",
    "full_sms": "Telegram code: 48213",
    "time_left": 903,
    "id": 58231,
    "tracking": "SMS2609245K3JQ1",
    "phone": "12025550123",
    "service_id": 907,
    "service_name": "Telegram",
    "country_id": 1,
    "country_name": "美国",
    "country_code": "us",
    "activation_type": "SMS",
    "price": "10.80",
    "sms_history": [],
    "refunded": false,
    "finished": false,
    "reason": null,
    "created_at": "2026-09-24 21:10:03",
    "dial_code": "1",
    "expires_at": "2026-09-24 21:30:03",
    "cancel_in": 0
  }
}

Email verification codes

7 endpoints
Flow: /mail/services to pick a platform and mailbox type → POST /mail/orders to get a private mailbox → register or bind it on that platform → poll /mail/active every 3–5 s; once the email arrives you get code and the email body text. If no code arrives you can cancel for a full refund; orders that expire without a code are cancelled and refunded automatically. Orders that received a code are not refundable. Use /again to receive a code from another platform on the same mailbox (each mailbox can receive each platform only once; repeating the same platform returns 422 USED). Each account has an hourly order limit (currently 30); contact support if you need more.

Platforms & mailbox types

GET /api/v1/mail/services

Platforms you can receive codes for (Facebook, Instagram, Google, TikTok, Telegram, X, Discord …) and, per platform, the mailbox types (domains) with price and stock. stock=0 means temporarily out of stock. 503 UPSTREAM_UNAVAILABLE if the catalog is temporarily unavailable.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
service_id integer No Only this platform
curl -sS -G 'https://www.humkt.cn/api/v1/mail/services' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'service_id=1'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "service_id": 1,
      "name": "Facebook",
      "slug": "facebook",
      "min_price": "0.04",
      "stock": 672289,
      "domains": [
        {
          "domain_id": 9,
          "domain": "outlook.com",
          "family": "outlook",
          "price": "0.04",
          "stock": 2085
        },
        {
          "domain_id": 3,
          "domain": "icloud.com",
          "family": "icloud",
          "price": "0.22",
          "stock": 35977
        }
      ]
    }
  ],
  "meta": {
    "count": 1,
    "currency": "CNY",
    "updated_at": "2026-10-16 10:19:40"
  }
}

Get a mailbox

POST /api/v1/mail/orders

Charges and returns a private mailbox (email); status=waiting means waiting for the code. Rarely the first response is status=pending (mailbox being assigned) — just keep polling.<br>Nothing is charged on: insufficient balance 402 INSUFFICIENT_BALANCE; out of stock 422 OUT_OF_STOCK; price above max_price 409 PRICE_CHANGED (with the current price); not available 422 NOT_AVAILABLE; ordering too fast 429 RATE_LIMITED; service busy 503 BUSY (retry later).<br>If it fails after charging, the amount is refunded automatically and the returned data has refunded=true.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
service_id integer Yes Platform id from /mail/services
domain_id integer Yes Mailbox type id (domain_id from that platform's domains)
max_price number No Maximum price; returns 409 PRICE_CHANGED if higher, nothing charged
order_ref string No Your reference (≤64 chars, or header X-Idempotency-Key). Within 24 h the same order_ref returns the original order
curl -sS -X POST 'https://www.humkt.cn/api/v1/mail/orders' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'service_id=1' \
  --data-urlencode 'domain_id=9' \
  --data-urlencode 'max_price=0.10' \
  --data-urlencode 'order_ref=C20088'
Response
{
  "code": 1,
  "message": "下单成功",
  "data": {
    "id": 1203,
    "tracking": "MAIL261016QNDTZR",
    "service": "Facebook",
    "service_slug": "facebook",
    "domain_id": 9,
    "domain": "outlook.com",
    "email": "[email protected]",
    "price": "0.04",
    "status": "waiting",
    "code": null,
    "subject": null,
    "text": null,
    "refunded": false,
    "parent_id": null,
    "time_left": 1185,
    "created_at": "2026-10-16 10:20:03",
    "expires_at": "2026-10-16 10:40:03",
    "received_at": null
  },
  "duplicate": false,
  "balance": "89.16"
}

Active mailboxes (poll)

GET /api/v1/mail/active

All your active orders plus those that received a code in the last 30 minutes, in one call. Poll this every 3–5 s instead of polling orders one by one. On arrival status=received, code is the verification code and text is the email body.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
curl -sS -G 'https://www.humkt.cn/api/v1/mail/active' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "status": "received",
      "code": "492817",
      "subject": "Facebook confirmation code",
      "text": "492817 is your Facebook confirmation code",
      "time_left": 0,
      "received_at": "2026-10-16 10:21:47",
      "id": 1203,
      "tracking": "MAIL261016QNDTZR",
      "service": "Facebook",
      "service_slug": "facebook",
      "domain_id": 9,
      "domain": "outlook.com",
      "email": "[email protected]",
      "price": "0.04",
      "refunded": false,
      "parent_id": null,
      "created_at": "2026-10-16 10:20:03",
      "expires_at": "2026-10-16 10:40:03"
    }
  ],
  "meta": {
    "count": 1
  }
}

Get mailbox order

GET /api/v1/mail/orders/{order}

status: pending (assigning) / waiting / received / canceled (refunded) / failed (refunded). refunded=true means the amount went back to your balance; time_left is the seconds left to wait for the code.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
order string Yes Order id or tracking number (path)
curl -sS -G 'https://www.humkt.cn/api/v1/mail/orders/MAIL261016QNDTZR' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "status": "received",
    "code": "492817",
    "subject": "Facebook confirmation code",
    "text": "492817 is your Facebook confirmation code",
    "time_left": 0,
    "received_at": "2026-10-16 10:21:47",
    "id": 1203,
    "tracking": "MAIL261016QNDTZR",
    "service": "Facebook",
    "service_slug": "facebook",
    "domain_id": 9,
    "domain": "outlook.com",
    "email": "[email protected]",
    "price": "0.04",
    "refunded": false,
    "parent_id": null,
    "created_at": "2026-10-16 10:20:03",
    "expires_at": "2026-10-16 10:40:03"
  }
}

List mailbox orders

GET /api/v1/mail/orders

Newest first, paginated.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
status string No active / pending / waiting / received / canceled / failed / refunded
q string No Exact email address or tracking number
page integer No Page, default 1
per_page integer No Items per page, default 50, max 100
curl -sS -G 'https://www.humkt.cn/api/v1/mail/orders' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'status=received' \
  --data-urlencode 'per_page=50'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "status": "received",
      "code": "492817",
      "subject": "Facebook confirmation code",
      "text": "492817 is your Facebook confirmation code",
      "time_left": 0,
      "received_at": "2026-10-16 10:21:47",
      "id": 1203,
      "tracking": "MAIL261016QNDTZR",
      "service": "Facebook",
      "service_slug": "facebook",
      "domain_id": 9,
      "domain": "outlook.com",
      "email": "[email protected]",
      "price": "0.04",
      "refunded": false,
      "parent_id": null,
      "created_at": "2026-10-16 10:20:03",
      "expires_at": "2026-10-16 10:40:03"
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 50,
    "total": 8,
    "last_page": 1
  }
}

Cancel & refund

POST /api/v1/mail/orders/{order}/cancel

Only orders still waiting for a code; full refund to balance. If the code has arrived (even at the moment of cancelling) you get 409 CANCEL_FAILED with the latest order in data.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
order string Yes Order id or tracking number (path)
curl -sS -X POST 'https://www.humkt.cn/api/v1/mail/orders/MAIL261016QNDTZR/cancel' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "已取消,¥0.04 已退回钱包",
  "data": {
    "status": "canceled",
    "refunded": true,
    "time_left": 0,
    "id": 1203,
    "tracking": "MAIL261016QNDTZR",
    "service": "Facebook",
    "service_slug": "facebook",
    "domain_id": 9,
    "domain": "outlook.com",
    "email": "[email protected]",
    "price": "0.04",
    "code": null,
    "subject": null,
    "text": null,
    "parent_id": null,
    "created_at": "2026-10-16 10:20:03",
    "expires_at": "2026-10-16 10:40:03",
    "received_at": null
  },
  "balance": "89.20"
}

Reuse mailbox for another platform

POST /api/v1/mail/orders/{order}/again

Receives a code from another platform on the mailbox of a previous order; charged at that platform's price for the same mailbox type and returns a new order (parent_id = original order id). Each mailbox can be used once per platform (422 USED); 422 INVALID if the mailbox is no longer usable. Otherwise same rules as Get a mailbox.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
order string Yes Order id or tracking number (path)
service_id integer Yes The other platform id
max_price number No Maximum price
order_ref string No Your reference, as in Get a mailbox
curl -sS -X POST 'https://www.humkt.cn/api/v1/mail/orders/MAIL261016QNDTZR/again' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'service_id=3'
Response
{
  "code": 1,
  "message": "下单成功",
  "data": {
    "id": 1204,
    "tracking": "MAIL261016W8JX2P",
    "service": "Instagram",
    "service_slug": "instagram",
    "parent_id": 1203,
    "domain_id": 9,
    "domain": "outlook.com",
    "email": "[email protected]",
    "price": "0.04",
    "status": "waiting",
    "code": null,
    "subject": null,
    "text": null,
    "refunded": false,
    "time_left": 1185,
    "created_at": "2026-10-16 10:20:03",
    "expires_at": "2026-10-16 10:40:03",
    "received_at": null
  },
  "duplicate": false,
  "balance": "89.12"
}

Social media (SMM)

8 endpoints
Flow: /smm/services → (optional) POST /smm/estimate → POST /smm/orders (charged immediately) → check status with the returned order id. Status: pending / in_progress / completed / partial (the undelivered part is refunded automatically) / canceled / failed (refunded) / refunded. Send fields by service type (see the order parameters): Default etc. → link + quantity; Custom Comments / Comment Replies → link + comments (one per line, quantity = valid lines); Subscriptions → username + max + posts (+ min, delay, expiry, old_posts), charged quantity = max × posts; Poll adds answer_number; Web Traffic may add country, device, type_of_traffic. If a service has input: minutes needs minutes (1–1440, billed as quantity × minutes), reactions needs reactions. Services with dripfeed=true accept dripfeed=1 + runs + interval (minutes); charged quantity = quantity × runs.

List services

GET /api/v1/smm/services

rate is the price per 1000 in CNY (4-decimal string); charge = rate × charged quantity / 1000, at least meta.min_order_amount — /smm/estimate is authoritative. Some services add input, target, reactions_allowed, comment_rules, schedulable, unit. If the catalog is unavailable you get 503 UPSTREAM_UNAVAILABLE.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
lang string No zh | en | vi | ru
q string No Search name/category
category string No Exact category
curl -sS -G 'https://www.humkt.cn/api/v1/smm/services' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'lang=en' \
  --data-urlencode 'q=instagram followers'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "service": 3575707,
      "name": "Instagram Followers",
      "category": "Instagram",
      "type": "Default",
      "rate": "252.7000",
      "min": 100,
      "max": 100000,
      "refill": true,
      "cancel": true,
      "dripfeed": false,
      "average_time": "3 小时",
      "description": ""
    }
  ],
  "meta": {
    "count": 1,
    "currency": "CNY",
    "min_order_amount": "1.00"
  }
}

Estimate

POST /api/v1/smm/estimate

Same parameters as ordering; validates and returns the charge without charging. Invalid parameters return 422 VALIDATION_ERROR.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
service integer Yes Service id
… No Other fields as in ordering (conditionally required by service type)
curl -sS -X POST 'https://www.humkt.cn/api/v1/smm/estimate' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'service=3575707' \
  --data-urlencode 'link=https://www.instagram.com/example/' \
  --data-urlencode 'quantity=100'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "service": 3575707,
    "charge_quantity": 100,
    "charge": "25.27",
    "min_order_amount": "1.00",
    "currency": "CNY"
  }
}

Create order

POST /api/v1/smm/orders

Charged immediately. Rejected with DUPLICATE_ACTIVE_ORDER if the same link already has an active order of the same kind. A just-changed price returns 409 PRICE_CHANGED (no price field — re-query/estimate first); insufficient balance returns 402. With order_ref, repeats within 24 h return the original order (best-effort).<br>Other failures (HTTP 422): SERVICE_UNAVAILABLE unknown or delisted service; ORDER_FAILED — either nothing was charged (retryable=true means a temporary problem, retry later) or the order was charged, rejected and refunded automatically (then data is included with status=failed, refunded=true; it also appears in /smm/orders).<br>Orders stuck without a result are settled within about 6 hours; failed ones are refunded automatically.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
service integer Yes Service id
link string No Conditionally required: target link for every type except Subscriptions (no spaces; a value starting with http must be a full URL)
quantity integer No Conditionally required: Default / Poll / Mentions / Web Traffic etc., within min–max; not used by Custom Comments or Subscriptions
comments string No Required for Custom Comments / Comment Replies: one per line; blank and duplicate lines are ignored; valid lines within min–max, each ≤200 chars
username string No Required for Subscriptions (account username); optional for Comment Likes / Mentions
min / max / posts integer No Subscriptions: max ≥ service min, posts ≥ 1; charged quantity = max × posts
delay / expiry / old_posts mixed No Subscriptions, optional: delay (minutes), expiry (d/m/Y), old_posts
answer_number string No Required for Poll: answer number
country / device / type_of_traffic mixed No Web Traffic, optional: device 1–5, type_of_traffic 1–3; google_keyword / referring_url also accepted
usernames / hashtag / groups / media string No Mentions may add usernames / hashtag; Invites from Groups uses groups and Mentions Media Likers uses media (falls back to link)
dripfeed / runs / interval integer No Only for dripfeed=true services: dripfeed=1, runs batches of quantity, interval minutes apart; charged quantity = quantity × runs
minutes integer No Required when the service has input=minutes: 1–1440 minutes; billed as quantity × minutes
reactions string|array No Required when the service has input=reactions: one or more of LIKE / LOVE / CARE / HAHA / WOW / SAD / ANGRY (see reactions_allowed), array or comma-separated
start_at string No Only for schedulable=true services: scheduled start (site time zone), 10 minutes to 7 days ahead
order_ref string No Your reference (≤64 chars, or header X-Idempotency-Key) against duplicates within 24 h; best-effort, see Rate limits & retries
curl -sS -X POST 'https://www.humkt.cn/api/v1/smm/orders' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'service=3575707' \
  --data-urlencode 'link=https://www.instagram.com/example/' \
  --data-urlencode 'quantity=100' \
  --data-urlencode 'order_ref=A10086'
Response
{
  "code": 1,
  "message": "下单成功",
  "data": {
    "order": "SMM260924211003AB12",
    "service": 3575707,
    "link": "https://www.instagram.com/example/",
    "quantity": 100,
    "charge": "25.27",
    "currency": "CNY",
    "status": "pending",
    "start_count": null,
    "remains": null,
    "delivered": null,
    "refunded": false,
    "refund_amount": "0.00",
    "can_refill": false,
    "can_cancel": true,
    "dripfeed": null,
    "refill_status": null,
    "created_at": "2026-09-24 21:10:03",
    "updated_at": "2026-09-24 21:10:03",
    "refill_available_at": null,
    "refill_count": 0,
    "progress": null,
    "warranty": {
      "state": "pending",
      "days": 30,
      "expires_at": null,
      "remaining_days": null
    }
  },
  "duplicate": false,
  "balance": "74.73"
}

Batch order

POST /api/v1/smm/orders/batch

Up to 50 lines of "service | link | quantity", link + quantity services (Default-type) only. Call with preview=1 first to validate and get total, then submit it as expected_total. If pre-validation fails (any invalid line 422, changed total 409 PRICE_CHANGED with the current total, insufficient balance 402) nothing is ordered; after that lines are ordered one by one and individual lines can still fail (listed in failed, not charged) — partial success is possible and charge is what was actually charged. No persistent idempotency: after a timeout check /smm/orders before resubmitting.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
lines string|array Yes Multiline text, or [{service,link,quantity}]
preview 0|1 No 1 = validate and price only, no order (returns rows / total / valid / invalid)
expected_total number No Confirmed total; rejected with 409 if it differs from the server total by more than 0.01
curl -sS -X POST 'https://www.humkt.cn/api/v1/smm/orders/batch' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'lines=3575707 | https://www.instagram.com/example/ | 100
3575707 | https://www.instagram.com/example2/ | 200' \
  --data-urlencode 'expected_total=75.81'
Response
{
  "code": 1,
  "message": "批量下单完成",
  "data": {
    "batch_id": "B260924211003QX7Z",
    "created": [
      {
        "line": 1,
        "tracking": "SMM260924211003AB12",
        "price": 25.27
      }
    ],
    "failed": [
      {
        "line": 2,
        "error": "该链接已有同类订单进行中(#SMM260923100512CD34)"
      }
    ],
    "charge": "25.27"
  },
  "balance": "74.73"
}

Get order

GET /api/v1/smm/orders/{order}

remains = not yet delivered, delivered = done, progress = percent done. refund_amount is what was returned to your balance; refunded is true only for a full refund — check refund_amount for partial refunds.<br>can_refill / can_cancel match what the refill / cancel endpoints will accept; while a refill cooldown runs, refill_available_at tells when you can ask, and refill_count is how many refills were requested.<br>warranty.state: none / pending (starts on completion) / active / expired / lifetime / refunded; expires_at and remaining_days give the end and days left.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
order string Yes Order id (starts with SMM), in the path
curl -sS -G 'https://www.humkt.cn/api/v1/smm/orders/SMM260924211003AB12' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "quantity": 1000,
    "charge": "252.70",
    "status": "partial",
    "start_count": 5230,
    "remains": 120,
    "delivered": 880,
    "refund_amount": "30.32",
    "can_cancel": false,
    "updated_at": "2026-09-25 03:12:40",
    "order": "SMM260924211003AB12",
    "service": 3575707,
    "link": "https://www.instagram.com/example/",
    "currency": "CNY",
    "refunded": false,
    "can_refill": false,
    "dripfeed": null,
    "refill_status": null,
    "created_at": "2026-09-24 21:10:03",
    "refill_available_at": null,
    "refill_count": 0,
    "progress": null,
    "warranty": {
      "state": "pending",
      "days": 30,
      "expires_at": null,
      "remaining_days": null
    }
  }
}

Multi-status / list

GET /api/v1/smm/orders

Pass orders to look up those orders (first 100 used), or omit it to list all; both modes are paginated by page / per_page (per_page max 100) — pass per_page=100 when querying 100 orders. Statuses sync every minute.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
orders string No Comma-separated order ids
status string No Filter by status: pending / in_progress / completed / partial / canceled / failed / refunded
page integer No Page, default 1
per_page integer No Items per page, default 50, max 100
curl -sS -G 'https://www.humkt.cn/api/v1/smm/orders' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'orders=SMM260924211003AB12,SMM260923100512CD34' \
  --data-urlencode 'per_page=100'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "order": "SMM260924211003AB12",
      "service": 3575707,
      "link": "https://www.instagram.com/example/",
      "quantity": 100,
      "charge": "25.27",
      "currency": "CNY",
      "status": "pending",
      "start_count": null,
      "remains": null,
      "delivered": null,
      "refunded": false,
      "refund_amount": "0.00",
      "can_refill": false,
      "can_cancel": true,
      "dripfeed": null,
      "refill_status": null,
      "created_at": "2026-09-24 21:10:03",
      "updated_at": "2026-09-24 21:10:03",
      "refill_available_at": null,
      "refill_count": 0,
      "progress": null,
      "warranty": {
        "state": "pending",
        "days": 30,
        "expires_at": null,
        "remaining_days": null
      }
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 100,
    "total": 1,
    "last_page": 1
  }
}

Request refill

POST /api/v1/smm/orders/{order}/refill

Allowed when the order has can_refill=true: the service supports refill, the order is completed (partial also works for some services), the cooldown has passed (see refill_available_at, usually 24 h), the warranty is still valid and no refill is pending. Otherwise 422 REFILL_NOT_AVAILABLE.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
order string Yes Order id, in the path
curl -sS -X POST 'https://www.humkt.cn/api/v1/smm/orders/SMM260924211003AB12/refill' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "补量申请已提交",
  "data": {
    "status": "completed",
    "remains": 0,
    "delivered": 100,
    "can_refill": true,
    "can_cancel": false,
    "refill_status": "requested",
    "order": "SMM260924211003AB12",
    "service": 3575707,
    "link": "https://www.instagram.com/example/",
    "quantity": 100,
    "charge": "25.27",
    "currency": "CNY",
    "start_count": null,
    "refunded": false,
    "refund_amount": "0.00",
    "dripfeed": null,
    "created_at": "2026-09-24 21:10:03",
    "updated_at": "2026-09-24 21:10:03",
    "refill_available_at": null,
    "refill_count": 0,
    "progress": null,
    "warranty": {
      "state": "pending",
      "days": 30,
      "expires_at": null,
      "remaining_days": null
    }
  }
}

Request cancel

POST /api/v1/smm/orders/{order}/cancel

Allowed when the order has can_cancel=true: the service supports cancel and the order is unfinished. Most services can only be cancelled before delivery starts; a few also cancel the remaining part afterwards. The undelivered part is refunded (may take a few minutes). Otherwise 422 CANCEL_NOT_AVAILABLE.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
order string Yes Order id, in the path
curl -sS -X POST 'https://www.humkt.cn/api/v1/smm/orders/SMM260924211003AB12/cancel' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "已取消,按未交付 100/100 退款约 ¥25.27",
  "data": {
    "status": "canceled",
    "refunded": true,
    "refund_amount": "25.27",
    "can_cancel": false,
    "order": "SMM260924211003AB12",
    "service": 3575707,
    "link": "https://www.instagram.com/example/",
    "quantity": 100,
    "charge": "25.27",
    "currency": "CNY",
    "start_count": null,
    "remains": null,
    "delivered": null,
    "can_refill": false,
    "dripfeed": null,
    "refill_status": null,
    "created_at": "2026-09-24 21:10:03",
    "updated_at": "2026-09-24 21:10:03",
    "refill_available_at": null,
    "refill_count": 0,
    "progress": null,
    "warranty": {
      "state": "pending",
      "days": 30,
      "expires_at": null,
      "remaining_days": null
    }
  }
}

Proxies

9 endpoints
Flow: /proxy/options → /proxy/price → POST /proxy/orders → /proxy/list for IP, ports and credentials. Purchases require idempotency_key: after a timeout retry with the same value — you get the same order and are never charged twice. HTTP 202 on a purchase means charged and awaiting confirmation; check the order later (retrying with the same idempotency_key also returns this order). Failed purchases are refunded automatically (status=fail). Renewals have no idempotency_key: do not retry a renewal that returned 202; check the expiry in /proxy/list later.

Options

GET /api/v1/proxy/options

Types: dedicated / shared / ipv6 / mtproxy (Telegram). Periods are in days. Countries are two-letter lowercase codes.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
curl -sS -G 'https://www.humkt.cn/api/v1/proxy/options' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "types": [
      {
        "type": "dedicated",
        "ip_versions": [
          4,
          6
        ],
        "desc": "独享 IPv4/IPv6(HTTP + SOCKS5)"
      },
      {
        "type": "mtproxy",
        "ip_versions": [
          4
        ],
        "desc": "Telegram MTProxy(不支持指定城市/IP)"
      }
    ],
    "periods": [
      5,
      10,
      20,
      30,
      60,
      90,
      120,
      150,
      180,
      210,
      240,
      270,
      300,
      330,
      360
    ],
    "countries": [
      "ru",
      "de",
      "us",
      "gb"
    ],
    "limits": {
      "quantity_min": 1,
      "quantity_max": 2000,
      "ip_list_max": 2000
    },
    "currency": "CNY"
  }
}

Price

GET /api/v1/proxy/price

Total price for the purchase. ipv6 is always v6, mtproxy always v4.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
type string No dedicated (default) | shared | ipv6 | mtproxy
ip_version integer No 4 or 6, default 4; other values return 422
country string Yes Country code, e.g. us
period integer Yes Days (see /proxy/options)
quantity integer No Quantity 1–2000, default 1
curl -sS -G 'https://www.humkt.cn/api/v1/proxy/price' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'country=us' \
  --data-urlencode 'period=30' \
  --data-urlencode 'quantity=2'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "type": "dedicated",
    "ip_version": 4,
    "country": "us",
    "period": 30,
    "quantity": 2,
    "amount": "50.98",
    "currency": "CNY"
  }
}

Cities & IPs

GET /api/v1/proxy/cities

Without city: in-stock cities with counts. With city: IPs you can buy specifically (for ip_list orders). Returns 503 UPSTREAM_UNAVAILABLE if stock cannot be fetched.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
country string Yes Country code
type string No dedicated | shared
ip_version integer No 4 | 6
city integer No City id
curl -sS -G 'https://www.humkt.cn/api/v1/proxy/cities' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'country=us' \
  --data-urlencode 'type=dedicated' \
  --data-urlencode 'ip_version=4'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "cities": [
      {
        "id": 440,
        "name": "Austin",
        "available": 1000
      }
    ],
    "ips": [],
    "need_city": true
  }
}

Buy

POST /api/v1/proxy/orders

200 with the proxies on success; 202 when charged and awaiting confirmation; on failure nothing is charged or it is refunded automatically. mtproxy does not accept ip_list / city_id / city — sending them returns 422 instead of being silently ignored.<br>The price is re-quoted at purchase and may differ slightly from /proxy/price; use max_amount to cap it.<br>Failures (nothing charged; retry later when retryable=true): 503 ORDER_FAILED line temporarily unavailable (/proxy/price still quotes); 429 RATE_LIMITED your previous purchase is still running, wait a few seconds; 500 ORDER_FAILED order could not be created; 422 ORDER_FAILED price temporarily unavailable; 402 INSUFFICIENT_BALANCE.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
idempotency_key string Yes Your unique key (≤64 chars), or header X-Idempotency-Key. Use a new value to buy again after a failure
country string Yes Country code
period integer Yes Days
quantity integer Yes Quantity 1–2000 (omit when using ip_list)
type string No dedicated | shared | ipv6 | mtproxy
ip_version integer No 4 | 6
ip_list[] array No Specific IPs from /proxy/cities?city= (no duplicates). Use this to buy in a specific city; not for mtproxy
city_id integer No City id, only together with ip_list (rejected on its own; not for mtproxy)
max_amount number No Maximum total. The price is re-quoted at purchase; if higher you get 409 PRICE_CHANGED with the current amount and nothing is charged
curl -sS -X POST 'https://www.humkt.cn/api/v1/proxy/orders' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'idempotency_key=4f1c2a9e-7b1d-4c55-9a0e-5d1f2b3c4d5e' \
  --data-urlencode 'country=us' \
  --data-urlencode 'period=30' \
  --data-urlencode 'quantity=2'
Response
{
  "code": 1,
  "message": "购买成功",
  "data": {
    "order_no": "PO20260924211003AB12",
    "order_id": 4410,
    "country": "us",
    "city": null,
    "period": 30,
    "quantity": 2,
    "amount": "50.98",
    "currency": "CNY",
    "status": "ok",
    "created_at": "2026-09-24 21:10:03",
    "refunded_amount": "0.00",
    "refunded_at": null,
    "proxies": [
      {
        "id": 9812,
        "order_id": 4410,
        "type": "dedicated",
        "ip_version": 4,
        "ip": "203.0.113.10",
        "port_http": 49155,
        "port_socks5": 59155,
        "username": "u8812",
        "password": "p9x2",
        "country": "us",
        "city": null,
        "expires_at": "2026-10-24 21:10:03",
        "status": "active",
        "label": null
      }
    ]
  },
  "duplicate": false,
  "balance": "49.02"
}

Get order

GET /api/v1/proxy/orders/{order_no}

status: ok delivered / pending processing / fail refunded. If support refunded the order (fully or some proxies), status stays ok — see refunded_amount and refunded_at.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
order_no string Yes Order number (PO…) or id, in the path
curl -sS -G 'https://www.humkt.cn/api/v1/proxy/orders/PO20260924211003AB12' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "order_no": "PO20260924211003AB12",
    "order_id": 4410,
    "country": "us",
    "city": null,
    "period": 30,
    "quantity": 2,
    "amount": "50.98",
    "currency": "CNY",
    "status": "ok",
    "created_at": "2026-09-24 21:10:03",
    "refunded_amount": "0.00",
    "refunded_at": null,
    "proxies": [
      {
        "id": 9812,
        "order_id": 4410,
        "type": "dedicated",
        "ip_version": 4,
        "ip": "203.0.113.10",
        "port_http": 49155,
        "port_socks5": 59155,
        "username": "u8812",
        "password": "p9x2",
        "country": "us",
        "city": null,
        "expires_at": "2026-10-24 21:10:03",
        "status": "active",
        "label": null
      }
    ]
  }
}

List orders

GET /api/v1/proxy/orders

Newest first, paginated.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
page integer No Page, default 1
per_page integer No Items per page, default 50, max 100
curl -sS -G 'https://www.humkt.cn/api/v1/proxy/orders' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "order_no": "PO20260924211003AB12",
      "order_id": 4410,
      "country": "us",
      "city": null,
      "period": 30,
      "quantity": 2,
      "amount": "50.98",
      "currency": "CNY",
      "status": "ok",
      "created_at": "2026-09-24 21:10:03",
      "refunded_amount": "0.00",
      "refunded_at": null
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 50,
    "total": 3,
    "last_page": 1
  }
}

My proxies

GET /api/v1/proxy/list

Includes IP, HTTP/SOCKS5 ports and credentials. type=mtproxy returns MTProxies (ip, port, secret, tg_url); the ip and order_id filters work for both. Returned status: active / expired / deleted (reclaimed — possibly before expiry, no longer usable or renewable).

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
status string No active | expired | deleted
type string No mtproxy
ip string No IP search
order_id integer No Only this order (order id)
page integer No Page, default 1
per_page integer No Default 100, max 500
curl -sS -G 'https://www.humkt.cn/api/v1/proxy/list' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'status=active' \
  --data-urlencode 'order_id=4410'
Response
{
  "code": 1,
  "message": "OK",
  "data": [
    {
      "id": 9812,
      "order_id": 4410,
      "type": "dedicated",
      "ip_version": 4,
      "ip": "203.0.113.10",
      "port_http": 49155,
      "port_socks5": 59155,
      "username": "u8812",
      "password": "p9x2",
      "country": "us",
      "city": null,
      "expires_at": "2026-10-24 21:10:03",
      "status": "active",
      "label": null
    }
  ],
  "meta": {
    "current_page": 1,
    "per_page": 100,
    "total": 1,
    "last_page": 1
  }
}

Renewal price

GET /api/v1/proxy/renew-price

Same price as renewing on the website. count excludes reclaimed or non-renewable proxies; the actual renewal checks again and reclaimed ones go to skipped without charge.

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
ids string Yes Comma-separated proxy ids, 1–100 positive integers
period integer Yes Days
curl -sS -G 'https://www.humkt.cn/api/v1/proxy/renew-price' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'ids=9812,9813' \
  --data-urlencode 'period=30'
Response
{
  "code": 1,
  "message": "OK",
  "data": {
    "count": 2,
    "period": 30,
    "amount": "25.49",
    "currency": "CNY"
  }
}

Renew

POST /api/v1/proxy/renew

1–100 per call (positive integer ids, comma-separated or array). Reclaimed proxies are listed in skipped and not charged. Failed renewals are refunded; 202 means awaiting confirmation — do not retry. One submission per 10 s per account (double-click protection only, not idempotency); repeats return 429. Failures return RENEW_FAILED (HTTP 422 / 500 / 503; refunded or not charged).

Parameters
NameTypeRequiredDescription
token string Auth Required for authentication; preferably sent as Authorization: Bearer (see Authentication)
ids string|array Yes Proxy ids, 1–100 positive integers
period integer Yes Days
curl -sS -X POST 'https://www.humkt.cn/api/v1/proxy/renew' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Accept: application/json' \
  --data-urlencode 'ids=9812,9813' \
  --data-urlencode 'period=30'
Response
{
  "code": 1,
  "message": "续费成功",
  "data": {
    "status": "success",
    "amount": "25.49",
    "renewed": [
      {
        "id": 9812,
        "expires_at": "2026-11-23 21:10:03"
      },
      {
        "id": 9813,
        "expires_at": "2026-11-23 21:10:03"
      }
    ],
    "skipped": []
  },
  "balance": "23.53"
}