API
API-referens
En komplett referens, endpoint för endpoint, för REST API:et i mobileproxy.app. Varje sökväg, fält och exempel här speglar det live OpenAPI-dokument som API:et är byggt av. Bas-URL https://mobileproxy.app/api/v1.
Autentisering och bas-URL
Varje endpoint ligger under https://mobileproxy.app/api/v1 och kräver en bearer-token. Skapa en i dashboarden under För utvecklare → API-tokens, eller med POST /tokens när du är inloggad. Hemligheten visas en gång — spara den. Skicka den med varje förfrågan:
Authorization: Bearer mpx_live_…Tokens som börjar med mpx_live_ är dina kontotokens. Endpoints under /device/* anropas av Android-appen själv och autentiseras med en enhetstoken per telefon (mpxdev_…) som utfärdas vid parkoppling — normalt anropar du dem aldrig.
Fel är JSON med ett läsbart meddelande och en maskinkod:
{ "error": "No such device.", "code": "not_found" }| Fält | Typ | Beskrivning |
|---|---|---|
| 401 | unauthorized | Token saknas, är felaktig eller återkallad. |
| 403 | forbidden | Token giltig men inte tillåten. |
| 404 | not_found | Resursen finns inte på detta konto. |
| 502 | control_plane_unavailable | Gateway/control plane tillfälligt onåbar — försök igen. |
Konto
GET /me — vem är jag? Returnerar kontot plus live-antal av prenumerationer och 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" }Prenumerationer
En prenumeration (id sub_…) är den beständiga plats du äger: dess läsbara name, inställningar och proxyer består även när telefonen under den byts ut. Dess device är telefonen som just nu driver den (eller null när den är oparkopplad) och är utbytbar — ett byte behåller varje proxy-endpoint.
Lista prenumerationer — var och en med sin parkopplade enhet sammanslagen med live-gateway-status (online = proxytunneln är uppe):
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": "…" } } ] }Skapa en prenumeration (oparkopplad), parkoppla eller byt sedan telefon. POST /subscriptions/{id}/pair returnerar en PIN som är giltig ~3 minuter; inmatad i Android-appen binder den telefonen. På en plats som redan har en enhet är detta ett byte (mode: "swap") — den gamla telefonen pensioneras och varje proxy behåller sin host:port och sina autentiseringsuppgifter:
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": "…" }, … }Hämta, uppdatera eller avsluta en prenumeration. POST ändrar namnet, en fritextsbeskrivning description (max 200 tecken, null rensar den), inställningen wifi_split (köas till den parkopplade telefonen, tillämpas vid dess nästa poll ~25 s) eller shared_speed_kbps — hur enhetens hastighet fördelas mellan dess proxyer. -1 (rekommenderas) delar den automatiskt: control plane mäter enhetens verkliga hastighet från live-genomströmning (~3 s ombalansering), proxyer som är aktiva samtidigt konvergerar mot lika delar av den, och en proxy som arbetar ensam får full hastighet. Ett värde > 0 delar den fasta enhetstotalen på samma sätt istället. Värden för speed_limit_kbps per proxy behålls men tillämpas inte medan endera är på; 0 stänger av delning. DELETE river ner dess enhet och proxyer, frigör gateway-portarna och raderar platsens historik — oåterkalleligt:
# 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" }Proxyer
En proxy är en endpoint med ett enda protokoll (SOCKS5 eller HTTP) på en enhet, med egen autentisering, käll-IP-vitlista, hastighetsgräns och domänregler. Hur många en enhet kan betjäna samtidigt är en planförmån (10 på Standard, 20 på Pro) — skapa en per kund eller verktyg och återkalla vilken som helst utan att röra de andra. Att skapa fler än planens tak returnerar 409 proxy_limit_reached.
Skapa en proxy — skapar ett nytt användarnamn/lösenord; lösenordet returneras i klartext en gång, här. Välj protocol (socks5 eller http) och skicka valfritt med traffic_limit_bytes för att ge den ett hårt trafiktak från start:
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 är IPv4-URI:n, endpoint_ipv6 samma port över IPv6 (v6-literalen står inom hakparenteser enligt URL-syntax). Käll-IP-vitlistan accepterar IPv4- och IPv6-adresser och CIDR:er, och destinationer kan också vara IPv6: en SOCKS5 CONNECT till en IPv6-literal eller en domän med endast AAAA går ut över telefonens carrier-IPv6 när SIM-kortet har en.Redigera en proxys policy — autentiseringsläge, IP-vitlista, hastighetsgräns och domänregler, tillämpade live på gateway (protocol är fast — radera och skapa på nytt istället):
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"] }'Lista proxyer — på en enhet, eller varje proxy över hela kontot:
# 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… }, … ] }Återkalla en proxy — stoppar den enda lyssnaren omedelbart; varje annan proxy på enheten fortsätter fungera:
curl -X DELETE \
https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID \
-H "Authorization: Bearer mpx_live_…"
# → { "deleted": true, "id": "acc_5f734b9270e8" }Användningsgränser och utgång per proxy
Ge valfri proxy en användningsgräns — idealiskt när du säljer vidare åtkomst och mäter varje kund mot en datamängd. Ställ in eller ändra den när som helst (0 rensar den), vid skapande, via PATCH eller med den dedikerade endpointen nedan. När bytes_used når taket blockeras proxyn: den behåller sin port och sina autentiseringsuppgifter men avvisar varje förfrågan, och over_limit blir true. Höj gränsen över den förbrukade mängden — eller rensa den — så återupptar proxyn omedelbart, samma endpoint, ingen omkonfiguration. Att lista proxyer rapporterar också var och ens traffic_limit_bytes, live bytes_used och 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 }Tidsbaserad utgång — ge en proxy en expires_at-tidpunkt (ISO 8601, i framtiden) vid skapande eller via PATCH; null rensar en väntande utgång. Vid den tidpunkten pensioneras proxyn — permanent, till skillnad från den reversibla användningsgräns-blockeringen. För att förnya en kund, skapa en ny proxy (ny port och nya autentiseringsuppgifter). Perfekt för att sälja dags- eller veckopass:
# 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-konfigurationer (WireGuard och OpenVPN)
Förvandla valfri proxy till ett VPN för hela enheten. Varje konfiguration är en WireGuard- (.conf) eller OpenVPN-fil (.ovpn) som tunnlar en hel enhet — telefon, laptop, router — genom den proxyns carrier-IP. En proxy kan ha 1 av varje sort — en WireGuard- och en OpenVPN-konfiguration. Konfigurationer kräver en proxy med SOCKS5 + användarnamn/lösenord så att gatewayen kan autentisera mot den. Att skapa en konfiguration kräver VPN-tillägget på enhetens order (403 vpn_addon_required utan det) — befintliga konfigurationer förblir listade, nedladdningsbara och återkallningsbara.
config_text — hela filen, som innehåller klientens privata nyckel/certifikat. Den går inte att återskapa; spara den när du skapar den. Du kan ladda ner exakt samma fil igen när som helst från /file-endpointen, men en förlorad fil kan bara ersättas genom att återkalla och skapa en ny konfiguration.# 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_…"Använd filen som vanligt: wg-quick up ./mpx-9f2c1a0b.conf för WireGuard, eller importera .ovpn i valfri OpenVPN-klient. All enhetens trafik går sedan ut genom telefonens carrier-IP, och att rotera den proxyns IP roterar även VPN:ets utgång.
IP-rotation
Rotation ber carriern om en ny IP. Den är per enhet — varje proxy på enheten får den nya IP:n — köas till telefonen och tillämpas inom en poll-cykel (~25 s).
exit_ip på enheten eller från /ip-history.Rotera nu — köa en engångsrotation:
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; …" }Unik-IP-rotation — skicka unique: true för att fortsätta rotera tills exit-IP:n är en som inte setts under de senaste window_min minuterna av denna prenumerations IP-historik (standard 60, max 1440), med upp till max_attempts försök (standard 3, max 5). Varje försök kostar en full rotationscykel (~30–90 s); polla GET-varianten för framsteg. Carriers kan legitimt återutfärda en IP, så exhausted är ett möjligt ärligt utfall:
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 — en tokeniserad URL som roterar denna enhets IP när den hämtas, utan auth-header (hemligheten är token). Klistra in den i valfritt verktyg som stöder en "rotation URL". Lista, skapa och återkalla dem:
# 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" }Schemalagd (tidsstyrd) rotation — ställ in ett automatiskt rotationsintervall i minuter (0 stänger av det; max 1440). Det består som rotation_interval_min på enheten och skickar ett set_rotation_interval-kommando som telefonen tillämpar vid sin nästa poll, så den ringer om i den takten på egen hand:
# 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" }Flygplanslägestimeout — hur länge telefonen håller Flygplansläge PÅ under varje IP-ändring (airplane_seconds, 3–60, standard 5). Vissa carriers släpper det gamla leaset först efter en längre paus; höj detta om rotationer fortsätter ge samma IP. Gäller schemalagda, dashboard- och API-rotationer lika:
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" }Anpassad DNS — de resolvers telefonen använder för proxade domänuppslag (upp till 3 IP-literaler; telefonen tillämpar den första och ringer om sin tunnel). En tom lista återställer carriernas standard-DNS:
# 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" }Övervakning
Exit-IP-historik — nyliga exit-IP:er rapporterade av telefonen, deduplicerade (en ny rad först när IP:n verkligen ändrades). Det pålitliga sättet att verifiera att en rotation landade:
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": "…" }, … ] }Valfria query-parametrar: from/to (ISO 8601) avgränsar fönstret, limit begränsar posterna (standard 50, max 500), och group=day returnerar ändringsantal per dag istället — skicka tz som din UTC-offset i minuter så att dagar grupperas i din tidszon. Detta är vad som driver dashboardens IP-historikkalender:
# 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-larm — servern bevakar din flotta (~var 60:e s) och öppnar ett larm när något behöver uppmärksamhet: stale_ip när en enhet är online men dess exit-IP inte har ändrats på längre än prenumerationens tröskel (ställ in stale_ip_alert_minutes på /rotation; 0 = av, 2–10080), och duplicate_ip när två av dina enheter rapporterar samma exit-IP (carrier-NAT kan ge två SIM en adress — rotera en för att separera dem). Larm löses automatiskt när villkoret upphör; de visas också i dashboardens larmklocka:
# 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 }Trafik för en enhet — bytes räknade vid gateway, uppdelade per proxy. Praktiskt för att fakturera kunder du säljer vidare till:
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 } ] }Daglig trafikuppdelning — skickade/mottagna bytes per dag, från prov med minutupplösning som hålls på webbnivån, så serien överlever enhetsbyten och proxy-pensionering. data_since markerar det äldsta provet — dagar före det har ingen data, vilket inte är samma sak som noll trafik. Skicka tz (din UTC-offset i minuter) så att dagar grupperas i din tidszon; fönster upp till 92 dagar:
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 } }Daglig upptid — upp/ned-sekunder per dag hopvikta från enhetens heartbeat-register (enhetligt över enhetsbyten). Det mäter enhetens heartbeat-liveness (~25 s takt, ~90 s glapptröskel), inte end-to-end-användbarhet av tunneln. current är tillståndet just nu; uptime_pct täcker den observerade delen av varje dag:
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 } ] }Kontoövergripande användning — en sammanställning över varje enhet:
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
Mottagna SMS — inkommande meddelanden på denna telefons SIM, nyast först. Användbart för att läsa engångskoder (OTP) på telefoner du äger. Det förlitar sig på appens valfria SMS-mottagningsbehörighet; om den avböjdes på enheten förblir listan tom:
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" }, … ] }Servrar
Gateway-platser — platserna dina proxyer betjänas från:
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
Lista, skapa och återkalla API-tokens. En nyskapad tokens hemlighet visas en gång — spara den direkt; den går aldrig att hämta igen. Återkallning träder i kraft omedelbart:
# 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" }Scope-begränsade och skrivskyddade nycklar
Delegera åtkomst utan att dela ditt konto. Skicka subscription_id för att begränsa en token till en enda prenumeration, och readonly: true för att begränsa den till GET-förfrågningar. En scope-begränsad token når endast den prenumerationens egna endpoints (plus /me); en skrivskyddad token avvisas vid varje skrivning. Båda är begränsningar lagda ovanpå ditt konto — en scope-begränsad nyckel kan aldrig nå ett annat kontos data.
# 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)