log in sign up

Shop

home task marketplace tools cart subscriptions orders

Account

add funds activate promo code affiliate program

Help

support FAQ information reviews blog news

Developers

public API reseller API
Dark theme

mrpopularAPI

$0

mrpopularAPI

Reseller API

API key

Sign in to get your API key.

reseller@mrpopular: ~/api — v3 docs
reseller@mrpopular:~/api$ curl -d "username=&password=&action=service" https://mrpopular.net/api/v3.php

To activate the Reseller API, write to the support service. You must have at least 100 dollars on your balance.

API documentation

URL

https://mrpopular.net/api/v3.php

Request

POST / GET / JSON

Response

JSON

Authorisation

username

password

key = API key from the documentation page in your account (instead of username and password)

Get balance

action = balance

{"balance":123.456}

Get order status

action = status

order = (Order id)

{"order":{"status":"2","completed":"0","quantity":"250","date":"2018-09-27 17:34:49"}}

order = 142058,142059 (several ids separated by commas, up to 100 per request; the reply lists each id in the orders field)


{"orders":{"142058":{"status":"2","completed":"250","quantity":"250","date":"2026-10-01 12:00:00"},"142059":{"error":"wrong ORDER"}}}

Cancel an order


action = cancel

order = order id


{"cancel":{"order":142058,"cancelled":true,"delivered":40,"refund":12.5,"currency":"RUB"}}

Available for some services (in v3 for almost all), while the order is running: the undelivered part is refunded. If cancellation is not available for the service, the reply is errorcode 13; finished or not yet started orders return errorcode 14.

Refill


action = refill

order = order id


{"refill":{"order":142058,"status":"requested","message":"refill requested"}}

Services with refill only, same as the button in the order history. status: requested started, in_progress already running, wait_24h once per day, expired period over, queued for the operator. No refill: errorcode 16.

Service extra field


action = options

service = service ID


{"service_id":6671,"option_type":"rating","option_label":"...","comment_label":"...","options":{"201":"5","202":"4-5"}}

option_type: none (no field), text (free text in option), select, geo, rating, topic (an id from options goes into option; for topic the value 0 means your own topic as text in comment). The same option_type, option_label and comment_label are returned by action=service.

Execution dispute


action = dispute

order = order (position) number from the order history

execution = execution id from action=executions

reason = the reason, 5+ characters: what is wrong on the screenshot (wrong post, wrong text, no action shown)


{"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}}

Only for orders fulfilled by real executors and only for accepted executions not older than 30 days. The dispute is reviewed by arbitration, usually within a day; the result is shown in action=executions, field dispute.status: pending (under review), confirmed (defect confirmed: the execution is removed and will be redone), rejected (the execution matches the task), neutral (no changes). Limit: you can dispute executions worth up to 20% of your paid orders over the last 90 days; each dispute reserves the unit price of the order, at least 5 RUB; confirmed releases the reserve, rejected and neutral spend it. The remaining limit is in dispute_budget.

errorcode 21 the order is not fulfilled by real executors (no dispute), errorcode 23 wrong EXECUTION (not in this order), 24 execution is not accepted, 25 dispute window is over, 26 already disputed, 27 REASON shorter than 5 characters, 28 limit reached (dispute_budget in the response).

Get order executions (screenshots)

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}}

execution id is used in action=dispute; dispute: the dispute state for the execution or null; dispute_budget: the account dispute limit.

Only for orders fulfilled by real executors. "links" contains the URLs executors submitted in their reports (backlink tasks).

Get service list

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"},...}}

Order status decryption

0 : Pending / Processing

1 : Processing

2 : Completed

3 : Error

4 : In queue

5 : Returned

New order

action = order

service = (Service ID)

quantity

option = the service's extra field: an id from action=options (comment topic, review rating, geo, poll option) or free text (comment author's username, search query); the field type and label are given by option_type and option_label

comment = comment or review texts (one per line), or the brief for an AI review, or your own topic for topic comments (with option=0); comment_label says what the field expects

link

lang = executor language for some services: any, ru or en (default any)

gender = review author gender for some services: any, m, f (default any)

day_limit = max completions per day for some services, 0 = no limit

{"order":"142058"}

Errors

{"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

Examples of PHP code

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();