API Documentation
- HTTP Method
POST- API URL
https://smmvr.com/api/v2- Response Format
- JSON
- Content type
application/x-www-form-urlencoded- Required fields
key+action
Code Examples
Each example requests the service list using a form-encoded POST. Replace YOUR_API_KEY with your key and keep it private.
<?php
$url = 'https://smmvr.com/api/v2';
$body = http_build_query(['key' => 'YOUR_API_KEY', 'action' => 'services']);
$ch = curl_init($url);
curl_setopt_array($ch, [CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body, CURLOPT_RETURNTRANSFER => true]);
$response = curl_exec($ch);
if ($response === false) { throw new RuntimeException(curl_error($ch)); }
curl_close($ch);
print_r(json_decode($response, true));
curl -X POST 'https://smmvr.com/api/v2' -H 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'key=YOUR_API_KEY' --data-urlencode 'action=services'
import requests
url = 'https://smmvr.com/api/v2'
response = requests.post(url, data={
'key': 'YOUR_API_KEY',
'action': 'services',
}, timeout=30)
response.raise_for_status()
print(response.json())
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
String body = "key=" + URLEncoder.encode("YOUR_API_KEY", StandardCharsets.UTF_8)
+ "&action=services";
HttpRequest request = HttpRequest.newBuilder(URI.create("https://smmvr.com/api/v2"))
.header("Content-Type", "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString(body)).build();
HttpResponse<String> response = HttpClient.newHttpClient().send(
request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Node.js 18+ server-side example. Set SMM_API_KEY in the environment; do not expose it in browser code.
const endpoint = 'https://smmvr.com/api/v2';
async function main() {
const key = process.env.SMM_API_KEY;
if (!key) throw new Error('Set SMM_API_KEY first');
const body = new URLSearchParams({ key, action: 'services' });
const response = await fetch(endpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body,
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());
}
main().catch(console.error);
Service List
action=services · POST fields
| Parameters | Description |
|---|---|
key | Yes. Your personal API key |
action | Yes. Use exactly: services |
Request example
curl -X POST 'https://smmvr.com/api/v2' -d 'key=YOUR_API_KEY' -d 'action=services'
Example Response
[
{ "service": 123, "name": "Followers", "category": "Social", "type": "default", "rate": "0.90", "min": 50, "max": 10000, "refill": true, "cancel": true }
]
Add order
action=add · POST fields
| Parameters | Description |
|---|---|
service | Yes. Numeric service ID from the service list |
link | Conditional. Target URL; use username for subscription orders |
quantity | Conditional. Required for quantity-based services; not used for package/subscription orders |
comments | Optional. Custom comments, one per line; required count must match quantity for custom-comments services |
runs | Optional. Drip-feed runs; must be greater than 1 to create a drip-feed order |
interval | Optional. Drip-feed interval in minutes; defaults to 60 if omitted |
username | Conditional. Required for subscription orders |
min_qty / max_qty | Conditional. Subscription quantity range |
posts / old_posts / delay | Optional. Subscription settings, where supported |
expiry | Optional. Subscription expiry date in DD/MM/YYYY format |
answer_number | Optional. Poll answer number, for poll services |
PHP example
<?php $order = $api->order(['service' => 123, 'link' => 'https://example.com/target', 'quantity' => 100]);
Successful response varies by order type. Standard: {order, link, quantity, charge, balance, currency}. Drip-feed and subscription responses include dripfeed or subscription details.
Order status
action=status · POST fields
Use one of order or orders. For several IDs, send a comma-separated list.
| Parameters | Description |
|---|---|
order | One. Single numeric order ID |
orders | One. Comma-separated order IDs for multiple status results |
PHP example
<?php $status = $api->status(456); $many = $api->multiStatus([456, 457]);
Balance
action=balance · POST fields
| Parameters | Description |
|---|---|
key | Yes. Your personal API key |
action | Yes. Use exactly: balance |
PHP example
<?php $balance = $api->balance();
Refill
action=refill · POST fields
Use one single-ID field or its plural field, not both. Refill is available only for eligible services and within the service’s refill window.
| Parameters | Description |
|---|---|
order | One. Single eligible order ID |
orders | One. Comma-separated order IDs |
PHP example
<?php $refill = $api->refill(456); $many = $api->multiRefill([456, 457]);
Refill status
action=refill_status · POST fields
Use one single-ID field or its plural field, not both. Refill is available only for eligible services and within the service’s refill window.
| Parameters | Description |
|---|---|
refill | One. Single refill request ID |
refills | One. Comma-separated refill request IDs |
PHP example
<?php $status = $api->refillStatus(12); $many = $api->multiRefillStatus([12, 13]);
Cancel orders
action=cancel · POST fields
A cancellation request is not confirmation that provider work has stopped. The result reports whether the request was accepted; completed or ineligible orders cannot be canceled.
| Parameters | Description |
|---|---|
orders | Yes. Comma-separated numeric order IDs |
PHP example
<?php $result = $api->cancel([456, 457]);
Responses and errors
Successful responses are JSON. Errors may include an invalid key (401), suspended account (403), unknown action (400), or an order validation error. Check the response before retrying so you do not create duplicate orders.
Service IDs and order IDs are numeric public IDs. Order status includes the current status, charge, start count, remaining quantity, and currency.
Protect your API key
Keep the key on your server, such as in an environment variable or secrets manager. Do not put it in a URL, frontend JavaScript, public repository, or screenshot. If exposed, generate a replacement from Account; the old key stops working.
The documentation is public; account balances, orders, refills, and cancellation requests still require a valid API key.
PHP example file
Open the PHP client example as plain text. Add your own API key on your server before using it.
