mobileproxy.app

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.

Isprobajte uživo
Interaktivna konzola omogućuje vam da zalijepite token i pozovete svaku krajnju točku iz preglednika, s tijelima zahtjeva i stvarnim odgovorima. Neobrađena specifikacija nalazi se na /api/v1/openapi.json.

Pogreške su JSON s razumljivom porukom i strojnim kodom:

{ "error": "No such device.", "code": "not_found" }
PoljeTipOpis
401unauthorizedToken nedostaje, neispravan je ili je opozvan.
403forbiddenToken je valjan, ali nema dopuštenje.
404not_foundResurs ne postoji na ovom računu.
502control_plane_unavailablePristupnik / 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": "you@example.com",
#     "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.

Proxyji na uređaju dijele njegov IP
Svaki proxy na uređaju izlazi kroz isti IP operatera i rotira zajedno — izrada drugog proxyja daje vam drugu vjerodajnicu i pravilo, ne drugi IP. Za drugi IP uparite drugi telefon.

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": "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": "…" }
Svaki proxy port je dual-stack (IPv4 + IPv6)
Povežite se preko bilo koje obitelji — 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… }, … ] }

Ispravni proxyji sa svojim izlaznim IP-ovima — popis na razini cijelog računa nosi aktualni exit_ip svakog proxyja, uživo status uređaja i presudu working (uređaj online, bez naplatne ili ručne obustave, nije preko svog ograničenja prometa; not_working_reason kaže zašto ne). Filtrirajte s ?working=true, a dodajte ?unique_ip=true da zadržite jedan proxy po različitom izlaznom IP-u — dva SIM-a iza istog NAT-a operatera označavaju se i preko 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, … }, … ] }

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

Datoteka se prikazuje jednom
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.

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).

Najbolji mogući napor na mobilnim mrežama
Hoće li ponovno biranje proizvesti novu adresu odluka je operatera — neki dodjeljuju isti IP pri brzim ponovnim biranjima. Potvrdite iz 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", … }

Skupna rotacija — rotirajte svaki upareni uređaj jednim pozivom s all: true, ili odabrani skup preko subscription_ids (jedno ili drugo je obavezno, pa neispravan zahtjev nikad ne može slučajno rotirati cijelu vašu flotu). Prima iste unique opcije kao krajnja točka po pretplati, a svaka pretplata javlja vlastiti ishod — jedan obustavljeni ili neupareni slot nikad ne obara cijelu seriju. Zahtijeva ulogu operatora po pretplati:

# 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, … }

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)
Savjet
Ova referenca ostaje u koraku s API-jem. Za preglednik kroz koji možete klikati — s vlastitim tokenom i aktualnim odgovorima — otvorite interaktivnu konzolu ili pročitajte neobrađeni OpenAPI dokument.