API
Referenza tal-API
Referenza sħiħa, endpoint b'endpoint, għall-API REST ta' mobileproxy.app. Kull path, field, u eżempju hawn jirrifletti d-dokument OpenAPI live li fuqu hija mibnija l-API. Base URL https://mobileproxy.app/api/v1.
Awtentikazzjoni u base URL
Kull endpoint jinsab taħt https://mobileproxy.app/api/v1 u jeħtieġ bearer token. Oħloq wieħed fid-dashboard taħt Għall-iżviluppaturi → API tokens, jew b<mono>POST /tokens</mono> waqt li tkun illoggjat. Is-sigriet jintwera darba biss — aħżnu. Ibagħtu ma kull talba:
Authorization: Bearer mpx_live_…It-tokens li jibdew b<mono>mpx_live_</mono> huma t-tokens tal-kont tiegħek. L-endpoints <mono>/device/*</mono> jissejħu mill-app Android innifisha u jawtentikaw bdevice token għal kull telefon (mpxdev_…) maħruġ waqt l-abbinament — normalment qatt ma ssejħilhom.
L-iżbalji huma JSON b'messaġġ għall-bniedem u kodiċi għall-magna:
{ "error": "No such device.", "code": "not_found" }| Field | Tip | Deskrizzjoni |
|---|---|---|
| 401 | unauthorized | Token nieqes, malformat, jew revokat. |
| 403 | forbidden | Token validu iżda mhux permess. |
| 404 | not_found | Ir-riżorsa ma teżistix f'dan il-kont. |
| 502 | control_plane_unavailable | Gateway/control plane momentanjament ma jintlaħaqx — erġa' pprova. |
Kont
GET /me — min jien? Jirritorna l-kont flimkien ma' għadd live ta' subscriptions u API tokens.
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" }Subscriptions
Subscription (id sub_…) huwa s-slot durabbli li għandek: l-name faċli tiegħu, is-settings, u l-proxies jibqgħu anke meta t-telefon taħtu jinbidel. Id-device tiegħu huwa t-telefon li bħalissa jħaddmu (jew null meta ma jkunx abbinat), u huwa swappable — swap iżomm kull endpoint tal-proxy.
Elenka s-subscriptions — kull wieħed bl-apparat abbinat tiegħu magħqud mal-istatus live tal-gateway (online = it-tunnel tal-proxy huwa attiv):
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": "…" } } ] }Oħloq subscription (mhux abbinat), imbagħad abbina jew iswappja t-telefon. POST /subscriptions/{id}/pair jirritorna PIN validu għal ~3 minuti; meta jiddaħħal fl-app Android jorbot it-telefon. Fuq slot li diġà għandu apparat dan huwa swap (mode: "swap") — it-telefon il-qadim jiġi rtirat u kull proxy iżomm il-host:port u l-kredenzjali tiegħu:
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": "…" }, … }Ġib, aġġorna, jew ikkanċella subscription wieħed. POST ibiddel l-isem, description ħielsa (massimu 200 karattru, null tħassarha), il-preferenza wifi_split (mqiegħda fil-kju għat-telefon abbinat, applikata fil-poll li jmiss ~25 s), jew shared_speed_kbps — kif il-veloċità tal-apparat tinqasam bejn il-proxies tiegħu. -1 (rakkomandat) jaqsamha awtomatikament: il-control plane ikejjel il-veloċità reali tal-apparat mit-throughput live (rebalance ~3 s), il-proxies li jkunu okkupati fl-istess ħin jikkonverġu għal sehem indaqs minnha, u proxy li jaħdem waħdu jieħu l-veloċità sħiħa. Valur > 0 jaqsam dak it-total fiss tal-apparat bl-istess mod minflok. Il-valuri speed_limit_kbps għal kull proxy jinżammu iżda ma jiġux infurzati waqt li waħda minnhom tkun mixgħula; 0 jitfi l-qsim. DELETE ineħħi l-apparat u l-proxies tiegħu, jirrilaxxa l-ports tal-gateway, u jħassar l-istorja tas-slot — irriversibbli:
# 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" }Proxies
Proxy huwa endpoint wieħed b'protokoll wieħed (SOCKS5 jew HTTP) fuq apparat, bl-awtentikazzjoni tiegħu stess, whitelist tal-IP tas-sors, limitu tal-veloċità, u regoli tad-dominju. Kemm jista' jservi apparat f'daqqa huwa entitlement tal-pjan (10 fuq Standard, 20 fuq Pro) — oħloq wieħed għal kull klijent jew għodda, u irrevoka kwalunkwe wieħed mingħajr ma tmiss l-oħrajn. Ħolqien lil hinn mil-limitu tal-pjan tiegħek jirritorna 409 proxy_limit_reached.
Oħloq proxy — joħloq username/password frisk; il-password tiġi ritornata fil-ċar darba, hawn. Agħżel protocol (socks5 jew http) u fakultattivament għaddi traffic_limit_bytes biex tagħtih limitu tat-traffiku iebes mill-bidu:
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 huwa l-URI IPv4, endpoint_ipv6 l-istess port fuq IPv6 (il-literal v6 huwa bejn parentesi kwadri, skont is-sintassi tal-URL). Il-whitelist tal-IP tas-sors taċċetta indirizzi u CIDRs IPv4 u IPv6, u d-destinazzjonijiet jistgħu jkunu IPv6 wkoll: SOCKS5 CONNECT lejn literal IPv6 jew dominju AAAA-only joħroġ fuq l-IPv6 tal-carrier tat-telefon meta s-SIM ikollu wieħed.Editja l-policy ta' proxy — mod tal-awtentikazzjoni, whitelist tal-IP, limitu tal-veloċità, u regoli tad-dominju, applikati live fuq il-gateway (protocol huwa fiss — ħassar u erġa' oħloq minflok):
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"] }'Elenka l-proxies — fuq apparat wieħed, jew kull proxy fil-kont kollu:
# 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… }, … ] }Irrevoka proxy — iwaqqaf dak il-listener wieħed immedjatament; kull proxy ieħor fuq l-apparat jibqa' jaħdem:
curl -X DELETE \
https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID \
-H "Authorization: Bearer mpx_live_…"
# → { "deleted": true, "id": "acc_5f734b9270e8" }Limiti tal-użu u skadenza għal kull proxy
Agħti lil kwalunkwe proxy limitu tal-użu — ideali meta terġa' tbigħ l-aċċess u tkejjel lil kull klijent ma' allowance tad-data. Issettjah jew ibdlu meta trid (0 tħassru), fil-ħolqien, permezz ta' PATCH, jew bl-endpoint dedikat hawn taħt. Meta bytes_used jilħaq il-limitu l-proxy jiġi imblukkat: iżomm il-port u l-kredenzjali tiegħu iżda jirrifjuta kull talba, u over_limit isir true. Għolli l-limitu 'l fuq mill-ammont użat — jew ħassru — u l-proxy jerġa' jibda immedjatament, l-istess endpoint, l-ebda konfigurazzjoni mill-ġdid. L-elenkar tal-proxies jirrapporta wkoll it-traffic_limit_bytes, il-bytes_used live, u l-over_limit ta' kull wieħed.
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 }Skadenza bbażata fuq il-ħin — agħti lil proxy mument expires_at (ISO 8601, fil-futur) fil-ħolqien jew permezz ta' PATCH; null tħassar skadenza pendenti. F'dak il-mument il-proxy jiġi rtirat — b'mod permanenti, b'differenza mill-imblukkar riversibbli tal-limitu tal-użu. Biex iġġedded klijent, oħloq proxy frisk (port u kredenzjali ġodda). Perfett biex tbigħ passes ta' ġurnata/ġimgħa:
# 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 removeKonfigurazzjonijiet VPN (WireGuard u OpenVPN)
Ibdel kwalunkwe proxy f<strong>VPN għall-apparat kollu</strong>. Kull konfigurazzjoni hija fajl WireGuard (<mono>.conf</mono>) jew OpenVPN (<mono>.ovpn</mono>) li jgħaddi apparat sħiħ — telefon, laptop, router — mill-IP tal-carrier mobbli ta dak il-proxy. Proxy jista' jkollu 1 ta' kull tip — konfigurazzjoni WireGuard waħda u OpenVPN waħda. Il-konfigurazzjonijiet jeħtieġu proxy SOCKS5 + username/password sabiex il-gateway ikun jista' jawtentika miegħu. Il-ħolqien ta' konfigurazzjoni jeħtieġ l-VPN add-on fuq l-order tal-apparat (403 vpn_addon_required mingħajru) — il-konfigurazzjonijiet eżistenti jibqgħu elenkati, li jistgħu jitniżżlu, u li jistgħu jiġu revokati.
config_text — il-fajl sħiħ, li fih il-private key / ċertifikat tal-klijent. Ma jistax jerġa' jinbena; aħżnu meta toħolqu. Tista' terġa' tniżżel eżattament l-istess fajl meta trid mill-endpoint /file, iżda fajl mitluf jista' jinbidel biss billi tirrevoka u toħloq konfigurazzjoni ġdida.# 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_…"Uża l-fajl bħas-soltu: wg-quick up ./mpx-9f2c1a0b.conf għal WireGuard, jew importa l-.ovpn f'kwalunkwe klijent OpenVPN. It-traffiku kollu tal-apparat imbagħad joħroġ mill-IP tal-carrier tat-telefon, u r-rotazzjoni tal-IP ta' dak il-proxy tirrota wkoll il-ħruġ tal-VPN.
Rotazzjoni tal-IP
Ir-rotazzjoni titlob lill-carrier IP frisk. Hija għal kull apparat — kull proxy fuq l-apparat jieħu l-IP il-ġdid — imqiegħda fil-kju għat-telefon u applikata fi ċiklu ta' poll wieħed (~25 s).
exit_ip fuq l-apparat jew minn /ip-history.Irrota issa — poġġi rotazzjoni ta' darba fil-kju:
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; …" }Rotazzjoni b'IP uniku — għaddi unique: true biex tibqa' tirrota sakemm l-exit IP ikun wieħed li ma dehirx fl-aħħar window_min minuti tal-istorja tal-IP ta' dan is-subscription (default 60, massimu 1440), b'sa max_attempts tentattivi mill-ġdid (default 3, massimu 5). Kull tentattiv jiswa ċiklu sħiħ ta' rotazzjoni (~30–90 s); poll il-varjant GET għall-progress. Il-carriers jistgħu leġittimament jerġgħu joħorġu IP, għalhekk exhausted huwa riżultat onest possibbli:
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", … }Rotation links — URL b'token li jirrota l-IP ta' dan l-apparat meta jiġi mitlub, mingħajr auth header (is-sigriet huwa t-token). Waħħlu f'kwalunkwe għodda li tappoġġja "rotation URL". Elenka, oħloq, u irrevoka:
# 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" }Rotazzjoni skedata (bl-arloġġ) — issettja intervall ta' rotazzjoni awtomatika f'minuti (0 jitfiha; massimu 1440). Tibqa' bħala rotation_interval_min fuq l-apparat u tibgħat kmand set_rotation_interval li t-telefon japplika fil-poll li jmiss, sabiex jerġa' jagħmel re-dial f'dak il-pass waħdu:
# 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" }Airplane timeout — kemm iżomm it-telefon il-mod Airplane MIXGĦUL matul kull bidla tal-IP (airplane_seconds, 3–60, default 5). Xi carriers jirrilaxxaw il-lease il-qadim biss wara żamma itwal; għolli dan jekk ir-rotazzjonijiet jibqgħu jirritornaw l-istess IP. Japplika għar-rotazzjonijiet skedati, tad-dashboard, u tal-API bl-istess mod:
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" }DNS personalizzat — ir-resolvers li t-telefon juża għat-tiftix ta' dominji bil-proxy (sa 3 IP literals; it-telefon japplika l-ewwel wieħed u jerġa' jagħmel re-dial tat-tunnel tiegħu). Lista vojta terġa' ġġib id-DNS default tal-carrier:
# 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" }Monitoraġġ
Storja tal-exit IP — exit IPs riċenti rrappurtati mit-telefon, mingħajr duplikati (ringiela ġdida biss meta l-IP fil-fatt jinbidel). Il-mod affidabbli biex tivverifika li rotazzjoni waslet:
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": "…" }, … ] }Parametri tal-query fakultattivi: from/to (ISO 8601) jillimitaw il-window, limit jillimita l-entrati (default 50, massimu 500), u group=day jirritorna l-għadd ta' bidliet kuljum minflok — għaddi tz bħala l-offset tiegħek mill-UTC f'minuti sabiex il-ġranet jiġu maqsuma fiż-żona tal-ħin tiegħek. Dan huwa dak li jħaddem il-kalendarju tal-istorja tal-IP tad-dashboard:
# 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 alerts — is-server jissorvelja l-flotta tiegħek (~kull 60 s) u jiftaħ alert meta xi ħaġa teħtieġ attenzjoni: stale_ip meta apparat ikun online iżda l-exit IP tiegħu ma jkunx inbidel għal aktar mil-limitu tas-subscription (issettja stale_ip_alert_minutes fuq /rotation; 0 = mitfi, 2–10080), u duplicate_ip meta tnejn mill-apparati tiegħek jirrappurtaw l-istess exit IP (in-NAT tal-carrier jista' jagħti żewġ SIMs indirizz wieħed — irrota wieħed biex tifridhom). L-alerts jissolvu awtomatikament meta l-kundizzjoni titneħħa; jidhru wkoll fil-qanpiena tal-alerts tad-dashboard:
# 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 }Traffiku għal apparat — bytes magħdudin fil-gateway, maqsumin għal kull proxy. Utli biex tiffattura lill-klijenti li terġa' tbigħlhom:
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 } ] }Analiżi tat-traffiku ta' kuljum — bytes mibgħuta/riċevuti kuljum, minn kampjuni b'riżoluzzjoni ta' minuta miżmuma fuq il-web tier, sabiex is-serje ssurvivi tibdil tal-apparati u rtirar tal-proxies. data_since jimmarka l-eqdem kampjun — ġranet qablu m'għandhom l-ebda data, li mhux l-istess bħal traffiku żero. Għaddi tz (l-offset tiegħek mill-UTC f'minuti) sabiex il-ġranet jiġu maqsuma fiż-żona tal-ħin tiegħek; windows sa 92 jum:
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 } }Uptime ta' kuljum — sekondi up/down kuljum miġbura mir-rekord tal-heartbeat tal-apparat (unifikat matul it-tibdil tal-apparati). Ikejjel il-ħajja tal-heartbeat tal-apparat (pass ~25 s, limitu tad-distakk ~90 s), mhux l-użabbiltà tat-tunnel minn tarf sa tarf. current huwa l-istat bħalissa; uptime_pct ikopri l-parti osservata ta' kull ġurnata:
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 } ] }Użu għall-kont kollu — sommarju fuq kull apparat:
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
SMS riċevuti — messaġġi deħlin fuq is-SIM ta' dan it-telefon, l-aktar riċenti l-ewwel. Utli biex taqra kodiċi ta' verifika ta' darba (OTPs) fuq telefowni li għandek int. Jiddependi fuq il-permess fakultattiv tal-app biex tirċievi l-SMS; jekk dan ġie rrifjutat fuq l-apparat, il-lista tibqa' vojta:
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" }, … ] }Servers
Postijiet tal-gateway — il-postijiet li minnhom jiġu servuti l-proxies tiegħek:
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 tokens
Elenka, oħloq, u irrevoka API tokens. Is-sigriet ta' token maħluq ġdid jintwera darba — aħżnu minnufih; qatt ma jista' jerġa' jinkiseb. Ir-revoka tidħol fis-seħħ immedjatament:
# 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" }Scoped u read-only keys
Iddelega l-aċċess mingħajr ma taqsam il-kont tiegħek. Għaddi subscription_id biex tagħti scope lil token għal subscription wieħed, u readonly: true biex tillimitah għal talbiet GET. Token bi scope jista' jilħaq biss l-endpoints ta' dak is-subscription (flimkien ma' /me); token read-only jiġi rrifjutat fuq kwalunkwe write. It-tnejn huma restrizzjonijiet mibnija fuq il-kont tiegħek — key bi scope qatt ma jista' jilħaq id-data ta' kont ieħor.
# 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)