RUSCUS Buy a licence Playlist Licence Panel English
For resellers · API

Manage Ember devices from your own system

Everything a reseller can do in the panel — list devices, load playlists, activate licences, check credit — is available over HTTPS with an API key. Same rules, same limits, same ledger; the key simply acts as a manager of your reseller account.

Getting a key

Sign in to the reseller panel at ember.ruscus.net, open API in the side menu and press Generate key. The key is shown once; we store only a hash. Up to five active keys per reseller; revoke any of them at any time. API access is enabled by default and can be switched off by RUSCUS.

Base URL https://ember.ruscus.net/api/ember/v1/reseller · header Authorization: Bearer rk_… · JSON in, JSON out · device IDs exactly as the app shows them (AB:12:34:56:78:9A) · timestamps in RFC 3339.

Endpoints

Method & pathWhat it does
GET /devicesYour devices (sub-resellers’ included). Each: id, platform, version, latestVersion, status, expiresAt, playlistCount, lastSeen, country, note, playlistError, playlistItems, firstPlayback, lastPlayback, latencyMs · releases[]: platform, store, status (published | in_review), version, build, date, notes{lang}
GET /devices/{id}One device: licence (id, status, source, expiresAt, active), playlists, note, transferredTo
POST /devices/{id}/activateActivate. No body: one year, costs 1 credit. Body {"days": N}: N days from the day pool; missing credits are converted automatically (1 credit = 365 days). Renewal is possible at any time and is added to the current end. Returns {"reseller"}
POST /devices/{id}/playlistsAdd a playlist. Body: {"name","type":"m3u"|"xtream","url","username","password"}. Returns 201 {"id"} Note: the type is stored as sent. For the TV browser client (LG webOS, Samsung Tizen) only, an M3U URL of the form …/get.php?username=…&password=… is served as Xtream (base URL + username + password → player_api.php), because downloading a large M3U is too slow there; phones, Android TV and Mac receive the M3U unchanged, so parameters such as output=mpegts are preserved.
PUT /devices/{id}/playlists/{playlist}Change a playlist (same body)
DELETE /devices/{id}/playlists/{playlist}Remove a playlist
POST /devices/takeoverTake over a device with its transfer PIN. Body: {"device","pin"}
PUT /devices/{id}/nameDevice name shown in the reseller panel list. Body: {"name"}. Can also be passed to activate as {"name"}
PUT /devices/{id}/noteReseller note on a device (never shown to the customer). Body: {"note"}
GET /creditCredit and day balances with recent movements: {"balance", "days", "movements": [...], "dayMovements": [{id, type, days, balanceAfter, description, createdAt}]}
POST /credit/convertConvert credits to days. Body: {"credits": n} — one-way, 1 credit = 365 days. Returns {"converted", "balance", "days"}

Licence status is one of trial, active, expired, transferred, closed, none; source is trial, reseller, direct, manual. Playlist type is m3u (a direct M3U link) or xtream (server URL + username + password).

Examples

Add an Xtream playlist to a device:

curl -X POST https://ember.ruscus.net/api/ember/v1/reseller/devices/AB:12:34:56:78:9A/playlists \
  -H "Authorization: Bearer rk_…" \
  -H "Content-Type: application/json" \
  -d '{"name":"Package 1","type":"xtream","url":"http://host:8080","username":"user","password":"pass"}'

Activate it for a year:

curl -X POST https://ember.ruscus.net/api/ember/v1/reseller/devices/AB:12:34:56:78:9A/activate \
  -H "Authorization: Bearer rk_…"

List your devices:

curl https://ember.ruscus.net/api/ember/v1/reseller/devices -H "Authorization: Bearer rk_…"

Errors

Every error is {"error": "…", "code": "…"}. Codes you will meet: 401 invalid_key (bad or revoked key), 403 api_disabled (API switched off for your account), 403 account_suspended, 409 insufficient_credit, 409 insufficient_days, 409 licence_active, 409 device_owned_by_user (→ POST /devices/takeover), 404 device_not_found (not your device, or no such device), 404 playlist_not_found, 400 invalid_type / invalid_url / invalid_body, 409 direct_licence (customer-bought licence cannot be moved).

Good to know

A key cannot do account-level things — change members, close the account, transfer credit; those stay in the panel. Playlists never pass through RUSCUS servers: the device fetches them from your provider. Requests over plain HTTP are refused.

Not a reseller yet? Write to hello@ruscus.net.