mobileproxy.app

API

Αναφορά API

Μια πλήρης αναφορά, endpoint προς endpoint, για το REST API του mobileproxy.app. Κάθε διαδρομή, πεδίο και παράδειγμα εδώ αντικατοπτρίζει το ζωντανό έγγραφο OpenAPI στο οποίο είναι χτισμένο το API. Βασικό URL https://mobileproxy.app/api/v1.

Πιστοποίηση & βασικό URL

Κάθε endpoint βρίσκεται κάτω από το https://mobileproxy.app/api/v1 και απαιτεί bearer token. Δημιουργήστε ένα στο dashboard, στην ενότητα Για προγραμματιστές → API tokens, ή με POST /tokens ενώ είστε συνδεδεμένοι. Το μυστικό εμφανίζεται μία φορά — αποθηκεύστε το. Στείλτε το σε κάθε αίτημα:

Authorization: Bearer mpx_live_…

Τα tokens που ξεκινούν με mpx_live_ είναι τα tokens του λογαριασμού σας. Τα endpoints /device/* καλούνται από την ίδια την εφαρμογή Android και πιστοποιούνται με ένα token συσκευής ανά τηλέφωνο (mpxdev_…) που εκδίδεται κατά τη σύζευξη — κανονικά δεν τα καλείτε ποτέ.

Δοκιμάστε το ζωντανά
Η διαδραστική κονσόλα σας επιτρέπει να επικολλήσετε ένα token και να καλέσετε κάθε endpoint από τον browser, με σώματα αιτημάτων και πραγματικές απαντήσεις. Η ακατέργαστη προδιαγραφή βρίσκεται στο /api/v1/openapi.json.

Τα σφάλματα είναι JSON με ένα ανθρώπινο μήνυμα και έναν κωδικό για μηχανές:

{ "error": "No such device.", "code": "not_found" }
ΠεδίοΤύποςΠεριγραφή
401unauthorizedΤο token λείπει, είναι κακοδιατυπωμένο ή ανακλήθηκε.
403forbiddenΤο token είναι έγκυρο αλλά δεν επιτρέπεται.
404not_foundΟ πόρος δεν υπάρχει σε αυτόν τον λογαριασμό.
502control_plane_unavailableΤο gateway/control plane ήταν στιγμιαία μη προσβάσιμο — δοκιμάστε ξανά.

Λογαριασμός

GET /me — ποιος είμαι; Επιστρέφει τον λογαριασμό μαζί με ζωντανές μετρήσεις συνδρομών και 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" }

Συνδρομές

Μια συνδρομή (id sub_…) είναι η ανθεκτική θέση που κατέχετε: το φιλικό της name, οι ρυθμίσεις και τα proxies παραμένουν ακόμη κι όταν αλλάζει το τηλέφωνο κάτω από αυτήν. Το device της είναι το τηλέφωνο που την τροφοδοτεί αυτή τη στιγμή (ή null όταν δεν είναι συζευγμένη) και είναι εναλλάξιμο — μια αλλαγή διατηρεί κάθε endpoint proxy.

Δείτε τις συνδρομές — κάθε μία με τη συζευγμένη συσκευή της, συγχωνευμένη με τη ζωντανή κατάσταση του gateway (online = το tunnel του proxy είναι ενεργό):

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": "…" } } ] }

Δημιουργήστε μια συνδρομή (χωρίς σύζευξη), μετά συζεύξτε ή αλλάξτε το τηλέφωνο. Το POST /subscriptions/{id}/pair επιστρέφει ένα PIN που ισχύει ~3 λεπτά· εισαγόμενο στην εφαρμογή Android δεσμεύει το τηλέφωνο. Σε μια θέση που έχει ήδη συσκευή αυτό είναι μια αλλαγή (mode: "swap") — το παλιό τηλέφωνο αποσύρεται και κάθε proxy διατηρεί το host:port και τα διαπιστευτήριά του:

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": "…" }, … }

Λάβετε, ενημερώστε ή ακυρώστε μία συνδρομή. Το POST αλλάζει το όνομα, μια ελεύθερη description (έως 200 χαρακτήρες, το null την καθαρίζει), την προτίμηση wifi_split (τίθεται σε ουρά για το συζευγμένο τηλέφωνο, εφαρμόζεται στην επόμενη ανίχνευσή του ~25 δευτ.), ή το shared_speed_kbps — πώς μοιράζεται η ταχύτητα της συσκευής μεταξύ των proxies της. Το -1 (συνιστάται) τη μοιράζει αυτόματα: το control plane μετρά την πραγματική ταχύτητα της συσκευής από τη ζωντανή διακίνηση (εξισορρόπηση ~3 δευτ.), τα proxies που είναι απασχολημένα ταυτόχρονα συγκλίνουν σε ίσα μερίδια αυτής, και ένα proxy που δουλεύει μόνο του παίρνει την πλήρη ταχύτητα. Μια τιμή > 0 μοιράζει αντ' αυτού αυτό το σταθερό σύνολο της συσκευής με τον ίδιο τρόπο. Οι τιμές speed_limit_kbps ανά proxy διατηρούνται αλλά δεν επιβάλλονται όσο ισχύει οποιοδήποτε από τα δύο· το 0 απενεργοποιεί τον διαμοιρασμό. Το DELETE καταργεί τη συσκευή και τα proxies της, απελευθερώνει τις θύρες του gateway και διαγράφει το ιστορικό της θέσης — μη αναστρέψιμο:

# 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 είναι ένα endpoint ενός μόνο πρωτοκόλλου (SOCKS5 ή HTTP) σε μια συσκευή, με τη δική του πιστοποίηση, λίστα επιτρεπόμενων IP προέλευσης, όριο ταχύτητας και κανόνες domain. Το πόσα μπορεί να εξυπηρετήσει ταυτόχρονα μια συσκευή είναι δικαίωμα του πλάνου (10 στο Standard, 20 στο Pro) — δημιουργήστε ένα ανά πελάτη ή εργαλείο και ανακαλέστε οποιοδήποτε χωρίς να επηρεάσετε τα υπόλοιπα. Μια δημιουργία πέρα από το όριο του πλάνου σας επιστρέφει 409 proxy_limit_reached.

Τα proxies σε μια συσκευή μοιράζονται την IP της
Κάθε proxy σε μια συσκευή εξέρχεται μέσω της ίδιας IP του παρόχου και εναλλάσσεται μαζί — δημιουργώντας ένα δεύτερο proxy αποκτάτε ένα δεύτερο διαπιστευτήριο και πολιτική, όχι μια δεύτερη IP. Για άλλη IP, συζεύξτε άλλο τηλέφωνο.

Δημιουργήστε ένα proxy — δημιουργεί ένα νέο όνομα χρήστη/κωδικό· ο κωδικός επιστρέφεται σε καθαρή μορφή μία φορά, εδώ. Επιλέξτε protocol (socks5 ή http) και προαιρετικά περάστε traffic_limit_bytes για να του δώσετε ένα αυστηρό όριο διακίνησης από την αρχή:

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": "…" }
Κάθε θύρα proxy είναι dual-stack (IPv4 + IPv6)
Συνδεθείτε μέσω οποιασδήποτε οικογένειας — το endpoint είναι το URI IPv4, το endpoint_ipv6 η ίδια θύρα μέσω IPv6 (το literal v6 περικλείεται σε αγκύλες, σύμφωνα με τη σύνταξη URL). Η λίστα επιτρεπόμενων IP προέλευσης δέχεται διευθύνσεις και CIDR IPv4 και IPv6, ενώ οι προορισμοί μπορούν επίσης να είναι IPv6: ένα SOCKS5 CONNECT σε literal IPv6 ή σε domain μόνο με AAAA εξέρχεται μέσω της IPv6 του παρόχου του τηλεφώνου όταν η SIM διαθέτει τέτοια.

Επεξεργαστείτε την πολιτική ενός proxy — τρόπος πιστοποίησης, λίστα επιτρεπόμενων IP, όριο ταχύτητας και κανόνες domain, που εφαρμόζονται ζωντανά στο gateway (το protocol είναι σταθερό — αντ' αυτού διαγράψτε και δημιουργήστε ξανά):

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"] }'

Δείτε τα proxies — σε μία συσκευή ή κάθε proxy σε ολόκληρο τον λογαριασμό:

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

Ανακαλέστε ένα proxy — σταματά αμέσως αυτόν τον έναν listener· κάθε άλλο proxy στη συσκευή συνεχίζει να λειτουργεί:

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 & λήξη

Δώστε σε οποιοδήποτε proxy ένα όριο χρήσης — ιδανικό όταν μεταπωλείτε πρόσβαση και μετράτε κάθε πελάτη σε ένα επίδομα δεδομένων. Ορίστε ή αλλάξτε το ανά πάσα στιγμή (το 0 το καθαρίζει), κατά τη δημιουργία, μέσω PATCH ή με το ειδικό endpoint παρακάτω. Όταν το bytes_used φτάσει το όριο, το proxy μπλοκάρεται: διατηρεί τη θύρα και τα διαπιστευτήριά του αλλά αρνείται κάθε αίτημα, και το over_limit γίνεται true. Ανεβάστε το όριο πάνω από την ποσότητα που χρησιμοποιήθηκε — ή καθαρίστε το — και το proxy επανέρχεται αμέσως, ίδιο endpoint, χωρίς επαναδιαμόρφωση. Η προβολή των proxies αναφέρει επίσης το traffic_limit_bytes, το ζωντανό bytes_used και το 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 }

Λήξη βάσει χρόνου — δώστε σε ένα proxy μια στιγμή expires_at (ISO 8601, στο μέλλον) κατά τη δημιουργία ή μέσω PATCH· το null καθαρίζει μια εκκρεμή λήξη. Εκείνη τη στιγμή το proxy αποσύρεται — μόνιμα, σε αντίθεση με το αναστρέψιμο μπλοκάρισμα ορίου χρήσης. Για να ανανεώσετε έναν πελάτη, δημιουργήστε ένα νέο proxy (νέα θύρα και διαπιστευτήρια). Ιδανικό για την πώληση ημερήσιων/εβδομαδιαίων εισιτηρίων:

# A proxy that stops serving in 7 days
curl -X POST https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies \
     -H "Authorization: Bearer mpx_live_…" \
     -H "Content-Type: application/json" \
     -d '{ "protocol": "socks5", "expires_at": "2026-07-13T09:00:00Z" }'

# Extend or clear it later
curl -X PATCH \
  https://mobileproxy.app/api/v1/subscriptions/SUBSCRIPTION_ID/proxies/PROXY_ID \
  -H "Authorization: Bearer mpx_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "expires_at": "2026-07-20T09:00:00Z" }'   # or null to remove

Ρυθμίσεις VPN (WireGuard & OpenVPN)

Μετατρέψτε οποιοδήποτε proxy σε VPN ολόκληρης της συσκευής. Κάθε ρύθμιση είναι ένα αρχείο WireGuard (.conf) ή OpenVPN (.ovpn) που δρομολογεί ολόκληρη μια συσκευή — τηλέφωνο, laptop, router — μέσω της IP του παρόχου κινητής αυτού του proxy. Ένα proxy μπορεί να έχει 1 κάθε είδους — μία ρύθμιση WireGuard και μία OpenVPN. Οι ρυθμίσεις απαιτούν ένα proxy SOCKS5 + όνομα χρήστη/κωδικός ώστε το gateway να μπορεί να πιστοποιηθεί σε αυτό. Η δημιουργία ρύθμισης απαιτεί το πρόσθετο VPN στην παραγγελία της συσκευής (403 vpn_addon_required χωρίς αυτό) — οι υπάρχουσες ρυθμίσεις παραμένουν στη λίστα, μπορούν να ληφθούν και να ανακληθούν.

Το αρχείο εμφανίζεται μία φορά
Η απάντηση σε μια δημιουργία περιλαμβάνει το config_text — το πλήρες αρχείο, που περιέχει το ιδιωτικό κλειδί / πιστοποιητικό του πελάτη. Δεν μπορεί να παραχθεί ξανά· αποθηκεύστε το όταν το δημιουργείτε. Μπορείτε να κατεβάσετε ξανά το ίδιο ακριβώς αρχείο ανά πάσα στιγμή από το endpoint /file, αλλά ένα χαμένο αρχείο μπορεί να αντικατασταθεί μόνο ανακαλώντας και δημιουργώντας μια νέα ρύθμιση.
# 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_…"

Χρησιμοποιήστε το αρχείο ως συνήθως: wg-quick up ./mpx-9f2c1a0b.conf για WireGuard, ή εισαγάγετε το .ovpn σε οποιονδήποτε client OpenVPN. Όλη η κίνηση της συσκευής εξέρχεται τότε μέσω της IP του παρόχου του τηλεφώνου, και η εναλλαγή της IP αυτού του proxy εναλλάσσει και την έξοδο του VPN.

Εναλλαγή IP

Η εναλλαγή ζητά από τον πάροχο μια νέα IP. Είναι ανά συσκευή — κάθε proxy στη συσκευή παίρνει τη νέα IP — τίθεται σε ουρά για το τηλέφωνο και εφαρμόζεται εντός ενός κύκλου ανίχνευσης (~25 δευτ.).

Βέλτιστη προσπάθεια σε δίκτυα κινητής
Το αν μια επανακλήση παράγει μια νέα διεύθυνση εξαρτάται από τον πάροχο — ορισμένοι επαναναθέτουν την ίδια IP σε γρήγορες επανακλήσεις. Επιβεβαιώστε από το exit_ip στη συσκευή ή από το /ip-history.

Εναλλαγή τώρα — βάλτε σε ουρά μια εφάπαξ εναλλαγή:

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; …" }

Εναλλαγή μοναδικής IP — περάστε unique: true για να συνεχίσετε την εναλλαγή μέχρι η IP εξόδου να είναι μια που δεν εμφανίστηκε στα τελευταία window_min λεπτά του ιστορικού IP αυτής της συνδρομής (προεπιλογή 60, μέγιστο 1440), με επαναλήψεις έως max_attempts φορές (προεπιλογή 3, μέγιστο 5). Κάθε προσπάθεια κοστίζει έναν πλήρη κύκλο εναλλαγής (~30–90 δευτ.)· ανιχνεύστε τη μεταβλητή GET για την πρόοδο. Οι πάροχοι μπορούν νόμιμα να επανεκδώσουν μια IP, οπότε το exhausted είναι ένα πιθανό ειλικρινές αποτέλεσμα:

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

Σύνδεσμοι εναλλαγής — ένα URL με token που εναλλάσσει την IP αυτής της συσκευής όταν ανακτηθεί, χωρίς header πιστοποίησης (το μυστικό είναι το token). Επικολλήστε το σε οποιοδήποτε εργαλείο υποστηρίζει «rotation URL». Δείτε, δημιουργήστε και ανακαλέστε τα:

# 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" }

Προγραμματισμένη (χρονισμένη) εναλλαγή — ορίστε ένα διάστημα αυτόματης εναλλαγής σε λεπτά (το 0 την απενεργοποιεί· μέγιστο 1440). Παραμένει ως rotation_interval_min στη συσκευή και προωθεί μια εντολή set_rotation_interval που το τηλέφωνο εφαρμόζει στην επόμενη ανίχνευσή του, ώστε να επανακαλεί με αυτόν τον ρυθμό από μόνο του:

# 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" }

Χρονικό όριο λειτουργίας πτήσης — για πόσο κρατά το τηλέφωνο ενεργή τη λειτουργία πτήσης σε κάθε αλλαγή IP (airplane_seconds, 3–60, προεπιλογή 5). Ορισμένοι πάροχοι απελευθερώνουν την παλιά μίσθωση μόνο μετά από μεγαλύτερη διατήρηση· ανεβάστε το αν οι εναλλαγές επιστρέφουν συνεχώς την ίδια IP. Ισχύει εξίσου για προγραμματισμένες εναλλαγές, εναλλαγές μέσω dashboard και μέσω API:

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 — οι resolvers που χρησιμοποιεί το τηλέφωνο για αναζητήσεις domain μέσω proxy (έως 3 literals IP· το τηλέφωνο εφαρμόζει το πρώτο και επανακαλεί το tunnel του). Μια κενή λίστα επαναφέρει το προεπιλεγμένο 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" }

Παρακολούθηση

Ιστορικό IP εξόδου — πρόσφατες IP εξόδου που αναφέρει το τηλέφωνο, χωρίς διπλότυπα (νέα εγγραφή μόνο όταν η IP όντως άλλαξε). Ο αξιόπιστος τρόπος για να επαληθεύσετε ότι μια εναλλαγή πέτυχε:

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": "…" }, … ] }

Προαιρετικές παράμετροι ερωτήματος: τα from/to (ISO 8601) οριοθετούν το παράθυρο, το limit περιορίζει τις εγγραφές (προεπιλογή 50, μέγιστο 500), και το group=day επιστρέφει αντ' αυτού μετρήσεις αλλαγών ανά ημέρα — περάστε το tz ως τη μετατόπισή σας από το UTC σε λεπτά ώστε οι ημέρες να ομαδοποιούνται στη ζώνη ώρας σας. Αυτό τροφοδοτεί το ημερολόγιο ιστορικού IP του 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 — ο server παρακολουθεί τον στόλο σας (~κάθε 60 δευτ.) και ανοίγει μια ειδοποίηση όταν κάτι χρειάζεται προσοχή: stale_ip όταν μια συσκευή είναι online αλλά η IP εξόδου της δεν έχει αλλάξει για περισσότερο από το όριο της συνδρομής (ορίστε το stale_ip_alert_minutes στο /rotation· 0 = ανενεργό, 2–10080), και duplicate_ip όταν δύο από τις συσκευές σας αναφέρουν την ίδια IP εξόδου (το NAT του παρόχου μπορεί να δώσει σε δύο SIM μία διεύθυνση — εναλλάξτε τη μία για να τις διαχωρίσετε). Οι ειδοποιήσεις επιλύονται αυτόματα όταν η κατάσταση αποκαθίσταται· εμφανίζονται επίσης στο κουδούνι ειδοποιήσεων του 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 }

Διακίνηση για μια συσκευή — bytes που μετρώνται στο gateway, χωρισμένα ανά proxy. Χρήσιμο για τη χρέωση πελατών στους οποίους μεταπωλείτε:

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 } ] }

Ημερήσια ανάλυση διακίνησης — σταλμένα/ληφθέντα bytes ανά ημέρα, από δείγματα ανάλυσης λεπτού που τηρούνται στο web tier, ώστε η σειρά να επιβιώνει από αλλαγές συσκευών και αποσύρσεις proxy. Το data_since σηματοδοτεί το παλαιότερο δείγμα — οι ημέρες πριν από αυτό δεν έχουν δεδομένα, κάτι που δεν είναι το ίδιο με μηδενική διακίνηση. Περάστε το tz (τη μετατόπισή σας από το UTC σε λεπτά) ώστε οι ημέρες να ομαδοποιούνται στη ζώνη ώρας σας· παράθυρα έως 92 ημερών:

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

Ημερήσιος χρόνος λειτουργίας — δευτερόλεπτα ενεργής/ανενεργής λειτουργίας ανά ημέρα, συνυπολογισμένα από την εγγραφή heartbeat της συσκευής (ενοποιημένα κατά τις αλλαγές συσκευών). Μετρά τη ζωντάνια heartbeat της συσκευής (ρυθμός ~25 δευτ., όριο κενού ~90 δευτ.), όχι τη χρησιμότητα του tunnel από άκρο σε άκρο. Το current είναι η κατάσταση αυτή τη στιγμή· το uptime_pct καλύπτει το παρατηρούμενο μέρος κάθε ημέρας:

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 } ] }

Χρήση όλου του λογαριασμού — μια συγκέντρωση από κάθε συσκευή:

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 — εισερχόμενα μηνύματα στη SIM αυτού του τηλεφώνου, τα νεότερα πρώτα. Χρήσιμο για την ανάγνωση κωδικών επαλήθευσης μίας χρήσης (OTP) σε τηλέφωνα που σας ανήκουν. Βασίζεται στην προαιρετική άδεια λήψης SMS της εφαρμογής· αν αυτή απορρίφθηκε στη συσκευή, η λίστα παραμένει κενή:

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

Τοποθεσίες gateway — οι τοποθεσίες από τις οποίες εξυπηρετούνται τα proxies σας:

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. Το μυστικό ενός νεοδημιουργημένου token εμφανίζεται μία φορά — αποθηκεύστε το αμέσως· δεν ανακτάται ποτέ ξανά. Η ανάκληση τίθεται σε ισχύ αμέσως:

# 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" }

Οριοθετημένα κλειδιά & κλειδιά μόνο για ανάγνωση

Αναθέστε πρόσβαση χωρίς να μοιραστείτε τον λογαριασμό σας. Περάστε subscription_id για να οριοθετήσετε ένα token σε μία μόνο συνδρομή, και readonly: true για να το περιορίσετε σε αιτήματα GET. Ένα οριοθετημένο token μπορεί να φτάσει μόνο τα endpoints αυτής της συγκεκριμένης συνδρομής (συν το /me)· ένα token μόνο για ανάγνωση απορρίπτεται σε οποιαδήποτε εγγραφή. Και τα δύο είναι περιορισμοί που προστίθενται πάνω από τον λογαριασμό σας — ένα οριοθετημένο κλειδί δεν μπορεί ποτέ να φτάσει τα δεδομένα άλλου λογαριασμού.

# 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)
Συμβουλή
Αυτή η αναφορά παραμένει απόλυτα συγχρονισμένη με το API. Για έναν browser όπου μπορείτε να κάνετε κλικ — με το δικό σας token και ζωντανές απαντήσεις — ανοίξτε τη διαδραστική κονσόλα, ή διαβάστε το ακατέργαστο έγγραφο OpenAPI.