RESELLER API

Do it from your own software

Everything you do by hand in the reseller panel — activate a device, attach a list, read your devices — you can do from your own shop, your own panel or a script. Same operations, same rules, same credits. One key, one header.

1. Get a key

Sign in to the reseller panel, open API key and press Generate key. The key looks like this:

7mp_rs_9f3c1d0a…

It is shown once

We store only a fingerprint of your key, never the key itself — so if our database ever leaked, nobody could use it. That also means we cannot show it to you a second time. Copy it when you create it. Lost it? Generate a new one; the old one stops working the same second.

2. Send it

Put the key in the X-API-Key header on every request. Nothing else is needed — no login, no session, no cookie.

curl https://7mediaplayer.com/api/v1/app/reseller/me \
  -H "X-API-Key: 7mp_rs_9f3c1d0a…"

Also send X-App-Proto: 1. It is not required today, but it declares which version of our response format your program understands — the day we change a field, clients that declare their version keep working and only the ones that never did get told to update.

3. What comes back

Always JSON, always the same envelope. Success:

{ "success": true, "data": { … } }

Failure — the HTTP status carries the meaning, error carries the reason in plain words:

{ "success": false, "error": "credite insuficiente" }
StatusWhat it means
200Done.
400Something in your request is missing or malformed.
401Key missing, revoked or wrong.
403Your account is blocked, the device is not yours, or the operation needs the panel (see below).
404No such device, list or sub-reseller.
429Too many requests. Slow down and retry.

4. Endpoints

GET /api/v1/app/reseller/me

Your account: name, credit balance, how many devices you have, what a year and a lifetime cost in credits.

GET /api/v1/app/reseller/devices

Your devices — MAC, note, model, state, expiry.

POST /api/v1/app/reseller/activate

Activate a device. Costs credits. plan is annual or lifetime (default lifetime).

{ "mac": "02:7e:da:31:95:ed", "device_key": "492981", "plan": "annual" }

POST /api/v1/app/reseller/devices/claim

Take a device into your list as a trial, without spending a credit — so a customer can try the list before paying.

{ "mac": "02:7e:da:31:95:ed", "device_key": "492981" }

POST /api/v1/app/reseller/line

One step: the device becomes yours and gets the list. This is the call to use if you only use one. device_key is needed the first time you touch a device; pin is optional and locks the list behind a parental code.

{ "mac": "02:7e:da:31:95:ed", "device_key": "492981",
  "name": "Main list", "url": "http://panel.example.com/get.php?username=u&password=p&type=m3u_plus" }

GET /api/v1/app/reseller/devices/{mac}/playlists

POST /api/v1/app/reseller/devices/{mac}/playlists

Read or add the lists of one device.

{ "name": "Second list", "url": "http://…", "pin": "1234" }

DELETE /api/v1/app/reseller/playlists/{id}

Remove one list.

POST /api/v1/app/reseller/devices/{mac}/reset

Remove every list from a device. Useful when a customer starts over.

POST /api/v1/app/reseller/devices/{mac}/nota

The note that tells two MAC addresses apart in your list.

{ "nota": "Ion — bedroom" }

POST /api/v1/app/reseller/lines/domain

Your provider moved servers and every list died at once? Move them all. Send apply: false first — it only counts what would change, and changes nothing.

{ "from": "old.example.com", "to": "new.example.com", "apply": false }

GET /api/v1/app/reseller/credits

Your credit statement: what came in, what went out, for which device, when.

GET /api/v1/app/reseller/subs

Your sub-resellers and their balances.

5. What a key can never do

These stay in the panel, behind your password, and a key is refused on them with 403:

The reason is simple: a key travels. It ends up in scripts, config files and shell history. It should be able to do the daily work, not to take over the account. If it ever leaks, you revoke it in the panel and everything it did is already itemised in your credit statement.

6. Limits

Requests are rate-limited per IP address. Normal automation is far below the limit; a burst of parallel requests is not. If you get 429, wait and retry — and prefer one call over a loop of calls where an endpoint offers it (for example /line instead of claim + playlist).

7. A first script

#!/usr/bin/env bash
KEY="7mp_rs_9f3c1d0a…"
BASE="https://7mediaplayer.com/api/v1/app/reseller"

# how many credits do I have?
curl -s "$BASE/me" -H "X-API-Key: $KEY" -H "X-App-Proto: 1"

# take a device over and give it a list, in one call
curl -s -X POST "$BASE/line" \
  -H "X-API-Key: $KEY" -H "X-App-Proto: 1" -H "Content-Type: application/json" \
  -d '{"mac":"02:7e:da:31:95:ed","device_key":"492981",
       "name":"Main list","url":"http://panel.example.com/get.php?username=u&password=p&type=m3u_plus"}'