API-ключ
Войдите в аккаунт, чтобы получить API-ключ.
Ссылка
https://mrpopular.net/api/v2.php
Запросы
POST / GET / JSON
Ответы
JSON
Авторизация
username
password
key = API-ключ со страницы документации в аккаунте (вместо username и password)
Узнать баланс
action = balance
currency = USD
{"balance":123.456}
Узнать статус заказа
action = status
order = (номер заказа)
{"order":{"status":"2","completed":"0","quantity":"250","date":"2018-09-27 17:34:49"}}
order = 142058,142059 (несколько номеров через запятую, до 100 за запрос; ответ по каждому номеру в поле orders)
{"orders":{"142058":{"status":"2","completed":"250","quantity":"250","date":"2026-10-01 12:00:00"},"142059":{"error":"wrong ORDER"}}}
Отменить заказ
action = cancel
order = номер заказа
{"cancel":{"order":142058,"cancelled":true,"delivered":40,"refund":12.5,"currency":"RUB"}}
Доступно для части услуг (в v3 почти для всех), пока заказ выполняется: возвращается стоимость невыполненной части. Если для услуги отмена недоступна, ответ errorcode 13; для завершённых или ещё не запущенных заказов errorcode 14.
Восполнение (рефилл)
action = refill
order = номер заказа
{"refill":{"order":142058,"status":"requested","message":"refill requested"}}
Только услуги с восполнением, то же, что кнопка в истории заказов. status: requested запущено, in_progress уже идёт, wait_24h не чаще раза в сутки, expired срок вышел, queued в очереди оператору. Без восполнения errorcode 16.
Дополнительное поле услуги
action = options
service = ID услуги
{"service_id":6671,"option_type":"rating","option_label":"...","comment_label":"...","options":{"201":"5","202":"4-5"}}
option_type: none (поля нет), text (свободный текст в option), select, geo, rating, topic (в option id из options; для topic значение 0 = своя тема текстом в comment). Те же option_type, option_label и comment_label есть в ответе action=service.
Спор по выполнению
action = dispute
order = номер заказа (позиции) из истории заказов
execution = id выполнения из action=executions
reason = причина, от 5 символов: что не так на скриншоте (не тот пост, не тот текст, действие не показано)
{"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}}
Только для заказов, выполняемых реальными исполнителями, и только для принятых выполнений не старше 30 дней. Спор разбирает арбитраж, обычно в течение суток; результат виден в action=executions, поле dispute.status: pending (на разборе), confirmed (брак подтверждён: выполнение снято и будет сделано заново), rejected (выполнение соответствует заданию), neutral (без изменений). Лимит: оспорить можно выполнения на сумму до 20% ваших оплаченных заказов за 90 дней; каждый спор бронирует из лимита цену единицы заказа, но не меньше 5 руб; confirmed бронь возвращает, rejected и neutral тратят. Остаток лимита в dispute_budget.
errorcode 21 заказ выполняется не реальными исполнителями (спор недоступен), errorcode 23 wrong EXECUTION (нет в этом заказе), 24 выполнение не принято, 25 срок оспаривания истёк, 26 уже оспорено, 27 REASON короче 5 символов, 28 лимит исчерпан (dispute_budget в ответе).
Получить список услуг
action = service
{"service":{"1":{"social_network":"Facebook","service":"page likes","quality":"medium quality","id":"1","price":0.0149,"currency":"USD","min":"100"},...}}
Статусы заказа
0 : выполняется, нет статистики
1 : выполняется, есть статистика
2 : выполнен
3 : ошибка
4 : в очереди
5 : возвращен
Новый заказ
action = order
service = (ID услуги)
quantity = количество
option = дополнительное поле услуги: id из action=options (тема комментариев, оценка отзыва, гео, вариант опроса) или текст (ник автора комментария, поисковый запрос); какое поле у услуги, видно в option_type и option_label
comment = тексты комментариев или отзывов (каждый с новой строки), либо ТЗ для ИИ-отзыва, либо своя тема для тематических комментариев (при option=0); что ждут от поля, видно в comment_label
link = ссылка
lang = язык исполнителя для части услуг: any, ru или en (по умолчанию любой)
gender = пол автора отзыва для части услуг: any, m, f (по умолчанию любой)
day_limit = лимит выполнений в день для части услуг, 0 = без лимита
{"order":"142058"}
Ошибки
{"errorcode":1} USERNAME или PASSWORD не отправлен
{"errorcode":2} ACTION не отправлен
{"errorcode":3} Выбранная валюта недоступна
{"errorcode":4} Не отправлен номер заказа
{"errorcode":5} Неверный номер заказа
{"errorcode":6} SERVICE не отправлен
{"errorcode":7} Не отправлено количество
{"errorcode":8} Не отправлена ссылка
{"errorcode":9} Не хватает средств на балансе
{"errorcode":10} Количество меньше минимального
Пример кода php
class Api
{
//настройки
public $api_url = 'https://mrpopular.net/api/v2.php'; // ссылка для API
public $username = ''; //ваш username
public $password = ''; //ваш password
public $currency = 'USD';
public function order($data) { // добавить заказ
$post = array_merge(array(
'username' => $this->username,
'password' => $this->password,
'action' => 'order'
), $data);
return json_decode($this->connect($post));
}
public function status($order) { // получить статус заказа
return json_decode($this->connect(array(
'username' => $this->username,
'password' => $this->password,
'action' => 'status',
'order' => $order
)));
}
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) {
$_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;
}
}
//запускаем API
$api = new Api();
//проверить баланс
/*$balance = $api->balance();
print_r($balance);*/
//новый заказ
/*$order = $api->order(array(
'service' => 462,
'quantity' => $qnty,
'link' => $src
));
print_r($order);*/
//статус заказа
/*$status = $api->status(12232);
print_r($status);*/
//service list
/*$service = $api->service();
print_r($service);*/
Выполнения заказа (скриншоты)
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 выполнения нужен для action=dispute; dispute: состояние спора по выполнению или null; dispute_budget: лимит споров аккаунта.
Только для заказов, выполняемых реальными исполнителями. В links - ссылки, которые исполнители указали в отчётах (бэклинк-задания).