Partner API
Connect your system to every service line with a single key — every request is a POST (form-urlencoded or JSON), the response is always JSON, and the per-minute quota is shared across all lines
/en/socialup/api/v3
1X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2
3# or
4Authorization: Bearer adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
1// success
2{ "ok": true, "data": { … }, "request_id": "9f2c1a…" }
3
4// error
5{ "ok": false, "error": { "code": "INVALID_KEY", "message": "Invalid API key" }, "request_id": "9f2c1a…" }
You can call it REST-style by appending the action name to the URL instead of the action field, and action=balance (check balance) works on the endpoint of every service line
🔑 Create an API key — one key works across every service line
Every member can create keys for free (up to 5 per account, cancel one at a time) — log in first, then come back to create one here
Rate limits
Every response includes the X-RateLimit-Limit / X-RateLimit-Remaining / X-RateLimit-Reset headers — use them to self-throttle without waiting to be rejected
| Scope | Limit | When exceeded |
|---|---|---|
| All actions combined (per key) | 120 / min | Returns 429 with RATE_LIMITED and a Retry-After header |
| Charging actions (orders/renewals, all lines combined) | 20 / min | |
| Full catalog fetch (per key) | 12 / min | |
| Failed authentication (per IP address) | 30 / min |
The ordering quota is intentionally lower than the others — if your system loops by mistake, the damage is capped at 20 orders per minute · The catalog should be fetched and cached (it changes only a few times a day). To check the price of a single service, send service=… as well and it will not count against this quota
Social media boosting
Boost followers, likes, views, and comments on every platform — the standard SMM action set that most tools can integrate with right away
1curl -X POST https://adsplusth.com/en/socialup/api/v3 \
2 -H "X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
3 -d "action=add" -d "service=12345" \
4 -d "link=https://www.instagram.com/p/abc123" \
5 -d "quantity=1000"
servicesService list & pricing
/en/socialup/api/v3/services
Fetch the list of active services with their real selling prices. You should cache it on your side rather than fetching it before every order.
| Parameter | Required | Description |
|---|---|---|
service |
Optional | Request only a single service by the given ID |
category |
Optional | Filter by category name (must match the whole string) |
limit / offset |
Optional | Pagination; the default returns everything |
1{
2 "ok": true,
3 "data": {
4 "count": 6468,
5 "services": [
6 {
7 "service": 12345,
8 "name": "Instagram Followers [fast]",
9 "category": "Instagram",
10 "type": "default",
11 "rate": "70.00", // selling price per 1,000 units, in THB
12 "currency": "THB",
13 "min": 10,
14 "max": 500000,
15 "dripfeed": true,
16 "refill": true,
17 "cancel": false,
18 "pricing": "quantity", // pricing basis: quantity | lines | package | per_post
19 "fields": ["link", "quantity"] // fields required for add
20 }
21 ]
22 },
23 "request_id": "9f2c…"
24}
balanceWallet balance
/en/socialup/api/v3/balance
The wallet balance for the account that owns the key, read live from the database every time
1{
2 "ok": true,
3 "data": { "balance": "1250.75", "currency": "THB" },
4 "request_id": "9f2c…"
5}
addOrder
/en/socialup/api/v3/add
Create a new order; the wallet is charged immediately on success. The required fields depend on the service type — see the fields value returned by services.
| Parameter | Required | Description |
|---|---|---|
service |
Required | Service ID |
link |
Depends on service type | Post/profile link; must start with http:// or https:// |
quantity |
Depends on service type | Desired amount (must be within the service min–max range) |
comments |
Depends on service type | One comment per line — the number of lines is the quantity charged |
runs / interval |
Optional | Drip-feed mode, available only for services where dripfeed = true (amount charged = quantity × runs) |
username, min, max, posts … |
Depends on service type | Fields specific to types like subscriptions / poll / seo, etc. |
1{
2 "ok": true,
3 "data": {
4 "order": 987654,
5 "service": 12345,
6 "quantity": 1000,
7 "charge": "70.00",
8 "currency": "THB",
9 "balance": "1180.75"
10 },
11 "request_id": "9f2c…"
12}
statusOrder status
/en/socialup/api/v3/status
Query the status of several IDs at once; the system answers only for orders that belong to the key. IDs that are not yours return ORDER_NOT_FOUND, just like IDs that do not exist.
| Parameter | Required | Description |
|---|---|---|
order |
One of | A single order ID |
orders |
One of | Multiple IDs separated by commas, up to 100 per request |
1{
2 "ok": true,
3 "data": {
4 "orders": [
5 {
6 "order": 987654,
7 "service": 12345,
8 "status": "In progress", // Pending|Processing|In progress|Completed|Partial|Canceled|Refunded
9 "status_th": "In progress",
10 "charge": "70.00",
11 "currency": "THB",
12 "quantity": 1000,
13 "start_count": "5230",
14 "remains": "420",
15 "refunded": "0.00",
16 "created_at": "2026-07-22 10:15:03"
17 },
18 { "order": 111, "error": "ORDER_NOT_FOUND" }
19 ]
20 },
21 "request_id": "9f2c…"
22}
cancelCancel an order
/en/socialup/api/v3/cancel
Send a cancellation request to the provider; available only for services where cancel = true and orders that are not finished yet. The refund to your wallet happens later via status tracking, not immediately when you call.
| Parameter | Required | Description |
|---|---|---|
order / orders |
Required | Order IDs, up to 100 per request |
1{
2 "ok": true,
3 "data": {
4 "orders": [
5 { "order": 987654, "accepted": true },
6 { "order": 987655, "error": "NOT_SUPPORTED", "message": "This service does not support cancellation" }
7 ],
8 "dry_run": false
9 },
10 "request_id": "9f2c…"
11}
refillRequest a refill
/en/socialup/api/v3/refill
Available only for services where refill = true and orders already in the Completed or Partial status
| Parameter | Required | Description |
|---|---|---|
order / orders |
Required | Order IDs, up to 100 per request |
1{
2 "ok": true,
3 "data": {
4 "orders": [ { "order": 987654, "accepted": true, "refill": 55231 } ],
5 "dry_run": false
6 },
7 "request_id": "9f2c…"
8}
Rent a number for SMS (OTP)
Rent a temporary number to receive an SMS code — flow: services to pick a platform → countries for pricing/availability → buy to rent → poll status until you get sms_code · can be canceled after the set time, and on timeout (20 minutes) it is refunded in full automatically
1# 1) Rent a number
2curl -X POST https://adsplusth.com/en/otp/api/v3/buy -H "X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
3 -d "service=fb" -d "country=52"
4
5# 2) Poll until you get the code (every ~5s)
6curl -X POST https://adsplusth.com/en/otp/api/v3/status -H "X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -d "order=OTP2026…"
servicesSupported platforms
/en/otp/api/v3/services
The list of services you can rent a number for (facebook, line, shopee, …); use the service value in the next step
| Parameter | Required | Description |
|---|---|---|
q |
Optional | Search by name |
limit / offset |
Optional | Pagination (limit up to 500) |
1{ "ok": true, "data": { "count": 2, "total": 214, "services": [
2 { "service": "fb", "name": "Facebook" },
3 { "service": "ig", "name": "Instagram" } ] }, "request_id": "…" }
countriesPricing + available numbers per country
/en/otp/api/v3/countries
Prices are read live from the provider (already the selling price) — the same number that will be charged at buy
| Parameter | Required | Description |
|---|---|---|
service |
Required | Service ID from action=services |
1{ "ok": true, "data": { "service": "fb", "count": 1, "countries": [
2 { "country": 52, "name": "Thailand", "iso": "th",
3 "price": "24.00", "currency": "THB", "qty": 1543 } ] }, "request_id": "…" }
tiersPrice tiers for a service + country
/en/otp/api/v3/tiers
Live price tiers for a service in one country — higher tiers usually get a number faster. Pass the tier value to buy (omit = cheapest tier)
| Parameter | Required | Description |
|---|---|---|
service |
Required | Service ID from action=services |
country |
Required | Country ID (from countries) |
1{ "ok": true, "data": { "service": "fb", "country": 52, "count": 2, "tiers": [
2 { "tier": "0.1000", "price": "8.00", "currency": "THB", "qty": 412 },
3 { "tier": "0.2500", "price": "18.00", "currency": "THB", "qty": 1130 } ] }, "request_id": "…" }
buyRent a number (charged)
/en/otp/api/v3/buy
Charges and rents a number immediately; the number lasts 20 minutes — use it to sign up, then poll status until you get the code. If no number is available you get PROVIDER_UNAVAILABLE and are not charged.
| Parameter | Required | Description |
|---|---|---|
service |
Required | Service ID |
country |
Required | Country code from action=countries |
1{ "ok": true, "data": {
2 "order": "OTP20260730123456ABC123",
3 "phone": "66812345678",
4 "charge": "24.00", "currency": "THB",
5 "expired_at": "2026-07-30 12:54:56",
6 "cancel_available_at": "2026-07-30 12:36:56",
7 "balance": "976.00" }, "request_id": "…" }
statusStatus + SMS code
/en/otp/api/v3/status
Poll every ~5 seconds until the status is completed (you get sms_code) or canceled/expired — once it times out the system refunds you in full automatically, nothing more to do.
| Parameter | Required | Description |
|---|---|---|
order |
Required | Rental order ID from buy |
1{ "ok": true, "data": {
2 "order": "OTP20260730123456ABC123",
3 "status": "completed", // waiting | completed | canceled | expired
4 "sms_code": "382914", // null until the code arrives
5 "phone": "66812345678",
6 "expired_at": "2026-07-30 12:54:56",
7 "cancel_available_at": "2026-07-30 12:36:56",
8 "can_cancel": false,
9 "refunded": false }, "request_id": "…" }
cancelCancel + full refund
/en/otp/api/v3/cancel
Can be canceled after cancel_available_at (about 2 minutes after renting) and only if you have not received a code yet. On success, the full amount is refunded to your wallet immediately.
| Parameter | Required | Description |
|---|---|---|
order |
Required | Rental order ID |
1{ "ok": true, "data": { "order": "OTP2026…", "refunded": true, "balance": "1000.00" }, "request_id": "…" }
ordersRental history
/en/otp/api/v3/orders
The latest items for the account that owns the key (SMS codes are shown only for successful items)
| Parameter | Required | Description |
|---|---|---|
limit |
Optional | Number of items, up to 200 (default 50) |
1{ "ok": true, "data": { "count": 1, "orders": [
2 { "order": "OTP2026…", "service": "fb", "name": "Facebook", "country": "Thailand",
3 "phone": "66812345678", "status": "completed", "sms_code": "382914",
4 "charge": "24.00", "currency": "THB", "refunded": false,
5 "created_at": "2026-07-30 12:34:56" } ] }, "request_id": "…" }
Social account sales
Buy ready-made social accounts — pay and get the credentials back immediately in the buy response, and view them again anytime via order
1curl -X POST https://adsplusth.com/en/accounts/api/v3/buy -H "X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
2 -d "product=17" -d "qty=2"
categoriesProduct categories
/en/accounts/api/v3/categories
Categories on sale; use the category value to filter in products
1{ "ok": true, "data": { "count": 1, "categories": [ { "category": 3, "name": "Facebook" } ] }, "request_id": "…" }
productsProducts + price + stock
/en/accounts/api/v3/products
Stock changes constantly; always check before ordering
| Parameter | Required | Description |
|---|---|---|
q |
Optional | Search by product name/ID |
category |
Optional | Filter by category |
page |
Optional | The page you want |
1{ "ok": true, "data": { "count": 1, "total": 42, "page": 1, "pages": 2, "products": [
2 { "product": 17, "name": "Facebook 1yr+", "category": "Facebook",
3 "price": "35.00", "currency": "THB", "stock": 120, "min": 1, "max": 50 } ] }, "request_id": "…" }
buyBuy accounts (charged)
/en/accounts/api/v3/buy
Once paid, the credentials come back in the response — save them right away and view them again via action=order. Always check status: success = delivered (count can be lower than quantity if the source delivered only part; the missing part is already refunded, see refunded) | pending = charged, waiting for the source to deliver — do NOT order again; poll action=order until it becomes success or refund (fully refunded). If the source rejects the order, you are not charged.
| Parameter | Required | Description |
|---|---|---|
product |
Required | Product ID |
qty |
Optional | Quantity (default 1 — must be within min–max) |
1{ "ok": true, "data": {
2 "order": 5011, "status": "success", "quantity": 2, "count": 2,
3 "charge": "70.00", "refunded": "0.00", "currency": "THB",
4 "accounts": [ "[email protected]:pass1:token…", "[email protected]:pass2:token…" ],
5 "balance": "930.00", "message": "" }, "request_id": "…" }
ordersOrder history
/en/accounts/api/v3/orders
Orders for the account that owns the key (view each order credentials via action=order)
| Parameter | Required | Description |
|---|---|---|
q |
Optional | Search by product name/order ID |
page |
Optional | The page you want |
1{ "ok": true, "data": { "count": 1, "total": 8, "page": 1, "pages": 1, "orders": [
2 { "order": 5011, "product": 17, "name": "Facebook 1yr+", "quantity": 2,
3 "charge": "70.00", "currency": "THB", "status": "completed",
4 "accounts": 2, "created_at": "2026-07-30 12:00:00" } ] }, "request_id": "…" }
orderView credentials of a past order
/en/accounts/api/v3/order
View accounts you have already bought, anytime — only orders that belong to the key are visible
| Parameter | Required | Description |
|---|---|---|
order |
Required | Order ID |
1{ "ok": true, "data": {
2 "order": 5011, "name": "Facebook 1yr+", "quantity": 2,
3 "charge": "70.00", "currency": "THB", "status": "completed",
4 "accounts": [ "[email protected]:pass1:token…" ],
5 "created_at": "2026-07-30 12:00:00" }, "request_id": "…" }
Proxy
Buy/renew static proxies — walk the catalog in order: types → countries → shops → packages, then buy opens a pending order. IPs are provisioned within minutes; poll action=order for status and credentials.
1curl -X POST https://adsplusth.com/en/proxy/api/v3/buy -H "X-Api-Key: adp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
2 -d "package=120" -d "qty=1"
typesProxy types
/en/proxy/api/v3/types
Use the type value with countries / shops / packages
1{ "ok": true, "data": { "count": 2, "types": [
2 { "type": 1, "name": "Static ISP Residential", "name_th": "ISP บ้านแบบคงที่" },
3 { "type": 2, "name": "Static IPv4", "name_th": "IPv4 แบบคงที่" } ] }, "request_id": "…" }
countriesCountries + IP grades
/en/proxy/api/v3/countries
Countries available for that type, with a qualities field (IP grades) to use with shops / packages
| Parameter | Required | Description |
|---|---|---|
type |
Required | Type ID from action=types |
1{ "ok": true, "data": { "type": 1, "count": 1, "countries": [
2 { "country": "US", "name": "United States", "name_th": "สหรัฐอเมริกา",
3 "qualities": ["ordinary", "premium"] } ] }, "request_id": "…" }
shopsProviders
/en/proxy/api/v3/shops
Providers with stock for that type+country+grade — use the shop value to filter packages
| Parameter | Required | Description |
|---|---|---|
type |
Required | Type ID from action=types |
country |
Required | Country code from action=countries |
quality |
Optional | IP grade from the qualities field of action=countries, e.g. ordinary, premium |
1{ "ok": true, "data": { "count": 1, "shops": [ { "shop": 7, "name": "Provider A" } ] }, "request_id": "…" }
packagesPackages + prices
/en/proxy/api/v3/packages
price is the exact amount charged per IP per period — renew_price is an estimate; the actual renewal amount is computed at renew time
| Parameter | Required | Description |
|---|---|---|
type |
Required | Type ID from action=types |
country |
Required | Country code from action=countries |
quality |
Optional | Filter by IP grade (empty = all grades) |
shop |
Optional | Filter by provider (ID from action=shops — empty = all providers) |
1{ "ok": true, "data": { "count": 1, "packages": [
2 { "package": 120, "name": "ISP 30 วัน", "shop": "Provider A", "country": "US",
3 "quality": "ordinary", "duration_days": 30, "price": "175.00",
4 "renew_price": "160.00", "currency": "THB" } ] }, "request_id": "…" }
catalogFull catalog in one request
/en/proxy/api/v3/catalog
Every type/country/provider/package on sale with your prices — for syncing a whole store without walking types → countries → shops → packages · counts against the catalog quota
1{ "ok": true, "data": { "currency": "THB",
2 "types": [ { "type": 1, "name": "Static ISP Residential", "name_th": "ISP บ้านแบบคงที่",
3 "subtitle_th": "…", "subtitle_en": "…", "platforms": "…", "family": "static", "has_udp": true, "sort": 1 } ],
4 "countries": [ { "type": 1, "country": "US", "name": "United States", "name_th": "สหรัฐอเมริกา", "sort": 0 } ],
5 "shops": [ { "shop": 7, "type": 1, "country": "US", "name": "Provider A" } ],
6 "packages": [ { "package": 120, "type": 1, "shop": 7, "country": "US", "quality": "ordinary",
7 "name": "ISP 30 days", "name_th": "ISP 30 วัน", "duration_minutes": 43200,
8 "price": 175, "renew_price": 160, "auto_renew": true, "sort": 0 } ] }, "request_id": "…" }
buyBuy a package (charges wallet)
/en/proxy/api/v3/buy
Charges your wallet and opens a pending order — IPs are provisioned within ~1-5 minutes. Poll action=order until status is active, then read credentials from the ips field. Failed provisioning is refunded automatically.
| Parameter | Required | Description |
|---|---|---|
package |
Required | Package ID from action=packages |
qty |
Optional | Number of IPs (default 1, max 20) |
client_order_id |
Optional | Your reference (A-Z a-z 0-9 . _ : - up to 128 chars) — resending the same reference returns the same result (replayed: true) with no new order/charge · reusing it for a different request = DUPLICATE_ORDER |
1{ "ok": true, "data": { "order_id": 31, "status": "pending",
2 "total": "175.00", "currency": "THB", "balance": "825.00" }, "request_id": "…" }
renewRenew an IP (charges wallet)
/en/proxy/api/v3/renew
Renews an IP owned by the key owner — the amount is computed server-side at order time; the new expiry is in the response
| Parameter | Required | Description |
|---|---|---|
ip_id |
Required | IP ID from action=mine |
client_order_id |
Optional | Your reference (A-Z a-z 0-9 . _ : - up to 128 chars) — resending the same reference returns the same result (replayed: true) with no new order/charge · reusing it for a different request = DUPLICATE_ORDER |
1{ "ok": true, "data": { "order_id": 32, "ip_id": 9, "expire_at": "2026-10-04 09:00:00",
2 "total": "160.00", "currency": "THB", "balance": "665.00" }, "request_id": "…" }
autorenewToggle auto-renew
/en/proxy/api/v3/autorenew
Turns auto-renew on/off for one IP (the wallet is charged and the IP renewed before it expires) — no charge when toggling
| Parameter | Required | Description |
|---|---|---|
ip_id |
Required | IP ID from action=mine |
on |
Required | 1 = on, 0 = off |
1{ "ok": true, "data": { "ip_id": 9, "auto_renew": true }, "request_id": "…" }
labelSet IP label
/en/proxy/api/v3/label
Sets or clears an IP label (to remember what it is used for) — empty = clear
| Parameter | Required | Description |
|---|---|---|
ip_id |
Required | IP ID from action=mine |
label |
Optional | Label, up to 120 characters |
1{ "ok": true, "data": { "ip_id": 9, "label": "ร้าน A — แอดโฆษณา" }, "request_id": "…" }
ordersOrder history
/en/proxy/api/v3/orders
Buy/renew orders of the key owner (credentials via action=order or action=mine)
| Parameter | Required | Description |
|---|---|---|
page |
Optional | The page you want |
limit |
Optional | Items per page, max 200 (default 50) |
1{ "ok": true, "data": { "count": 1, "total": 1, "page": 1, "pages": 1, "orders": [
2 { "order_id": 31, "type": "new", "package": 120, "name": "ISP 30 วัน", "shop": "Provider A",
3 "country": "US", "quality": "ordinary", "quantity": 1, "duration_days": 30,
4 "total": "175.00", "currency": "THB", "status": "active", "refunded": false,
5 "created_at": "2026-08-05 09:00:00" } ] }, "request_id": "…" }
orderSingle order + credentials
/en/proxy/api/v3/order
Re-read the IPs and user/pass of your own orders anytime — renewal orders have no new ips rows (see the original IP via action=mine)
| Parameter | Required | Description |
|---|---|---|
order |
Required | Order ID |
1{ "ok": true, "data": { "order_id": 31, "type": "new", "package": 120,
2 "name": "ISP 30 วัน", "shop": "Provider A", "country": "US", "quality": "ordinary",
3 "quantity": 1, "duration_days": 30, "total": "175.00", "currency": "THB",
4 "status": "active", "refunded": false, "fulfilled_at": "2026-08-05 09:02:11",
5 "created_at": "2026-08-05 09:00:00", "ips": [
6 { "ip_id": 9, "ip": "203.0.113.10", "port": 20001, "http_port": 30001,
7 "username": "u9x…", "password": "p9x…", "country": "US", "quality": "ordinary",
8 "label": "", "expire_at": "2026-09-04 09:00:00", "auto_renew": false,
9 "status": "active" } ] }, "request_id": "…" }
mineMy IPs
/en/proxy/api/v3/mine
All IPs you hold, with credentials and expiry — use ip_id with action=renew
| Parameter | Required | Description |
|---|---|---|
page |
Optional | The page you want |
limit |
Optional | Items per page, max 200 (default 50) |
1{ "ok": true, "data": { "count": 1, "total": 1, "page": 1, "pages": 1, "ips": [
2 { "ip_id": 9, "ip": "203.0.113.10", "port": 20001, "http_port": 30001,
3 "username": "u9x…", "password": "p9x…", "country": "US", "quality": "ordinary",
4 "label": "งานร้าน A", "expire_at": "2026-09-04 09:00:00", "auto_renew": false,
5 "status": "active", "order_id": 31 } ] }, "request_id": "…" }
Error codes
This list is generated directly from code constants, so it always matches real behavior — VALIDATION_ERROR includes per-field error.fields · INSUFFICIENT_FUNDS includes charge / balance / short so you can calculate the top-up amount right away
| code | HTTP | Meaning |
|---|---|---|
METHOD_NOT_ALLOWED |
405 | ต้องเรียกด้วยวิธี POST เท่านั้น |
INVALID_BODY |
400 | อ่านเนื้อคำขอไม่ได้ (ต้องเป็น form-urlencoded หรือ JSON) |
MISSING_KEY |
401 | ไม่ได้ส่ง API key มา |
INVALID_KEY |
401 | API key ไม่ถูกต้อง |
KEY_REVOKED |
401 | API key ถูกยกเลิกแล้ว |
KEY_EXPIRED |
401 | API key หมดอายุแล้ว |
ACCOUNT_BLOCKED |
403 | บัญชีถูกระงับการใช้งาน |
API_DISABLED |
503 | ระบบ API ปิดให้บริการชั่วคราว |
UNKNOWN_ACTION |
404 | ไม่รู้จัก action นี้ |
RATE_LIMITED |
429 | เรียกถี่เกินกำหนด กรุณารอแล้วลองใหม่ |
VALIDATION_ERROR |
422 | ข้อมูลที่ส่งมาไม่ถูกต้อง |
SERVICE_NOT_FOUND |
404 | ไม่พบบริการนี้ หรือบริการถูกปิดไปแล้ว |
INSUFFICIENT_FUNDS |
402 | ยอดเงินในกระเป๋าไม่พอ |
DUPLICATE_ORDER |
409 | รายการนี้เพิ่งถูกสั่งไปแล้ว ระบบไม่ได้สั่งซ้ำให้ |
ORDER_NOT_FOUND |
404 | ไม่พบคำสั่งซื้อนี้ในบัญชีของคุณ |
TOO_MANY_IDS |
400 | ส่งเลขคำสั่งซื้อมามากเกินกำหนดต่อหนึ่งคำขอ |
NOT_SUPPORTED |
400 | บริการนี้ไม่รองรับคำสั่งดังกล่าว |
ORDER_DISABLED |
503 | ระบบสั่งซื้อปิดอยู่ชั่วคราว |
FEATURE_DISABLED |
503 | ระบบยกเลิก/ขอเติมยอดยังไม่เปิดใช้งาน |
PROVIDER_ERROR |
502 | ผู้ให้บริการปฏิเสธคำขอ |
PROVIDER_UNAVAILABLE |
503 | ติดต่อผู้ให้บริการไม่ได้ชั่วคราว |
INTERNAL |
500 | ระบบขัดข้อง กรุณาลองใหม่หรือแจ้งแอดมิน |
Rules to know before you integrate
- Automatic duplicate protection — an identical request within 60 seconds returns
DUPLICATE_ORDERand is not charged again - Failed order = automatic refund — if you are charged but the provider rejects it, the system refunds your wallet and logs the history
- Up to 5 keys per account — use a separate key per integration so a leak only needs that one revoked
- Only a fingerprint of the key is stored — if you lose it, it cannot be recovered; revoke it and create a new one
- Every request is logged, both successful and rejected — review them on the My API keys page