← Back to home v2 — JAP-compatible

Reseller API

Drop-in compatible with existing SMM panel scripts. If your reseller tools already talk to a JAP/Perfectpanel API, they'll work against this endpoint without changes.

Get your API key →

On this page

Quick start Authentication Action: services Action: balance Action: add (place order) Action: status Action: orders (multi-status) Action: cancel Action: refill Action: refill_status Errors & rate limits

Quick start

Every call is a single POST to /api/v2 with form-urlencoded (or JSON) body. The body must include key (your API key) and action (what you want to do). All responses are JSON.

POSThttps://smmpremium.in/api/v2

Test it in 30 seconds with curl:

curl -X POST https://smmpremium.in/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=balance"

# → {"balance":"250.00","currency":"INR"}

Authentication

Each customer can generate one API key from Profile → Reseller API. Orders placed via that key debit your wallet, not the store's. Refills, status checks, and cancellations all scope to the orders you placed via the API — you cannot see other customers' orders.

Keep it secret. Treat the key like a password. If it leaks, click Rotate on the Profile page — the old key 401s on the next call.

services — list catalog

Returns every enabled service on the panel with min/max quantity, rate per 1,000, and which features (refill, dripfeed) are supported.

curl -X POST https://smmpremium.in/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=services"

# → [
#     {
#       "service": 1234,
#       "name": "Instagram Followers — Real & Active",
#       "type": "Default",
#       "category": "Instagram Followers",
#       "rate": "1.2000",
#       "min": 100,
#       "max": 500000,
#       "dripfeed": true,
#       "refill": true,
#       "cancel": true
#     },
#     ...
#   ]

balance — wallet snapshot

Returns your wallet balance and its currency. INR everywhere on smmpremium.in.

curl -X POST https://smmpremium.in/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=balance"

# → {"balance":"1240.50","currency":"INR"}

add — place an order

Creates an order, debits your wallet, and forwards it to the upstream provider in the background.

FieldTypeDescription
keystring requiredYour API key.
actionstring requiredMust be add.
serviceinteger requiredService ID from the services action.
linkstring requiredTarget URL (Instagram profile, YouTube video, etc.) — must start with http(s)://.
quantityinteger requiredMust be between the service's min and max.
runsinteger optionalFor dripfeed-enabled services: number of delivery batches.
intervalinteger optionalFor dripfeed: minutes between batches.
curl -X POST https://smmpremium.in/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=add" \
  -d "service=1234" \
  -d "link=https://instagram.com/yourprofile" \
  -d "quantity=500"

# → {"order":"K7M2X9"}

status — one order

curl -X POST https://smmpremium.in/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=status" \
  -d "order=K7M2X9"

# → {
#     "charge":"6.00",
#     "start_count":1240,
#     "status":"In progress",
#     "remains":"320",
#     "currency":"INR"
#   }

orders — many orders in one call

Pass a comma-separated list of IDs. Useful for dashboards that refresh dozens of orders at once.

curl -X POST https://smmpremium.in/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=orders" \
  -d "orders=K7M2X9,K7M2Y0,K7M2Z1"

# → {
#     "K7M2X9":{"charge":"6.00","start_count":1240,"status":"Completed","remains":"0","currency":"INR"},
#     "K7M2Y0":{"charge":"1.20","start_count":52,"status":"In progress","remains":"48","currency":"INR"},
#     "K7M2Z1":{"charge":"3.00","status":"Pending","remains":"250","currency":"INR"}
#   }

cancel — cancel order(s)

Refunds your wallet for any order not yet completed/canceled/refunded. Best-effort — the upstream provider may have already started, in which case the cancel is rejected.

curl -X POST https://smmpremium.in/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=cancel" \
  -d "orders=K7M2X9"

# → {"order":"K7M2X9","cancel":{"status":"success"}}

refill — request a refill

For services with refill: true. Use after an order has completed but the count has dropped within the warranty window.

curl -X POST https://smmpremium.in/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=refill" \
  -d "order=K7M2X9"

# → {"refill":"R88421"}

refill_status — poll a refill

curl -X POST https://smmpremium.in/api/v2 \
  -d "key=YOUR_API_KEY" \
  -d "action=refill_status" \
  -d "refill=R88421"

# → {"status":"Completed"}

Errors & rate limits

CodeMeaningWhat to do
400Bad requestMissing or malformed field. Read the error string.
401Invalid API keyKey is wrong, revoked, or was rotated. Refresh from Profile.
402Insufficient balanceTop up your wallet from the dashboard.
403Account suspendedContact support.
404Not foundOrder, service, or refill ID doesn't belong to your key.
429Rate limitedMax 100 requests/min per key. Wait Retry-After seconds.
500Server errorRetry after a few seconds. Persistent — open a support ticket.

JAP status mapping

The status field returned by status/orders uses the standard JAP/Perfectpanel vocabulary so existing reseller scripts just work:

ValueMeans
PendingOrder accepted, awaiting provider acceptance.
In progressProvider has started delivery.
ProcessingSame as in progress (used by some providers).
CompletedAll quantity delivered.
PartialProvider could not finish, remaining was refunded.
CanceledCanceled by you or refused by provider.

Questions? Open a ticket from Support or ping us on WhatsApp.