Chiave API
Accedi per ottenere la tua chiave API.
Link
https://mrpopular.net/api/v2.php
Richieste
POST / GET / JSON
Risposte
JSON
Autorizzazione
username
password
key = chiave API dalla pagina di documentazione nel tuo account (al posto di username e password)
Scopri il bilancio
action = balance
currency = EUR
{"balance":123.456}
Scopri lo stato dell’ordine
action = status
order = (numero dell’ordine)
{"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).
Ottieni la lista dei servizi
action = service
{"service":{"1":{"social_network":"Facebook","service":"page likes","quality":"medium quality","id":"1","price":0.0149,"currency":"EUR","min":"100"},...}}
Stati dell'ordine
0 : in esecuzione, non ci sono statistiche
1 : in esecuzione, ci sono statistiche
2 : eseguito
3 : errore
4 : in lista d'attesa
5 : restituito
Ordine nuovo
action = order
service = ((ID servizi)
quantity = quantità
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 = 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":1} USERNAME o PASSWORD non è inviato
{"errorcode":2} ACTION non è inviato
{"errorcode":3} Valuta selezionata non è disponibile
{"errorcode":4} Il umero dell’ordinazione non è inviato
{"errorcode":5} Il numero dell’ordinazione non è valido
{"errorcode":6} SERVICE non è inviato
{"errorcode":7} La quantità non è inviata
{"errorcode":8} Il link non è inviato
{"errorcode":9} Non c'è abbastanza denaro nel bilancio
{"errorcode":10} La quantità è sotto il minimo
Esempio del codice php
class Api
{
// impostazioni
public $api_url = 'https://mrpopular.net/api/v2.php'; // link per API
public $username = ''; //il tuo username
public $password = ''; //la tua password
public $currency = 'EUR';
public function order($data) { // aggiungi un’ordine nuovo
$post = array_merge(array(
'username' => $this->username,
'password' => $this->password,
'action' => 'order'
), $data);
return json_decode($this->connect($post));
}
public function status($order) { // ottieni lo stato dell’ordine
return json_decode($this->connect(array(
'username' => $this->username,
'password' => $this->password,
'action' => 'status',
'order' => $order
)));
}
public function service() { // ottieni la lista dei servizi
return json_decode($this->connect(array(
'username' => $this->username,
'password' => $this->password,
'action' => 'service',
)));
}
public function balance() { // ottieni il bilancio
return json_decode($this->connect(array(
'username' => $this->username,
'password' => $this->password,
'action' => 'balance',
)));
}
function connect($post) {
$_post = Array();
if (is_array($post)) {
foreach ($post as $name => $value) {
$_post[] = $name.'='.urlencode($value);
}
}
$ch = curl_init($this->api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if (is_array($post)) {
curl_setopt($ch, CURLOPT_POSTFIELDS, join('&', $_post));
}
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)');
$result = curl_exec($ch);
if (curl_errno($ch) != 0 && empty($result)) {
$result = false;
}
curl_close($ch);
return $result;
}
}
// stiamo lanciando API
$api = new Api();
// controlla il bilancio
/*$balance = $api->balance();
print_r($balance);*/
// ordine nuovo
/*$order = $api->order(array(
'service' => 462,
'quantity' => $qnty,
'link' => $src
));
print_r($order);*/
// stato dell’ordine
/*$status = $api->status(12232);
print_r($status);*/
// lista dei servizi
/*$service = $api->service();
print_r($service);*/
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 gli URL indicati dagli esecutori nei report (attività di backlink).