API Documentation
Connect your panel to MysticSMM and start reselling. Our API follows the standard SMM panel protocol — if you've used any SMM API before, you'll feel right at home.
1. Create Account
Sign up and get your API key from Settings
2. Add Funds
Deposit minimum $1 via crypto
3. Start Ordering
Send POST requests and grow
Authentication
All requests use POST method with a JSON body. Include your API key in every request.
POST https://mysticsmm.com/api/v2{
"key": "YOUR_API_KEY",
"action": "services | add | status | balance"
}List Services
Get the full catalog of available services with pricing, quantity limits, and refill support.
Request
{
"key": "YOUR_API_KEY",
"action": "services"
}Response
[
{
"service": 1,
"name": "Instagram Followers - Premium",
"category": "Instagram",
"rate": 2.50,
"min": 100,
"max": 100000,
"refill": true,
"cancel": false,
"dripfeed": false,
"currency": "USD"
},
...
]Response Fields
| Parameter | Type | Required | Description |
|---|---|---|---|
| service | number | Yes | Unique service ID — use this when placing orders |
| name | string | Yes | Service display name |
| category | string | Yes | Platform category (Instagram, YouTube, TikTok, etc.) |
| rate | number | Yes | Price per 1,000 units in USD |
| min | number | Yes | Minimum order quantity |
| max | number | Yes | Maximum order quantity |
| refill | boolean | Yes | Whether automatic refills are supported |
| cancel | boolean | Yes | Whether order cancellation is available |
| dripfeed | boolean | Yes | Whether drip-feed delivery is available |
Place Order
Create a new order. The cost is calculated as (rate ÷ 1000) × quantity and deducted from your wallet automatically.
Request
{
"key": "YOUR_API_KEY",
"action": "add",
"service": 1,
"link": "https://instagram.com/username",
"quantity": 1000
}| Parameter | Type | Required | Description |
|---|---|---|---|
| key | string | Yes | Your API key |
| action | string | Yes | Must be "add" |
| service | number | Yes | Service ID from the services list |
| link | string | Yes | Target URL (profile, post, video, etc.) |
| quantity | number | Yes | Order quantity (between service min and max) |
Success Response
{
"order": 12345
}Error Responses
// Insufficient balance
{ "error": "Insufficient balance in wallet." }
// Invalid quantity
{ "error": "Quantity must be between 100 and 100000" }
// Service not found
{ "success": false, "name": "SERVICE_NOT_FOUND", "message": "Service not found or unauthorized" }Order Status
Check the delivery status and charge for any order.
Request
{
"key": "YOUR_API_KEY",
"action": "status",
"order": 12345
}Response
{
"charge": 2.50,
"status": "COMPLETED",
"currency": "USD",
"start_count": 1520,
"remains": 0
}Response Fields
| Parameter | Type | Required | Description |
|---|---|---|---|
| charge | number | Yes | Amount charged for this order |
| status | string | Yes | Current order status (see table below) |
| currency | string | Yes | Currency of the charge |
| start_count | number | No | Count at the moment the order started processing |
| remains | number | No | Quantity remaining to be delivered (used for partial/cancelled refunds) |
Status Values
| Status | Meaning |
|---|---|
| PENDING | Order is queued for processing |
| IN_PROGRESS | Order is actively being delivered |
| PROCESSING | Provider is working on the order |
| COMPLETED | All units have been fully delivered |
| PARTIAL | Partially delivered — undelivered portion refunded to wallet |
| CANCELLED | Order was cancelled — refund based on undelivered quantity |
Refunds & Partial Delivery
Refunds are processed automatically when an order is cancelled or partially delivered. The refund amount is calculated based on the undelivered quantity.
How Refunds Work
Partial Delivery
If only part of the order is delivered, you are refunded for the undelivered portion.
refund = (remains ÷ quantity) × chargeCancelled Order
If the order is cancelled before any delivery, you get a full refund. If some units were already delivered, only the undelivered portion is refunded.
refund = remains > 0 ? (remains ÷ quantity) × charge : full chargeExample
// You ordered 10,000 followers at $2.50/1K = $25.00
// Provider delivered 7,000 and marked as PARTIAL
// remains = 3,000
refund = (3000 / 10000) × 25.00 = $7.50
// $7.50 is automatically credited to your walletCheck Balance
Retrieve your current wallet balance and currency.
Request
{
"key": "YOUR_API_KEY",
"action": "balance"
}Response
{
"balance": "150.00",
"currency": "USD"
}Code Examples
Copy-paste examples to get started in your favorite language.
PHP
<?php
$api_url = 'https://mysticsmm.com/api/v2';
// Place an order
$response = file_get_contents($api_url, false, stream_context_create([
'http' => [
'method' => 'POST',
'header' => 'Content-Type: application/json',
'content' => json_encode([
'key' => 'YOUR_API_KEY',
'action' => 'add',
'service' => 1,
'link' => 'https://instagram.com/username',
'quantity' => 1000,
]),
],
]));
$result = json_decode($response, true);
echo "Order ID: " . $result['order'];
?>Python
import requests
API_URL = 'https://mysticsmm.com/api/v2'
API_KEY = 'YOUR_API_KEY'
# List all services
services = requests.post(API_URL, json={
'key': API_KEY,
'action': 'services',
}).json()
# Place an order
order = requests.post(API_URL, json={
'key': API_KEY,
'action': 'add',
'service': 1,
'link': 'https://instagram.com/username',
'quantity': 1000,
}).json()
print(f"Order ID: {order['order']}")
# Check order status
status = requests.post(API_URL, json={
'key': API_KEY,
'action': 'status',
'order': order['order'],
}).json()
print(f"Status: {status['status']}")
# Check balance
balance = requests.post(API_URL, json={
'key': API_KEY,
'action': 'balance',
}).json()
print(f"Balance: ${balance['balance']}")JavaScript / Node.js
const API_URL = 'https://mysticsmm.com/api/v2';
const API_KEY = 'YOUR_API_KEY';
async function smmRequest(params) {
const res = await fetch(API_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ key: API_KEY, ...params }),
});
return res.json();
}
// List services
const services = await smmRequest({ action: 'services' });
// Place order
const order = await smmRequest({
action: 'add',
service: 1,
link: 'https://instagram.com/username',
quantity: 1000,
});
console.log('Order ID:', order.order);
// Check status
const status = await smmRequest({
action: 'status',
order: order.order,
});
console.log('Status:', status.status);
// Check balance
const balance = await smmRequest({ action: 'balance' });
console.log('Balance:', balance.balance);cURL
# List services
curl -X POST https://mysticsmm.com/api/v2 \
-H "Content-Type: application/json" \
-d '{"key": "YOUR_API_KEY", "action": "services"}'
# Place order
curl -X POST https://mysticsmm.com/api/v2 \
-H "Content-Type: application/json" \
-d '{"key": "YOUR_API_KEY", "action": "add", "service": 1, "link": "https://instagram.com/username", "quantity": 1000}'
# Check order status
curl -X POST https://mysticsmm.com/api/v2 \
-H "Content-Type: application/json" \
-d '{"key": "YOUR_API_KEY", "action": "status", "order": 12345}'
# Check balance
curl -X POST https://mysticsmm.com/api/v2 \
-H "Content-Type: application/json" \
-d '{"key": "YOUR_API_KEY", "action": "balance"}'Pricing Formula
cost = (rate ÷ 1000) × quantityExample: Service with rate = $2.50 per 1K, ordering 5,000 units
cost = (2.50 ÷ 1000) × 5000 = $12.50
HTTP Status Codes
| Code | Meaning | When |
|---|---|---|
| 200 | OK | Successful request (services, status, balance) |
| 201 | Created | Order placed successfully |
| 400 | Bad Request | Invalid quantity, missing parameters, or validation error |
| 401 | Unauthorized | Invalid or missing API key |
| 500 | Server Error | Service/provider not found or internal error |
Rate Limits
1 request per second
Exceeding this limit may result in temporary throttling (HTTP 429)
If you need higher throughput for bulk operations, contact support for an enterprise rate limit increase.
Best Practices
Keep your key secret
Never expose your API key in frontend code or public repos
Rate limit your requests
We recommend max 1 request per second to avoid throttling
Cache the services list
Fetch services once every few hours, not on every page load
Validate before ordering
Check quantity is between min and max before sending
Handle errors gracefully
Always check response for error fields and retry on network failures
Monitor your balance
Check balance regularly to avoid failed orders from insufficient funds
Track partial deliveries
Check the remains field in status responses to know exactly how much was delivered
Save your order IDs
Store the order ID returned from the add action to check status later
Need Help Integrating?
Our support team is available 24/7 to help you connect your panel. Reach out through the dashboard or email us directly.