API
API-Referenz
Eine vollständige Referenz der REST-API von mobileproxy.app, Endpunkt für Endpunkt. Jeder Pfad, jedes Feld und jedes Beispiel hier spiegelt das live gepflegte OpenAPI-Dokument wider, aus dem die API aufgebaut ist. Basis-URL https://mobileproxy.app/api/v1.
Authentifizierung & Basis-URL
Jeder Endpunkt liegt unter https://mobileproxy.app/api/v1 und erfordert ein Bearer-Token. Erstellen Sie eines im Dashboard unter Für Entwickler → API-Tokens oder mit POST /tokens, während Sie angemeldet sind. Das Secret wird nur einmal angezeigt – speichern Sie es. Senden Sie es bei jeder Anfrage mit:
Authorization: Bearer mpx_live_…Tokens, die mit mpx_live_ beginnen, sind Ihre Konto-Tokens. Die /device/*-Endpunkte werden von der Android-App selbst aufgerufen und authentifizieren sich mit einem gerätespezifischen Device-Token (mpxdev_…), das beim Pairing ausgestellt wird – normalerweise rufen Sie diese nie auf.
Fehler sind JSON mit einer verständlichen Meldung und einem maschinenlesbaren Code:
{ "error": "No such device.", "code": "not_found" }| Feld | Typ | Beschreibung |
|---|---|---|
| 401 | unauthorized | Token fehlt, ist fehlerhaft oder widerrufen. |
| 403 | forbidden | Token gültig, aber nicht berechtigt. |
| 404 | not_found | Ressource existiert auf diesem Konto nicht. |
| 502 | control_plane_unavailable | Gateway/Control-Plane kurzzeitig nicht erreichbar – erneut versuchen. |
Konto
GET /me — wer bin ich? Liefert das Konto sowie Live-Zählungen von Abos und 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" }Abos
Ein Abo (ID sub_…) ist der dauerhafte Slot, der Ihnen gehört: sein sprechender name, seine Einstellungen und Proxys bleiben bestehen, auch wenn sich das darunterliegende Telefon ändert. Sein device ist das Telefon, das ihn gerade betreibt (oder null, wenn nicht gekoppelt), und ist austauschbar – ein Wechsel behält jeden Proxy-Endpunkt.
Abos auflisten — jedes mit seinem gekoppelten Gerät, zusammengeführt mit dem Live-Gateway-Status (online = der Proxy-Tunnel ist aktiv):
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": "…" } } ] }Ein Abo erstellen (ungekoppelt), dann das Telefon koppeln oder wechseln. POST /subscriptions/{id}/pair liefert eine PIN, die ~3 Minuten gültig ist; in der Android-App eingegeben, bindet sie das Telefon. Bei einem Slot, der bereits ein Gerät hat, ist dies ein Wechsel (mode: "swap") – das alte Telefon wird ausgemustert und jeder Proxy behält seinen host:port und seine Zugangsdaten:
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": "…" }, … }Ein Abo abrufen, ändern oder kündigen. POST ändert den Namen, eine freie description (max. 200 Zeichen, null löscht sie), die wifi_split-Einstellung (an das gekoppelte Telefon in die Warteschlange gestellt, bei dessen nächstem Abruf angewendet ~25 s) oder shared_speed_kbps – wie die Geschwindigkeit des Geräts auf seine Proxys aufgeteilt wird. -1 (empfohlen) teilt sie automatisch: die Control-Plane misst die reale Geschwindigkeit des Geräts anhand des Live-Durchsatzes (~3 s Neuverteilung), gleichzeitig aktive Proxys konvergieren zu gleichen Anteilen daran, und ein allein arbeitender Proxy erhält die volle Geschwindigkeit. Ein Wert > 0 teilt stattdessen dieses feste Gerätetotal auf dieselbe Weise auf. Proxy-spezifische speed_limit_kbps-Werte bleiben erhalten, werden aber nicht durchgesetzt, solange eines davon aktiv ist; 0 schaltet die Teilung ab. DELETE baut Gerät und Proxys ab, gibt die Gateway-Ports frei und löscht den Verlauf des Slots – unwiderruflich:
# 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" }Proxys
Ein Proxy ist ein Endpunkt mit einem einzigen Protokoll (SOCKS5 oder HTTP) auf einem Gerät, mit eigener Auth, Quell-IP-Whitelist, Geschwindigkeitslimit und Domain-Regeln. Wie viele ein Gerät gleichzeitig bereitstellen kann, ist eine Plan-Berechtigung (10 bei Standard, 20 bei Pro) – erstellen Sie einen pro Kunde oder Tool und widerrufen Sie jeden einzeln, ohne die übrigen zu berühren. Eine Erstellung über das Limit Ihres Plans hinaus liefert 409 proxy_limit_reached.
Einen Proxy erstellen — erzeugt einen frischen Benutzernamen/Passwort; das Passwort wird hier einmalig im Klartext zurückgegeben. Wählen Sie protocol (socks5 oder http) und übergeben Sie optional traffic_limit_bytes, um ihm von Anfang an ein hartes Traffic-Limit zu geben:
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 ist der IPv4-URI, endpoint_ipv6 derselbe Port über IPv6 (das v6-Literal steht gemäß URL-Syntax in eckigen Klammern). Die Quell-IP-Whitelist akzeptiert IPv4- und IPv6-Adressen sowie CIDRs, und auch Ziele dürfen IPv6 sein: ein SOCKS5-CONNECT zu einem IPv6-Literal oder einer nur-AAAA-Domain tritt über die Mobilfunk-IPv6 des Telefons aus, sofern die SIM eine hat.Die Richtlinie eines Proxys bearbeiten — Auth-Modus, IP-Whitelist, Geschwindigkeitslimit und Domain-Regeln, live auf das Gateway angewendet (protocol ist fest – stattdessen löschen und neu erstellen):
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"] }'Proxys auflisten — auf einem Gerät oder jeden Proxy des gesamten Kontos:
# 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… }, … ] }Einen Proxy widerrufen — stoppt diesen einen Listener sofort; jeder andere Proxy auf dem Gerät funktioniert weiter:
curl -X DELETE \
https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID \
-H "Authorization: Bearer mpx_live_…"
# → { "deleted": true, "id": "acc_5f734b9270e8" }Nutzungslimits & Ablauf pro Proxy
Geben Sie jedem Proxy ein Nutzungslimit – ideal, wenn Sie Zugang weiterverkaufen und jedem Kunden ein Datenkontingent zumessen. Setzen oder ändern Sie es jederzeit (0 löscht es), bei der Erstellung, per PATCH oder mit dem eigens dafür vorgesehenen Endpunkt unten. Wenn bytes_used das Limit erreicht, wird der Proxy blockiert: er behält Port und Zugangsdaten, verweigert aber jede Anfrage, und over_limit wird true. Erhöhen Sie das Limit über die verbrauchte Menge – oder löschen Sie es – und der Proxy nimmt den Betrieb sofort wieder auf, gleicher Endpunkt, keine Neukonfiguration. Beim Auflisten von Proxys werden auch das jeweilige traffic_limit_bytes, das Live-bytes_used und over_limit gemeldet.
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 }Zeitbasierter Ablauf — geben Sie einem Proxy bei der Erstellung oder per PATCH einen expires_at-Zeitpunkt (ISO 8601, in der Zukunft); null löscht einen anstehenden Ablauf. Zu diesem Zeitpunkt wird der Proxy ausgemustert – dauerhaft, anders als die umkehrbare Nutzungslimit-Blockierung. Um einen Kunden zu verlängern, erstellen Sie einen frischen Proxy (neuer Port und neue Zugangsdaten). Perfekt für den Verkauf von Tages-/Wochenpässen:
# 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-Konfigurationen (WireGuard & OpenVPN)
Machen Sie aus jedem Proxy ein vollständiges Geräte-VPN. Jede Konfiguration ist eine WireGuard- (.conf) oder OpenVPN- (.ovpn) Datei, die ein ganzes Gerät – Telefon, Laptop, Router – durch die Mobilfunk-IP dieses Proxys tunnelt. Ein Proxy kann je 1 pro Art haben – eine WireGuard- und eine OpenVPN-Konfiguration. Konfigurationen erfordern einen SOCKS5-Proxy mit Benutzername/Passwort, damit sich das Gateway daran authentifizieren kann. Das Erstellen einer Konfiguration erfordert das VPN-Add-on in der Bestellung des Geräts (403 vpn_addon_required ohne es) – bestehende Konfigurationen bleiben gelistet, herunterladbar und widerrufbar.
config_text – die vollständige Datei mit dem privaten Schlüssel / Zertifikat des Clients. Sie ist nicht erneut ableitbar; speichern Sie sie beim Erstellen. Sie können genau dieselbe Datei jederzeit über den /file-Endpunkt erneut herunterladen, aber eine verlorene Datei kann nur ersetzt werden, indem Sie die Konfiguration widerrufen und eine neue erstellen.# 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_…"Verwenden Sie die Datei wie gewohnt: wg-quick up ./mpx-9f2c1a0b.conf für WireGuard oder importieren Sie die .ovpn in einen beliebigen OpenVPN-Client. Der gesamte Traffic des Geräts tritt dann über die Mobilfunk-IP des Telefons aus, und das Rotieren der IP dieses Proxys rotiert auch den Austritt des VPN.
IP-Rotation
Rotation fordert vom Mobilfunkanbieter eine frische IP an. Sie erfolgt pro Gerät – jeder Proxy auf dem Gerät erhält die neue IP – wird an das Telefon in die Warteschlange gestellt und innerhalb eines Abrufzyklus (~25 s) angewendet.
exit_ip auf dem Gerät oder über /ip-history.Jetzt rotieren — eine einmalige Rotation in die Warteschlange stellen:
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; …" }Rotation zu eindeutiger IP — übergeben Sie unique: true, um so lange weiterzurotieren, bis die Exit-IP eine ist, die in den letzten window_min Minuten des IP-Verlaufs dieses Abos nicht gesehen wurde (Standard 60, max. 1440), mit bis zu max_attempts Wiederholungen (Standard 3, max. 5). Jeder Versuch kostet einen vollen Rotationszyklus (~30–90 s); fragen Sie die GET-Variante für den Fortschritt ab. Mobilfunkanbieter können eine IP legitimerweise erneut vergeben, sodass exhausted ein mögliches ehrliches Ergebnis ist:
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 — eine tokenisierte URL, die beim Abruf die IP dieses Geräts rotiert, ohne Auth-Header (das Secret ist das Token). Fügen Sie sie in jedes Tool ein, das eine „Rotation-URL“ unterstützt. Auflisten, erstellen und widerrufen:
# 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" }Geplante (zeitgesteuerte) Rotation — legen Sie ein automatisches Rotationsintervall in Minuten fest (0 schaltet es ab; max. 1440). Es wird als rotation_interval_min auf dem Gerät gespeichert und sendet einen set_rotation_interval-Befehl, den das Telefon bei seinem nächsten Abruf anwendet, sodass es in diesem Takt eigenständig neu wählt:
# 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" }Flugmodus-Timeout — wie lange das Telefon während jedes IP-Wechsels den Flugmodus AN hält (airplane_seconds, 3–60, Standard 5). Manche Mobilfunkanbieter geben die alte Lease erst nach längerem Halten frei; erhöhen Sie diesen Wert, wenn Rotationen immer wieder dieselbe IP liefern. Gilt für geplante, Dashboard- und API-Rotationen gleichermaßen:
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" }Benutzerdefiniertes DNS — die Resolver, die das Telefon für Domain-Lookups über Proxy verwendet (bis zu 3 IP-Literale; das Telefon wendet das erste an und wählt seinen Tunnel neu). Eine leere Liste stellt das Standard-DNS des Mobilfunkanbieters wieder her:
# 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" }Monitoring
Exit-IP-Verlauf — jüngste vom Telefon gemeldete Exit-IPs, dedupliziert (eine neue Zeile nur, wenn sich die IP tatsächlich geändert hat). Der zuverlässige Weg, um zu prüfen, ob eine Rotation gegriffen hat:
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": "…" }, … ] }Optionale Query-Parameter: from/to (ISO 8601) begrenzen das Fenster, limit begrenzt die Einträge (Standard 50, max. 500), und group=day liefert stattdessen tägliche Änderungszählungen – übergeben Sie tz als Ihren UTC-Offset in Minuten, damit die Tage in Ihrer Zeitzone gruppiert werden. Das speist den IP-Verlaufskalender des Dashboards:
# 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-Warnungen — der Server überwacht Ihre Flotte (~alle 60 s) und öffnet eine Warnung, wenn etwas Aufmerksamkeit erfordert: stale_ip, wenn ein Gerät online ist, seine Exit-IP sich aber länger als der Schwellenwert des Abos nicht geändert hat (setzen Sie stale_ip_alert_minutes unter /rotation; 0 = aus, 2–10080), und duplicate_ip, wenn zwei Ihrer Geräte dieselbe Exit-IP melden (Mobilfunk-NAT kann zwei SIMs eine Adresse zuweisen – rotieren Sie eine, um sie zu trennen). Warnungen lösen sich automatisch auf, wenn die Bedingung entfällt; sie erscheinen auch in der Warnglocke des Dashboards:
# 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 }Traffic für ein Gerät — am Gateway gezählte Bytes, pro Proxy aufgeteilt. Praktisch zum Abrechnen von Kunden, an die Sie weiterverkaufen:
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 } ] }Tägliche Traffic-Aufschlüsselung — pro Tag gesendete/empfangene Bytes, aus minutengenauen Stichproben, die auf der Web-Ebene gehalten werden, sodass die Reihe Gerätewechsel und Proxy-Ausmusterung übersteht. data_since markiert die älteste Stichprobe – Tage davor haben keine Daten, was nicht dasselbe ist wie null Traffic. Übergeben Sie tz (Ihren UTC-Offset in Minuten), damit die Tage in Ihrer Zeitzone gruppiert werden; Fenster bis zu 92 Tage:
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 } }Tägliche Uptime — pro Tag Auf-/Ab-Sekunden, gefaltet aus dem Heartbeat-Record des Geräts (über Gerätewechsel hinweg vereinheitlicht). Es misst die Heartbeat-Lebendigkeit des Geräts (~25 s Takt, ~90 s Lückenschwelle), nicht die durchgängige Nutzbarkeit des Tunnels. current ist der aktuelle Zustand; uptime_pct deckt den beobachteten Teil jedes Tages ab:
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 } ] }Kontoweite Nutzung — eine Zusammenfassung über jedes Gerät:
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
Empfangene SMS — eingehende Nachrichten auf der SIM dieses Telefons, neueste zuerst. Nützlich zum Lesen von einmaligen Bestätigungscodes (OTPs) auf Telefonen, die Ihnen gehören. Es hängt von der optionalen SMS-Empfangsberechtigung der App ab; wurde diese auf dem Gerät abgelehnt, bleibt die Liste leer:
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" }, … ] }Server
Gateway-Standorte — die Standorte, von denen aus Ihre Proxys bereitgestellt werden:
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
API-Tokens auflisten, erstellen und widerrufen. Das Secret eines neu erstellten Tokens wird einmal angezeigt – speichern Sie es sofort; es ist nie wieder abrufbar. Ein Widerruf wirkt sofort:
# 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" }Eingeschränkte & schreibgeschützte Schlüssel
Delegieren Sie Zugang, ohne Ihr Konto zu teilen. Übergeben Sie subscription_id, um ein Token auf ein einzelnes Abo einzuschränken, und readonly: true, um es auf GET-Anfragen zu beschränken. Ein eingeschränktes Token kann nur die eigenen Endpunkte dieses Abos erreichen (plus /me); ein schreibgeschütztes Token wird bei jedem Schreibvorgang abgelehnt. Beide sind Einschränkungen, die auf Ihr Konto aufgesetzt werden – ein eingeschränkter Schlüssel kann nie die Daten eines anderen Kontos erreichen.
# 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)