Chiave API
Accedi per ottenere la tua chiave API.
Per attivare la API reseller, scrivi al servizio di supporto. Devi avere almeno 100 dollari sul saldo.
URL
https://mrpopular.net/api/v3.php
Richiesta
POST / GET / JSON
Risposta
JSON
Autorizzazione
username
password
key = chiave API dalla pagina di documentazione nel tuo account (al posto di username e password)
Ottieni saldo
action = balance
{"balance":123.456}
Stato dell ordine
action = status
order = (Order id)
{"order":{"status":"2","completed":"0","quantity":"250","date":"2018-09-27 17:34:49"}}
order = 142058,142059 (più numeri separati da virgola, fino a 100 per richiesta; la risposta elenca ogni numero nel campo orders)
{"orders":{"142058":{"status":"2","completed":"250","quantity":"250","date":"2026-10-01 12:00:00"},"142059":{"error":"wrong ORDER"}}}
Annullare un ordine
action = cancel
order = numero ordine
{"cancel":{"order":142058,"cancelled":true,"delivered":40,"refund":12.5,"currency":"RUB"}}
Disponibile per una parte dei servizi (in v3 quasi tutti), finché l'ordine è in corso: la parte non consegnata viene rimborsata. Se l'annullamento non è disponibile per il servizio, la risposta è errorcode 13; ordini terminati o non ancora avviati: errorcode 14.
Reintegro (refill)
action = refill
order = numero ordine
{"refill":{"order":142058,"status":"requested","message":"refill requested"}}
Solo servizi con refill, come il pulsante nella cronologia ordini. status: requested avviato, in_progress in corso, wait_24h una volta al giorno, expired periodo scaduto, queued in coda per l'operatore. Senza refill: errorcode 16.
Campo aggiuntivo del servizio
action = options
service = ID del servizio
{"service_id":6671,"option_type":"rating","option_label":"...","comment_label":"...","options":{"201":"5","202":"4-5"}}
option_type: none (nessun campo), text (testo libero in option), select, geo, rating, topic (in option un id da options; per topic il valore 0 = argomento proprio come testo in comment). Gli stessi option_type, option_label e comment_label sono restituiti da action=service.
Contestazione di un'esecuzione
action = dispute
order = numero dell'ordine (posizione) dalla cronologia ordini
execution = id dell'esecuzione da action=executions
reason = motivo, almeno 5 caratteri: cosa non va nello screenshot (post sbagliato, testo sbagliato, azione non mostrata)
{"status":"pending","dispute":{"id":12,"status":"pending","created":"2026-10-24 12:00:00","decided":null},"execution":34099021,"order":594181140,"dispute_budget":{"turnover_rub":50659.56,"limit_rub":10131.91,"used_rub":29.8,"available_rub":10102.11,"min_per_dispute_rub":5,"percent":20,"days":90,"window_days":30}}
Solo per ordini eseguiti da esecutori reali e solo per esecuzioni accettate non più vecchie di 30 giorni. La contestazione è esaminata dall'arbitrato, di solito entro un giorno; il risultato è in action=executions, campo dispute.status: pending (in esame), confirmed (difetto confermato: l'esecuzione viene rimossa e rifatta), rejected (l'esecuzione corrisponde al compito), neutral (nessuna modifica). Limite: puoi contestare esecuzioni fino al 20% dei tuoi ordini pagati in 90 giorni; ogni contestazione riserva il prezzo unitario dell'ordine, minimo 5 RUB; confirmed libera la riserva, rejected e neutral la consumano. Il limite residuo è in dispute_budget.
errorcode 21 l'ordine non è eseguito da esecutori reali (nessuna contestazione), errorcode 23 wrong EXECUTION (non in questo ordine), 24 esecuzione non accettata, 25 termine di contestazione scaduto, 26 già contestata, 27 REASON più corto di 5 caratteri, 28 limite raggiunto (dispute_budget nella risposta).
Esecuzioni dell ordine (screenshot)
action = executions
order = (Order id)
offset = (optional, default 0)
limit = (optional, default 100, max 500)
{"total":3,"count":1,"offset":0,"executions":[{"id":34099021,"executor":"ID972036","date":"2026-06-25 20:32:40","screenshots":["https://mrpopular.net/etask/includes/img/...jpg"],"links":[],"dispute":null}],"dispute_budget":{"limit_rub":10131.91,"used_rub":29.8,"available_rub":10102.11}}
id dell'esecuzione serve per action=dispute; dispute: stato della contestazione o null; dispute_budget: limite di contestazioni dell'account.
Solo per ordini eseguiti da esecutori reali. "links" contiene i link lasciati dagli esecutori nei report (attivita di backlink).
Elenco servizi
action = service
{"service":{"1":{"social_network":"Facebook","service":"page likes","quality":"medium quality","id":"1","price":0.0149,"currency":"USD","min":"100","max":"900000","start":"30 min.","speed":"100/day","description":"HQ never drop"},...}}
Decodifica stati ordine
0 : Pending / Processing
1 : Processing
2 : Completed
3 : Error
4 : In queue
5 : Returned
Nuovo ordine
action = order
service = (Service ID)
quantity
option = campo aggiuntivo del servizio: un id da action=options (argomento dei commenti, valutazione della recensione, geo, opzione del sondaggio) o testo libero (username dell'autore del commento, query di ricerca); tipo ed etichetta del campo sono in option_type e option_label
comment = testi di commenti o recensioni (uno per riga), oppure il brief per una recensione IA, oppure il proprio argomento per i commenti tematici (con option=0); comment_label indica cosa si aspetta il campo
link
lang = lingua dell'esecutore per una parte dei servizi: any, ru o en (predefinito qualsiasi)
gender = sesso dell'autore della recensione per una parte dei servizi: any, m, f (predefinito qualsiasi)
day_limit = massimo di esecuzioni al giorno per una parte dei servizi, 0 = senza limite
{"order":"142058"}
Errori
{"errorcode":0} API is not activated
{"errorcode":1} USERNAME or PASSWORD is empty
{"errorcode":2} ACTION is empty
{"errorcode":4} ORDER is empty
{"errorcode":5} wrong ORDER
{"errorcode":6} SERVICE is empty
{"errorcode":7} QUANTITY is empty
{"errorcode":8} LINK is empty
{"errorcode":9} Not enough funds on balance
{"errorcode":10} Quantity less than minimum
Esempio di codice PHP
class Api
{
public $api_url = 'https://mrpopular.net/api/v3.php';
public $username = ''; // your username
public $password = ''; // your password
public function order($data) {
return json_decode($this->connect(array_merge(array(
'username' => $this->username,
'password' => $this->password,
'action' => 'order'
), $data)));
}
public function status($order) {
return json_decode($this->connect(array(
'username' => $this->username, 'password' => $this->password,
'action' => 'status', 'order' => $order)));
}
public function executions($order, $offset = 0, $limit = 100) {
return json_decode($this->connect(array(
'username' => $this->username, 'password' => $this->password,
'action' => 'executions', 'order' => $order,
'offset' => $offset, 'limit' => $limit)));
}
public function service() {
return json_decode($this->connect(array(
'username' => $this->username, 'password' => $this->password,
'action' => 'service')));
}
public function balance() {
return json_decode($this->connect(array(
'username' => $this->username, 'password' => $this->password,
'action' => 'balance')));
}
function connect($post) {
$ch = curl_init($this->api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));
$result = curl_exec($ch);
return $result === false ? false : $result;
}
}
$api = new Api();
// $balance = $api->balance();
// $order = $api->order(array('service' => 462, 'quantity' => 100, 'link' => 'https://...'));
// $status = $api->status(142058);
// $shots = $api->executions(142058);
// $services = $api->service();