Developers

GreatSMM API — SMM Panel HTTP API Reference

Automate service discovery, order creation, status polling, refills, and balance lookups against greatsmm.pro. The API follows the standard Perfect Panel contract, so libraries and code samples written for any panel in the same family work here without modification.

Need an integration account? Create a free account, then sign in and copy your API key from account settings. Service IDs returned by the services method always match the IDs on the public services catalog. Commercial scope lives in the Terms of Service.

Endpoint, Authentication & HTTP Contract

Base endpoint

POST https://greatsmm.pro/api/v2

Request format

  • HTTP method: POST
  • Content-Type: application/x-www-form-urlencoded (recommended) or multipart/form-data
  • Every request must include your private key and the action parameter
  • Rate-limit your cron jobs and back off on errors so the panel stays stable for every reseller

Response format

All responses are JSON. Successful responses return the requested object; failures return an error string. HTTP status is 200 even when the payload contains error — always check the JSON body, not the status code.

Authentication errors

{ "error": "Incorrect API key" }

Never embed your API key in client-side JavaScript. Keep it in server-side environment variables and regenerate it from account settings if it leaks.

Available Methods

  • services — list every service available on the panel
  • add — create a new order (default, drip-feed, custom comments, subscriptions, mentions, polls, packages)
  • status — check the status of a single order
  • multi-status — check the status of up to 100 orders in one call
  • refill — request a refill on a single completed order
  • refill (bulk) — request refill on up to 100 orders at once
  • refill_status — check the status of a refill task
  • cancel — cancel pending orders (where supported)
  • balance — return your current account balance and currency

services — list services

Returns every active service ID, name, category, type, rate per 1,000, minimum / maximum quantities, refill / cancel flags, and whether the service supports drip-feed.

Parameters

ParameterDescription
keyYour API key
actionservices

Example response

[
  {
    "service": 11,
    "name": "Instagram Likes [5to10K+/Day][R45]",
    "type": "Default",
    "category": "Best Seller Services",
    "rate": "0.07",
    "min": "10",
    "max": "5000000",
    "refill": true,
    "cancel": true
  },
  {
    "service": 17,
    "name": "Youtube Views[R30][Instant][1K to 2K/Day]",
    "type": "Default",
    "category": "Non Drop Youtube views",
    "rate": "1.46",
    "min": "50",
    "max": "1000000000",
    "refill": true,
    "cancel": false
  }
]

add — create new order

Submit a new order. The parameter set depends on the service type returned by services. The seven type variants are documented below.

Default order

ParameterDescription
keyYour API key
actionadd
serviceService ID from the services method
linkPublic URL of the target (profile, post, video, channel, live stream)
quantityQuantity within the service's minmax range

Drip-feed order (Type: Default with drip-feed enabled)

ParameterDescription
keyYour API key
actionadd
serviceService ID
linkPublic URL of the target
quantityQuantity per run
runsNumber of runs to spread over
intervalInterval in minutes between runs

Custom comments (Type: Custom Comments)

ParameterDescription
keyYour API key
actionadd
serviceService ID
linkPublic URL of the target post
commentsNewline-separated list of comment strings

Mentions (Type: Mentions, Mentions with Hashtags, Mentions Custom List)

ParameterDescription
keyYour API key
actionadd
serviceService ID
linkPublic URL of the target post
quantityQuantity
usernamesNewline-separated usernames (Custom List only)
hashtagsNewline-separated hashtags (Mentions with Hashtags only)

Subscriptions (Type: Subscriptions)

ParameterDescription
keyYour API key
actionadd
serviceService ID
usernameTarget username (without @)
minMinimum quantity per new post
maxMaximum quantity per new post
postsNumber of new posts to apply to (optional)
delayStart delay in minutes (optional)
expiryExpiry date in d/m/Y format (optional)

Polls (Type: Poll)

ParameterDescription
keyYour API key
actionadd
serviceService ID
linkPublic URL of the poll
quantityQuantity of votes
answer_numberThe answer index to vote for (1, 2, 3, …)

Example response

{ "order": 123456 }

status — single order status

ParameterDescription
keyYour API key
actionstatus
orderOrder ID returned by add

Example response

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

Possible status values

Pending, In progress, Processing, Completed, Partial, Canceled.

status — multiple orders status

Pass up to 100 order IDs as a comma-separated string.

ParameterDescription
keyYour API key
actionstatus
ordersUp to 100 IDs, comma-separated (1,10,100)

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"
  }
}

refill — create refill task for one order

ParameterDescription
keyYour API key
actionrefill
orderOrder ID

Example response

{ "refill": "1" }

refill — bulk refill (up to 100 orders)

ParameterDescription
keyYour API key
actionrefill
ordersComma-separated order IDs (e.g. 1,2,3)

Example response

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

refill_status — refill status

Single refill — use refill parameter. Bulk (up to 100) — use refills comma-separated.

ParameterDescription
keyYour API key
actionrefill_status
refill or refillsRefill task ID, or comma-separated IDs

Example response (single)

{ "status": "Completed" }

Possible refill statuses

Pending, In progress, Completed, Rejected.

cancel — cancel orders

Cancels orders that are still in Pending state and where the underlying service supports cancellation (cancel: true on the services response).

ParameterDescription
keyYour API key
actioncancel
ordersComma-separated order IDs (up to 100)

Example response

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

balance — account balance

ParameterDescription
keyYour API key
actionbalance

Example response

{
  "balance": "100.84292",
  "currency": "USD"
}

Code Examples

PHP (cURL)

<?php
$api_url = 'https://greatsmm.pro/api/v2';
$api_key = 'YOUR_API_KEY';

$post = http_build_query([
    'key'      => $api_key,
    'action'   => 'add',
    'service'  => 11,
    'link'     => 'https://instagram.com/p/EXAMPLE/',
    'quantity' => 100,
]);

$ch = curl_init($api_url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $post,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_TIMEOUT        => 30,
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);

Python (requests)

import requests

API_URL = "https://greatsmm.pro/api/v2"
API_KEY = "YOUR_API_KEY"

payload = {
    "key": API_KEY,
    "action": "add",
    "service": 11,
    "link": "https://instagram.com/p/EXAMPLE/",
    "quantity": 100,
}

response = requests.post(API_URL, data=payload, timeout=30)
print(response.json())

Node.js (axios)

import axios from 'axios';
import qs from 'querystring';

const API_URL = 'https://greatsmm.pro/api/v2';
const API_KEY = process.env.GREATSMM_API_KEY;

const body = qs.stringify({
  key: API_KEY,
  action: 'add',
  service: 11,
  link: 'https://instagram.com/p/EXAMPLE/',
  quantity: 100,
});

const { data } = await axios.post(API_URL, body, {
  headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
  timeout: 30000,
});

console.log(data);

cURL (shell)

curl -X POST "https://greatsmm.pro/api/v2" \
  --data-urlencode "key=YOUR_API_KEY" \
  --data-urlencode "action=add" \
  --data-urlencode "service=11" \
  --data-urlencode "link=https://instagram.com/p/EXAMPLE/" \
  --data-urlencode "quantity=100"

Additional Methods Configured by This Panel

These entries come from the admin-configured method list and may extend or override the standard contract above.

Error Reference

Common error strings returned in the error field:

  • Incorrect API key — the key parameter is missing, malformed, or revoked. Regenerate from account settings.
  • Incorrect action — the action parameter is missing or not one of the supported method names.
  • Incorrect service ID — service was disabled, removed, or you mistyped the ID. Refresh the list with services.
  • Not enough funds on balance — top up via Add funds after sign-in.
  • Incorrect order ID — order does not exist or belongs to another account.
  • Incorrect order status — the order cannot accept the requested action (e.g. canceling an already-completed order).
  • Incorrect link — URL fails the service's validator (private profile, deleted post, wrong domain).
  • Quantity out of range — quantity is below min or above max for the service.
  • Active order with the same link exists — wait for the previous order on this URL to finish or use a different service.

Integration Best Practices

  1. Cache services — call it once per hour, not per order. Service IDs are stable; rates and min/max can shift inside that window so a 60-minute cache is the conservative default.
  2. Validate ranges client-side — read min and max from the cached service list and reject out-of-range quantities before they hit the API.
  3. Poll with multi-status — group up to 100 orders per call instead of one request per order. Saves API quota and finishes a daily reconciliation in seconds.
  4. Back off on errors — exponential back-off starting at 2 seconds avoids flooding the panel during supplier outages. Retry only on network errors and 5xx, never on logical error strings.
  5. Store both charge and currency — the panel may run in a different base currency than the user; storing both fields prevents reconciliation drift.
  6. Use refill buttons strategically — refills are free but suppliers prioritise new orders. Schedule refill polling in off-peak windows.
  7. Never embed the API key in client JS — keep it server-side. Public-facing apps should proxy through your own backend, which holds the secret.

Related Documentation

Pair these automation docs with the public catalog (service IDs and rates) and the plain-language guides on the FAQ. Commercial scope and refill terms sit in the Terms of Service. Refund handling is on the Refund Policy page. Data handling and your statutory rights are in the Privacy Policy.