SMM PWROpen in the app
Open

SMM Panel API for Resellers

HTTP Method POST (GET is accepted as well)
API URL https://smmpwr.com/api/v2
Response format JSON
Authentication key parameter (api_key is accepted too). An invalid key returns HTTP 401 with {"error":"Invalid API key"}
Errors HTTP 200 with {"error":"..."} in the body

Service list

Parameters Description
key Your API key
action services
response: description Our own service description - sent in both `description` and `desc`

Example response

[
  {
    "service": "2",
    "name": "Instagram Followers | Max 10M | 365 Days Refill | Mix Users",
    "type": "Default",
    "category": "Instagram Followers",
    "rate": "0.7400",
    "min": "10",
    "max": "10000000",
    "refill": true,
    "cancel": true,
    "dripfeed": false,
    "description": "⚔ Instagram Followers\n\nšŸ“¦ Min order: 10\nā™»ļø Refill: 365 Days"
  }
]

Add order

Parameters Description
key Your API key
action add
service Service ID from the service list
link Link to page (maximum 500 characters)
quantity Needed quantity - between the service min and max
runs (optional) Runs to deliver
interval (optional) Interval in minutes

Example response

{
  "order": 23501
}

Order status

Parameters Description
key Your API key
action status
order Order ID
response: status One of: Pending, In progress, Processing, Completed, Partial, Canceled

Example response

{
  "charge": "0.27819",
  "start_count": "3572",
  "status": "Partial",
  "remains": "157",
  "currency": "USD"
}

Multiple orders status

Parameters Description
key Your API key
action status
orders Order IDs separated by a comma (up to 100 IDs)

Example response

{
  "1": {
    "charge": "0.27819",
    "start_count": "3572",
    "status": "Partial",
    "remains": "157",
    "currency": "USD"
  },
  "10": {
    "error": "Incorrect order ID"
  }
}

Create refill

Parameters Description
key Your API key
action refill
order Order ID

Example response

{
  "refill": "1"
}

Create multiple refill

Parameters Description
key Your API key
action refill
orders Order IDs separated by a comma (up to 100 IDs)

Example response

[
  {
    "order": 1,
    "refill": 1
  },
  {
    "order": 2,
    "refill": {
      "error": "Incorrect order ID"
    }
  }
]

Get refill status

Parameters Description
key Your API key
action refill_status
refill Refill ID

Example response

{
  "status": "Completed"
}

Get multiple refill status

Parameters Description
key Your API key
action refill_status
refills Refill IDs separated by a comma (up to 100 IDs)

Example response

[
  {
    "refill": 1,
    "status": "Completed"
  },
  {
    "refill": 2,
    "status": {
      "error": "Refill not found"
    }
  }
]

Create cancel

Parameters Description
key Your API key
action cancel
orders Order IDs separated by a comma (up to 100 IDs)

Example response

[
  {
    "order": 1,
    "cancel": 1
  },
  {
    "order": 2,
    "cancel": {
      "error": "Incorrect order ID"
    }
  }
]

User balance

Parameters Description
key Your API key
action balance

Example response

{
  "balance": "100.84292",
  "currency": "USD"
}
Example of PHP code

Using SMM PWR as your provider

The API follows the standard SMM panel API v2 specification. If your panel already talks to other providers, it will talk to us without code changes: point it at the endpoint above, drop in your key and import the service list.

What the API covers

Reseller notes

Requests go over HTTPS with your key as a POST parameter. The key lives on your account page and you can regenerate it whenever you want.

Service descriptions

Every service in the services response carries its own description — order limits, refill term and support status. We write them ourselves per service rather than copying a supplier’s marketing text, so what you show your customers is the same thing we show ours.

If your panel runs the standard SMM panel software, tick Copy descriptions when you import our catalogue and each service arrives with its description filled in instead of an empty field.

Services you imported before that option existed do not fill in by themselves. Import them again with the box ticked and the descriptions come across. If you would rather not re-import, paste this small helper into your own admin console — it reads the same public list and fills the descriptions in place. Either way your service IDs, prices and API calls stay exactly as they are.

If you would rather not build anything

A child panel gives you a branded front end on your own domain for $25 per month: your prices, your logo, our catalogue and delivery behind it. You supply the domain and point its nameservers to ours. A child panel sources only from SMM PWR, which is fine if we are your main supplier and limiting if you want several. Order it from your account.

If you do not want to run a panel at all, the affiliate program pays 10% of every top-up your referrals make, with a $10 minimum payout.

One practical warning: refresh the service list on a schedule and diff it. Supplier catalogues change, and a cached list quietly turns into wrong prices and failed orders. There is more on that in our reseller API guide.

Browse the current price list before you integrate.

Code examples

Every call is a POST to the same endpoint carrying your key and an action. The three below place an order and read the reply the safe way; swap the action and parameters for anything in the tables above.

cURL

curl -s https://smmpwr.com/api/v2 \
  -d key=YOUR_API_KEY \
  -d action=add \
  -d service=101 \
  -d link=https://instagram.com/p/EXAMPLE \
  -d quantity=1000

PHP

<?php
$ch = curl_init('https://smmpwr.com/api/v2');
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 30,
    CURLOPT_POSTFIELDS     => http_build_query([
        'key'      => 'YOUR_API_KEY',
        'action'   => 'add',
        'service'  => 101,
        'link'     => 'https://instagram.com/p/EXAMPLE',
        'quantity' => 1000,
    ]),
]);
$body = curl_exec($ch);
curl_close($ch);

$res = json_decode($body, true);
if (isset($res['error'])) {          // arrives with HTTP 200 - see below
    throw new RuntimeException($res['error']);
}
echo $res['order'];                  // e.g. 23501

Python

import requests

r = requests.post("https://smmpwr.com/api/v2", timeout=30, data={
    "key": "YOUR_API_KEY",
    "action": "add",
    "service": 101,
    "link": "https://instagram.com/p/EXAMPLE",
    "quantity": 1000,
})

res = r.json()
if "error" in res:                    # arrives with HTTP 200 - see below
    raise RuntimeError(res["error"])
print(res["order"])                   # e.g. 23501

Reading the response

The HTTP status code is not a reliable success signal. A bad key is rejected with 401, but every other failure — unknown service, malformed link, a quantity outside the service limits, an order ID that is not yours — comes back as 200 OK with an error key in the body. Check for that key on every call instead of branching on the status code. This is the single most common reason an integration looks fine and silently drops orders.

MessageHTTPWhat it means
Invalid API key401 Key missing, mistyped or regenerated
Account is blocked401 The account behind the key cannot place orders
Incorrect request200 Unknown action, or a required parameter is missing
Incorrect service ID200 The service is not in your list, or is no longer sold
Incorrect link200 Link empty, over 500 characters, or wrong shape for the service
Incorrect quantity200 Below the service minimum or above its maximum
Incorrect order ID200 No such order on this account
Refill not found200 The refill ID does not exist or has expired

A successful add returns nothing but the new order number: {"order": 23501}. A successful status returns charge, start_count, status, remains and currency.

Polling without wasting calls

Two habits keep an integration cheap and fast:

API: frequently asked questions

What API does SMM PWR use?

SMM PWR speaks the standard SMM panel API v2 specification. The endpoint is https://smmpwr.com/api/v2, requests are POST (GET is accepted as well) and every response is JSON. A panel that already talks to other providers works with us without code changes.

How do I get an API key?

Open a free account and the key appears on your account page. You can regenerate it at any time. Send it as the key parameter (api_key is accepted too); an invalid key returns HTTP 401 with {"error":"Invalid API key"}.

Which actions does the API support?

services returns the full catalogue with prices and order limits, add places an order, status reads one order or up to 100 at once, refill and cancel work on services that allow them, and balance returns your remaining balance and currency.

How many services can I pull through the API?

The services action returns the whole live catalogue - 1,466 services at the moment - with the price, minimum, maximum and our own description for each one. It is the same list customers see on the price list, not a reduced feed.

Is there a minimum spend or subscription to use the API?

No. Registration is free, there is no subscription and no minimum monthly spend. You top up a balance and spend it; the rate you see on the price list is the rate the API charges.

Do service descriptions come through the API?

Yes. Every service in the services response carries its own description field with order limits, refill term and support status. We write those ourselves per service rather than copying a supplier's marketing text.

Can I resell under my own brand instead of building an integration?

Yes. A child panel gives you a branded front end on your own domain for $25 per month: your prices, your logo, our catalogue and delivery behind it. You supply the domain and point its nameservers to ours. Order it from your account.