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 токен. Създайте такъв в таблото под За разработчици → API токени или с POST /tokens, докато сте влезли. Тайната се показва само веднъж — запазете я. Изпращайте я при всяка заявка:

Authorization: Bearer mpx_live_…

Токените, започващи с mpx_live_, са токените на вашия акаунт. Endpoint-ите /device/* се извикват от самото Android приложение и се удостоверяват с токен на устройство за всеки телефон (mpxdev_…), издаден при сдвояването — обикновено никога не ги извиквате сами.

Пробвайте на живо
Интерактивната конзола ви позволява да поставите токен и да извикате всеки endpoint от браузъра, с тела на заявки и реални отговори. Суровата спецификация е на /api/v1/openapi.json.

Грешките са JSON с четимо съобщение и машинен код:

{ "error": "No such device.", "code": "not_found" }
ПолеТипОписание
401unauthorizedЛипсващ, неправилен или отменен токен.
403forbiddenТокенът е валиден, но няма разрешение.
404not_foundРесурсът не съществува в този акаунт.
502control_plane_unavailableШлюзът/контролната равнина е временно недостъпна — опитайте отново.

Акаунт

GET /me — кой съм аз? Връща акаунта плюс активни броячи на абонаменти и API токени.

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, настройки и proxy остават дори когато телефонът под него се смени. Неговото device е телефонът, който в момента го захранва (или null, когато не е сдвоен), и е сменяем — смяната запазва всеки proxy endpoint.

Изведете абонаментите — всеки със сдвоеното си устройство, обединено с живия статус на шлюза (online = 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 — как скоростта на устройството се разпределя между неговите proxy. -1 (препоръчително) я споделя автоматично: контролната равнина измерва реалната скорост на устройството от живата пропускливост (~3 с преразпределяне), едновременно натоварените proxy се насочват към равни дялове от нея, а proxy, работещ самостоятелно, получава пълната скорост. Стойност > 0 разделя този фиксиран общ обем на устройството по същия начин. Стойностите speed_limit_kbps за отделен proxy се запазват, но не се налагат, докато някое от двете е включено; 0 изключва споделянето. DELETE разгражда неговото устройство и proxy, освобождава портовете на шлюза и изтрива историята на слота — необратимо:

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

Proxy

Един proxy е един endpoint с един протокол (SOCKS5 или HTTP) на устройство, със собствено удостоверяване, whitelist на изходни IP, ограничение на скоростта и правила за домейни. Колко от тях може да обслужва едно устройство едновременно е право по плана (10 при Standard, 20 при Pro) — създайте по един за всеки клиент или инструмент и отменяйте всеки от тях, без да засягате останалите. Създаване над лимита на вашия план връща 409 proxy_limit_reached.

Proxy на едно устройство споделят неговия 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 е IPv4 URI, а endpoint_ipv6 е същият порт през IPv6 (v6 литералът е в квадратни скоби, съгласно синтаксиса на URL). Whitelist-ът на изходни IP приема IPv4 и IPv6 адреси и CIDR, а дестинациите също могат да бъдат IPv6: SOCKS5 CONNECT към IPv6 литерал или домейн само с AAAA излиза през IPv6 на оператора на телефона, когато SIM има такъв.

Редактирайте политиката на proxy — режим на удостоверяване, IP whitelist, ограничение на скоростта и правила за домейни, приложени на живо към шлюза (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"] }'

Изведете proxy — на едно устройство или всеки 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 — спира незабавно този конкретен слушател; всеки друг 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, без преконфигуриране. Извеждането на proxy също отчита за всеки от тях 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) файл, който тунелира цяло устройство — телефон, лаптоп, рутер — през IP на мобилния оператор на този proxy. Един proxy може да има по 1 от всеки вид — една WireGuard и една OpenVPN конфигурация. Конфигурациите изискват proxy от тип SOCKS5 + потребителско име/парола, за да може шлюзът да се удостовери пред него. Създаването на конфигурация изисква 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 в който и да е 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 с токен, който завърта IP на това устройство при извикване, без заглавка за удостоверяване (тайната е токенът). Поставете го в който и да е инструмент, поддържащ „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. Отнася се за планирани, от таблото и 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 — резолверите, които телефонът използва за търсене на домейни през proxy (до 3 IP литерала; телефонът прилага първия и набира повторно тунела си). Празен списък възстановява 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 история в таблото:

# 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 предупреждения — сървърът наблюдава вашия флот (~на всеки 60 с) и отваря предупреждение, когато нещо изисква внимание: stale_ip, когато устройство е онлайн, но изходящият му IP не се е сменил за по-дълго от прага на абонамента (задайте stale_ip_alert_minutes на /rotation; 0 = изключено, 2–10080), и duplicate_ip, когато две от вашите устройства докладват същия изходящ IP (NAT на оператора може да даде на два SIM един адрес — завъртете единия, за да ги разделите). Предупрежденията се разрешават автоматично, когато условието изчезне; те се показват и в звънеца за предупреждения в таблото:

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

Трафик за устройство — байтове, преброени на шлюза, разделени по 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 } ] }

Дневна разбивка на трафика — изпратени/получени байтове за всеки ден, от проби с минутна разделителна способност, съхранявани на уеб слоя, така че серията оцелява при смени на устройства и извеждане на 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 с), а не използваемостта на тунела от край до край. 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" }, … ] }

Сървъри

Локации на шлюзове — локациите, от които се обслужват вашите proxy:

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 токени

Извеждайте, създавайте и отменяйте API токени. Тайната на новосъздаден токен се показва веднъж — запазете я веднага; тя никога не може да бъде извлечена отново. Отмяната влиза в сила незабавно:

# 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, за да ограничите обхвата на токен до един абонамент, и readonly: true, за да го ограничите до GET заявки. Обхватен токен може да достигне само собствените endpoint-и на този абонамент (плюс /me); токен само за четене се отказва при всяко записване. И двете са ограничения, наслоени върху вашия акаунт — обхватен ключ никога не може да достигне данните на друг акаунт.

# 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. За браузър, през който можете да кликате — с ваш собствен токен и живи отговори — отворете интерактивната конзола или прочетете суровия OpenAPI документ.