SMMFollows API v2
Connect your website, app or reseller panel to SMMFollows. The API lets you load the service list, place orders, track them, request refills and cancels, and check your balance.
Every request is a POST to the same URL. The action parameter selects what the request does. Send parameters as form fields (application/x-www-form-urlencoded).
Authentication
Every request needs your API key in the key parameter. You find it in the account settings of your smmfollows.com account.
Quick start
Check that your key works by reading your balance.
curl -X POST https://smmfollows.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=balance<?php
$ch = curl_init('https://smmfollows.com/api/v2');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => http_build_query([
'key' => 'YOUR_API_KEY',
'action' => 'balance',
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $response['balance'] . ' ' . $response['currency'];import requests
API_URL = "https://smmfollows.com/api/v2"
API_KEY = "YOUR_API_KEY"
def call(action, **params):
r = requests.post(API_URL, data={"key": API_KEY, "action": action, **params}, timeout=30)
r.raise_for_status()
return r.json()
print(call("balance"))
# {'balance': '100.84292', 'currency': 'USD'}const API_URL = "https://smmfollows.com/api/v2";
const API_KEY = process.env.SMMFOLLOWS_API_KEY;
async function call(action, params = {}) {
const res = await fetch(API_URL, {
method: "POST",
body: new URLSearchParams({ key: API_KEY, action, ...params }),
});
return res.json();
}
console.log(await call("balance"));
// { balance: '100.84292', currency: 'USD' }POSTService list
Returns every service you can order, with its ID, type, price per 1000 and limits.
| Parameter | Description |
|---|---|
key | Your API key |
action | services |
Example response
[
{
"service": 1,
"name": "Followers",
"type": "Default",
"category": "First Category",
"rate": "0.90",
"min": "50",
"max": "10000",
"refill": true,
"cancel": true
},
{
"service": 2,
"name": "Comments",
"type": "Custom Comments",
"category": "Second Category",
"rate": "8",
"min": "10",
"max": "1500",
"refill": false,
"cancel": true
}
]
rateis the price per 1000 units in your account currency.typetells you which parameters Add order needs.refillandcanceltell you whether the service supports those actions.
POSTAdd order
Creates an order. Always send key, action=add and service. The other parameters depend on the service type from the service list.
| Service type | Parameters (besides key, action, service) |
|---|---|
| Default | link, quantity, runs (optional, runs to deliver), interval (optional, minutes between runs) |
| Package | link |
| SEO | link, quantity, keywords (one per line) |
| Custom Comments | link, comments (one per line) |
| Mentions Hashtag | link, quantity, hashtag (hashtag to scrape usernames from) |
| Mentions User Followers | link, quantity, username (URL to scrape followers from) |
| Custom Comments Package | link, comments (one per line) |
| Comment Likes | link, quantity, username (username of the comment owner) |
| Poll | link, quantity, answer_number |
| Comment Replies | link, username, comments (one per line) |
| Invites from Groups | link, quantity, groups (one per line) |
| Subscriptions | username, min, max, delay, posts (optional), old_posts (optional), expiry (optional, d/m/Y) |
Lists (keywords, comments, groups) are separated by \n or \r\n.
Subscriptions
delay: minutes to wait before each new post is processed. Allowed values: 0, 5, 10, 15, 20, 30, 40, 50, 60, 90, 120, 150, 180, 210, 240, 270, 300, 360, 420, 480, 540, 600.posts: limits how many new (future) posts get an order. Without it, the subscription has no post limit.old_posts: how many existing posts also get an order, where the service supports it.
Example request
curl -X POST https://smmfollows.com/api/v2 \
-d key=YOUR_API_KEY \
-d action=add \
-d service=1 \
-d link=https://www.instagram.com/yourprofile/ \
-d quantity=1000
Example response
{
"order": 23501
}
Store the returned order ID. You need it for status, refill and cancel requests.
POSTOrder status
| Parameter | Description |
|---|---|
key | Your API key |
action | status |
order | Order ID |
Example response
{
"charge": "0.27819",
"start_count": "3572",
"status": "Partial",
"remains": "157",
"currency": "USD"
}
charge: what the order cost.start_count: the counter on the link when the order started.remains: units not delivered yet.
POSTMultiple orders status
| Parameter | 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"
},
"100": {
"charge": "1.44219",
"start_count": "234",
"status": "In progress",
"remains": "10",
"currency": "USD"
}
}
The response is keyed by order ID. An invalid ID returns an error for that ID only, and the rest of the batch still works.
POSTCreate refill
Requests a refill for an order whose service supports refills ("refill": true in the service list).
| Parameter | Description |
|---|---|
key | Your API key |
action | refill |
order | Order ID |
Example response
{
"refill": "1"
}
Multiple refills
Send orders (comma separated, up to 100) in place of order.
[
{
"order": 1,
"refill": 1
},
{
"order": 2,
"refill": 2
},
{
"order": 3,
"refill": {
"error": "Incorrect order ID"
}
}
]
POSTRefill status
| Parameter | Description |
|---|---|
key | Your API key |
action | refill_status |
refill | Refill ID |
Example response
{
"status": "Completed"
}
Multiple refill status
Send refills (comma separated, up to 100) in place of refill.
[
{
"refill": 1,
"status": "Completed"
},
{
"refill": 2,
"status": "Rejected"
},
{
"refill": 3,
"status": {
"error": "Refill not found"
}
}
]
POSTCreate cancel
Requests cancellation for orders whose service supports it ("cancel": true in the service list).
| Parameter | Description |
|---|---|
key | Your API key |
action | cancel |
orders | Order IDs separated by a comma, up to 100 IDs |
Example response
[
{
"order": 9,
"cancel": {
"error": "Incorrect order ID"
}
},
{
"order": 2,
"cancel": 1
}
]
POSTUser balance
| Parameter | Description |
|---|---|
key | Your API key |
action | balance |
Example response
{
"balance": "100.84292",
"currency": "USD"
}
Errors
When a request fails, the response contains an error field with a readable message, for example:
{
"error": "Incorrect order ID"
}
In batch requests (multiple status, refills, cancels) the error appears per item, so check each entry instead of the whole response.
Best practices
- Cache the service list. Load
servicesonce and refresh it every few hours instead of on every page view. - Check status in batches. Use
orderswith up to 100 IDs per request instead of one request per order. - Poll at a calm pace. Every few minutes is enough for most services. Stop polling orders that are
Completed,PartialorCanceled. - Save the order ID right away. Write it to your database before you show anything to your customer, so a timeout never leaves you with an unknown order.
- Validate before ordering. Check
minandmaxfrom the service list and the link format on your side. - Watch your balance. Call
balancebefore large or mass orders.
Child panels
Don't want to write code? A SMMFollows child panel gives you a ready-made SMM panel on your own domain, already connected to SMMFollows. You add the provider in /admin/settings/providers with your API key, and orders from your customers are forwarded automatically.
PHP class
The official PHP class wraps every action: services(), order(), status(), multiStatus(), refill(), multiRefill(), refillStatus(), multiRefillStatus(), cancel() and balance(), with an example for each service type.
$api = new Api();
$api->api_key = 'YOUR_API_KEY';
$services = $api->services();
$order = $api->order(['service' => 1, 'link' => 'http://example.com/test', 'quantity' => 100]);
$status = $api->status($order->order);
$balance = $api->balance();
Ready to connect?
Create an account on smmfollows.com and copy your API key from the account settings.