API
API referenca
Potpuna referenca za mobileproxy.app REST API, krajnja točka po krajnja točka. Svaka putanja, polje i primjer ovdje odražavaju živi OpenAPI dokument iz kojeg je API izgrađen. Osnovni URL https://mobileproxy.app/api/v1.
Autentifikacija i osnovni URL
Svaka krajnja točka nalazi se pod https://mobileproxy.app/api/v1 i zahtijeva bearer token. Izradite ga u nadzornoj ploči pod Za razvojne inženjere → API tokeni ili s POST /tokens dok ste prijavljeni. Tajna se prikazuje jednom — pohranite je. Šaljite je uz svaki zahtjev:
Authorization: Bearer mpx_live_…Tokeni koji počinju s mpx_live_ tokeni su vašeg računa. Krajnje točke /device/* poziva sama Android aplikacija i autentificira se tokenom uređaja specifičnim za telefon (mpxdev_…) izdanim pri uparivanju — njih obično nikad ne pozivate.
Pogreške su JSON s razumljivom porukom i strojnim kodom:
{ "error": "No such device.", "code": "not_found" }| Polje | Tip | Opis |
|---|---|---|
| 401 | unauthorized | Token nedostaje, neispravan je ili je opozvan. |
| 403 | forbidden | Token je valjan, ali nema dopuštenje. |
| 404 | not_found | Resurs ne postoji na ovom računu. |
| 502 | control_plane_unavailable | Pristupnik / kontrolna ravnina nakratko nedostupni — pokušajte ponovno. |
Račun
GET /me — tko sam ja? Vraća račun te aktualne brojeve pretplata i API tokena.
curl https://mobileproxy.app/api/v1/me \
-H "Authorization: Bearer mpx_live_…"
# → { "id": "u_8c31f0", "email": "[email protected]",
# "created_at": "2026-06-28T14:02:11.000Z",
# "subscriptions": 3, "api_tokens": 2,
# "plan": "beta", "balance": "0.00" }Pretplate
Pretplata (id sub_…) trajni je slot koji posjedujete: njegovo prijateljsko name, postavke i proxyji ostaju čak i kad se telefon ispod njega promijeni. Njegov device je telefon koji ga trenutačno pokreće (ili null kad nije uparen) i može se zamijeniti — zamjena zadržava svaku proxy krajnju točku.
Popišite pretplate — svaka sa svojim uparenim uređajem spojenim s aktualnim statusom pristupnika (online = proxy tunel je aktivan):
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": "…" } } ] }Izradite pretplatu (neuparenu), zatim uparite ili zamijenite telefon. POST /subscriptions/{id}/pair vraća PIN koji vrijedi ~3 minute; unesen u Android aplikaciju veže telefon. Na slotu koji već ima uređaj ovo je zamjena (mode: "swap") — stari telefon se povlači, a svaki proxy zadržava svoj host:port i vjerodajnice:
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": "…" }, … }Dohvatite, ažurirajte ili otkažite jednu pretplatu. POST mijenja naziv, slobodni description (najviše 200 znakova, null ga briše), postavku wifi_split (stavljenu u red za upareni telefon, primijenjenu pri njegovom sljedećem upitu ~25 s) ili shared_speed_kbps — kako se brzina uređaja dijeli između njegovih proxyja. -1 (preporučeno) dijeli je automatski: kontrolna ravnina mjeri stvarnu brzinu uređaja iz aktualne propusnosti (~3 s rebalans), proxyji zauzeti u isto vrijeme konvergiraju k jednakim udjelima, a proxy koji radi sam dobiva punu brzinu. Vrijednost > 0 umjesto toga dijeli taj fiksni ukupni iznos uređaja na isti način. Vrijednosti speed_limit_kbps po proxyju zadržavaju se, ali se ne primjenjuju dok je bilo koja opcija uključena; 0 isključuje dijeljenje. DELETE ruši njegov uređaj i proxyje, oslobađa portove pristupnika i briše povijest slota — nepovratno:
# 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" }Proxyji
Proxy je jedna krajnja točka s jednim protokolom (SOCKS5 ili HTTP) na uređaju, s vlastitom autentifikacijom, popisom dopuštenih izvornih IP-ova, ograničenjem brzine i pravilima za domene. Koliko ih uređaj može posluživati istovremeno pravo je plana (10 na Standardu, 20 na Pro), pa izradite jedan po korisniku ili alatu i opozovite bilo koji bez utjecaja na ostale. Izrada iznad ograničenja plana vraća 409 proxy_limit_reached.
Izradite proxy — stvara svježe korisničko ime/lozinku; lozinka se ovdje jednom vraća u čitljivom obliku. Odaberite protocol (socks5 ili http) i po želji proslijedite traffic_limit_bytes da mu odmah zadate čvrsto ograničenje prometa:
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": "socks5h://u04c770:[email protected]:30000",
# "endpoint_ipv6": "socks5h://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": "…" }endpoint je IPv4 URI, a endpoint_ipv6 isti port preko IPv6 (v6 literal je u uglatim zagradama, prema URL sintaksi). Popis dopuštenih izvornih IP-ova prihvaća IPv4 i IPv6 adrese te CIDR-ove, a odredišta također mogu biti IPv6: SOCKS5 CONNECT na IPv6 literal ili domenu samo s AAAA zapisom izlazi preko IPv6 operatera telefona kad ga SIM ima.Uredite pravilo proxyja — način autentifikacije, popis dopuštenih IP-ova, ograničenje brzine i pravila za domene, primijenjeno uživo na pristupnik (protocol je fiksan — umjesto toga izbrišite i ponovno izradite):
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"] }'Popišite proxyje — na jednom uređaju ili svaki proxy na cijelom računu:
# 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… }, … ] }Opozovite proxy — odmah zaustavlja tog jednog slušatelja; svaki drugi proxy na uređaju nastavlja raditi:
curl -X DELETE \
https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID \
-H "Authorization: Bearer mpx_live_…"
# → { "deleted": true, "id": "acc_5f734b9270e8" }Ograničenja potrošnje i istek po proxyju
Dodijelite bilo kojem proxyju ograničenje potrošnje — idealno kad preprodajete pristup i mjerite svakom korisniku podatkovni paket. Postavite ga ili promijenite bilo kada (0 ga briše), pri izradi, putem PATCH ili s namjenskom krajnjom točkom u nastavku. Kad bytes_used dosegne ograničenje, proxy se blokira: zadržava svoj port i vjerodajnice, ali odbija svaki zahtjev, a over_limit postaje true. Podignite ograničenje iznad iskorištene količine — ili ga obrišite — i proxy se odmah nastavlja, ista krajnja točka, bez ponovne konfiguracije. Popisivanje proxyja također za svakoga navodi njegov traffic_limit_bytes, aktualni bytes_used i 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 }Istek na temelju vremena — dodijelite proxyju trenutak expires_at (ISO 8601, u budućnosti) pri izradi ili putem PATCH; null briše zakazani istek. U tom trenutku proxy se povlači — trajno, za razliku od reverzibilne blokade zbog ograničenja potrošnje. Za obnovu korisnika izradite novi proxy (novi port i vjerodajnice). Savršeno za prodaju dnevnih/tjednih propusnica:
# 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 removeVPN konfiguracije (WireGuard i OpenVPN)
Pretvorite bilo koji proxy u VPN za cijeli uređaj. Svaka konfiguracija je WireGuard (.conf) ili OpenVPN (.ovpn) datoteka koja tunelira cijeli uređaj — telefon, prijenosnik, usmjerivač — kroz IP mobilnog operatera tog proxyja. Proxy može imati 1 svake vrste — jednu WireGuard i jednu OpenVPN konfiguraciju. Konfiguracije zahtijevaju SOCKS5 + korisničko ime/lozinku proxy kako bi mu se pristupnik mogao autentificirati. Izrada konfiguracije zahtijeva VPN dodatak na narudžbi uređaja (403 vpn_addon_required bez njega) — postojeće konfiguracije ostaju na popisu, dostupne za preuzimanje i opoziv.
config_text — cijelu datoteku koja sadrži klijentov privatni ključ / certifikat. Nije je moguće ponovno izvesti; pohranite je kad je izradite. Istu datoteku možete ponovno preuzeti bilo kada s krajnje točke /file, ali izgubljena datoteka može se zamijeniti samo opozivom i izradom nove konfiguracije.# 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…", … }
# ...or OpenVPN
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": "openvpn" }'
# List a proxy's configs (metadata + per-kind usage vs the 1-per-kind 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 / OpenVPN cert 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_…"Datoteku koristite kao inače: wg-quick up ./mpx-9f2c1a0b.conf za WireGuard ili uvezite .ovpn u bilo koji OpenVPN klijent. Sav promet uređaja tada izlazi kroz IP operatera telefona, a rotacija IP-a tog proxyja rotira i VPN-ov izlaz.
Rotacija IP-a
Rotacija traži od operatera svježi IP. Radi se po uređaju — svaki proxy na uređaju dobiva novi IP — stavlja se u red za telefon i primjenjuje unutar jednog ciklusa upita (~25 s).
exit_ip na uređaju ili iz /ip-history.Rotirajte odmah — stavite u red jednokratnu rotaciju:
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; …" }Rotacija jedinstvenog IP-a — proslijedite unique: true da nastavi rotirati dok izlazni IP ne bude onaj koji nije viđen u zadnjih window_min minuta povijesti IP-ova ove pretplate (zadano 60, najviše 1440), pokušavajući do max_attempts puta (zadano 3, najviše 5). Svaki pokušaj troši puni ciklus rotacije (~30–90 s); pratite napredak preko GET varijante. Operateri legitimno mogu ponovno izdati IP, pa je exhausted mogući iskren ishod:
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", … }Poveznice za rotaciju — URL s tokenom koji rotira IP ovog uređaja kad se dohvati, bez zaglavlja za autentifikaciju (tajna je token). Zalijepite ga u bilo koji alat koji podržava "rotation URL". Popišite ih, izradite i opozovite:
# 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" }Zakazana (vremenska) rotacija — postavite interval automatske rotacije u minutama (0 je isključuje; najviše 1440). Ostaje kao rotation_interval_min na uređaju i šalje naredbu set_rotation_interval koju telefon primjenjuje pri sljedećem upitu, pa ponovno bira u tom ritmu sam od sebe:
# 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" }Vremensko ograničenje zrakoplovnog načina — koliko dugo telefon drži zrakoplovni način UKLJUČENIM tijekom svake promjene IP-a (airplane_seconds, 3–60, zadano 5). Neki operateri oslobađaju stari najam tek nakon duljeg zadržavanja; podignite ovo ako rotacije stalno vraćaju isti IP. Primjenjuje se jednako na zakazane, nadzorne i API rotacije:
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" }Prilagođeni DNS — razrješivači koje telefon koristi za proxy pretraživanja domena (do 3 IP literala; telefon primjenjuje prvi i ponovno bira svoj tunel). Prazan popis vraća zadani DNS operatera:
# 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" }Nadzor
Povijest izlaznih IP-ova — nedavni izlazni IP-ovi koje je telefon prijavio, bez duplikata (novi redak samo kad se IP zaista promijenio). Pouzdan način provjere je li rotacija uspjela:
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": "…" }, … ] }Neobavezni parametri upita: from/to (ISO 8601) omeđuju razdoblje, limit ograničava broj unosa (zadano 50, najviše 500), a group=day umjesto toga vraća dnevne brojeve promjena — proslijedite tz kao svoj UTC pomak u minutama da se dani grupiraju u vašoj vremenskoj zoni. Ovo pokreće kalendar povijesti IP-ova u nadzornoj ploči:
# 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 } ] }IP upozorenja — poslužitelj promatra vašu flotu (~svakih 60 s) i otvara upozorenje kad nešto treba pažnju: stale_ip kad je uređaj na mreži, ali mu se izlazni IP nije promijenio dulje od praga pretplate (postavite stale_ip_alert_minutes na /rotation; 0 = isključeno, 2–10080), i duplicate_ip kad dva vaša uređaja prijave isti izlazni IP (NAT operatera može dodijeliti dvama SIM-ovima jednu adresu — rotirajte jedan da ih razdvojite). Upozorenja se automatski rješavaju kad uvjet nestane; također se prikazuju u zvonu za upozorenja u nadzornoj ploči:
# 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 }Promet za uređaj — bajtovi izbrojani na pristupniku, razdvojeni po proxyju. Praktično za naplatu korisnicima kojima preprodajete:
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 } ] }Dnevni raščlanjeni promet — poslani/primljeni bajtovi po danu, iz uzoraka rezolucije minute čuvanih na web sloju, pa serija preživljava zamjene uređaja i povlačenje proxyja. data_since označava najstariji uzorak — dani prije njega nemaju podatke, što nije isto što i nulti promet. Proslijedite tz (svoj UTC pomak u minutama) da se dani grupiraju u vašoj vremenskoj zoni; razdoblja do 92 dana:
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 } }Dnevna dostupnost — sekunde rada/nerada po danu složene iz zapisa otkucaja uređaja (objedinjene kroz zamjene uređaja). Mjeri živost otkucaja uređaja (~25 s ritam, prag praznine ~90 s), ne upotrebljivost tunela od kraja do kraja. current je trenutačno stanje; uptime_pct pokriva promatrani dio svakog dana:
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 } ] }Potrošnja cijelog računa — zbroj po svim uređajima:
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
Primljeni SMS — dolazne poruke na SIM-u ovog telefona, najnovije prve. Korisno za čitanje jednokratnih verifikacijskih kodova (OTP) na telefonima koje posjedujete. Oslanja se na neobaveznu dozvolu aplikacije za primanje SMS-a; ako je odbijena na uređaju, popis ostaje prazan:
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" }, … ] }Poslužitelji
Lokacije pristupnika — lokacije s kojih se poslužuju vaši proxyji:
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 tokeni
Popišite, izradite i opozovite API tokene. Tajna novoizrađenog tokena prikazuje se jednom — pohranite je odmah; nikad se više ne može dohvatiti. Opoziv stupa na snagu odmah:
# 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" }Ključevi s opsegom i samo za čitanje
Delegirajte pristup bez dijeljenja svojeg računa. Proslijedite subscription_id da ograničite token na jednu pretplatu i readonly: true da ga ograničite na GET zahtjeve. Token s opsegom može doprijeti samo do vlastitih krajnjih točaka te pretplate (uz /me); token samo za čitanje odbija se pri svakom pisanju. Oboje su ograničenja naslagana povrh vašeg računa — ključ s opsegom nikad ne može doprijeti do podataka drugog računa.
# 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)