API
API-viite
Täydellinen, päätepiste kerrallaan etenevä viite mobileproxy.app REST-rajapintaan. Jokainen polku, kenttä ja esimerkki heijastaa reaaliaikaista OpenAPI-dokumenttia, josta API on rakennettu. Perus-URL https://mobileproxy.app/api/v1.
Todennus ja perus-URL
Jokainen päätepiste sijaitsee osoitteessa https://mobileproxy.app/api/v1 ja vaatii bearer-tokenin. Luo sellainen hallintapaneelissa kohdasta Kehittäjille → API-tokenit tai komennolla POST /tokens kirjautuneena. Salaisuus näytetään kerran — tallenna se. Lähetä se jokaisessa pyynnössä:
Authorization: Bearer mpx_live_…Tokenit, jotka alkavat mpx_live_, ovat tilisi tokeneita. /device/*-päätepisteitä kutsuu Android-sovellus itse, ja ne todentuvat laitekohtaisella device-tokenilla (mpxdev_…), joka annetaan parituksessa — sinun ei normaalisti tarvitse kutsua niitä koskaan.
Virheet ovat JSON-muotoisia ihmisluettavalla viestillä ja konekoodilla:
{ "error": "No such device.", "code": "not_found" }| Kenttä | Tyyppi | Kuvaus |
|---|---|---|
| 401 | unauthorized | Token puuttuu, on virheellinen tai peruttu. |
| 403 | forbidden | Token on kelvollinen mutta ei salli tätä. |
| 404 | not_found | Resurssia ei ole tällä tilillä. |
| 502 | control_plane_unavailable | Yhdyskäytävä/ohjaustaso hetkellisesti tavoittamattomissa — yritä uudelleen. |
Tili
GET /me — kuka olen? Palauttaa tilin sekä reaaliaikaiset laskurit tilauksista ja API-tokeneista.
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" }Tilaukset
Tilaus (id sub_…) on pysyvä paikka, jonka omistat: sen selkeä name, asetukset ja proxyt säilyvät, vaikka sen alla oleva puhelin vaihtuisi. Sen device on puhelin, joka sitä parhaillaan pyörittää (tai null, kun paritusta ei ole), ja se on vaihdettavissa — vaihto säilyttää jokaisen proxy-päätepisteen.
Listaa tilaukset — kukin paritetun laitteensa kanssa yhdistettynä reaaliaikaiseen yhdyskäytävän tilaan (online = proxy-tunneli on pystyssä):
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": "…" } } ] }Luo tilaus (parittamaton) ja parita tai vaihda puhelin. POST /subscriptions/{id}/pair palauttaa PIN-koodin, joka on voimassa ~3 minuuttia; Android-sovellukseen syötettynä se sitoo puhelimen. Paikassa, jolla on jo laite, tämä on vaihto (mode: "swap") — vanha puhelin poistetaan käytöstä ja jokainen proxy säilyttää host:port-osoitteensa ja tunnuksensa:
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": "…" }, … }Hae, päivitä tai peru yksi tilaus. POST muuttaa nimen, vapaamuotoisen description-kentän (enintään 200 merkkiä, null tyhjentää sen), wifi_split-asetuksen (jonotetaan paritetulle puhelimelle, otetaan käyttöön sen seuraavassa kyselyssä ~25 s) tai shared_speed_kbps-arvon — miten laitteen nopeus jaetaan sen proxyjen kesken. -1 (suositeltu) jakaa sen automaattisesti: ohjaustaso mittaa laitteen todellisen nopeuden reaaliaikaisesta läpivirtauksesta (~3 s tasapainotus), samaan aikaan varatut proxyt lähentyvät yhtä suuriin osuuksiin siitä, ja yksin toimiva proxy saa täyden nopeuden. Arvo > 0 jakaa sen sijaan kiinteän laitesumman samalla tavalla. Proxy-kohtaiset speed_limit_kbps-arvot säilyvät mutta niitä ei valvota kummankaan ollessa päällä; 0 poistaa jaon käytöstä. DELETE purkaa laitteen ja proxyt, vapauttaa yhdyskäytävän portit ja poistaa paikan historian — peruuttamatonta:
# 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" }Proxyt
Proxy on yksi yhden protokollan päätepiste (SOCKS5 tai HTTP) laitteessa, omalla todennuksellaan, lähde-IP-sallituslistallaan, nopeusrajallaan ja verkkotunnussäännöillään. Kuinka monta laite voi palvella yhtä aikaa on paketin oikeus (10 Standardilla, 20 Prolla) — luo yksi kutakin asiakasta tai työkalua kohti ja peru mikä tahansa niistä muihin koskematta. Paketin ylärajan ylittävä luonti palauttaa 409 proxy_limit_reached.
Luo proxy — luo tuoreen käyttäjänimen/salasanan; salasana palautetaan selväkielisenä kerran, tässä. Valitse protocol (socks5 tai http) ja anna valinnaisesti traffic_limit_bytes, jotta sille tulee kova liikennekatto heti alusta:
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 on IPv4-URI, endpoint_ipv6 sama portti IPv6:n yli (v6-literaali on hakasuluissa URL-syntaksin mukaisesti). Lähde-IP-sallituslista hyväksyy IPv4- ja IPv6-osoitteet sekä CIDR:t, ja kohteet voivat myös olla IPv6: SOCKS5 CONNECT IPv6-literaaliin tai vain AAAA-verkkotunnukseen poistuu puhelimen operaattorin IPv6:n kautta, kun SIMillä on sellainen.Muokkaa proxyn käytäntöä — todennustapa, IP-sallituslista, nopeusraja ja verkkotunnussäännöt, otetaan käyttöön reaaliaikaisesti yhdyskäytävälle (protocol on kiinteä — poista ja luo uudelleen):
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"] }'Listaa proxyt — yhdellä laitteella tai jokainen proxy koko tilillä:
# 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… }, … ] }Peru proxy — pysäyttää tuon yhden kuuntelijan välittömästi; laitteen jokainen muu proxy toimii edelleen:
curl -X DELETE \
https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID \
-H "Authorization: Bearer mpx_live_…"
# → { "deleted": true, "id": "acc_5f734b9270e8" }Proxy-kohtaiset käyttörajat ja vanheneminen
Anna mille tahansa proxylle käyttöraja — ihanteellista, kun jälleenmyyt käyttöoikeutta ja mittaat kullekin asiakkaalle dataosuuden. Aseta tai muuta sitä milloin tahansa (0 tyhjentää sen), luonnissa, PATCHilla tai alla olevalla erillisellä päätepisteellä. Kun bytes_used saavuttaa katon, proxy estetään: se säilyttää porttinsa ja tunnuksensa mutta hylkää jokaisen pyynnön, ja over_limit muuttuu arvoon true. Nosta raja käytetyn määrän yläpuolelle — tai tyhjennä se — ja proxy jatkaa välittömästi, samalla päätepisteellä, ilman uudelleenmääritystä. Proxyjen listaus raportoi myös kunkin traffic_limit_bytes-arvon, reaaliaikaisen bytes_used-arvon ja over_limit-arvon.
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 }Aikaan perustuva vanheneminen — anna proxylle expires_at-hetki (ISO 8601, tulevaisuudessa) luonnissa tai PATCHilla; null tyhjentää odottavan vanhenemisen. Sillä hetkellä proxy poistetaan käytöstä — pysyvästi, toisin kuin peruutettavissa oleva käyttörajan esto. Asiakkaan uusimiseksi luo tuore proxy (uusi portti ja tunnukset). Täydellinen päivä-/viikkopassien myyntiin:
# 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-määritykset (WireGuard ja OpenVPN)
Muunna mikä tahansa proxy koko laitteen VPN:ksi. Kukin määritys on WireGuard- (.conf) tai OpenVPN- (.ovpn) tiedosto, joka tunneloi koko laitteen — puhelimen, kannettavan, reitittimen — kyseisen proxyn mobiilioperaattorin IP:n läpi. Proxyllä voi olla 1 kumpaakin lajia — yksi WireGuard- ja yksi OpenVPN-määritys. Määritykset vaativat SOCKS5 + käyttäjänimi/salasana -proxyn, jotta yhdyskäytävä voi todentua siihen. Määrityksen luonti vaatii VPN-lisäosan laitteen tilaukselle (403 vpn_addon_required ilman sitä) — olemassa olevat määritykset pysyvät listattuina, ladattavina ja peruttavina.
config_text-kentän — koko tiedoston, joka sisältää asiakkaan yksityisen avaimen / sertifikaatin. Sitä ei voi johtaa uudelleen; tallenna se, kun luot sen. Voit ladata täsmälleen saman tiedoston uudelleen milloin tahansa /file-päätepisteestä, mutta kadonnut tiedosto voidaan korvata vain perumalla ja luomalla uusi määritys.# 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_…"Käytä tiedostoa tavalliseen tapaan: wg-quick up ./mpx-9f2c1a0b.conf WireGuardille tai tuo .ovpn mihin tahansa OpenVPN-asiakkaaseen. Kaikki laitteen liikenne poistuu tällöin puhelimen operaattorin IP:n kautta, ja kyseisen proxyn IP:n rotaatio rotatoi myös VPN:n ulostulon.
IP-rotaatio
Rotaatio pyytää operaattorilta tuoreen IP:n. Se on laitekohtainen — jokainen laitteen proxy saa uuden IP:n — jonotettu puhelimelle ja otettu käyttöön yhden kyselyjakson sisällä (~25 s).
exit_ip:stä tai /ip-history:sta.Rotatoi nyt — jonota kertaluontoinen rotaatio:
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; …" }Yksilöllinen IP-rotaatio — anna unique: true, jotta rotaatio jatkuu, kunnes ulostulo-IP on sellainen, jota ei ole nähty tämän tilauksen IP-historian viimeisten window_min minuutin aikana (oletus 60, enintään 1440), yrittäen enintään max_attempts kertaa (oletus 3, enintään 5). Kukin yritys maksaa täyden rotaatiojakson (~30–90 s); kysele GET-varianttia edistymisen seuraamiseksi. Operaattorit voivat perustellusti antaa saman IP:n uudelleen, joten exhausted on mahdollinen rehellinen lopputulos:
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", … }Rotaatiolinkit — tokenisoitu URL, joka rotatoi tämän laitteen IP:n, kun sitä haetaan, ilman todennusotsaketta (salaisuus on token). Liitä se mihin tahansa työkaluun, joka tukee "rotaatio-URL"-kenttää. Listaa, luo ja peru niitä:
# 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" }Ajastettu (aikapohjainen) rotaatio — aseta automaattinen rotaatioväli minuutteina (0 poistaa sen käytöstä; enintään 1440). Se säilyy laitteella arvona rotation_interval_min ja työntää set_rotation_interval-komennon, jonka puhelin ottaa käyttöön seuraavassa kyselyssään, joten se soittaa uudelleen tuolla tahdilla itsenäisesti:
# 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" }Lentotila-aikakatkaisu — kuinka kauan puhelin pitää lentotilan päällä kunkin IP-muutoksen aikana (airplane_seconds, 3–60, oletus 5). Jotkin operaattorit vapauttavat vanhan vuokrasopimuksen vasta pidemmän pidon jälkeen; nosta tätä, jos rotaatiot palauttavat jatkuvasti saman IP:n. Koskee sekä ajastettuja, hallintapaneelin että API-rotaatioita:
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" }Mukautettu DNS — resolverit, joita puhelin käyttää proxyttujen verkkotunnusten hakuihin (enintään 3 IP-literaalia; puhelin ottaa käyttöön ensimmäisen ja soittaa tunnelinsa uudelleen). Tyhjä lista palauttaa operaattorin oletus-DNS:n:
# 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" }Valvonta
Ulostulo-IP-historia — puhelimen raportoimat viimeaikaiset ulostulo-IP:t, duplikaatit poistettuina (uusi rivi vain, kun IP todella muuttui). Luotettava tapa varmistaa, että rotaatio onnistui:
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": "…" }, … ] }Valinnaiset kyselyparametrit: from/to (ISO 8601) rajaavat aikaikkunan, limit rajoittaa merkintöjä (oletus 50, enintään 500), ja group=day palauttaa sen sijaan päiväkohtaiset muutosmäärät — anna tz UTC-siirtymänäsi minuutteina, jotta päivät jaotellaan aikavyöhykkeesi mukaan. Tämä pyörittää hallintapaneelin IP-historiakalenteria:
# 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-hälytykset — palvelin valvoo laitekantaasi (~60 s välein) ja avaa hälytyksen, kun jokin vaatii huomiota: stale_ip, kun laite on online mutta sen ulostulo-IP ei ole muuttunut tilauksen kynnystä kauemmin (aseta stale_ip_alert_minutes kohdassa /rotation; 0 = pois, 2–10080), ja duplicate_ip, kun kaksi laitteistasi raportoi saman ulostulo-IP:n (operaattorin NAT voi antaa kahdelle SIMille yhden osoitteen — rotatoi toinen erottaaksesi ne). Hälytykset ratkeavat automaattisesti, kun tilanne selviää; ne näkyvät myös hallintapaneelin hälytyskellossa:
# 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 }Laitteen liikenne — yhdyskäytävällä lasketut tavut, jaettuna proxyittain. Kätevä jälleenmyytävien asiakkaiden laskutukseen:
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 } ] }Päiväkohtainen liikenne-erittely — päiväkohtaiset lähetetyt/vastaanotetut tavut, minuuttitarkkuudella otetuista näytteistä webbikerroksella, joten sarja säilyy laitevaihtojen ja proxyjen poistojen yli. data_since merkitsee vanhimman näytteen — sitä edeltävillä päivillä ei ole dataa, mikä ei ole sama asia kuin nolla liikennettä. Anna tz (UTC-siirtymäsi minuutteina), jotta päivät jaotellaan aikavyöhykkeesi mukaan; ikkunat enintään 92 päivää:
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 } }Päiväkohtainen käyntiaika — päiväkohtaiset ylhäällä/alhaalla-sekunnit taitettuna laitteen sydämenlyöntitietueesta (yhtenäistettynä laitevaihtojen yli). Se mittaa laitteen sydämenlyönnin elävyyttä (~25 s tahti, ~90 s aukon kynnys), ei päästä-päähän-tunnelin käytettävyyttä. current on nykyinen tila; uptime_pct kattaa kunkin päivän havaitun osan:
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 } ] }Tilinlaajuinen käyttö — koonti jokaisen laitteen yli:
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
Vastaanotetut SMS-viestit — tämän puhelimen SIMille saapuvat viestit, uusimmat ensin. Hyödyllinen kertakäyttöisten vahvistuskoodien (OTP) lukemiseen omistamillasi puhelimilla. Se nojaa sovelluksen valinnaiseen SMS-vastaanottolupaan; jos se hylättiin laitteella, lista pysyy tyhjänä:
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" }, … ] }Palvelimet
Yhdyskäytävän sijainnit — sijainnit, joista proxysi palvellaan:
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-tokenit
Listaa, luo ja peru API-tokeneita. Juuri luodun tokenin salaisuus näytetään kerran — tallenna se heti; sitä ei koskaan saa enää takaisin. Peruminen tulee voimaan välittömästi:
# 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" }Rajatut ja vain luku -avaimet
Delegoi käyttöoikeus jakamatta tiliäsi. Anna subscription_id, jotta token rajautuu yhteen tilaukseen, ja readonly: true, jotta se rajautuu GET-pyyntöihin. Rajattu token ylettyy vain kyseisen tilauksen omiin päätepisteisiin (sekä /me); vain luku -token hylätään jokaisessa kirjoituksessa. Molemmat ovat tilisi päälle asetettuja rajoituksia — rajattu avain ei koskaan ylety toisen tilin dataan.
# 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)