Partner API v2

PR.SOCIAL works as a provider for SMM panels. The API follows the standard panel provider protocol (key + action). If your panel supports standard v2 providers, enter the endpoint URL and API key in the provider settings. No custom code is needed.

POSThttps://api.pr.social/v2

All methods use this single endpoint. Parameters are accepted as application/x-www-form-urlencoded or application/json. All responses are JSON. Currency is USD.

Authentication

Every request must include the key parameter with your API key.

iNote: API keys are issued personally by the PR.SOCIAL team. There is no self-service registration. To become a partner, sign in on PR.SOCIAL and ask for a key in Support (a ticket on the topic API key): it then shows in the partner cabinet.

Keep the key secret and use it server-side only. Anyone who has the key can spend your balance. If a key leaks, contact support for immediate rotation.

Rate limits

LimitValueOn exceed
Requests per key, sustained600 per minuteHTTP 429, Retry-After header
Burst allowance500 requests instantlySame, refills at 10 per second
Orders per bulk status request100Error Too many orders requested

Every response includes X-RateLimit-Remaining and X-RateLimit-Reset headers.

iOrder volume is never rejected. Limits apply to request frequency only. Every valid order with sufficient balance is accepted and queued. During traffic spikes orders queue in the Pending status and start automatically. A successfully accepted order never needs a retry.

Service list

Returns all services available for your key, with your prices. service is the ID you pass to Add order. rate is the price per 1000 in USD.

Body parameters

ParameterTypeDescription
keystringrequiredYour API key
actionstringrequiredservices
Request Sample: Shell / cURL
curl --request POST \ --url https://api.pr.social/v2 \ --data "key=YOUR_API_KEY" \ --data "action=services"
Response Example
[ { "service": 2, "name": "Instagram Followers", "type": "Default", "category": "Instagram", "rate": "1.60", "min": 50, "max": 10000, "refill": false, "cancel": true, "dripfeed": false } ]

Add order

Creates an order. The balance is charged immediately: charge = rate × quantity / 1000. If any parameter is invalid, no order is created and nothing is charged.

Body parameters

ParameterTypeDescription
keystringrequiredYour API key
actionstringrequiredadd
serviceintrequiredService ID from Service list
linkstringrequiredTarget link. Profile or post URL, format depends on the service
quantityintrequiredAmount, within the service min and max
commentsstringoptionalComment services only. Your comment texts, one per line. The number of lines defines the order quantity, quantity may be omitted

Store the returned order ID. It is used for all status queries.

iSafe retries. If the request times out and you retry with identical parameters within a short window, you get the same order back. No duplicate charge.
Request Sample: Shell / cURL
curl --request POST \ --url https://api.pr.social/v2 \ --data "key=YOUR_API_KEY" \ --data "action=add" \ --data "service=2" \ --data "link=https://instagram.com/username" \ --data "quantity=500"
Response Example
{ "order": 217931 }

Order status

Body parameters

ParameterTypeDescription
keystringrequiredYour API key
actionstringrequiredstatus
orderintrequiredOrder ID

Response fields

FieldDescription
chargeFinal amount kept for this order. Running or completed orders show the full order cost. After a refund the value is updated: Partial shows the delivered part only, Canceled with full refund shows 0.0000. Panel spend reports stay accurate
start_countCounter value on the target at the moment the order started
statusOne of the values listed in Order statuses
remainsAmount left to deliver
currencyAlways USD
fail_reasonPresent for Canceled, Partial, Fail and Error orders. Short English text explaining what happened and whether money was refunded. Full list in Errors
Request Sample: Shell / cURL
curl --request POST \ --url https://api.pr.social/v2 \ --data "key=YOUR_API_KEY" \ --data "action=status" \ --data "order=217931"
Response Example
{ "charge": "0.2760", "start_count": "3572", "status": "In progress", "remains": "157", "currency": "USD" }
Response Example: failed order
{ "charge": "0.0000", "start_count": "0", "status": "Fail", "remains": "157", "currency": "USD", "fail_reason": "Link is dead or does not exist, full charge refunded" }

Multiple status

Checks up to 100 orders in one request. Invalid IDs return a per-order error object, the rest of the batch is processed normally.

Body parameters

ParameterTypeDescription
keystringrequiredYour API key
actionstringrequiredstatus
ordersstringrequiredComma-separated order IDs, max 100
Request Sample: Shell / cURL
curl --request POST \ --url https://api.pr.social/v2 \ --data "key=YOUR_API_KEY" \ --data "action=status" \ --data "orders=123,124,125"
Response Example
{ "123": { "charge": "0.2760", "start_count": "3572", "status": "Completed", "remains": "0", "currency": "USD" }, "124": { "error": "Incorrect order ID" }, "125": { "charge": "1.2000", "start_count": "0", "status": "Pending", "remains": "300", "currency": "USD" } }

Cancel orders

Cancels any order that is not finished. Up to 100 IDs per request. You pay only for the actions delivered; the rest of the charge comes back to your balance.

Cancellation rules

RuleDetail
Not startedAn order in Pending ends as Canceled at once, the full charge returns to the balance
In progressThe order stops at once. Actions already under review are accepted. Actions already taken by users may still be completed within their time, up to 30 minutes. Then the order ends as Partial and the undelivered part returns to the balance, or as Canceled with the full charge back if nothing was delivered. Until then its status is Processing
5 minute holdCancellation becomes available 5 minutes after the order was created

Body parameters

ParameterTypeDescription
keystringrequiredYour API key
actionstringrequiredcancel
ordersstringrequiredComma-separated order IDs, max 100

Per-order result: "cancel": 1 means the cancellation is accepted, an error object explains why a specific order could not be canceled. The rest of the batch is processed normally.

Request Sample: Shell / cURL
curl --request POST \ --url https://api.pr.social/v2 \ --data "key=YOUR_API_KEY" \ --data "action=cancel" \ --data "orders=123,124,125"
Response Example
[ { "order": 123, "cancel": 1 }, { "order": 124, "cancel": { "error": "Order cannot be canceled" } }, { "order": 125, "cancel": { "error": "Incorrect order ID" } } ]

Balance

Body parameters

ParameterTypeDescription
keystringrequiredYour API key
actionstringrequiredbalance

The balance is topped up in the partner cabinet: crypto, or a transfer from a PRM4U balance.

Request Sample: Shell / cURL
curl --request POST \ --url https://api.pr.social/v2 \ --data "key=YOUR_API_KEY" \ --data "action=balance"
Response Example
{ "balance": "125.4000", "currency": "USD" }

Order statuses

The status field takes one of the eight values below. The first six match the standard panel provider set. Fail and Error add precise diagnostics: if your panel only supports the basic set, map both to Canceled, refunds work the same way.

StatusMeaningFinal
PendingOrder accepted and queued: link validation and start count capture. During traffic spikes orders wait here and start automaticallyNo
In progressDelivery is running, remains decreases over timeNo
ProcessingTemporary system state. Delivery continues, no action neededNo
CompletedFully delivered, remains is 0Yes
PartialPartially delivered. The undelivered remainder is refunded to your balance automatically. See fail_reason for the causeYes
CanceledOrder was canceled before completion. The unused charge is refundedYes
FailThe order could not start: the link is dead or the start count could not be captured. The charge is fully refunded. See fail_reasonYes
ErrorA problem occurred while the order was running. The undelivered amount is refunded, our team is alerted automatically. See fail_reasonYes
iRefund guarantee. Money is kept for delivered actions only. Canceled, Partial, Fail and Error always return the undelivered portion to your balance automatically. No tickets needed.

Errors

Errors are returned as {"error": "message"}. The table lists every error the API produces.

ErrorHTTPWhen / what to do
Invalid API key401Key missing, unknown or disabled. Check the key parameter. Contact support if the key worked before
Incorrect request400Missing or unknown action. Use: services, add, status, cancel, balance
Incorrect service ID400Service does not exist or is not available for your key. Refresh the service list
Link is not valid400The link is empty or does not match the expected format for this service. No charge made
Quantity is less than minimal <N>400Raise quantity to at least the service minimum
Quantity is more than maximum <N>400Lower quantity to the service maximum or split into several orders
Not enough funds400Balance is below the order charge. No order created. Top up in the partner cabinet
Incorrect order ID400Order does not exist or belongs to another key
Order cannot be canceled400The order is finished, or was created less than 5 minutes ago. Check the order status
Too many orders requested400Bulk status accepts max 100 IDs, split the batch
Rate limit exceeded429Request rate exceeded. Retry after the number of seconds in the Retry-After header. The order was not created and nothing was charged, a retry is always safe
Server error, try again later500Transient error on our side. Safe to retry in 30-60 seconds. If persistent, contact support
Service temporarily unavailable503Short maintenance window. Retry with backoff. Accepted orders are not affected

fail_reason values

Orders that end as Canceled, Partial, Fail or Error carry a fail_reason in the status response:

fail_reasonWhen
Link is dead or does not exist, full charge refundedOrder ends Fail. Pre-start link check found the target deleted or private
Start count could not be captured, full charge refundedOrder ends Fail. The target counter could not be read after several attempts
Delivery stalled, undelivered amount refundedOrder ends Partial or Error. Delivery stopped before completion
Internal error, undelivered amount refundedOrder ends Error. Unexpected problem on our side while the order was running

Client examples

A minimal client in each language: fetch services, place an order, check its status.

PHP
Python
Node.js
PHP
<?php function prsocial(array $params): array { $params['key'] = 'YOUR_API_KEY'; $ch = curl_init('https://api.pr.social/v2'); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_POSTFIELDS => http_build_query($params), CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, ]); $response = curl_exec($ch); curl_close($ch); return json_decode($response, true); } $services = prsocial(['action' => 'services']); $order = prsocial([ 'action' => 'add', 'service' => 2, 'link' => 'https://instagram.com/username', 'quantity' => 500, ]); // ['order' => 217931] $status = prsocial(['action' => 'status', 'order' => $order['order']]); // ['charge' => '0.8000', 'start_count' => '3572', // 'status' => 'In progress', 'remains' => '157', 'currency' => 'USD']
Python
import requests API_URL = "https://api.pr.social/v2" API_KEY = "YOUR_API_KEY" def prsocial(**params): params["key"] = API_KEY r = requests.post(API_URL, data=params, timeout=30) return r.json() services = prsocial(action="services") order = prsocial( action="add", service=2, link="https://instagram.com/username", quantity=500, ) # {"order": 217931} status = prsocial(action="status", order=order["order"]) # {"charge": "0.8000", "start_count": "3572", # "status": "In progress", "remains": "157", "currency": "USD"}
Node.js
const API_URL = 'https://api.pr.social/v2'; const API_KEY = 'YOUR_API_KEY'; async function prsocial(params) { const res = await fetch(API_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ key: API_KEY, ...params }), }); return res.json(); } const services = await prsocial({ action: 'services' }); const order = await prsocial({ action: 'add', service: 2, link: 'https://instagram.com/username', quantity: 500, }); // { order: 217931 } const status = await prsocial({ action: 'status', order: order.order }); // { charge: '0.8000', start_count: '3572', // status: 'In progress', remains: '157', currency: 'USD' }

Refill and drip-feed are planned. The refill and dripfeed flags in the service list already report per-service support, so integrations are forward-compatible.

Need a key? Sign in on PR.SOCIAL and open the Partner area: the key is on its API page. Questions: Support · API home