mobileproxy.app

API

Reference API

Kompletní reference REST API mobileproxy.app, endpoint po endpointu. Každá cesta, pole i příklad zde odpovídá živému OpenAPI dokumentu, ze kterého je API postaveno. Základní URL https://mobileproxy.app/api/v1.

Ověření a základní URL

Každý endpoint je pod https://mobileproxy.app/api/v1 a vyžaduje bearer token. Vytvořte ho v dashboardu v sekci Pro vývojáře → API tokeny nebo přes POST /tokens, když jste přihlášeni. Tajný klíč se zobrazí jen jednou — uložte si ho. Posílejte ho s každým požadavkem:

Authorization: Bearer mpx_live_…

Tokeny začínající na mpx_live_ jsou tokeny vašeho účtu. Endpointy /device/* volá samotná aplikace pro Android a ověřuje se tokenem zařízení pro daný telefon (mpxdev_…) vydaným při párování — vy je běžně nevoláte.

Vyzkoušejte naživo
Interaktivní konzole umožňuje vložit token a volat každý endpoint přímo z prohlížeče, s těly požadavků a reálnými odpověďmi. Surová specifikace je na /api/v1/openapi.json.

Chyby jsou ve formátu JSON se srozumitelnou zprávou a strojovým kódem:

{ "error": "No such device.", "code": "not_found" }
PoleTypPopis
401unauthorizedToken chybí, je poškozený nebo zrušený.
403forbiddenToken je platný, ale nemá oprávnění.
404not_foundZdroj na tomto účtu neexistuje.
502control_plane_unavailableBrána / řídicí vrstva je krátce nedostupná — zkuste to znovu.

Účet

GET /me — kdo jsem? Vrací účet a živé počty předplatných a API tokenů.

curl https://mobileproxy.app/api/v1/me \
     -H "Authorization: Bearer mpx_live_…"

# → { "id": "u_8c31f0", "email": "you@example.com",
#     "created_at": "2026-06-28T14:02:11.000Z",
#     "subscriptions": 3, "api_tokens": 2,
#     "plan": "beta", "balance": "0.00" }

Předplatná

Předplatné (id sub_…) je trvalý slot, který vlastníte: jeho přátelský name, nastavení a proxy přetrvávají i při výměně telefonu pod ním. Jeho device je telefon, který ho aktuálně pohání (nebo null, když není spárováno), a je vyměnitelný — výměna zachová každý proxy endpoint.

Vypište předplatná — každé se spárovaným zařízením sloučeným s živým stavem brány (online = proxy tunel běží):

curl https://mobileproxy.app/api/v1/subscriptions \
     -H "Authorization: Bearer mpx_live_…"

# → { "subscriptions": [ {
#     "id": "sub_760c1fc8ddab", "name": "Paris SFR",
#     "status": "active", "wifi_split": true, "created_at": "…",
#     "device": { "id": "phone_ac862619408e", "model": "Galaxy S8",
#                 "hardware_id": "352091081234567", "hardware_type": "imei",
#                 "status": "online", "exit_ip": "77.136.66.63",
#                 "carrier": "SFR", "last_seen": "…", "paired_at": "…" } } ] }

Vytvořte předplatné (nespárované) a pak spárujte nebo vyměňte telefon. POST /subscriptions/{id}/pair vrátí PIN platný ~3 minuty; zadaný v aplikaci pro Android přiváže telefon. U slotu, který již zařízení má, jde o výměnu (mode: "swap") — starý telefon je vyřazen a každá proxy si zachová svou host:port a přihlašovací údaje:

curl -X POST https://mobileproxy.app/api/v1/subscriptions \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" -d '{ "name": "Paris SFR" }'
# → { "id": "sub_760c1fc8ddab", "status": "unpaired", "device": null, … }

# Pair (or swap) a phone into it
curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/pair \
     -H "Authorization: Bearer mpx_live_…"
# → { "subscription_id": "sub_760c1fc8ddab", "mode": "new",
#     "pairing": { "pin": "483-119-702", "expires_at": "…" }, … }

Získejte, upravte nebo zrušte jedno předplatné. POST mění název, volný description (max 200 znaků, null ho vymaže), předvolbu wifi_split (zařazenou do fronty pro spárovaný telefon, uplatní se při jeho dalším dotazu ~25 s) nebo shared_speed_kbps — jak se rychlost zařízení dělí mezi jeho proxy. -1 (doporučeno) ji sdílí automaticky: řídicí vrstva měří reálnou rychlost zařízení z živé propustnosti (~3 s převažování), proxy zaneprázdněné ve stejný čas se sbíhají k rovným podílům a proxy pracující sama dostane plnou rychlost. Hodnota > 0 rozdělí ten pevný celkový součet zařízení stejným způsobem. Hodnoty speed_limit_kbps jednotlivých proxy se zachovávají, ale při zapnutém sdílení se neuplatňují; 0 sdílení vypne. DELETE zruší zařízení i proxy, uvolní porty brány a smaže historii slotu — nevratné:

# Fetch one subscription
curl https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID \
     -H "Authorization: Bearer mpx_live_…"

# Rename / describe / set Wi-Fi split / share the device's speed equally (auto)
curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "name": "Paris SFR", "description": "Client X — farm slot 2", "wifi_split": true, "shared_speed_kbps": -1 }'

# Cancel (irreversible)
curl -X DELETE https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID \
     -H "Authorization: Bearer mpx_live_…"
# → { "deleted": true, "id": "sub_760c1fc8ddab" }

Proxy

Proxy je jeden endpoint s jedním protokolem (SOCKS5 nebo HTTP) na zařízení, s vlastním ověřením, whitelistem zdrojových IP, rychlostním limitem a doménovými pravidly. Kolik jich může zařízení obsluhovat najednou, je oprávnění tarifu (10 u Standard, 20 u Pro) — vytvořte po jedné pro každého zákazníka nebo nástroj a kteroukoli zrušte, aniž byste se dotkli ostatních. Vytvoření nad limit tarifu vrátí 409 proxy_limit_reached.

Proxy na jednom zařízení sdílejí jeho IP
Každá proxy na zařízení vystupuje přes stejnou IP operátora a rotuje společně — vytvoření druhé proxy vám dá druhý přihlašovací údaj a politiku, ne druhou IP. Pro další IP spárujte další telefon.

Vytvořte proxy — vygeneruje čerstvé uživatelské jméno/heslo; heslo se zde jednou vrátí v čitelné podobě. Zvolte protocol (socks5 nebo http) a volitelně předejte traffic_limit_bytes, čímž jí od začátku dáte pevný datový strop:

curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "protocol": "socks5", "traffic_limit_bytes": 5368709120 }'

# → { "id": "acc_5f734b9270e8", "subscription_id": "sub_760c1fc8ddab",
#     "protocol": "socks5",
#     "host": "173.249.36.102", "host_v6": "2a02:c207:2319:6018::1",
#     "port": 30000,
#     "username": "u04c770", "password": "k7Qp2mXe9wZ4",
#     "endpoint": "socks5://u04c770:k7Qp2mXe9wZ4@173.249.36.102:30000",
#     "endpoint_ipv6": "socks5://u04c770:k7Qp2mXe9wZ4@[2a02:c207:2319:6018::1]:30000",
#     "ip_whitelist": [], "speed_limit_kbps": 0,
#     "domain_mode": "none", "domain_rules": [],
#     "status": "active", "traffic_limit_bytes": 5368709120, "bytes_used": 0,
#     "over_limit": false, "created_at": "…" }
Každý proxy port je dual-stack (IPv4 + IPv6)
Připojte se přes kteroukoli rodinu — endpoint je IPv4 URI, endpoint_ipv6 stejný port přes IPv6 (v6 literál je v hranatých závorkách podle syntaxe URL). Whitelist zdrojových IP přijímá adresy a CIDR pro IPv4 i IPv6 a cíle mohou být také IPv6: SOCKS5 CONNECT na IPv6 literál nebo doménu jen s AAAA vystoupí přes IPv6 operátora telefonu, pokud ji SIM má.

Upravte politiku proxy — režim ověření, whitelist IP, rychlostní limit a doménová pravidla, uplatněno naživo na bráně (protocol je pevný — místo změny ji smažte a vytvořte znovu):

curl -X PATCH \
  https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID \
  -H "Authorization: Bearer mpx_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "speed_limit_kbps": 2000,
        "domain_mode": "whitelist", "domain_rules": ["api.example.com"] }'

Vypište proxy — na jednom zařízení nebo každou proxy napříč celým účtem:

# One device
curl https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies \
     -H "Authorization: Bearer mpx_live_…"

# Account-wide
curl https://mobileproxy.app/api/v1/proxies \
     -H "Authorization: Bearer mpx_live_…"
# → { "proxies": [ { …Proxy… }, … ] }

Funkční proxy s jejich výstupními IP — výpis napříč celým účtem nese aktuální exit_ip každé proxy, živý stav zařízení a verdikt working (zařízení online, žádné fakturační ani ruční pozastavení, nepřekročený limit provozu; not_working_reason říká, proč ne). Filtrujte přes ?working=true a přidejte ?unique_ip=true, aby zůstala jedna proxy na každou odlišnou výstupní IP — dvě SIM za stejným NAT operátora se navíc označí přes duplicate_ip:

# Working proxies only, one per distinct exit IP — a paste-ready pool
curl "https://mobileproxy.app/api/v1/proxies?working=true&unique_ip=true" \
     -H "Authorization: Bearer mpx_live_…"
# → { "proxies": [ {
#       "endpoint": "socks5://user:pass@173.249.36.102:30012",
#       "exit_ip": "77.136.66.44", "device_status": "online",
#       "working": true, "not_working_reason": null,
#       "duplicate_ip": false, … }, … ] }

Zrušte proxy — okamžitě zastaví tento jeden posluchač; každá další proxy na zařízení funguje dál:

curl -X DELETE \
  https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID \
  -H "Authorization: Bearer mpx_live_…"
# → { "deleted": true, "id": "acc_5f734b9270e8" }

Limity spotřeby a vypršení jednotlivých proxy

Dejte kterékoli proxy limit spotřeby — ideální, když přeprodáváte přístup a každému zákazníkovi měříte datový příděl. Nastavte nebo změňte ho kdykoli (0 ho vymaže), při vytvoření, přes PATCH nebo vyhrazeným endpointem níže. Když bytes_used dosáhne limitu, je proxy zablokována: zachová si port a přihlašovací údaje, ale odmítá každý požadavek a over_limit se změní na true. Zvyšte limit nad použité množství — nebo ho vymažte — a proxy se okamžitě obnoví, stejný endpoint, žádná rekonfigurace. Výpis proxy také uvádí u každé traffic_limit_bytes, živé bytes_used a over_limit.

curl -X POST \
  https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID/limit \
  -H "Authorization: Bearer mpx_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "traffic_limit_bytes": 10737418240 }'   # 10 GB — or 0 to remove
# → { "proxy_id": "acc_5f734b9270e8", "subscription_id": "sub_760c1fc8ddab",
#     "traffic_limit_bytes": 10737418240, "over_limit": false }

Časové vypršení — dejte proxy okamžik expires_at (ISO 8601, v budoucnosti) při vytvoření nebo přes PATCH; null vymaže čekající vypršení. V ten okamžik je proxy vyřazena — trvale, na rozdíl od vratného zablokování limitem spotřeby. Pro obnovení zákazníka vytvořte novou proxy (nový port a přihlašovací údaje). Ideální pro prodej denních/týdenních propustek:

# A proxy that stops serving in 7 days
curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "protocol": "socks5", "expires_at": "2026-07-13T09:00:00Z" }'

# Extend or clear it later
curl -X PATCH \
  https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID \
  -H "Authorization: Bearer mpx_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "expires_at": "2026-07-20T09:00:00Z" }'   # or null to remove

VPN configs (WireGuard)

Turn a SOCKS5 username/password proxy into a full-device WireGuard tunnel. Each proxy can carry one WireGuard config; creation requires the VPN add-on. Legacy OpenVPN rows remain downloadable and revocable, but new OpenVPN configs cannot be provisioned.

Soubor se zobrazí jednou
The create response includes the full WireGuard file and its client private key. Store it securely; the same file can be downloaded later from the file endpoint.
# Create a WireGuard config on a proxy
curl -X POST \
  https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID/vpn-configs \
  -H "Authorization: Bearer mpx_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "kind": "wireguard", "name": "My laptop" }'
# → { "id": "vpn_9f2c1a0b7e", "kind": "wireguard", "client_ip": "10.77.0.2",
#     "config_text": "[Interface]\nPrivateKey = …\n[Peer]\n…", … }

# List a proxy's configs (metadata + usage vs the one-config cap)
curl https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID/vpn-configs \
     -H "Authorization: Bearer mpx_live_…"

# Re-download the file straight to disk
curl -OJ \
  https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID/vpn-configs/vpn_9f2c1a0b7e/file \
  -H "Authorization: Bearer mpx_live_…"

# Revoke (drops the WireGuard peer and kills any live session)
curl -X DELETE \
  https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID/vpn-configs/vpn_9f2c1a0b7e \
  -H "Authorization: Bearer mpx_live_…"

Use the file with wg-quick up ./mpx-9f2c1a0b.conf or import it into a WireGuard client. Rotating the proxy also rotates the VPN exit.

Rotace IP

Rotace požádá operátora o čerstvou IP. Je na úrovni zařízení — každá proxy na zařízení dostane novou IP — zařadí se do fronty pro telefon a uplatní se během jednoho dotazovacího cyklu (~25 s).

Nejlepší možné úsilí v mobilních sítích
Zda opětovné vytočení přinese novou adresu, je na operátorovi — někteří při rychlém opětovném vytočení přidělí stejnou IP. Ověřte to z exit_ip na zařízení nebo z /ip-history.

Rotovat nyní — zařaďte jednorázovou rotaci do fronty:

curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/change-ip \
     -H "Authorization: Bearer mpx_live_…"

# → { "status": "rotating", "subscription_id": "sub_760c1fc8ddab",
#     "command_id": "cmd_a41b",
#     "note": "IP rotation on mobile networks is best-effort; …" }

Rotace na unikátní IP — předejte unique: true, aby rotace pokračovala, dokud výstupní IP nebude taková, která se nevyskytla v posledních window_min minutách historie IP tohoto předplatného (výchozí 60, max 1440), s opakováním až max_attemptskrát (výchozí 3, max 5). Každý pokus stojí celý rotační cyklus (~30–90 s); průběh sledujte dotazem na variantu GET. Operátoři mohou IP legitimně přidělit znovu, takže exhausted je možný poctivý výsledek:

curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/change-ip \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "unique": true, "window_min": 60, "max_attempts": 3 }'
# → { "status": "rotating", "request_id": "rr_18d2c4", "command_id": "cmd_a41b",
#     "unique": { "window_min": 60, "max_attempts": 3 }, … }

# Poll for the outcome (active | succeeded | exhausted | superseded | expired)
curl https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/change-ip \
     -H "Authorization: Bearer mpx_live_…"
# → { "request_id": "rr_18d2c4", "status": "succeeded",
#     "attempts_used": 2, "attempts_max": 3, "window_min": 60,
#     "started_ip": "77.136.66.63", "result_ip": "77.136.67.101", … }

Hromadná rotace — rotujte každé spárované zařízení jedním voláním s all: true, nebo zvolenou množinu přes subscription_ids (jedno, nebo druhé je povinné, takže chybný požadavek nikdy nedopatřením nezrotuje celý váš park). Přijímá stejné volby unique jako endpoint pro jednotlivé předplatné a každé předplatné hlásí vlastní výsledek — jeden pozastavený nebo nespárovaný slot nikdy neshodí celou dávku. Vyžaduje roli operátora u každého předplatného:

# Rotate every paired device at once (explicit opt-in)…
curl -X POST https://mobileproxy.app/api/v1/proxies/rotate \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "all": true }'

# …or a chosen set, with the unique-IP options
curl -X POST https://mobileproxy.app/api/v1/proxies/rotate \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "subscription_ids": ["sub_760c1fc8ddab"], "unique": true }'
# → { "results": [ { "subscription_id": "sub_760c1fc8ddab",
#       "status": "rotating", "command_id": "…", "request_id": "rr_18d2c4" } ],
#     "rotating": 1, "skipped": 0, … }

Rotační odkazy — tokenizovaná URL, která při načtení rotuje IP tohoto zařízení, bez hlavičky s ověřením (tajemstvím je token). Vložte ji do libovolného nástroje, který podporuje „rotační URL“. Vypisujte je, vytvářejte a rušte:

# List rotation links
curl https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/rotation-links \
     -H "Authorization: Bearer mpx_live_…"
# → { "rotation_links": [ { "token": "rk_9f2c81d4e7",
#       "url": "https://mobileproxy.app/rotate/rk_9f2c81d4e7", "created_at": "…" } ] }

# Create one
curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/rotation-links \
     -H "Authorization: Bearer mpx_live_…"
# → { "token": "rk_9f2c81d4e7", "url": "https://mobileproxy.app/rotate/rk_9f2c81d4e7" }

# Revoke one
curl -X DELETE https://mobileproxy.app/api/v1/rotation-links/ROTATION_TOKEN \
     -H "Authorization: Bearer mpx_live_…"
# → { "deleted": true, "token": "rk_9f2c81d4e7" }

Naplánovaná (časovaná) rotace — nastavte interval automatické rotace v minutách (0 ji vypne; max 1440). Přetrvává jako rotation_interval_min na zařízení a odešle příkaz set_rotation_interval, který telefon uplatní při dalším dotazu, takže se v tomto rytmu vytáčí sám:

# Read the current settings
curl https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/rotation \
     -H "Authorization: Bearer mpx_live_…"
# → { "subscription_id": "sub_760c1fc8ddab", "interval_minutes": 0,
#     "airplane_seconds": 5, "stale_ip_alert_minutes": 0 }

# Rotate automatically every 15 minutes
curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/rotation \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "interval_minutes": 15 }'
# → { "status": "set", "subscription_id": "sub_760c1fc8ddab",
#     "interval_minutes": 15, "airplane_seconds": 5,
#     "stale_ip_alert_minutes": 0, "command_id": "cmd_a41b" }

Timeout režimu Letadlo — jak dlouho telefon drží zapnutý režim Letadlo při každé změně IP (airplane_seconds, 3–60, výchozí 5). Někteří operátoři uvolní starou zápůjčku až po delším přidržení; zvyšte to, pokud rotace stále vracejí stejnou IP. Platí pro naplánované, dashboardové i API rotace stejně:

curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/rotation \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "airplane_seconds": 20 }'
# → { "status": "set", "subscription_id": "sub_760c1fc8ddab",
#     "interval_minutes": 15, "airplane_seconds": 20,
#     "stale_ip_alert_minutes": 0, "command_id": "cmd_b52c" }

Vlastní DNS — resolvery, které telefon používá pro doménové dotazy přes proxy (až 3 IP literály; telefon uplatní první a znovu vytočí svůj tunel). Prázdný seznam obnoví výchozí DNS operátora:

# Read
curl https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/dns \
     -H "Authorization: Bearer mpx_live_…"
# → { "subscription_id": "sub_760c1fc8ddab", "dns_servers": [] }

# Set (and later send [] to go back to carrier DNS)
curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/dns \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "dns_servers": ["1.1.1.1", "8.8.8.8"] }'
# → { "status": "set", "subscription_id": "sub_760c1fc8ddab",
#     "dns_servers": ["1.1.1.1", "8.8.8.8"], "command_id": "cmd_c63d" }

Monitoring

Historie výstupních IP — nedávné výstupní IP hlášené telefonem, bez duplicit (nový řádek jen tehdy, když se IP skutečně změnila). Spolehlivý způsob, jak ověřit, že rotace proběhla:

curl https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/ip-history \
     -H "Authorization: Bearer mpx_live_…"

# → { "subscription_id": "sub_760c1fc8ddab", "ip_history": [
#     { "ip": "77.136.66.63", "carrier": "SFR", "ts": "…" }, … ] }

Volitelné parametry dotazu: from/to (ISO 8601) ohraničují okno, limit omezuje počet položek (výchozí 50, max 500) a group=day místo toho vrací denní počty změn — předejte tz jako svůj posun od UTC v minutách, aby se dny seskupily podle vašeho časového pásma. Tímto je poháněn kalendář historie IP v dashboardu:

# Entries for one day
curl "https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/ip-history?from=2026-07-04T22:00:00Z&to=2026-07-05T22:00:00Z&limit=500" \
     -H "Authorization: Bearer mpx_live_…"

# Per-day counts for a month (tz = minutes east of UTC, e.g. 120 for CEST)
curl "https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/ip-history?group=day&tz=120&from=2026-06-30T22:00:00Z&to=2026-07-31T22:00:00Z" \
     -H "Authorization: Bearer mpx_live_…"
# → { "subscription_id": "sub_760c1fc8ddab", "days": [
#     { "day": "2026-07-03", "changes": 9 }, { "day": "2026-07-05", "changes": 2 } ] }

Upozornění na IP — server sleduje váš park (~každých 60 s) a otevře upozornění, když je potřeba pozornost: stale_ip, když je zařízení online, ale jeho výstupní IP se nezměnila déle, než je práh předplatného (nastavte stale_ip_alert_minutes na /rotation; 0 = vypnuto, 2–10080), a duplicate_ip, když dvě z vašich zařízení hlásí stejnou výstupní IP (NAT operátora může dvěma SIM přidělit jednu adresu — rotujte jednu, abyste je oddělili). Upozornění se automaticky vyřeší, když podmínka pomine; zobrazují se také ve zvonku upozornění v dashboardu:

# Turn on stale-IP alerts: warn after 60 min without an IP change
curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/rotation \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "stale_ip_alert_minutes": 60 }'

# Poll open alerts (feed this to your own monitoring)
curl https://mobileproxy.app/api/v1/alerts \
     -H "Authorization: Bearer mpx_live_…"
# → { "alerts": [
#     { "id": "42", "sub_id": "sub_760c1fc8ddab", "sub_name": "Galaxy S8",
#       "kind": "stale_ip",
#       "message": "IP unchanged for 75 min (alert threshold 60 min) — still 77.136.66.44",
#       "detail": { "ip": "77.136.66.44", "age_min": 75, "threshold_min": 60 },
#       "created_at": "…", "resolved_at": null, "seen_at": null },
#     { "id": "41", "sub_id": "sub_9d8e7f6a5b4c", "sub_name": "Galaxy A32",
#       "kind": "duplicate_ip",
#       "message": "Exit IP 77.136.67.33 is also used by “Galaxy S8” — rotate one device to separate them",
#       "detail": { "ip": "77.136.67.33",
#                   "shared_with": [ { "sub_id": "sub_760c1fc8ddab", "name": "Galaxy S8" } ] },
#       "created_at": "…", "resolved_at": null, "seen_at": null } ],
#     "unseen": 2 }

# Include resolved history; filter to one subscription
curl "https://mobileproxy.app/api/v1/alerts?status=all&subscription=SUBSCRIPTION_ID" \
     -H "Authorization: Bearer mpx_live_…"

# Reset the dashboard's unseen badge (never resolves anything)
curl -X POST https://mobileproxy.app/api/v1/alerts/seen \
     -H "Authorization: Bearer mpx_live_…"
# → { "status": "ok", "marked": 2 }

Provoz zařízení — bajty počítané na bráně, rozdělené po proxy. Praktické pro fakturaci zákazníkům, kterým přeprodáváte:

curl https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/traffic \
     -H "Authorization: Bearer mpx_live_…"

# → { "subscription_id": "sub_760c1fc8ddab",
#     "bytes_sent": 10485760, "bytes_recv": 262144000, "bytes_total": 272629760,
#     "per_proxy": [ { "proxy_id": "acc_5f734b9270e8",
#                      "bytes_sent": 10485760, "bytes_recv": 262144000 } ] }

Denní rozpad provozu — odeslané/přijaté bajty po dnech, z minutových vzorků uchovávaných na webové vrstvě, takže série přežije výměny zařízení i vyřazení proxy. data_since označuje nejstarší vzorek — dny před ním nemají žádná data, což není totéž jako nulový provoz. Předejte tz (svůj posun od UTC v minutách), aby se dny seskupily podle vašeho časového pásma; okna až 92 dní:

curl "https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/traffic/by-day?tz=120" \
     -H "Authorization: Bearer mpx_live_…"

# → { "subscription_id": "sub_760c1fc8ddab", "tz": 120, "data_since": "…",
#     "days": [ { "day": "2026-07-06", "bytes_sent": 10485760,
#                 "bytes_recv": 262144000, "bytes_total": 272629760 } ],
#     "total": { "bytes_sent": 10485760, "bytes_recv": 262144000,
#                "bytes_total": 272629760 } }

Denní dostupnost — sekundy nahoru/dolů po dnech složené ze záznamu srdečního tepu zařízení (sjednoceno napříč výměnami zařízení). Měří živost srdečního tepu zařízení (rytmus ~25 s, práh mezery ~90 s), ne použitelnost tunelu od začátku do konce. current je stav právě teď; uptime_pct pokrývá pozorovanou část každého dne:

curl "https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/uptime?tz=120" \
     -H "Authorization: Bearer mpx_live_…"

# → { "subscription_id": "sub_760c1fc8ddab", "tz": 120, "current": "up",
#     "data_since": "…",
#     "days": [ { "day": "2026-07-06", "up_seconds": 31547,
#                 "down_seconds": 253, "uptime_pct": 99.2 } ] }

Spotřeba za celý účet — souhrn napříč každým zařízením:

curl https://mobileproxy.app/api/v1/usage/summary \
     -H "Authorization: Bearer mpx_live_…"

# → { "subscriptions": 3, "proxies": 5,
#     "bytes_sent": 31457280, "bytes_recv": 786432000, "bytes_total": 817889280 }

SMS / OTP

Přijaté SMS — příchozí zprávy na SIM tohoto telefonu, nejnovější první. Užitečné pro čtení jednorázových ověřovacích kódů (OTP) na telefonech, které vlastníte. Spoléhá na volitelné oprávnění aplikace přijímat SMS; pokud bylo na zařízení odmítnuto, seznam zůstane prázdný:

curl https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/sms \
     -H "Authorization: Bearer mpx_live_…"

# → { "subscription_id": "sub_760c1fc8ddab", "messages": [
#     { "id": "1042", "sender": "+15550101",
#       "body": "Your verification code is 314159",
#       "received_at": "2026-07-05T14:12:00.000Z" }, … ] }

Servery

Umístění bran — místa, ze kterých jsou vaše proxy obsluhovány:

curl https://mobileproxy.app/api/v1/servers/locations \
     -H "Authorization: Bearer mpx_live_…"

# → { "locations": [ { "id": "eu-de-1", "host": "173.249.36.102",
#       "region": "EU · Germany (Frankfurt)", "country": "DE",
#       "protocols": ["socks5"], "pool": "mobile" } ] }

API tokeny

Vypisujte, vytvářejte a rušte API tokeny. Tajný klíč nově vytvořeného tokenu se zobrazí jednou — ihned si ho uložte; už nikdy nebude získatelný. Zrušení nabývá účinnosti okamžitě:

# List (metadata only — never the secret)
curl https://mobileproxy.app/api/v1/tokens \
     -H "Authorization: Bearer mpx_live_…"
# → { "tokens": [ { "id": "tk_51ad", "name": "storefront",
#       "prefix": "mpx_live_9f2c", "created_at": "…", "last_used_at": "…" } ] }

# Create (secret shown once)
curl -X POST https://mobileproxy.app/api/v1/tokens \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "name": "storefront" }'
# → { "id": "tk_51ad", "name": "storefront",
#     "token": "mpx_live_9f2c81d4e7…", "prefix": "mpx_live_9f2c",
#     "scope_subscription_id": null, "readonly": false,
#     "note": "Store this token now — it will not be shown again." }

# Revoke
curl -X DELETE https://mobileproxy.app/api/v1/tokens/TOKEN_ID \
     -H "Authorization: Bearer mpx_live_…"
# → { "deleted": true, "id": "tk_51ad" }

Omezené klíče a klíče jen pro čtení

Delegujte přístup, aniž byste sdíleli svůj účet. Předejte subscription_id, abyste token omezili na jedno předplatné, a readonly: true, abyste ho omezili na požadavky GET. Omezený token dosáhne jen na endpointy vlastního předplatného (plus /me); token jen pro čtení je odmítnut při jakémkoli zápisu. Obojí jsou omezení navrstvená na váš účet — omezený klíč se nikdy nedostane k datům jiného účtu.

# A read-only key for ONE subscription — safe to hand a teammate or a monitor
curl -X POST https://mobileproxy.app/api/v1/tokens \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "name": "customer-42",
           "subscription_id": "sub_760c1fc8ddab",
           "readonly": true }'
# → { …, "scope_subscription_id": "sub_760c1fc8ddab", "readonly": true }

# With that key: a GET on its own subscription works…
curl https://mobileproxy.app/api/v1/subscriptions/sub_760c1fc8ddab/traffic \
     -H "Authorization: Bearer mpx_live_scoped…"     # 200

# …but another subscription, the account-wide list, or any write is refused.
curl -X POST https://mobileproxy.app/api/v1/subscriptions/sub_760c1fc8ddab/change-ip \
     -H "Authorization: Bearer mpx_live_scoped…"     # 401 (read-only)
Tip
Tato reference zůstává v dokonalém souladu s API. Pro prohlížeč, kterým můžete proklikat — s vlastním tokenem a živými odpověďmi — otevřete interaktivní konzoli nebo si přečtěte surový OpenAPI dokument.