List available mobile-proxy listings
This endpoint requires authentication. Include your API key in the X-API-KEY header with every request.
/client/v1/mobile-proxies/listingsCursor-paginated catalog of the listings that can be bought right now. Each listing is the offer for one device: its prices and display specs plus what a client can do with the device (capabilities). GET /client/v1/mobile-proxies/locations lists the countryIsos, locodes and carrierIds that currently have listings, and GET /client/v1/mobile-proxies/capabilities the codes and values the capabilities filter takes. An empty limits list means unlimited data. A given plan always filters (listings without a price for it are left out) and is required by maxPriceMinor and by the price sorts. To fetch the next page pass the previous response's nextCursor with every other query parameter (sortBy, sortDirection and all filters) unchanged; a cursor replayed with different parameters is rejected. nextCursor is null once the catalog is exhausted. Each request scans a bounded part of the catalog, so with selective filters a page can hold fewer than limit items, even none, while nextCursor is set; keep following it.
Query Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| cursor | string | Optional | Opaque cursor taken verbatim from a previous response's nextCursor. |
| limit | number | Optional | Page size, 1 to 100; defaults to 20.(default: 20) |
| countryIsos | string | Optional | ISO 3166-1 alpha-2 country codes, comma-separated. |
| locodes | string | Optional | City UN/LOCODEs (country code followed by the location part), comma-separated; they may span countries. |
| carriers | string | Optional | Exact carrier names, comma-separated. |
| carrierIds | string | Optional | AOSP carrier ids of the device's SIM, comma-separated, as GET /client/v1/mobile-proxies/locations lists them. |
| networkGeneration | "4G" | "5G" | Optional | Only listings whose device is on this mobile network generation. |
| deviceKind | "phone" | "modem" | Optional | Only listings whose device is of this kind. |
| capabilities | string | Optional | Capabilities the device must offer, comma-separated: a code (reboot) or a code with a value the device must list (os_fingerprint:windows); every one must match. GET /client/v1/mobile-proxies/capabilities lists the codes and values, and one outside that catalog matches nothing. |
| plan | "hourly" | "daily" | "weekly" | "monthly" | Optional | Only listings priced for this plan. Required by maxPriceMinor and by the price sorts. |
| maxPriceMinor | number | Optional | Upper bound on the plan's price, in the currency's minor unit (cents for USD). |
| sortBy | "listedAt" | "price" | Optional | Field to sort by: listedAt (when the device was first listed) or price (the chosen plan's lowest price).(default: listedAt) |
| sortDirection | "asc" | "desc" | Optional | Sort direction: asc = ascending, desc = descending (default).(default: desc) |
curl -G "https://api.proxied.com/client/v1/mobile-proxies/listings" \
-H "X-API-KEY: <api-key>" \
--data-urlencode "limit=20" \
--data-urlencode "sortBy=listedAt" \
--data-urlencode "sortDirection=desc"Response Body
successbooleanAlways true on a successful response.
dataobjectOne page of the list; pass nextCursor as cursor to fetch the next.
itemsobject[]This page's items, in the requested order. A listing as seen by a client: the offer for one device.
listingIdstringThe listing's id, as the get and purchase routes take it.
listedAtstringWhen the device was first listed; it keeps this date when it returns to sale.
deviceobjectThe device behind a listing or subscription: where it is, the line it is on, what it typically delivers, what the client can do with it and the caps on its use. The same shape on both, so one card renders either.
kind"phone" | "modem"What the device is, as the listings deviceKind filter takes it.
locationobjectWhere the device is: its country and city.
countryIsostringISO 3166-1 alpha-2 code, as the listings countryIsos filter takes it; dictionaries.countries names it.
locodestringThe city's UN/LOCODE (country code followed by the location part), as the listings locodes filter takes it; dictionaries.cities names it.
carrierobjectThe mobile carrier whose line the device is on.
namestringThe carrier the device is sold under, as the listings carriers filter matches it.
carrierIdstring | nullThe AOSP carrier id the device's SIM reports, as the listings carrierIds filter matches it; GET /client/v1/mobile-proxies/locations names it. Null when the device has not reported one.
networkobjectThe mobile network behind the device.
generation"4G" | "5G"The mobile network generation the device is on, as the listings networkGeneration filter takes it.
ipVersions("ipv4" | "ipv6")[]The IP versions the device's mobile network provides: ipv4 always, ipv6 once the device has reached us over it. A fact about the network, distinct from the ip_mode capability, which only offers modes the network can serve.
speedobjectThe speed the device typically delivers, as declared by its hoster; a range is null when none was declared. A cap on speed, where one applies, is a limits entry instead.
unitstringThe unit of both ranges.
downloadobject | nullA declared speed range, in speed.unit.
minnumberThe low end of the range, in speed.unit.
maxnumberThe high end of the range, in speed.unit.
uploadobject | nullA declared speed range, in speed.unit.
minnumberThe low end of the range, in speed.unit.
maxnumberThe high end of the range, in speed.unit.
capabilitiesobject[]What the client can do with the device, in a fixed order. GET /client/v1/mobile-proxies/capabilities lists every code and value that can appear. Empty while the device is being set up, and on a subscription whenever endpoint is null. One thing the client can do with the device. A bare code is a feature that is simply available, such as rotation or reboot; a code with a schema is a value the client can set. Codes, values, schema types and setter types are stable and open: new ones may appear at any time and fields are only ever added, so render the ones you do not know from the dictionaries rather than rejecting them.
codestringStable code; dictionaries.capabilities names and describes it.
schemaobjectOptionalA JSON Schema fragment for the value a client can set: its type, the values it may take (enum) and the one in effect when the client sets none (default). Only type string with an enum exists today; other types and keywords may be added, so treat a schema you cannot render as display only.
typestringThe JSON Schema type of the value; only string exists today.
enumstring[]OptionalThe values this device offers, in a fixed order; dictionaries.capabilities[code].values names them.
defaultstring | numberThe value in effect when the client sets none.
settersobject[]OptionalPresent with schema: the ways to set the value; empty when the value is shown but cannot be changed. One way to set the value.
typestringHow the value is set. username: append template to the proxy username with {value} filled in; one suffix per capability, in any order, and the default value's suffix is accepted too. Other kinds may be added; ignore the ones you do not know.
templatestringOptionalOn a username setter: the suffix to append to the proxy username, with {value} replaced by the chosen value.
limitsobject[]The caps on the device's use, in a fixed order; a code that is absent is unlimited, so an empty list means unlimited data. One cap on the device's use. Codes are stable and open: new ones may appear at any time and fields are only ever added, so render the ones you do not know from the dictionaries rather than rejecting them.
codestringStable code; dictionaries.limits names and describes it.
valuenumberThe cap, in unit.
unitstringThe unit of value, such as MB.
offerobjectWhat the client pays and accepts when buying the listing.
pricesobject[]The prices the listing can be bought at, ordered by plan from hourly to monthly, then cheapest first; a plan can have several. One way to buy the listing: a plan and its price.
priceIdstringThe price's id; pass it as priceId to buy the listing at this price.
plan"hourly" | "daily" | "weekly" | "monthly"The period one payment buys; monthly buys a recurring subscription that renews from the balance, the others a one-time one.
amountMinornumberPrice in the currency's minor unit (cents for USD).
currencystringISO 4217 code of the currency the amounts beside it are in.
isLoggingEnabledbooleanWhether the hoster logs traffic through the device.
noticestring | nullA note from the hoster to buyers; null when there is none.
limitnumberThe page size applied: the limit passed, or 20 when none was.
hasMorebooleanTrue when more results may follow, which is exactly when nextCursor is set; a page can hold fewer than limit items while it is.
nextCursorstring | nullOpaque cursor for the next page; null when there are no more results.
dictionariesobjectOne entry per code in this response, however many items share it. A country or city code missing from the reference lists has no entry, so fall back to the code itself.
countriesmapCountries keyed by ISO 3166-1 alpha-2 code (device.location.countryIso), named in every language. What one code in the response stands for: its name, per language.
nameobjectA text per language, keyed by language code; en is always present, another language only when the text exists in it.
enstringEnglish; always present.
destringOptionalGerman.
esstringOptionalSpanish.
histringOptionalHindi.
jpstringOptionalJapanese.
nlstringOptionalDutch.
plstringOptionalPolish.
rustringOptionalRussian.
zhstringOptionalSimplified Chinese.
citiesmapCities keyed by UN/LOCODE (device.location.locode). A city's name always has en, de, es, nl and pl (keeping its English name where a language has none of its own), and hi, jp, ru and zh only when it has a name in that script. What one code in the response stands for: its name, per language.
nameobjectA text per language, keyed by language code; en is always present, another language only when the text exists in it.
enstringEnglish; always present.
destringOptionalGerman.
esstringOptionalSpanish.
histringOptionalHindi.
jpstringOptionalJapanese.
nlstringOptionalDutch.
plstringOptionalPolish.
rustringOptionalRussian.
zhstringOptionalSimplified Chinese.
capabilitiesmapCapabilities keyed by code (device.capabilities[].code on listings and subscriptions), each named and described in every language, with the names of the values some item lists for it. Codes and values are stable and new ones may appear at any time, so render any of them from here; empty when no item in the response carries capabilities. What one capability code stands for: a short name and a one-sentence explanation, each in every language, and the names of its values when the client can set one.
nameobjectA text per language, keyed by language code; en is always present, another language only when the text exists in it.
enstringEnglish; always present.
destringOptionalGerman.
esstringOptionalSpanish.
histringOptionalHindi.
jpstringOptionalJapanese.
nlstringOptionalDutch.
plstringOptionalPolish.
rustringOptionalRussian.
zhstringOptionalSimplified Chinese.
descriptionobjectA text per language, keyed by language code; en is always present, another language only when the text exists in it.
enstringEnglish; always present.
destringOptionalGerman.
esstringOptionalSpanish.
histringOptionalHindi.
jpstringOptionalJapanese.
nlstringOptionalDutch.
plstringOptionalPolish.
rustringOptionalRussian.
zhstringOptionalSimplified Chinese.
valuesmapOptionalFor a value the client can set: the name of each value the response lists for it (device.capabilities[].schema.enum), keyed by value; a brand such as an operating system keeps its name in every language. What one code in the response stands for: its name, per language.
nameobjectA text per language, keyed by language code; en is always present, another language only when the text exists in it.
enstringEnglish; always present.
destringOptionalGerman.
esstringOptionalSpanish.
histringOptionalHindi.
jpstringOptionalJapanese.
nlstringOptionalDutch.
plstringOptionalPolish.
rustringOptionalRussian.
zhstringOptionalSimplified Chinese.
limitsmapLimits keyed by code (device.limits[].code on listings and subscriptions), each named and described in every language. Codes are stable and new ones may appear at any time, so render any code from here; empty when no item in the response carries limits. What one limit code stands for: a short name and a one-sentence explanation, each in every language.
nameobjectA text per language, keyed by language code; en is always present, another language only when the text exists in it.
enstringEnglish; always present.
destringOptionalGerman.
esstringOptionalSpanish.
histringOptionalHindi.
jpstringOptionalJapanese.
nlstringOptionalDutch.
plstringOptionalPolish.
rustringOptionalRussian.
zhstringOptionalSimplified Chinese.
descriptionobjectA text per language, keyed by language code; en is always present, another language only when the text exists in it.
enstringEnglish; always present.
destringOptionalGerman.
esstringOptionalSpanish.
histringOptionalHindi.
jpstringOptionalJapanese.
nlstringOptionalDutch.
plstringOptionalPolish.
rustringOptionalRussian.
zhstringOptionalSimplified Chinese.
{
"success": true,
"data": {
"items": [
{
"listingId": "665f1c2e8b3f4a5d6e7f8091",
"listedAt": "2026-10-01T09:12:00.000Z",
"device": {
"kind": "phone",
"location": {
"countryIso": "DE",
"locode": "DEBER"
},
"carrier": {
"name": "Telekom",
"carrierId": "3"
},
"network": {
"generation": "5G",
"ipVersions": [
"ipv4",
"ipv6"
]
},
"speed": {
"unit": "Mbps",
"download": {
"min": 55,
"max": 110
},
"upload": {
"min": 55,
"max": 110
}
},
"capabilities": [
{
"code": "os_fingerprint",
"schema": {
"type": "string",
"enum": [
"android",
"ios",
"macos",
"ubuntu",
"windows"
],
"default": "android"
},
"setters": [
{
"type": "username",
"template": "_os_{value}"
}
]
}
],
"limits": [
{
"code": "data_per_day",
"value": 5000,
"unit": "MB"
}
]
},
"offer": {
"prices": [
{
"priceId": "665f1c2e8b3f4a5d6e7f8091",
"plan": "monthly",
"amountMinor": 50,
"currency": "USD"
}
],
"isLoggingEnabled": false,
"notice": "Please keep rotations to one a minute"
}
}
],
"limit": 20,
"hasMore": true,
"nextCursor": "eyJzIjoibGlzdGVkQXQiLCJkIjoiZGVzYyIsImsiOjE3NjAzNTIwMDAwMDAsImkiOiI2NjVmMWMyZThiM2Y0YTVkNmU3ZjgwOTEifQ"
},
"dictionaries": {
"countries": {
"DE": {
"name": {
"en": "Germany",
"de": "Deutschland",
"es": "Alemania",
"hi": "जर्मनी",
"jp": "ドイツ",
"nl": "Duitsland",
"pl": "Niemcy",
"ru": "Германия",
"zh": "德国"
}
}
},
"cities": {
"DEBER": {
"name": {
"en": "Berlin",
"de": "Berlin",
"es": "Berlín",
"hi": "बर्लिन",
"jp": "ベルリン",
"nl": "Berlijn",
"pl": "Berlin",
"ru": "Берлин",
"zh": "柏林"
}
}
},
"capabilities": {
"os_fingerprint": {
"name": {
"en": "OS fingerprint",
"de": "OS-Fingerabdruck",
"es": "Huella de SO",
"hi": "ओएस फ़िंगरप्रिंट",
"jp": "OSフィンガープリント",
"nl": "OS-vingerafdruk",
"pl": "Odcisk systemu operacyjnego",
"ru": "Отпечаток ОС",
"zh": "操作系统指纹"
},
"description": {
"en": "Make the proxy's outgoing traffic look like it comes from the chosen operating system, as passive OS fingerprinting (p0f) reads it",
"de": "Den ausgehenden Datenverkehr des Proxys wie den des gewählten Betriebssystems aussehen lassen, wie ihn passives OS-Fingerprinting (p0f) liest",
"es": "Hacer que el tráfico saliente del proxy parezca provenir del sistema operativo elegido, tal como lo lee la identificación pasiva de SO (p0f)",
"hi": "प्रॉक्सी के आउटगोइंग ट्रैफ़िक को चुने हुए ऑपरेटिंग सिस्टम से आता हुआ दिखाएँ, जैसा पैसिव ओएस फ़िंगरप्रिंटिंग (p0f) उसे पढ़ता है",
"jp": "プロキシの送信トラフィックを、パッシブOSフィンガープリント(p0f)が選択したOSからのものと判定する形に見せます",
"nl": "Het uitgaande verkeer van de proxy laten lijken op dat van het gekozen besturingssysteem, zoals passieve OS-fingerprinting (p0f) het leest",
"pl": "Ruch wychodzący z proxy wygląda jak ruch z wybranego systemu operacyjnego w ocenie pasywnego rozpoznawania systemu (p0f)",
"ru": "Исходящий трафик прокси выглядит как трафик выбранной операционной системы для пассивного определения ОС (p0f)",
"zh": "让代理的出站流量在被动操作系统指纹识别(p0f)看来来自所选操作系统"
},
"values": {
"android": {
"name": {
"en": "Android",
"de": "Android",
"es": "Android",
"hi": "Android",
"jp": "Android",
"nl": "Android",
"pl": "Android",
"ru": "Android",
"zh": "Android"
}
},
"ios": {
"name": {
"en": "iOS",
"de": "iOS",
"es": "iOS",
"hi": "iOS",
"jp": "iOS",
"nl": "iOS",
"pl": "iOS",
"ru": "iOS",
"zh": "iOS"
}
},
"macos": {
"name": {
"en": "macOS",
"de": "macOS",
"es": "macOS",
"hi": "macOS",
"jp": "macOS",
"nl": "macOS",
"pl": "macOS",
"ru": "macOS",
"zh": "macOS"
}
},
"ubuntu": {
"name": {
"en": "Ubuntu",
"de": "Ubuntu",
"es": "Ubuntu",
"hi": "Ubuntu",
"jp": "Ubuntu",
"nl": "Ubuntu",
"pl": "Ubuntu",
"ru": "Ubuntu",
"zh": "Ubuntu"
}
},
"windows": {
"name": {
"en": "Windows",
"de": "Windows",
"es": "Windows",
"hi": "Windows",
"jp": "Windows",
"nl": "Windows",
"pl": "Windows",
"ru": "Windows",
"zh": "Windows"
}
}
}
}
},
"limits": {
"data_per_day": {
"name": {
"en": "Data per day",
"de": "Datenvolumen pro Tag",
"es": "Datos por día",
"hi": "प्रति दिन डेटा",
"jp": "1日あたりのデータ量",
"nl": "Data per dag",
"pl": "Dane na dzień",
"ru": "Трафик в день",
"zh": "每日流量"
},
"description": {
"en": "The fair-use data allowance for one day",
"de": "Das Fair-Use-Datenvolumen für einen Tag",
"es": "El volumen de datos de uso justo para un día",
"hi": "एक दिन के लिए उचित-उपयोग डेटा सीमा",
"jp": "1日あたりのフェアユース・データ量",
"nl": "De fair-use datalimiet voor één dag",
"pl": "Limit danych fair use na jeden dzień",
"ru": "Лимит трафика (fair use) на один день",
"zh": "一天内的合理使用流量额度"
}
}
}
}
}Error Responses
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "readable message"
}
}| Status | Code | Description |
|---|---|---|
400 | VALIDATION_ERROR | Invalid request input. |
401 | MISSING_API_KEY | Missing X-API-KEY. |
403 | INVALID_API_KEY | Invalid X-API-KEY. |
500 | INTERNAL_ERROR | Internal error. |