# Overview

Find everything you need to use Oxylabs’ products effectively, from detailed product documentation to additional resources like the help center, changelog, and more.

Got questions? **Ask our AI assistant.** It’s faster (and way easier) than digging through 1000+ pages of docs.

Just **click the search bar** above and **type your question** – our AI will instantly guide you to the right answer or page.

## Welcome to Oxylabs!

Oxylabs provides tools and infrastructure for accessing publicly available web data. The platform handles the complexity of large-scale web access – **network routing**, **access reliability**, and **blocking resistance**.

#### **New to Oxylabs?** Check out our basic quick start guides for:

<a href="/pages/TaPtNgbNC65FR5nW5DzR" class="button secondary">Oxylabs Proxies</a><a href="/pages/bpG2nriHk1usJrb8GP8V" class="button secondary">Web Scraper API</a><a href="/pages/hENHvKX4y8CVf1TaWM5r" class="button secondary">Web Unblocker</a><a href="/pages/f3e8g8rkZ2E8CDREIFha" class="button secondary">Headless Browser</a><a href="/pages/RrQtjDqLHD92YkUp4dqf" class="button secondary">AI Studio</a>

#### **Searching for advanced guides and product features?**&#x20;

Visit the product section to learn more:<a href="/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/lGzZ9dpPscKkbgJdA1Un" class="button secondary" data-icon="toolbox">Products</a>

#### **Want to integrate Oxylabs scraping solutions with third-party tools?**

Explore our in-depth integration guides: <a href="/spaces/U4lV7kLC2Df45W0aLQlX/pages/7BHL3Y8EZ1kM4sV7dQBe" class="button secondary" data-icon="puzzle-piece">Integrations</a>

#### **Looking for dedicated scrapers?**&#x20;

Find all Web Scraper API targets here:<a href="/spaces/BaJCXoqO1zdFnaMnCKrg/pages/Tq4ZdEkk3kFieXQw24v3" class="button secondary" data-icon="list-tree">API Targets</a>

### Oxylabs products

<table data-view="cards"><thead><tr><th align="center"></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td align="center"><h4><strong>Proxies</strong></h4></td><td>Route your own requests through 177+ million IPs in 195 countries.</td><td><a href="/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/B0pSYUIUMa8bjmaqtKtL">/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/B0pSYUIUMa8bjmaqtKtL</a></td><td></td></tr><tr><td align="center"><h4><strong>Web Scraper API</strong></h4></td><td>Retrieve web pages through an all-in-one fully managed data collection infrastructure.</td><td><a href="/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/54izkwFE5xJbswdbfBlS">/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/54izkwFE5xJbswdbfBlS</a></td><td></td></tr><tr><td align="center"><h4><strong>Web Unblocker</strong></h4></td><td>AI-powered proxy solution to extract public data even from the most difficult websites.</td><td><a href="/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/uu0gU13BxGAPAu1WsJJW">/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/uu0gU13BxGAPAu1WsJJW</a></td><td></td></tr><tr><td align="center"><h4><strong>Headless Browser</strong></h4></td><td>A cloud-based headless browser with built-in adaptive security, CAPTCHA handling, and proxies.</td><td><a href="/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/js6xUbHpAHcGMXWSozSS">/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/js6xUbHpAHcGMXWSozSS</a></td><td></td></tr><tr><td align="center"><h4><strong>AI Studio</strong></h4></td><td>No-code web scraping solution powered by AI and Oxylabs industry-leading scraping infrastructure.</td><td><a href="/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/4SScIAJ38k8xFGUhSXY3">/spaces/BQ7Zf9paoN3FTeGcyfY1/pages/4SScIAJ38k8xFGUhSXY3</a></td><td></td></tr></tbody></table>

## About us

### What Oxylabs helps you do

With Oxylabs, you can reliably retrieve data from websites using your own tools powered by our enterprise-level proxy network or use the all-in-one API solution to start scraping right away without building your own custom infrastructure. Common uses include:

* **Collecting public listings and prices**
* **Monitoring online content**
* **Building datasets for analytics**
* **Powering data-driven applications and AI**

### Who it’s for

Oxylabs solutions are designed for:

* **Developers building data-driven software**
* **Data teams gathering web data at scale**
* **AI teams requiring real-time public data from the web**
* **Companies that depend on unrestricted web access**


# Changelog

Track the latest Oxylabs product updates, feature releases, and improvements. Stay informed on what's new with our tools and documentation.

{% updates format="full" %}
{% update date="2026-08-11" tags="web-scraper-api" %}

## New audio parameter for YouTube Downloader

YouTube Downloader now accepts an optional `audio_language` parameter for selecting the audio track:

* `original` – the creator's original audio track
* `default` – the audio track YouTube selects, which may be dubbed

If omitted, requests use `default`, so existing jobs behave exactly as before and require no changes. Visit the [YouTube Downloader](/api-targets/video-and-social-media/youtube/youtube-downloader) documentation to learn more.
{% endupdate %}

{% update date="2026-08-04" tags="proxies" %}

## New proxy locations

New locations have been added across multiple self-service proxy products:

* [Dedicated Datacenter Proxies:](https://dashboard.oxylabs.io/?route=/overview/DCP/buy-now) Croatia, Romania, Malaysia, Philippines, Bulgaria
* [Datacenter Proxies (pay per GB):](https://dashboard.oxylabs.io/?route=/overview/datacenter-proxies/buy-now) Finland
* [Datacenter Proxies (pay per IP):](https://dashboard.oxylabs.io/?route=/overview/datacenter-proxies/buy-now) Croatia, Finland, Philippines
* [Dedicated ISP Proxies:](https://dashboard.oxylabs.io/en/?route=/overview/dedicated-isp/buy-now) Belgium, Romania, Brazil, Colombia
* [ISP Proxies:](https://dashboard.oxylabs.io/?route=/overview/isp/buy-now) Romania, Brazil, Colombia
  {% endupdate %}

{% update date="2026-07-27" tags="web-scraper-api" %}

## Increased prompt limit for Google AI Mode

The maximum prompt length for **Google AI Mode** requests has increased from 4,000 to **8,000 characters**. No changes to existing request parameters or endpoints are required, as the higher limit applies automatically to all requests using this source.

Refer to the [Google AI Mode documentation](/api-targets/search-engines/google/ai-mode) for details.
{% endupdate %}

{% update date="2026-07-24" tags="web-scraper-api" %}

## Custom browser instructions for LLM sources

LLM sources now support **custom browser instructions**, allowing you to define actions (e.g., clicks, scrolls, waits) to control page behavior before content is extracted.&#x20;

This complements the batch processing capability already available for [LLM sources](/api-targets/llms-and-ai), so you can combine both to run larger, more controlled scraping workloads in a single setup.
{% endupdate %}

{% update date="2026-07-23" tags="web-scraper-api" %}

## Custom parser for Home Depot data

A **dedicated parser** for Home Depot product pages is now available through the `universal` source. Enable parsing on your request to receive structured product data (such as `title`, `price`, `availability`, and `specifications`) instead of raw HTML.&#x20;

This update removes the need for custom parsing logic on your side. Head to the [universal source](/api-targets) in our documentation to learn more.
{% endupdate %}

{% update date="2026-07-22" tags="web-scraper-api" %}

## Structured Google Scholar results

**Google Scholar** is now a dedicated parsed source in Web Scraper API. Previously, Scholar could only be scraped through the generic `google` source, and structuring the output required the Custom Parser.&#x20;

Now, set source to `google_scholar` and `parse` to `true` to receive parsed JSON directly. For more information, check out the [Google Scholar documentation](/api-targets/search-engines/google/scholar).
{% endupdate %}

{% update date="2026-07-20" tags="general-updates" %}

## Improved success rates on hard-to-reach targets

We have rolled out improvements to how requests are handled on CAPTCHA-protected sites. Success rates on these targets should improve, particularly for jobs that previously saw elevated failure or retry rates.

The change applies automatically to your existing configurations – no parameter or connection changes are required. Learn more in our [documentation](/products/headless-browser).
{% endupdate %}

{% update date="2026-07-17" tags="web-scraper-api" %}

## More accurate Walmart e-commerce pricing

Parsed output from Walmart e-commerce sources now returns pricing data **more reliably and consistently**. If you're tracking competitor prices or monitoring product catalogs, you'll get cleaner numbers to work with – with less cleanup on your end.

More reliable values will appear automatically in new requests using `"parse": true`. Note that, data collected before this update, will need to be re-scraped for the more reliable data to be returned. See the [documentation](/api-targets/e-commerce/walmart) for details.
{% endupdate %}

{% update date="2026-07-16" tags="headless-browser" %}

## Improved fingerprint validation and device-memory alignment

Headless Browser now has **improved browser fingerprint validation**, alongside continued work to align device-memory values with the rest of the emulated fingerprint.

This helps keep browser fingerprints realistic and lowers detection risk for Headless Browser  customers. The change applies automatically to all [Headless Browser](broken://spaces/BQ7Zf9paoN3FTeGcyfY1/pages/EdSr4LhLCnnqeFmyWqyv) sessions – no configuration or connection changes are required.
{% endupdate %}

{% update date="2026-07-15" tags="general-updates" %}

## Oxylabs Agent Skills

We have added **Agent Skills** – structured skill files that let AI coding assistants work with Oxylabs products from plain-English instructions. Each skill is product-specific where tools like Claude, Cursor, and GitHub Copilot pick the right product and handle all the technical details for you.&#x20;

Find setup instructions and all skill files in the [Oxylabs Agent-Skills](https://github.com/oxylabs/agent-skills) repository.
{% endupdate %}

{% update date="2026-07-14" tags="web-scraper-api" %}

## Citation retries for ChatGPT web search

ChatGPT requests with `search` set to `true` now retry citation extraction automatically, roughly doubling citation coverage in the parsed `citations` field.&#x20;

The overall request success rate is unchanged, and no payload changes are needed for requests already using `search: true`. \
Check out our [documentation](/api-targets/llms-and-ai/chatgpt) for more information.
{% endupdate %}

{% update date="2026-07-13" tags="web-scraper-api" %}

## Batch requests for LLM targets

You can now submit **up to 5,000 prompts** within a single batch request for `chatgpt`, `gemini`, and `perplexity` sources.\
\
Every prompt runs as its own job, so you get one job ID back per prompt. This helps you by cutting out the repetitive work of collecting LLM data at scale, so bigger jobs take less time. See the [documentation](/api-targets/llms-and-ai) for details.&#x20;
{% endupdate %}

{% update date="2026-06-29" tags="general-updates" %}

## Dashboard login: Microsoft Entra SSO

Oxylabs dashboard login now supports **Microsoft Entra ID** (formerly Azure AD) for single sign-on (SSO) in addition to Google and Okta.

To set up Entra SSO, contact your Oxylabs account manager and authenticate the users in your organization to sign in through Entra ID instead of using email and password. Head to [dashboard login page](https://dashboard.oxylabs.io/en/) to start.
{% endupdate %}

{% update date="2026-06-23" tags="web-scraper-api" %}

## New and updated LLM sources for Web Scraper API

[Web Scraper API](/products/web-scraper-api) now offers a dedicated `gemini` source together with updated `chatgpt` and `perplexity` scrapers. All LLM sources now share a more consistent request structure, streamlined output envelope, and include new response fields (citations, shopping, ads, etc.)

See the [documentation](/api-targets/llms-and-ai) for the complete schemas and examples.
{% endupdate %}

{% update date="2026-06-22" tags="web-scraper-api" %}

## Partial download (trimming) for Video Data API

You can now download a specific segment of a video instead of the full file by adding `start_at` and `end_at` to the `context` array. Both parameters take an `hh:mm:ss` timestamp format. More details in [YouTube Downloader documentation](/api-targets/video-and-social-media/youtube/youtube-downloader#input-parameter-values).
{% endupdate %}

{% update date="2026-06-19" tags="web-scraper-api" %}

## Video Data API: video quality selection

You can now set the resolution of downloaded videos using the `context: video_quality` parameter with specific resolution from `144p` all the way up to `8K`. Learn more in the [YouTube Downloader documentation](/api-targets/video-and-social-media/youtube/youtube-downloader#input-parameter-values).
{% endupdate %}

{% update date="2026-06-18" tags="web-scraper-api" %}

## Error codes for Video Data API

Web Scraper API `youtube_download` source now returns specific **error codes** in job status response for easier troubleshooting when a video can't be downloaded.

Find all error codes in the [YouTube Downloader documentation](/api-targets/video-and-social-media/youtube/youtube-downloader#error-codes).
{% endupdate %}

{% update date="2026-06-02" tags="general-updates" %}

## Top-up flow improvements

Top-ups for [Residential Proxies](/products/proxies/residential-proxies), [Mobile Proxies](/products/proxies/mobile-proxies), [Datacenter Proxies (per GB)](/products/proxies/datacenter-proxies), [Web Unblocker](/products/web-unblocker), and [Web Scraper API](/products/web-scraper-api) are no longer restricted to fixed values. You can now enter any amount within the range allowed by your plan instead of choosing from a preset list.
{% endupdate %}

{% update date="2026-05-28" tags="proxies,headless-browser" %}

## Oxylabs Dashboard API

**Dashboard API** allows users to programmatically access product usage statistics of Oxylabs [Datacenter Proxies (DC)](/products/proxies/datacenter-proxies) and [Headless Browser (HB)](/products/headless-browser) for automated reporting and real-time usage monitoring without using Oxylabs dashboard directly.

Check out the [Dashboard API documentation](/dashboard/dashboard-api) for detailed information.
{% endupdate %}

{% update date="2026-05-15" tags="proxies" %}

## HTTP/3 protocol support

HTTP/3 protocol is now supported by [Residential](/products/proxies/residential-proxies/protocols) and [Mobile Proxies](/products/proxies/mobile-proxies/protocols). Access is available through a dedicated `SOCKS5` endpoint with `UDP` support.
{% endupdate %}

{% update date="2026-05-15" tags="proxies" %}

## Session IP change control&#x20;

[Residential Proxies](/products/proxies/residential-proxies/session-control) and [Mobile Proxies](/products/proxies/mobile-proxies/session-control) now support a new sticky session model via `sessid_oneip`, which allows you to keep the same IP for as long as the original exit node remains available up to the set session duration without assigning a new IP after the session expires.&#x20;
{% endupdate %}

{% update date="2026-04-22" tags="proxies" %}

## New proxy locations

New locations have been added across multiple self-service proxy products:

* [Dedicated Datacenter Proxies:](https://dashboard.oxylabs.io/?route=/overview/DCP/buy-now) Belgium, Saudi Arabia, Israel, New Zealand, Thailand, Switzerland, Portugal
* [Datacenter Proxies (per GB):](https://dashboard.oxylabs.io/?route=/overview/datacenter-proxies/buy-now) Saudi Arabia, Israel, New Zealand, Thailand
* [Datacenter Proxies (per IP):](https://dashboard.oxylabs.io/?route=/overview/datacenter-proxies/buy-now) Saudi Arabia, Israel, Switzerland, Thailand
* [Dedicated ISP Proxies:](https://dashboard.oxylabs.io/en/?route=/overview/dedicated-isp/buy-now) Australia, Singapore, Ireland, Norway, Denmark
* [ISP Proxies:](https://dashboard.oxylabs.io/?route=/overview/isp/buy-now) Singapore, Ireland, Norway, Denmark
  {% endupdate %}

{% update date="2026-04-22" tags="headless-browser" %}

## City and state-level targeting for Headless Browser

You can now set the geo-location of your [Headless Browser](broken://spaces/BQ7Zf9paoN3FTeGcyfY1/pages/z7WAX2hnWjvMKkRKXeFr) sessions to the city or state level. New parameters include `p_city` for city and `p_state` for state or region targeting.
{% endupdate %}

{% update date="2026-03-18" tags="proxies" %}

## Improved proxy upgrade flow

You can now upgrade [Dedicated ISP](https://oxylabs.io/products/dedicated-isp-proxies), [ISP](https://oxylabs.io/products/isp-proxies), [Datacenter (per IP)](https://oxylabs.io/products/datacenter-proxies), and [Dedicated Datacenter Proxy](https://oxylabs.io/products/datacenter-proxies) plans starting from just 5 IPs for ranges between 0 and 100 (previously 20-IP minimum requirement).

The upgrade summary now also provides more details, including discount breakdowns and exact billing dates for easier scaling.
{% endupdate %}

{% update date="2026-03-18" tags="undefined,web-scraper-api" %}

## Google Domain parameter no longer available

Web Scraper API `domain` parameter for `google` sources is no longer available. To localize your searches, use the `geo_location` parameter. For more details, check our `geo_location` parameter structures [here](/products/web-scraper-api/features/localization/serp-localization#google).
{% endupdate %}

{% update date="2026-02-26" tags="headless-browser" %}

## Renaming Unblocking Browser

We’re making a change to our product naming: **Unblocking Browser is now** [**Headless Browser**](/products/headless-browser)**.** This is a name change only and all core features, functions, and integrations will remain the same as per pre-existing workflows.
{% endupdate %}

{% update date="2026-02-11" tags="proxies" %}

## New ASN providers

IPs from Cox and Deutsche Telekom are now included in [ISP Proxy](/products/proxies/isp-proxies/proxy-list) and [Dedicated ISP Proxy](/products/proxies/dedicated-isp-proxies/self-service/proxy-list) pools. Dedicated ISP Proxy users can choose their preferred premium ASN provider directly from the Oxylabs dashboard.
{% endupdate %}

{% update date="2026-01-26" tags="proxies" %}

## Dedicated ISP Proxies

[Dedicated ISP Proxies](https://oxylabs.io/products/dedicated-isp-proxies) are now available in the self-service dashboard. This new proxy type provides fully dedicated, static IPs sourced from premium ISP providers and the ability to freely choose your preferred ASNs. Dedicated ISP proxies offer top-tier speed, stable connections, maximum customizability, and unlimited-duration sessions.

Learn more in the [Dedicated ISP Proxies documentation](/products/proxies/dedicated-isp-proxies).
{% endupdate %}

{% update date="2025-12-15" tags="proxies" %}

## Advanced filters for Residential Proxies

Residential Proxies support **two advanced filters** that give you more control:

* [**Platform (OS)**](/products/proxies/residential-proxies/advanced-filters/platform-os) – `pl` parameter to select the operating system (e.g., Windows, iOS) of the residential proxy for the TCP connection. This lets you improve your scraping success rates by matching your HTTP and TCP fingerprints.
* [**IP Version**](/products/proxies/residential-proxies/advanced-filters/ip-version) – you can receive only IPv4 or IPv6 addresses from the entire Residential Proxies pool using the `ipversion-4` or `ipversion-6` parameter.

{% hint style="success" %}
To **enable these features**, contact your Account Manager (details available in the [Dashboard](https://dashboard.oxylabs.io/)). You may need to complete a quick [KYC](https://oxylabs.io/kyc-and-safety) procedure.
{% endhint %}
{% endupdate %}

{% update date="2025-12-05" tags="web-scraper-api" %}

## Result Aggregator

Web Scraper API users can now bundle multiple scraping results into large batch files to streamline storage using the [Result Aggregator](/products/web-scraper-api/features/result-processing-and-storage/result-aggregator). Create a custom aggregator via the `/v1/aggregators` endpoint and route jobs to it by adding the `aggregate_name` parameter to your scraping request payloads.
{% endupdate %}

{% update date="2025-11-25" tags="headless-browser" %}

## Unblocking Browser session inspection

Unblocking Browser now supports real-time visual inspection through a VNC-based [Session Inspection Tool](broken://spaces/BQ7Zf9paoN3FTeGcyfY1/pages/qlmLIRTRu06ks0kUYM0L). Add `o_vnc=true` to your connection endpoint (e.g. `wss://user:pass@ubc.oxylabs.io?o_vnc=true`) to open a live graphical view of the headless browser and interact with it directly.
{% endupdate %}

{% update date="2025-10-30" tags="proxies" %}

## New Datacenter Proxy locations

Five new [Datacenter proxy locations](/products/proxies/datacenter-proxies/select-country) are now available for per-traffic (per GB) users: **Latvia**, **Slovenia**, **Slovakia**, **Greece**, and **Austria**. Requests can now be routed through these countries to optimize coverage and performance.
{% endupdate %}

{% update date="2025-10-14" tags="proxies" %}

## YouTube Autocomplete scraping source

Web Scraper API can now [retrieve YouTube search term suggestions](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/targets/youtube/youtube-autocomplete) with the new `youtube_autocomplete` source. It allows users to discover related keywords for any search query, which can then be used with the `youtube_search` source to discover more relevant videos.
{% endupdate %}

{% update date="2025-10-08" tags="proxies" %}

## Updated Google Shopping sources

[Google Shopping sources](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/targets/google/shopping) now use the token-based system, replacing the `product_id` workflow. `google_shopping_search` (with `render` enabled) now provides a `token` required for `google_shopping_product` requests.

Additionally, `google_shopping_pricing` is no longer supported as a standalone source. To extract `pricing` data, use the `google_shopping_product` [source](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/targets/google/shopping/shopping-product).

Finally, `google_shopping_product` can now expand the "More Shops" panel to access additional listings by submitting the job with `render: 'html'` (only first expansion is available).
{% endupdate %}

{% update date="2025-10-01" tags="web-scraper-api" %}

## Self-healing parser presets

Users can now enable self-healing for their [parser presets](/products/web-scraper-api/features/custom-parser/parser-presets) by setting `"self_heal": true` in the preset configuration. This feature allows Oxylabs to automatically adjust your parser instructions when a parser preset starts to fail due to changes in the target website.
{% endupdate %}

{% update date="2025-08-25" tags="web-scraper-api" %}

## YouTube channel

Users can now [scrape YouTube channel data](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/targets/youtube/youtube-channel) with the new dedicated source – `youtube_channel`. It lets you retrieve all key channel data, including subscriber, video, and view counts, general metadata, and a list of its videos by providing the YouTube `channel_handle`.
{% endupdate %}

{% update date="2025-08-25" tags="web-scraper-api" %}

## YouTube Subtitles

Web Scraper API now supports [YouTube subtitles and closed captions (CC) extraction](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/targets/youtube/youtube-subtitles) with a new source – `youtube_subtitles`. Users can now retrieve `auto_generated` and `user_provided` captions by providing a YouTube video ID and subtitles language code.
{% endupdate %}

{% update date="2025-08-18" tags="web-scraper-api" %}

## Scrape Google AI Overviews with Web Scraper API

The `google_search` and `google_ads` sources now return AI Overviews results together with standard SERP data in all available regions, with support for multiple AI blocks per response including “People also ask” and “Things to know.”
{% endupdate %}

{% update date="2025-08-12" tags="web-scraper-api" %}

## New dedicated sources available for Web Scraper API

Added 3 new dedicated targets for Web Scraper API: `perplexity`, `chatgpt`, `google_ai_mode`. These targets enable extraction of LLM-generated responses from AI search interfaces. See all available targets in [this table](https://developers.oxylabs.io/scraping-solutions/web-scraper-api/targets).
{% endupdate %}

{% update date="2025-08-07" tags="web-scraper-api" %}

## Markdown output

You can now request the [**markdown output**](/products/web-scraper-api/features/result-processing-and-storage/output-types/markdown-output) in addition to HTML or parsed JSON. To get the markdown content in the response, set the `"markdown": true` in your request.
{% endupdate %}

{% update date="2025-08-05" tags="web-scraper-api" %}

## Multi-format output in a single API response

#### Added <a href="#added" id="added"></a>

* Ability to retrieve [multiple output formats](/products/web-scraper-api/features/result-processing-and-storage/output-types/multi-format-output) in a single API response
* Support across Realtime and Push-Pull integration methods

#### Changed <a href="#changed" id="changed"></a>

* The `type` URL parameter now supports a list of result types (`parsed`, `markdown`, `png`, `xhr`, `raw`) instead of a single value
  {% endupdate %}

{% update date="2025-08-04" tags="web-scraper-api" %}

## Parser presets

Added the ability to **create**, **reuse**, and **manage** custom [parser presets](/products/web-scraper-api/features/custom-parser/parser-presets) through the Web Scraper API. Parser presets are hosted on our system, allowing you to easily use them across multiple scraping jobs. Additionally, you can monitor usage and performance metrics of each preset.
{% endupdate %}

{% update date="2025-07-28" tags="proxies" %}

## Usage alerts for Datacenter Proxies per traffic

Customers using [**Datacenter Proxies**](https://oxylabs.io/products/datacenter-proxies) with a **traffic-based subscription** will now receive email notifications when 80% and 100% of monthly traffic is used. Visit **My Account** → **Email Notifications** in the dashboard to select the thresholds you'd like to be notified about, add multiple recipient emails, or disable these notifications entirely.
{% endupdate %}

{% update date="2025-07-25" tags="ai-studio" %}

## AI Studio – 5th app released

[**AI Studio**](https://aistudio.oxylabs.io/) now features **5 AI-driven tools** you can control using **natural language prompts**. Each app automates a specific web scraping task while eliminating typical pain points. Our toolkit includes [**AI-Crawler**](https://aistudio.oxylabs.io/apps/crawl)**,** [**AI-Scraper**](https://aistudio.oxylabs.io/apps/scrape)**,** [**Browser Agent**](https://aistudio.oxylabs.io/apps/browser_agent)**,** [**AI-Search**](https://aistudio.oxylabs.io/apps/search), and the newly added [**AI-Map**](https://aistudio.oxylabs.io/apps/map)**.**
{% endupdate %}

{% update date="2025-07-23" tags="web-scraper-api" %}

## Feature-based billing for Web Scraper API

With feature-based billing, pricing now adapts to the complexity of scraping, offering different rates based on rendering requirements and target type. Besides, our **free trial duration is now unlimited** with **up to 2,000 results** to test our product.
{% endupdate %}

{% update date="2025-07-11" tags="web-scraper-api" %}

## File naming templates for Cloud Storage

Added support for [**custom file naming templates**](/products/web-scraper-api/features/result-processing-and-storage/cloud-storage/file-name-templating) when saving results to [**Cloud Storage**](/products/web-scraper-api/features/result-processing-and-storage/cloud-storage). You can now use submitted **job parameters** and `job_info` **variables** to define file names and directory paths. This makes it much easier to organize and identify your files.
{% endupdate %}

{% update date="2025-06-30" tags="web-scraper-api" %}

## Google Reverse Image Search scraping source no longer available

Google Reverse Image Search (`google_images`) source is no longer supported due to Google decommissioning the feature. You can now use [Google Lens](/api-targets/search-engines/google/lens) (`google_lens` ) source instead, which delivers an equivalent service and follows the same input and output formats.
{% endupdate %}

{% update date="2025-06-03" tags="web-scraper-api" %}

## XHR request capturing

Web Scraper API now supports [capturing network requests (Fetch/XHR)](/products/web-scraper-api/features/result-processing-and-storage/output-types/capturing-network-requests-fetch-xhr) for easier scraping of dynamic content from JavaScript-heavy websites. Set the `xhr` parameter to `true` to extract data directly from API responses instead of parsing HTML.
{% endupdate %}

{% update date="2025-06-03" tags="web-scraper-api" %}

## Alibaba Cloud OSS and other S3-compatible storage

Web Scraper API now supports [Alibaba Cloud Object Storage Service](/products/web-scraper-api/features/result-processing-and-storage/cloud-storage#alibaba-cloud-object-storage-service-oss) and [other S3-compatible storage solutions](/products/web-scraper-api/features/result-processing-and-storage/cloud-storage#other-s3-compatible-storage) setups. To save scraped results to these buckets, set the `storage_type` to `s3_compatible` and provide your `storage_url`.
{% endupdate %}

{% update date="2025-06-03" tags="web-scraper-api" %}

## Advanced filtering and sorting for Amazon Search

Added `sort_by` and `refinements` parameters to our [Amazon Search](/api-targets/e-commerce/amazon/search) source for more precise scraping based on price, brand, color, and other filters.
{% endupdate %}

{% update date="2025-05-27" tags="web-scraper-api,general-updates" %}

## AI-powered browser instructions

Users can now **generate browser instructions using AI** in the [Web Scraper API Playground](https://dashboard.oxylabs.io/?route=/api-playground) on our dashboard. Instead of manually selecting each action, you can simply enter a prompt, and the instructions will be automatically generated.
{% endupdate %}

{% update date="2025-05-21" tags="general-updates,headless-browser" %}

## Unblocking Browser documentation

Unblocking browser now available in docs:

→ [See documentation](/products/headless-browser)

Find all setup info on CAPTCHA Solving Events, Device Type and more all in one place.

→ [Learn more about Unblocking Browser](https://oxylabs.io/products/unblocking-browser)
{% endupdate %}

{% update date="2025-05-15" tags="proxies" %}

## High-Bandwidth Proxies for video download

Introducing [**High-Bandwidth Proxies** ](https://oxylabs.io/products/high-bandwidth-proxies)- **scrape video and audio data at scale** with 200+ Gbps dedicated bandwidth, smart IP rotation, and long-lived connections built for uninterrupted, high-volume downloads. **Fully compatible with** `yt-dlp` **and other open-source libraries**, easy to integrate, and optimized for speed, stability, and scale with a dedicated proxy exit node.
{% endupdate %}

{% update date="2025-05-15" tags="web-scraper-api" %}

## Video scraping & AI-ready data via API

Introducing [**Video Data API**](https://oxylabs.io/products/video-data-scraper?_gl=1*1d28eny*_gcl_au*MjA1NjE0OTQ4LjE3NzUxOTc2NTcuMTU4ODMzNzc3Mi4xNzc3MDE0NzI2LjE3NzcwMTQ3MjY.*_ga*MTY5MDcxMDgwNy4xNzc1MTk3NjU3*_ga_FC1FV63ZQ4*czE3Nzg3NDEyNjYkbzQwJGcxJHQxNzc4NzU2NDk1JGo1OSRsMCRoMTc1NzcxMjU2MA..) **- AI-ready infrastructure** to find relevant videos, channels, and playlists, download video/ audio files, extract transcripts, and enrich everything with metadata - no need to build or maintain your own scrapers.
{% endupdate %}

{% update date="2025-05-15" tags="datasets" %}

## Ethical YouTube video datasets

Access high-quality, creator-approved [video datasets](https://oxylabs.io/products/youtube-datasets?_gl=1*cdrhmv*_gcl_au*MjA1NjE0OTQ4LjE3NzUxOTc2NTcuMTU4ODMzNzc3Mi4xNzc3MDE0NzI2LjE3NzcwMTQ3MjY.*_ga*MTY5MDcxMDgwNy4xNzc1MTk3NjU3*_ga_FC1FV63ZQ4*czE3Nzg3NDEyNjYkbzQwJGcxJHQxNzc4NzU2NDY3JGoxNSRsMCRoMTc1NzcxMjU2MA..) with rich **metadata, transcripts, and 720p+ resolution** - ready for **training and fine-tuning AI models**. No scraping, no legal headaches, just clean, and scalable video data.
{% endupdate %}

{% update date="2025-05-13" tags="general-updates" %}

## Documentation improvements

Oxylabs documentation now has all things setup and troubleshooting in one place:&#x20;

* [Help Center](/help-center)
* [Changelog](/changelog)
  {% endupdate %}

{% update date="2025-04-25" tags="datasets" %}

## Clean data with E-Commerce Web Data Platform

Introducing Oxylabs' new product - **E-Commerce** **Web Data Platform.** With this platform you will be able to get clean data from Walmart, Amazon, Shopee, and other top marketplaces.
{% endupdate %}

{% update date="2025-04-24" tags="headless-browser" %}

## New product release - Unblocking Browser

We’ve launched [Unblocking Browser](/products/headless-browser), a **headless**, fully managed **browser** that simulates authentic browsing behavior to **handle bot traffic management systems** or **CAPTCHAs** automatically, and access complex, **JavaScript-heavy sites** with ease.
{% endupdate %}

{% update date="2025-04-16" tags="web-scraper-api" %}

## 30 new parametrized sources for Web Scraper API

[Web Scraper API](https://oxylabs.io/products/scraper-api/web) now supports **30 new parametrized sources** - select parameters, such as search term, store ID, or ZIP code, and **automate your request construction.**
{% endupdate %}

{% update date="2025-04-09" tags="web-scraper-api,web-unblocker" %}

## Usage limit email notifications for Web Scraper API and Web Unblocker

You can now set up **email alerts** to be notified when your [Web Scraper API](/products/web-scraper-api) or [Web Unblocker](/products/web-unblocker) usage reaches **80% and/or 100%** of your monthly subscription limit.
{% endupdate %}

{% update date="2025-04-03" tags="web-scraper-api" %}

## Google AI Overviews response schema update

[**Google AI Overview**](/api-targets/search-engines/google/ai-overviews) **response structure** now supports **multiple AI Overview blocks** in a single response. Previously limited to a single object, **the schema now returns an array of AI Overview objects**, ensuring you capture all AI-generated content from Google's search results.
{% endupdate %}

{% update date="2025-04-03" tags="web-scraper-api" %}

## Google related searches schema improvement

We've improved [**Google Web Search**](/api-targets/search-engines/google/search) **related searches schema** with **more precise position tracking** for multiple related search blocks. You can now get detailed, position-specific related search results directly in their parsed data.
{% endupdate %}

{% update date="2025-03-24" tags="web-scraper-api,general-updates" %}

## OxyCopilot prompts and code samples' library

We’ve launched **the OxyCopilot prompts library** with **ready-to-use AI prompts** **and code sample**s for scraping and parsing tasks. Users can now follow step-by-step guides to generate requests for specific targets and view parsed data examples produced by [OxyCopilot](/products/web-scraper-api/web-scraper-api-playground/oxycopilot).
{% endupdate %}

{% update date="2025-03-12" tags="web-scraper-api" %}

## Multimodal video data extraction

[Web Scraper API](https://oxylabs.io/products/scraper-api/web) now supports **multimodal YouTube data extraction** with four new sources: `youtube_search`, `youtube_download`, `youtube_transcripts`, and `youtube_metadata`. Users can now retrieve **video, audio, transcripts, and metadata** for AI applications and advanced analytics.
{% endupdate %}

{% update date="2025-03-11" tags="web-scraper-api" %}

## New endpoints for Web Scraper API Scheduler

We’ve added two new endpoints to the Web Scraper API [**Scheduler**](/products/web-scraper-api/features/scheduler) for better visibility into scheduled jobs. Users can now retrieve **any schedule's** **run history** (/runs) and **executed job lists** (/jobs).
{% endupdate %}

{% update date="2025-03-11" tags="proxies" %}

## Proxies: new countries added

* Belgium and Canada Proxies now available to purchase via dashboard for ISP proxies.
* Italy, Singapore and Poland Proxies now available for Datacenter proxies.
* Italy, Singapore, Spain and Poland location now available for Dedicated Datacenter Proxies.
  {% endupdate %}

{% update date="2025-02-04" tags="web-scraper-api" %}

## No-code browser instructions

Users can now create browser instructions with a few simple steps in the [**Web Scraper API Playground**](/products/web-scraper-api/web-scraper-api-playground) on our dashboard, eliminating the need for manual coding - set up actions, generate structured JSON, and export it for further use.
{% endupdate %}

{% update date="2025-01-30" tags="web-scraper-api" %}

## Set currency when scraping Amazon

You can now specify the currency when scraping Amazon product, search, pricing, and best-sellers pages! Simply add the `context:currency` parameter to define the price currency. Find the available values [here](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FNNybEQaVnTrc9ymR1NGE%2Fcurrency_new.json?alt=media\&token=a77440f9-50a5-4e07-9993-b2db2144800b) or refer to the respective Amazon documentation pages.
{% endupdate %}

{% update date="2025-01-24" tags="proxies" %}

## Usage alerts for Residential and Mobile Proxies

Stay informed and avoid service interruptions. You can now receive email notifications when you're approaching the monthly subscription limit for your Residential and Mobile Proxies. To enable or disable this feature, simply go to **My Account** > **Email Notifications** in your dashboard.
{% endupdate %}

{% update date="2025-01-06" tags="general-updates" %}

## Dashboard: Transfer team ownership

You can now transfer team ownership in three steps through the dashboard under "My Account" -> "Team": select the new owner, confirm the transfer, and have the new owner accept the invitation.
{% endupdate %}

{% update date="2025-01-06" tags="web-scraper-api" %}

## More localization features for Kroger

You can now set a `delivery_zip` code for [Kroger](/api-targets/e-commerce/kroger) to specify precise delivery locations and use the `fulfillment_type` parameter to choose the preferred order method, including `ship`, `pickup`, `delivery`, or `in_store`.
{% endupdate %}

{% update date="2024-12-31" tags="proxies" %}

## 5 free Datacenter IPs

All new signups now get 5 free datacenter IPs to test the service – no credit card needed. [**Sign up now**](https://dashboard.oxylabs.io/) or check out [**our docs**](https://developers.oxylabs.io/) to get started.
{% endupdate %}
{% endupdates %}


# Quick Start: Proxies

Start using Oxylabs proxies in just a few minutes with a simple step-by-step guide.

{% hint style="success" %}
Already familiar with the basics? Check out [proxy documentation](/products/proxies) or our handy [Integration hub](/integrations/proxy-integrations).
{% endhint %}

Oxylabs offers a variety of proxy types to help you with any proxy needs. While the use cases for Residential, Datacenter, and ISP proxies differ, the core integration logic is nearly identical.

Follow the step-by-step guide below to start using Oxylabs proxies in just a few minutes:

{% stepper %}
{% step %}

### Setup & credentials

1. **Create an account:** Sign up at the [Oxylabs Dashboard](https://dashboard.oxylabs.io/).
2. **Purchase a plan:** Select your proxy type (Residential, Mobile, Datacenter, Dedicated Datacenter, ISP, or Dedictaed ISP proxies).
3. **Create a Proxy User:** Navigate to your product in the dashboard and create a Proxy User (These are credentials to access your proxies separate from you dashboard login)

{% hint style="info" %}
If you want a free trial to test our proxies, email our support team at <support@oxylabs.io>.
{% endhint %}
{% endstep %}

{% step %}

### Your first request

The most efficient way to test your connection is with a cURL command. Copy the template below and replace the placeholders with the values from the **Proxy details** in Step 3.

```bash
curl -x ENDPOINT:PORT -U "PREFIX-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% endstep %}

{% step %}

### Proxy details

Find your specific product below to identify the correct connection details:

<table><thead><tr><th width="172">Proxy type</th><th width="150">Endpoint</th><th width="115">Rotating port</th><th width="125">Username prefix</th><th width="127">Static port</th></tr></thead><tbody><tr><td>Residential</td><td><code>pr.oxylabs.io</code></td><td><code>7777</code></td><td><code>customer-</code></td><td>(use <code>sessid-</code>)</td></tr><tr><td>Mobile</td><td><code>pr.oxylabs.io</code></td><td><code>7777</code></td><td><code>customer-</code></td><td>(use <code>sessid-</code>)</td></tr><tr><td>Datacenter</td><td><code>dc.oxylabs.io</code></td><td><code>8000</code></td><td><code>user-</code></td><td><code>8001</code> and up</td></tr><tr><td>Dedicated Datacenter</td><td><code>ddc.oxylabs.io</code></td><td><code>8000</code></td><td><code>user-</code></td><td><code>8001</code> and up</td></tr><tr><td>ISP</td><td><code>isp.oxylabs.io</code></td><td><code>8000</code></td><td><code>user-</code></td><td><code>8001</code> and up</td></tr><tr><td>Dedicated ISP</td><td><code>disp.oxylabs.io</code></td><td><code>8000</code></td><td><code>user-</code></td><td><code>8001</code> and up</td></tr></tbody></table>

{% hint style="info" %}
If you purchased Dedicated Datacenter Proxies (Enterprise) through our Sales Team, you may connect via Direct IP (e.g., `1.2.3.4:60000`(HTTP) or `1.2.3.4:1180`(SOCKS5)) or use the endpoint provided by your Account Manager. Username requires no prefix.
{% endhint %}
{% endstep %}

{% step %}

### Customizing your request

Once you have the basic connection working, you can customize your session or geo-targeting:

* **To target a country:**
  * Residential/Mobile: Add `-cc-US` to your username string (adjust the country code accordingly).
  * Shared DC/ISP: Add `-country-US` to your username string (adjust the country code accordingly).
  * Dedicated (DC/ISP): Use the port assigned to an IP in the target country (consult the Proxy List in your dashboard).
* **To keep a static session:**
  * Residential / Mobile proxies: Add `-sessid-qwerty123` to your username string at the end.
  * All Other Types: Change the Port (e.g., use `8001` for IP #1, `8002` for IP #2, etc.).
    {% endstep %}
    {% endstepper %}

### Next Steps

Now that you've confirmed your connection, here is where to go further:

* **Need advanced features?** See the full feature breakdown for each type in the [Products](/products/proxies) section.
* **Using third-party tools?** Find step-by-step guides for Selenium, Playwright, private browsers, proxy managers, and many more in the [Integrations](/integrations/proxy-integrations) section.


# Quick Start: Web Scraper API

Start using Oxylabs Web Scraper API in just a few minutes with a simple step-by-step guide.

{% hint style="success" %}
Already familiar with the basics? Check out [Web Scraper API documentation](/products/web-scraper-api) or our handy [Integration hub](/integrations/web-scraper-api-integrations).
{% endhint %}

Oxylabs [Web Scraper API](https://oxylabs.io/products/scraper-api/web) is an all-in-one solution that handles proxy rotation, JavaScript rendering, and anti-bot systems automatically. This guide will take you from an empty terminal to real-time web data in just a few minutes.

Follow the detailed steps below or watch a quick video walk-through:

{% embed url="<https://www.youtube.com/watch?t=2s&v=WOD0mZnu-j0>" %}

{% stepper %}
{% step %}

### Setup & credentials

Before sending your first request, you need to authorize your access:

1. **Create an account:** Sign up at the [Oxylabs Dashboard](https://dashboard.oxylabs.io/).
2. **Choose a plan:** Pick a free trial for testing or a subscription right away.
3. **Create an API User:** Go to "Web Scraper API" section on the left and select "Users" tab.
4. **Store your credentials:** These specific API credentials (not your dashboard login) are required for all requests.
   {% endstep %}

{% step %}

### Your first request

The `universal` source works for any public website. Open your terminal and run this command to scrape our sandbox site:

```bash
curl --user 'USERNAME:PASSWORD' \
'https://realtime.oxylabs.io/v1/queries' \
-H 'Content-Type: application/json' \
-d '{
    "source": "universal",
    "url": "https://sandbox.oxylabs.io/products"
}'
```

{% endstep %}

{% step %}

### Getting structured data

If you are scraping a supported domain (like Amazon or Google), the API can return structured JSON instead of raw HTML. Just set the `source` to a dedicated target and use `"parse": true`. For example, let's scrape an Amazon product:

```bash
curl 'https://realtime.oxylabs.io/v1/queries' \
--user "USERNAME:PASSWORD" \
-H "Content-Type: application/json" \
-d '{
    "source": "amazon_product", 
    "query": "B07FZ8S74R", 
    "parse": true
}'
```

{% endstep %}
{% endstepper %}

### Essential Parameters

These are the most common parameters used to customize your request:

| Parameter       | Type    | Description                                                                  |
| --------------- | ------- | ---------------------------------------------------------------------------- |
| `source`        | string  | Required. The scraping engine (e.g., `universal`, `amazon`, `google`, etc.). |
| `url` / `query` | string  | The target link or the keyword/ID for dedicated targets.                     |
| `parse`         | boolean | Set to `true` for structured JSON results on supported domains.              |
| `render`        | string  | Set to `html` to enable a headless browser for JavaScript-heavy sites.       |
| `geo_location`  | string  | Localize your results (e.g., `United States` or `90210`).                    |

You can find more customizable parameters in the Web Scraper API [documentation](/products/web-scraper-api) or [API targets](/api-targets) section.

### Common response codes

| Code  | Status              | Description                                       |
| ----- | ------------------- | ------------------------------------------------- |
| `200` | `OK`                | Success. Your data is in the `results` object.    |
| `401` | `Unauthorized`      | Check your API User credentials in the dashboard. |
| `429` | `Too Many Requests` | You have exceeded your concurrency limit.         |

You can find the [full list of response codes](/products/web-scraper-api/response-codes) in the Web Scraper API product section.

### Next Steps

Now that you've sent your first query, explore the rest of our documentation based on your needs:

* **Looking for specific domains?** Head to the [API Targets](https://developers.oxylabs.io/api-targets/) section for dedicated guides on Amazon, Google, eBay, and many more popular websites.
* **Need advanced features?** Visit the [Products](/products/web-scraper-api) space to learn about Custom Parsing, Scheduler, Cloud Storage delivery, and more.
* **Scale with AI?** Check out [solutions for AI workflows](/products/web-scraper-api/solutions-for-ai-workflows) or see how [OxyCopilot](/products/web-scraper-api/web-scraper-api-playground/oxycopilot) can automate your parsing logic using plain English.
* **Different Integrations?** We use synchronous Realtime integration in our examples. You can find Proxy Endpoint or asynchronous Push-Pull integration in the [integration methods](/integrations/web-scraper-api-integrations) page.


# Quick Start: Web Unblocker

Start using Oxylabs Web Unblocker in just a few minutes with a simple step-by-step guide.

{% hint style="success" %}
Already familiar with the basics? Check out [Web Unblocker documentation](/products/web-unblocker).
{% endhint %}

Oxylabs [Web Unblocker](https://oxylabs.io/products/web-unblocker) is an AI-powered proxy solution designed to handle the most sophisticated bot traffic management systems (e.g., Akamai, Cloudflare, or DataDome). It automatically manages proxy rotation, browser fingerprinting, and CAPTCHA handling so you can focus on the data.

{% stepper %}
{% step %}

### Setup & credentials

1. **Create an account:** Sign up at the [Oxylabs Dashboard](https://dashboard.oxylabs.io/).
2. **Create an API User:** Navigate to Web Unblocker → Users and create a username and password (These are credentials to authorize access to Web Unblocker and separate from you dashboard login)
   {% endstep %}

{% step %}

### Your first request

Web Unblocker is integrated as a proxy. Use the endpoint `unblock.oxylabs.io:60000` and pass your instructions via custom headers.

```bash
curl -k -x unblock.oxylabs.io:60000 -U 'USERNAME:PASSWORD' \
'https://sandbox.oxylabs.io/products' \
-H 'x-oxylabs-geo-location: United States' \
-H 'x-oxylabs-render: html'
```

{% hint style="info" %}
Replace `USERNAME` and `PASSWORD` with your User credentials
{% endhint %}
{% endstep %}
{% endstepper %}

### Essential Headers

Unlike standard proxies, Web Unblocker uses headers to control its AI-driven features:

| Header                    | Value                            | Description                                                    |
| ------------------------- | -------------------------------- | -------------------------------------------------------------- |
| `x-oxylabs-geo-location`  | `United States`, `Germany`, etc. | Sets the exit node to a specific country.                      |
| `x-oxylabs-render`        | `html` or `png`                  | Enables JavaScript rendering or returns a screenshot.          |
| `x-oxylabs-session-id`    | `AnyRandomString`                | Keeps the same IP for multiple requests (Sticky Session).      |
| `x-oxylabs-force-headers` | `1`                              | Forces the tool to send your own custom headers to the target. |

### Common response codes

| Code  | Status              | Description                                                  |
| ----- | ------------------- | ------------------------------------------------------------ |
| `200` | `OK`                | Successful request. You receive the full rendered HTML.      |
| `401` | `Unauthorized`      | Invalid API User credentials or missing authentication.      |
| `429` | `Too Many Requests` | You have reached your account's rate limit.                  |
| `550` | `Faulted`           | The system failed to access the site after multiple retries. |

You can find the [full list of response codes](/products/web-unblocker/response-codes) in the Web Unblocker product section.

### Next Steps

* **Advanced browser control:** Need to click buttons or scroll? Check out the [Custom Browser Instructions](/products/web-unblocker/custom-browser-instructions) in the Products section.
* **Geo-targeting:** For localized data, see the [Geo-location](/products/web-unblocker/making-requests/geo-location) page for targeting specific countries, cities, or coordinates.


# Quick Start: Headless Browser

Start using Oxylabs Headless Browser in just a few minutes with a simple step-by-step guide.

{% hint style="success" %}
Already familiar with the basics? Check out the [Headless Browser documentation](/products/headless-browser).
{% endhint %}

Oxylabs [Headless Browser](https://oxylabs.io/products/headless-browser) is a cloud-hosted browser infrastructure that handles bot traffic control systems, CAPTCHAs, and proxy rotation automatically. It is fully compatible with Playwright, Puppeteer, and the Model Context Protocol (MCP) for AI applications.

{% stepper %}
{% step %}

### Setup & credentials

1. **Create an account:** Sign up at the [Oxylabs Dashboard](https://dashboard.oxylabs.io/).
2. **Choose a plan:** Select a plan or a free trial under Scraping Solutions → Headless Browser.
3. **Create user credentials:** Head to the Users tab in the Headless Browser product section and create a username and password (These credentials are used for WebSocket Secure authentication).
   {% endstep %}

{% step %}

### Your first request

Oxylabs Headless Browser uses the Chrome DevTools Protocol (CDP). You can connect to it using Playwright or Puppeteer without managing local browser binaries.

**Python + Playwright example:**

1. Install Playwright: `pip install playwright`
2. Run the following script (replace `USERNAME` and `PASSWORD` with your credentials):

```python
from playwright.sync_api import sync_playwright

username = "USERNAME"
password = "PASSWORD"
endpoint = "ubc.oxylabs.io"
browser_url = f"wss://{username}:{password}@{endpoint}"

with sync_playwright() as p:
    # Connect to the remote Oxylabs browser
    browser = p.chromium.connect_over_cdp(browser_url)
    page = browser.new_page()
    
    page.goto('https://oxylabs.io/')
    print(f"Page Title: {page.title()}")
    
    browser.close()
```

{% endstep %}
{% endstepper %}

### Customizing the browser

You can also pass instructions directly through the connection URL using query parameters:

<table><thead><tr><th width="138.5">Parameter</th><th width="172">Example</th><th>Description</th></tr></thead><tbody><tr><td><code>p_cc</code></td><td><code>?p_cc=US</code></td><td>Routes the browser's traffic through a specific country.</td></tr><tr><td><code>p_device</code></td><td><code>?p_device=mobile</code></td><td>Emulates a specific device type.</td></tr><tr><td><code>session_name</code></td><td><code>?session_name=ses-1</code></td><td>Creates a sticky session to keep your remote browser instance running in the cloud.</td></tr></tbody></table>

Find more customization options in Headless Browser [documentation](/products/headless-browser#features).

### Next steps

* **Want to monitor your browser?** Learn about the [Session Inspection Tool](/products/headless-browser/session-inspection-and-recording) to visually track your script's interactions with the browser in real-time.
* **Is your script too slow?** Try [Optimizing Traffic](/products/headless-browser#recommended-setup) to block unnecessary assets from loading. This will increase scraping speed and reduce bandwidth consumption.
* **Encountering errors or timeouts?** Visit the [Troubleshooting Guide](/products/headless-browser/troubleshooting-guide) to resolve common CDP connection issues, library version mismatches, and execution timeouts.
* **Hitting a "403 Forbidden" on a major site?** Check the [Restricted Targets](/products/headless-browser/restricted-targets) list to see which websites or services are restricted from access for the Headless Browser.


# Quick Start: AI Studio

Start using Oxylabs AI Studio in just a few minutes with a simple step-by-step guide.

{% hint style="success" %}
Already familiar with the basics? Check out [AI Studio documentation](/products/ai-studio) or our handy [Integration hub](/integrations/ai-studio-integrations).
{% endhint %}

[Oxylabs AI Studio](https://aistudio.oxylabs.io/) is a no-code suite of tools for web scraping. Instead of writing code or maintaining scrapers, you interact with AI-powered apps using plain English. It is designed to handle the entire scraping pipeline automatically: from request management to data parsing.

{% stepper %}
{% step %}

### Access the AI Studio

Log in or sign up at [aistudio.oxylabs.io](https://aistudio.oxylabs.io). Once you’re in, you can start using AI Studio apps right away with 10,000 free credits or [upgrade your plan](https://aistudio.oxylabs.io/pricing) according to your needs.
{% endstep %}

{% step %}

### Choose your app

AI Studio offers five specialized applications. Choose the one that matches your task:

| App                                                | Use this when...                                                                       |
| -------------------------------------------------- | -------------------------------------------------------------------------------------- |
| [AI-Scraper](/products/ai-studio/ai-scraper)       | You have a specific URL and want to extract data from it.                              |
| [AI-Crawler](/products/ai-studio/ai-crawler)       | You have one URL but want the AI to find and scrape all related pages.                 |
| [Browser Agent](/products/ai-studio/browser-agent) | Trying to reach pages hidden behind buttons or complex navigation.                     |
| [AI-Search](/products/ai-studio/ai-search)         | You need to find information across the entire web, not just one site.                 |
| [AI-Map](/products/ai-studio/ai-map)               | You need to see the whole structure of a website (all URLs) to find specific sections. |
| {% endstep %}                                      |                                                                                        |

{% step %}

### Scraping your first page (AI-Scraper)

The AI-Scraper is the most common starting point for extracting data from a specific URL.

1. **Enter the URL:** Paste the link to the website you want to scrape.
2. **Select output format:** Choose from JSON, CSV, Markdown, PNG, or Toon.
3. **Describe the data:** Explain what you need in plain English (e.g., "Extract the product name, current price, and rating").
4. **Generate schema:** Click "Generate schema" and the AI will create a structured map of the data it found. You can manually edit these fields if you need to rename them.
5. **Scrape & parse:** Hit the "Scrape & parse" button to see your live results. You can download the data immediately as a JSON or CSV file.
   {% endstep %}
   {% endstepper %}

### Next steps

* **Need more than just one page?** If you have a starting URL but need to find and scrape hundreds of related pages (like an entire product category), see the [AI-Crawler](/products/ai-studio/ai-crawler) section to learn how to automate site discovery.
* **Tired of manual copy-pasting?** Run AI Studio across thousands of URLs automatically using pre-made [Python or JavaScript SDKs](/integrations/ai-studio-integrations) to plug your prompts directly into your own apps.
* **Have questions about credits or results?** Learn more about Oxylabs AI Studio apps in our [AI Studio FAQ](/products/ai-studio/faq).


# Dashboard API

Programmatic access to Oxylabs product users for tracking usage statistics with the Dashboard API.

The **Dashboard API** allows you to **access your product usage statistics** programmatically and integrate the metrics into your internal systems. This allows automated reporting and real-time usage monitoring without using the Oxylabs dashboard on the web.

{% hint style="info" %}
**Note:** Dashboard API currently supports **Datacenter Proxies (DC**) and **Headless Browser (HB)**. You can also track [**Residential Proxies**](/products/proxies/residential-proxies/public-api), [**Mobile Proxies**](/products/proxies/mobile-proxies/public-api), [**Web Unblocker**](/products/web-unblocker/usage-statistics), and [**Web Scraper API**](/products/web-scraper-api/usage-and-billing/usage-statistics) usage statistics with simple API requests.
{% endhint %}

All API requests flow through this base path:

```
https://api.oxylabs.io/
```

## Authentication

{% hint style="warning" %}
**Important:** To get your Dashboard API key, please contact our [**Customer Support**](mailto:support@oxylabs.io) team. Once requested, the key will be generated and given to you directly within one business day.
{% endhint %}

You must include the key in the `Authorization` header of every request using the `Bearer` scheme.

```
Authorization: Bearer {YOUR_API_KEY}
```

## Endpoints

Dashboard API includes endpoints for product Instance Discovery and Usage Statistics. All responses are delivered in JSON format.&#x20;

<table><thead><tr><th width="236.8125">Endpoint</th><th>Description</th></tr></thead><tbody><tr><td><a href="#instance-discovery">Instance discovery</a></td><td>The request returns a paginated list of product instances your account is authorized to access. You can use the returned IDs to filter results when calling other endpoints.</td></tr><tr><td><a href="#usage-statistics">Usage statistics</a></td><td>The request returns aggregated usage statistics per product for the authenticated client's product instances.</td></tr></tbody></table>

### Instance Discovery

```
GET /stats/v1/filters/instances
```

#### Query parameters

<table><thead><tr><th width="166">Parameter</th><th width="268.0481770833333">Description</th><th>Type</th></tr></thead><tbody><tr><td><code>products[]</code></td><td>Filter by product. Accepted values: <code>HB</code> (Headless Browser), <code>DC</code> (Datacenter Proxies), <code>null</code> (all products).</td><td>Array of strings</td></tr><tr><td><code>page</code></td><td>Page number. Default: <code>1</code>.</td><td>Integer</td></tr><tr><td><code>per_page</code></td><td>Results per page. Default: <code>100</code>. Maximum: <code>100</code>.</td><td>Integer</td></tr></tbody></table>

#### Example request

To start filtering data, you first need to identify your specific resources. The following example shows how to list your available Datacenter Proxies (DC) and Headless Browser (HB) instances.

**Input sample**

```
GET /stats/v1/filters/instances?products[]=HB&products[]=DC&page=1&per_page=50
Authorization: Bearer {YOUR_API_KEY}
```

**Output sample**&#x20;

```json
{
  "data": [
    {
      "uuid": "my-hb-instance-uuid",
      "name": "my-hb-instance",
      "status": "enabled",
      "product": "HB"
    },
    {
      "uuid": "my-dc-instance-uuid",
      "name": "my-dc-instance",
      "status": "disabled",
      "product": "DC"
    }
  ],
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 50,
      "total_items": 2,
      "total_pages": 1
    }
  }
}
```

#### Response fields

<table><thead><tr><th width="166">Field</th><th width="268.0481770833333">Description</th><th>Type</th></tr></thead><tbody><tr><td><code>uuid</code></td><td>Unique identifier for the instance.</td><td>String (UUID)</td></tr><tr><td><code>name</code></td><td>Instance name as configured in the dashboard.</td><td>String</td></tr><tr><td><code>status</code></td><td>Product instance status (e.g., <code>enabled</code> or <code>disabled</code>).</td><td>String</td></tr><tr><td><code>product</code></td><td>Product identifier (e.g., <code>HB</code> (Headless Browser), <code>DC</code> (Datacenter Proxies), etc.).</td><td>String</td></tr><tr><td><code>page</code></td><td>Current page number.</td><td>Integer</td></tr><tr><td><code>per_page</code></td><td>Number of results on this page.</td><td>Integer</td></tr><tr><td><code>total_items</code></td><td>Total matching records across all pages.</td><td>Integer</td></tr><tr><td><code>total_pages</code></td><td>Total number of pages. Always at least <code>1</code>, even when there are no results.</td><td>Integer</td></tr></tbody></table>

### Usage Statistics

```
GET /stats/v1/usage
```

{% hint style="warning" %}
**Important:** The maximum date range for a single request (the difference between `date_to` and `date_from`) is **31 days**. To retrieve usage data for a longer period, please perform your queries in 31-day batches.
{% endhint %}

#### Query parameters

<table><thead><tr><th width="166">Parameter</th><th width="268.0481770833333">Description</th><th>Type</th></tr></thead><tbody><tr><td><mark style="background-color:green;"><code>product</code></mark></td><td>Product identifier (e.g., <code>HB</code> (Headless Browser), <code>DC</code> (Datacenter Proxies), etc.)</td><td>String</td></tr><tr><td><mark style="background-color:green;"><code>date_to</code></mark></td><td>Start date, inclusive (e.g., UTC <code>YYYY-MM-DDTHH:mm:ssZ</code> or offset-aware <code>YYYY-MM-DDTHH:mm:ss+02:00</code>).</td><td>Date (ISO 8601)</td></tr><tr><td><mark style="background-color:green;"><code>date_from</code></mark></td><td>End date, inclusive. Same format as <code>date_to</code>.</td><td>Date (ISO 8601)</td></tr><tr><td><mark style="background-color:green;"><code>group_by</code></mark></td><td>Result grouping options. Accepted values: <code>DAY</code>, <code>TARGET</code>, <code>INSTANCE</code>. Multiple values can be combined. The order of values determines the order of data grouping.</td><td>Array of strings</td></tr><tr><td><code>instances[]</code></td><td>Filter results to specific instances. Accepts multiple UUIDs obtained from <code>GET /stats/v1/filters/instances</code>. Invalid or unrecognized UUIDs are ignored.</td><td>UUID (Array of strings)</td></tr><tr><td><code>page</code></td><td>Page number. Default: <code>1</code>.</td><td>Integer</td></tr><tr><td><code>per_page</code></td><td>Results per page. Default: <code>100</code>. Maximum: <code>100</code>.</td><td>Integer</td></tr></tbody></table>

&#x20;     \- mandatory parameter

#### Example requests

**1. Group by TARGET**

The following example shows how to retrieve usage metrics for Headless Browser (`HB`) by grouping results by target, to see the total request count and traffic volume for each target within the selected date range.

**Input sample**

```
GET /stats/v1/usage?product=HB&date_from=2025-11-01T00:00:00Z&date_to=2025-11-30T23:59:59Z&group_by[]=TARGET
Authorization: Bearer {YOUR_API_KEY}
```

**Output sample**&#x20;

```json
{
  "data": [
    {"grouped_by": ["some.target.A"], "requests": 10, "traffic_bytes": 100},
    {"grouped_by": ["some.target.B"], "requests": 10, "traffic_bytes": 100}
  ],
  "totals": {
    "requests": 20,
    "traffic_bytes": 200
  },
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 50,
      "total_items": 100,
      "total_pages": 2
    },
    "grouping": ["TARGET"]
  }
```

**2. Group by DAY + TARGET**

This example shows how to break down Headless Browser (`HB`) usage by both `Day` and `Target` to see exactly how much traffic each target consumed on a day-by-day basis.

**Input sample**

```
GET /stats/v1/usage?product=HB&date_from=2025-11-01T00:00:00Z&date_to=2025-11-30T23:59:59Z&group_by[]=DAY&group_by[]=TARGET
Authorization: Bearer {YOUR_API_KEY}
```

**Output sample**&#x20;

```json

  "data": [
    {"grouped_by": ["2025-11-01", "some.target.A"], "requests": 10, "traffic_bytes": 100},
    {"grouped_by": ["2025-11-01", "some.target.B"], "requests": 10, "traffic_bytes": 100},
    {"grouped_by": ["2025-11-02", "some.target.A"], "requests": 10, "traffic_bytes": 100},
    {"grouped_by": ["2025-11-02", "some.target.B"], "requests": 10, "traffic_bytes": 100}
  ],
  "totals": {
    "requests": 40,
    "traffic_bytes": 400
  },
  "meta": {
    "pagination": {
      "page": 1,
      "per_page": 50,
      "total_items": 200,
      "total_pages": 4
    },
    "grouping": ["DAY", "TARGET"]
  }
}
```

#### Response fields

<table><thead><tr><th width="190">Field</th><th width="344.0481770833333">Description</th><th>Type</th></tr></thead><tbody><tr><td><code>grouped_by</code></td><td>Grouping options in the same order as the requested <code>group_by</code> parameters.</td><td>Array of strings</td></tr><tr><td><code>data.requests</code></td><td>Total request count for the grouped period/dimension combination.</td><td>Integer</td></tr><tr><td><code>data.traffic_bytes</code></td><td>Total traffic in bytes for the grouped period/dimension combination.</td><td>Integer</td></tr><tr><td><code>totals</code></td><td>Total aggregated values for the selected period.</td><td>Object</td></tr><tr><td><code>totals.requests</code></td><td>Total request count across the entire selected period.</td><td>Integer</td></tr><tr><td><code>totals.traffic_bytes</code></td><td>Total traffic in bytes across the entire selected period.</td><td>Integer</td></tr><tr><td><code>page</code></td><td>Current page number.</td><td>Integer</td></tr><tr><td><code>per_page</code></td><td>Number of results on this page.</td><td>Integer</td></tr><tr><td><code>total_items</code></td><td>Total matching records across all pages.</td><td>Integer</td></tr><tr><td><code>total_pages</code></td><td>Total number of pages. Always at least <code>1</code>, even when there are no results.</td><td>Integer</td></tr><tr><td><code>meta.grouping</code></td><td>The active grouping options in the order they appear in <code>grouped_by</code>. Mirrors the <code>group_by</code> request parameter.</td><td>Array of strings</td></tr></tbody></table>

## Rate Limits

To ensure stability, Dashboard API rate limits are applied per API key and per client account for all requests.

* `10` requests per API key
* `100` requests across all API keys of an individual client

## Error Handling

Here are some common error types that you can get while using the Dashboard API:

<table><thead><tr><th width="166">Error code</th><th width="268.0481770833333">Error message</th><th>Description</th></tr></thead><tbody><tr><td><code>400</code></td><td>Bad request</td><td>The request could not be understood. Please check if the request is formatted correctly.</td></tr><tr><td><code>401</code></td><td>Invalid request</td><td>User has entered an invalid API key.</td></tr><tr><td><code>403</code></td><td>Forbidden</td><td>Access denied: missing API key. Please contact support or your account manager.</td></tr><tr><td><code>429</code></td><td>Too many requests</td><td>User has reached the thread/concurrent session limit.</td></tr><tr><td><code>500</code></td><td>Internal server error</td><td>We had an unexpected problem with the server. Try again later.</td></tr></tbody></table>

For questions, access issues, or integration support, please contact [**support@oxylabs.io**](mailto:support@oxylabs.io) or your account manager. When reporting a problem, please include:

* The endpoint and query parameters used
* The HTTP status code returned
* The full response body (redact your API key before sharing)
* Timestamps of the failing requests (UTC preferred)


# Teams

Learn how to use the Teams feature in Oxylabs dashboard. Invite members, assign roles, and transfer team ownership.

The Teams feature allows account owners to collaborate with their team by granting them access to the [**Oxylabs dashboard**](https://dashboard.oxylabs.io/en/).&#x20;

### Roles&#x20;

Currently, Oxylabs Teams consist of two roles:

* **Team owner** – The account holder who manages the team, invites members, and controls subscriptions.
* **Team member** – A user added to the team with restricted permissions.

### Team member restrictions&#x20;

Team members have limited access to account management features. Specifically:

* Only the team owner can add new members.
* Maximum number of active team members – 50.
* Team members cannot start trials or purchase subscriptions.
* Free trials users who join a team will lose their trial and gain access to the team’s dashboard and products.
* A user with an active subscription must cancel it before joining a team. This can be done in My Account → Products.
* A user can belong to only one team at a time. To create a new team, they must first leave their current team.

### Inviting team members <a href="#inviting-team-members" id="inviting-team-members"></a>

To invite a new team member:

1. Navigate to **My account →  Team section**
2. Click **+ Invite team member**

<figure><img src="/files/6YDYOcXFwmshxIuI7LwR" alt=""><figcaption></figcaption></figure>

3. Enter the teammate’s email address and send the invitation.

<figure><img src="/files/6fM4NLGsywcbvPa0737X" alt=""><figcaption></figcaption></figure>

*Note:* You can resend invitations or remove team members at any time.

<figure><img src="/files/XQCrHU7DmXcuEBEXr0lv" alt=""><figcaption></figcaption></figure>

4. The invitee will receive both an email invitation and a dashboard notification (if they already have an account).
5. Once the invitation is accepted, their status will change to **Active**.

<figure><img src="/files/mNNE91wCFPI7RgANvwBv" alt=""><figcaption></figcaption></figure>

### **Team member onboarding process** <a href="#team-member-onboarding-process" id="team-member-onboarding-process"></a>

From the team member’s perspective, the onboarding process is as follows:

1. They receive an email invitation to join the team.
2. Clicking **Accept invitation** directs them to the Oxylabs dashboard.
   * If they don’t have an account, they must register first.
   * If they already have an account, after logging in, they will see a pop-up invitation to join the team.

<figure><img src="/files/pvZduc1k0h9J3COPvj6U" alt=""><figcaption></figcaption></figure>

3. Once they accept, they gain access to all dashboard features (except subscriptions and team management).
4. In **My Account → Team**, they will see their team membership details.
5. They can leave the team at any time by clicking **Leave the team**.

<figure><img src="/files/8ZoEdyBN0i8PBhFMejb2" alt=""><figcaption></figcaption></figure>

### Transferring team ownership <a href="#transferring-team-ownership" id="transferring-team-ownership"></a>

Users can transfer team ownership in three simple steps:

1. The current team owner selects the new owner from the existing team.
2. They confirm the transfer in the dashboard and via email verification.
3. The new owner accepts the invitation via the dashboard or email.

<figure><img src="/files/VsmpAnMQRLaZepzEnGOA" alt=""><figcaption></figcaption></figure>

Once the transfer is completed, the new owner will gain full administrative control, while the previous owner will become a regular team member.


# Billing Information

Manage your Oxylabs billing information: learn how to update payment methods, edit billing details, and manage subscriptions.

The [**Oxylabs dashboard**](https://dashboard.oxylabs.io/en/registration) allows you to manage your billing information, including payment methods and subscription details. This page will walk you through the process of **updating your billing information**.

{% hint style="info" %}
Any changes to billing information will apply only to the selected subscription. If you have multiple subscriptions, you'll need to update them individually.
{% endhint %}


# Accessing Billing Information

Learn how to access your billing information in Oxylabs dashboard.

To begin managing your billing information:

1. Log in to your [**Oxylabs dashboard**](https://dashboard.oxylabs.io/en/registration).
2. Click on `My Account` in the left navigation menu.
3. From the top navigation bar, click on `Products`.

In the **Products** section, you'll see:

* A list of all your products with status indicators showing which services are active.
* Information about your current plans, traffic allocation, and pricing.
* Upgrade options for each product.

<figure><img src="/files/qzWcaLum89EYpwHk4SX2" alt=""><figcaption></figcaption></figure>


# Managing Payment Methods

Discover how to manage payment methods in Oxylabs dashboard. Add, update, or remove payment options and set your default payment method.

In your subscription management page, you can **add**, **update**, or **remove** payment methods.

#### Adding a new payment method

1. For the paid subscription you want to manage, click the `Manage subscription` button (note: the `Manage subscription` option only appears for paid products, not free trials or free products).

<figure><img src="/files/htpdKO55LOe4IY0sA2PQ" alt=""><figcaption></figcaption></figure>

2. When the **Payment Methods** section appears, click `+ Add payment method.`

<figure><img src="/files/eiJWOrMXaw9Rg4QtTWOU" alt=""><figcaption></figcaption></figure>

3. A new form will appear with payment options (Card, PayPal, Google Pay).
4. Select your preferred method and enter the required information.&#x20;
5. Click `Add` to save your new payment method. Your new payment method will appear in the list.

#### Setting a default payment method

Your current active payment method appears at the top of the page. To change it, you can select another payment method from your list and set it as the default.

<figure><img src="/files/ZEFzlB52S3VnhfLq9tS1" alt=""><figcaption></figcaption></figure>


# Updating Billing Information

See how to update your Oxylabs billing information in the dashboard, including your email, billing address, phone number.

1. Locate the **BILLING INFORMATION** section.
2. Click `Update information`.
3. Edit your email, billing address, phone number, and tax ID, as needed.
4. Save changes.

<figure><img src="/files/JwRdALxVOOPAcbHyS2CX" alt=""><figcaption></figcaption></figure>


# Canceling a Subscription

Find out how to cancel your Oxylabs subscription and resubscribe to inactive plans.

1. In the top-right corner of the subscription management page, click `Cancel subscription.`
2. Confirm your cancellation when prompted.
3. Your subscription will remain active until the end of the current billing period.

<figure><img src="/files/i037JDCJaPOminwl2aMk" alt=""><figcaption></figcaption></figure>

4. For inactive subscriptions, you'll see a `Resubscribe` option instead of Cancel.


# Have a Question?

Discover the ways to contact Oxylabs 24/7 support team.

You can reach out to our support team using one of the below:

* **Live chat.** Access live chat through your dashboard or on the [**Oxylabs website**](https://oxylabs.io/) for quick questions or bug reports.
* **Email**. You can contact us via [**support@oxylabs.io**](mailto:support@oxylabs.io). We recommend this method for less urgent questions or suggestions.

Our support team is **available 24/7**.


# All Oxylabs Products

Discover Oxylabs products, their functions, features and how to use them effectively

Explore and manage your Oxylabs products, learn about all of their features, and find dedicated guides to maximize their potential.

<table data-view="cards"><thead><tr><th align="center"></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td align="center"><strong>Oxylabs Proxies</strong></td><td><a href="/pages/B0pSYUIUMa8bjmaqtKtL">/pages/B0pSYUIUMa8bjmaqtKtL</a></td><td></td></tr><tr><td align="center"><strong>Web Scraper API</strong></td><td><a href="/pages/54izkwFE5xJbswdbfBlS">/pages/54izkwFE5xJbswdbfBlS</a></td><td></td></tr><tr><td align="center"><strong>Web Unblocker</strong></td><td><a href="/pages/uu0gU13BxGAPAu1WsJJW">/pages/uu0gU13BxGAPAu1WsJJW</a></td><td></td></tr><tr><td align="center"><strong>Headless Browser</strong></td><td><a href="/pages/js6xUbHpAHcGMXWSozSS">/pages/js6xUbHpAHcGMXWSozSS</a></td><td></td></tr><tr><td align="center"><strong>AI Studio</strong></td><td><a href="/pages/4SScIAJ38k8xFGUhSXY3">/pages/4SScIAJ38k8xFGUhSXY3</a></td><td></td></tr></tbody></table>


# Proxies

Learn to use Oxylabs proxies. Find code examples, parameter usage, localization, and much more.

Explore and manage your Oxylabs proxies: learn about all of their features, find dedicated guides on how to use them efficiently, discover Agent Skills for AI workflows, and how to [replace proxy IPs](/products/proxies/ip-replacement).&#x20;

{% content-ref url="/pages/jaUXvFKZNT8gTGKMvlpN" %}
[Residential Proxies](/products/proxies/residential-proxies)
{% endcontent-ref %}

{% content-ref url="/pages/eYMMTTtlFtHGyIImh1Gv" %}
[Mobile Proxies](/products/proxies/mobile-proxies)
{% endcontent-ref %}

{% content-ref url="/pages/Io0v7KnVKJkyHaJgJmEP" %}
[ISP Proxies](/products/proxies/isp-proxies)
{% endcontent-ref %}

{% content-ref url="/pages/LRAcK8KNyascyT6d61eI" %}
[Dedicated ISP Proxies](/products/proxies/dedicated-isp-proxies)
{% endcontent-ref %}

{% content-ref url="/pages/HJZ4qtUAdM9Fhs4zn0iV" %}
[Datacenter Proxies](/products/proxies/datacenter-proxies)
{% endcontent-ref %}

{% content-ref url="/pages/S9lILXMVI8i8GrXOBkOZ" %}
[Dedicated Datacenter Proxies](/products/proxies/dedicated-datacenter-proxies)
{% endcontent-ref %}

{% content-ref url="/pages/2chRPri2bhJsd4JbxgZa" %}
[High-Bandwidth Proxies](/products/proxies/high-bandwidth-proxies)
{% endcontent-ref %}


# IP Replacement

Learn how to replace IPs in your dashboard. Swap IPs while keeping the same setup or modify countries and quantities.

You can modify your IP configuration for the following products:

* ISP Proxies
* Datacenter Per IP Proxies
* Dedicated Datacenter Proxies

#### Replace IPs

Use this option when you need new IPs **without** changing countries or quantity.

1. Go to your [dashboard](https://dashboard.oxylabs.io/)
2. See the left-side menu, click **My Products**
3. Select your product
4. Click **Replace IPs**
5. Review and confirm your replacement

#### Change IP Setup

Use this option when you need to **modify countries, add more IPs, or reduce your IP count**.

1. Go to your [dashboard](https://dashboard.oxylabs.io/)
2. See the left-side menu, click **My Products**
3. Select your product
4. Click **Change IP Setup**
5. Select your desired countries and IP quantity, confirm your changes.&#x20;

<figure><img src="/files/3B8yTAWl24kbwhafqR9Q" alt=""><figcaption></figcaption></figure>


# Residential Proxies

Find out everything about Oxylabs Residential Proxies, code examples, location targeting parameters, and troubleshooting resources.

[**Residential Proxies**](https://oxylabs.io/products/residential-proxy-pool) contain real IP addresses provided by Internet Service Providers (ISPs). These IP addresses are attached to physical devices across the globe at a country or city level. Therefore, it is easy to replicate human behaviour and avoid blocks using this type of proxy.

Oxylabs Residential Proxies are fully equipped, rotate automatically, and are easy to set up. Find everything about Residential and Rotating ISP Proxies integration in this documentation, and to begin with, get into the [**Getting Started**](/products/proxies/residential-proxies/getting-started) part. &#x20;

If you need any assistance, feel free to contact us at [**support@oxylabs.io**](mailto:support@oxylabs.io) or via the 24/7 live chat.


# Getting Started

Start using Residential Proxies. Learn to authenticate, send requests, verify IPs, and apply basic location or session targeting.

Make a request to `https://ip.oxylabs.io/location` using a residential proxy from a random location through our [**backconnect entry**](/products/proxies/residential-proxies/making-requests). Replace `USERNAME` and `PASSWORD` with your proxy user credentials. Keep in mind that each request returns a new IP address as Oxylabs Residential Proxies rotate automatically.

{% hint style="info" %}
Use [**ip.oxylabs.io/location**](https://ip.oxylabs.io/location) to check the parameters of your IPs—this domain delivers information from four geolocation databases: MaxMind, IP2Location, DB-IP, and IPinfo.io. The parameters include IP address, provider, country, city, ZIP code, ASN, organization name, and time zone.
{% endhint %}

```bash
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% hint style="info" %}
Our Residential Proxies support `HTTP`, `HTTPS`, `HTTP3`, and `SOCKS5` protocols. You can learn more about using them [**here**](/products/proxies/residential-proxies/protocols).&#x20;
{% endhint %}

Now make a request using a proxy from France. All you need to do is add `cc-FR` to your username string. Below is an example in cURL, while here you can find [code samples in other languages](/products/proxies/residential-proxies/location-settings/select-country).

```bash
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-FR:PASSWORD" https://ip.oxylabs.io/location
```

Here is another example of a request that goes through a proxy from London, United Kingdom. Adding `cc-GB-city-london` to the username string enables you to specify a city. Click [**here**](/products/proxies/residential-proxies/location-settings/select-city) to get more information on how to master city-level proxy targeting.

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-GB-city-london:PASSWORD" https://ip.oxylabs.io
```

If you need to keep the same proxy for more than one request, use a [**session control**](/products/proxies/residential-proxies/session-control)**.** Add `sessid-abc12345` to your username string, where `abc12345` can be any random string, and as long as you keep sending requests with this string (session ID), you will get the same proxy IP.

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-sessid-randomString123:PASSWORD" https://ip.oxylabs.io/location
```

Check out our [**integration tutorials**](/integrations/proxy-integrations) with the most popular 3rd party tools, such as [**ShadowRocket**](/integrations/proxy-integrations/residential-proxies-guides/shadowrocket), [**SwitchyOmega**](broken://pages/5n3xDX1TOYxpEzUUQt30) , or [**AdsPower**](/integrations/proxy-integrations/residential-proxies-guides/adspower).

You can also set up Residential Proxies using the [**Endpoint generator**](/products/proxies/residential-proxies/endpoint-generator).

Login to the [**dashboard**](https://dashboard.oxylabs.io/en/overview/RP), select Residential Proxies, and click on the Endpoint generator. Choose the parameters and get a list of endpoints to integrate our proxies with tools of your choice.

To find out your usage statistics, generated traffic, request count, and more, please login to the [**dashboard**](https://dashboard.oxylabs.io/en/). You can also add proxy users (sub-users) and track their statistics separately.

If you have any additional questions, please contact your account manager or our support team at [**support@oxylabs.io**](mailto:support@oxylabs.io).


# Making Requests

Learn to make requests with Residential Proxies. Master the basic query structure and use parameters for location targeting, city selection, and sessions.

#### **Basic query**

Basic query only requires passing `username` and `password`. No other parameters are needed. Such a query will result in the request being made from a random IP address (proxy). Every new request will use a different proxy.

#### Code examples

In this example, a query to `ip.oxylabs.io/location` is performed from a random IP:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
entry = ('http://customer-%s:%s@pr.oxylabs.io:7777' %
    (username, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
c
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

A single backconnect proxy (`pr.oxylabs.io:7777)`enables you to choose a specific country or city proxy via additional parameters in the username. This approach also supports session control. Here is a sample of credentials:

`customer-USERNAME-cc-US-city-CITY-sessid-abcde12345:PASSWORD`

`customer-USERNAME-cc-US-city-CITY-sessid-abcde12345-sesstime-5:PASSWORD`

Below is a breakdown of the structure:

<figure><img src="/files/czoxrmNL4TLs4TnhnDHZ" alt=""><figcaption></figcaption></figure>

#### Query parameters

| Parameter                                                   | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <mark style="background-color:green;">**`customer`**</mark> | Username                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| `cc`                                                        | Case insensitive country code in 2-letter [**3166-1 alpha-2 format**](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). For example, `DE` for Germany, `GB` for the United Kingdom, `TH` for Thailand. You can find more details on how to use country-specific proxies [**here**](/products/proxies/residential-proxies/location-settings/select-country).                                                                                                              |
| `city`                                                      | Case insensitive city name in English. This parameter must be accompanied by `cc` for better accuracy, for example, `cc-GB-city-london` for London, United Kingdom; `cc-DE-city-berlin` for Berlin, Germany. For a city with more than two words, replace space with `_`, for example, `city-st_petersburg` or `city-rio_de_janeiro`. Click [**here**](/products/proxies/residential-proxies/location-settings/select-city) for more information on city-level targeting. |
| `st`                                                        | Case insensitive US state name with us\_ in the beginning, for example, `us_california`, `us_illinois`. [**Click here** ](/products/proxies/residential-proxies/location-settings/select-state)for more information on state-level targeting.                                                                                                                                                                                                                             |
| `sessid`                                                    | Session ID to keep the same IP with upcoming queries. The session expires in 10 minutes. After that, a new IP address is assigned to that session ID. Random string, 0-9, and A-Z characters are supported.                                                                                                                                                                                                                                                               |
| `sesstime`                                                  | The session time parameter keeps the same IP for a certain period. The maximum session time is 30 minutes.                                                                                                                                                                                                                                                                                                                                                                |
| <mark style="background-color:green;">**`password`**</mark> | Password                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |

&#x20;    \- Mandatory parameter


# Entry Node for China

Learn how to use Residential Proxy entry nodes for China through HTTPS proxy configurations.

```
https://a81298871.com:8000 - Hong Kong
```

```
https://cnt9t1is.com:8000 - Beijing
```

We have configured entry nodes in Hong Kong and Beijing regions for better connectivity from China. Note that it is an HTTPS proxy node. All username parameters are identical to the regular entry node.

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x cnt9t1is.com:8000 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'cnt9t1is.com:8000';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
entry = ('http://customer-%s:%s@cnt9t1is.com:8000' %
    (username, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("cnt9t1is.com", 8000);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("cnt9t1is.com:8000");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
c
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('cnt9t1is.com', 8000, 'customer-USERNAME', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

Please note that some 3rd party tools currently do not work with Hong Kong and Beijing entry nodes. 3rd party tools that work with said entry nodes are:

1. [**Oxy Proxy Extension for Chrome**](/integrations/proxy-integrations/residential-proxies-guides/oxy-proxy-extension-for-chrome)
2. [**SwitchyOmega**](/integrations/proxy-integrations/residential-proxies-guides/switchyomega-1)
3. [**Shadowrocket**](/integrations/proxy-integrations/residential-proxies-guides/shadowrocket)

We are currently working on fixing the rest of the integrations on which HTTPS protocol will be supported.

If you are connecting to our residential network from China and still have issues with provided entry nodes, please get in touch at [**support@oxylabs.io**](mailto:support@oxylabs.io), and we will figure out a solution together.


# Agent Skills

Configure AI tools and coding assistants with official Agent Skills for Oxylabs Residential Proxies.

Oxylabs Agent Skills (`skills.md`) teach LLMs and AI coding assistants how to configure and interact with Oxylabs products.

Agent Skills for Oxylabs proxies will help your model generate accurate connection strings, handle entry nodes, and apply geo-targeting parameters without syntax or parameter hallucinations.

## Installation

### Claude Code (plugin marketplace)

Inside Claude Code, run the following commands:

```
/plugin marketplace add oxylabs/agent-skills
/plugin install oxylabs@oxylabs-agent-skills
```

This installs all 5 skills as a single plugin:

* [`skills/proxies`](https://github.com/oxylabs/agent-skills/blob/main/skills/proxies/SKILL.md)
* [`skills/web-unblocker`](https://github.com/oxylabs/agent-skills/blob/main/skills/web-unblocker/SKILL.md)
* [`skills/web-scraper-api`](https://github.com/oxylabs/agent-skills/blob/main/skills/web-scraper-api/SKILL.md)
* [`skills/headless-browser`](https://github.com/oxylabs/agent-skills/blob/main/skills/headless-browser/SKILL.md)
* [`skills/video-data`](https://github.com/oxylabs/agent-skills/blob/main/skills/video-data/SKILL.md)

To update skills, run this command:

```
/plugin marketplace update oxylabs-agent-skills
```

### Other agents (generic)

For other agents and custom environments, load the repository into your project workspace via the standard skills CLI:

```
npx skills add https://github.com/oxylabs/agent-skills.git
```

## Configuration

All Oxylabs Agent Skills authenticate via environment variables defined in a `.env` file. To use proxy skills, add these keys to your `.env` file:

| Variable          | Description                         |
| ----------------- | ----------------------------------- |
| `OXY_DC_USERNAME` | Your Oxylabs proxy user `username`. |
| `OXY_DC_PASSWORD` | Your Oxylabs proxy user `password`. |

## How to use

Once the skill is active in your workspace, you can prompt your AI assistant to build custom solutions using Oxylabs proxies.

* **Example 1:** "Write a Python script using `requests` to fetch `target-url.com` through Oxylabs Residential Proxies with `US` geo-targeting."
* **Example 2:** "Create a Node.js script using `axios` that rotates proxy sessions for every request using my Oxylabs credentials."

## Supported proxy networks

This skill applies to all following proxy types:

* [Residential Proxies](/products/proxies/residential-proxies)
* [Mobile Proxies](/products/proxies/mobile-proxies)
* [ISP Proxies](/products/proxies/isp-proxies)
* [Dedicated ISP Proxies (enterprise)](/products/proxies/dedicated-isp-proxies/enterprise)
* [Dedicated ISP Proxies (self-service)](/products/proxies/dedicated-isp-proxies/self-service)
* [Datacenter Proxies](/products/proxies/datacenter-proxies)
* [Dedicated Datacenter Proxies (enterprise)](/products/proxies/dedicated-datacenter-proxies/enterprise)
* [Dedicated Datacenter Proxies (self-service)](/products/proxies/dedicated-datacenter-proxies/self-service)

## More Oxylabs Agent Skills

Learn more about Agent Skills for other Oxylabs solutions:

* [Web Scraper API](/products/web-scraper-api/solutions-for-ai-workflows/agent-skills)
* [Web Unblocker](/products/web-unblocker/agent-skills)
* [Headless Browser](/products/headless-browser/ai-workflows/agent-skills)
* [Video Data](/products/proxies/high-bandwidth-proxies#agent-skills)


# Location Settings

Learn more about location settings for Residential Proxies. Here you'll find guides for location targeting from continents to specific cities and coordinates.

Oxylabs Residential proxy network covers 195 locations and offers country, city, state,  continent, ZIP code, coordinate-level, and ASN targeting.

You can find more information on selecting geo-location parameters in the pages listed below:

{% content-ref url="/pages/UPg2AOzHh8eTwZf0ZfxE" %}
[Country](/products/proxies/residential-proxies/location-settings/select-country)
{% endcontent-ref %}

{% content-ref url="/pages/SFkPGxvpqV8rBtKfCMo8" %}
[City](/products/proxies/residential-proxies/location-settings/select-city)
{% endcontent-ref %}

{% content-ref url="/pages/e93RpcKghZnkSC6ATFPI" %}
[State](/products/proxies/residential-proxies/location-settings/select-state)
{% endcontent-ref %}

{% content-ref url="/pages/GZqlA7kjGCjYeRz47eX0" %}
[Continent](/products/proxies/residential-proxies/location-settings/continent)
{% endcontent-ref %}

{% content-ref url="/pages/ReB4Ej6De1X1uPh5QrRB" %}
[ZIP/Postal code](/products/proxies/residential-proxies/location-settings/zip-postal-code)
{% endcontent-ref %}

{% content-ref url="/pages/BGICb0wPDN5ohTkd59in" %}
[Coordinates](/products/proxies/residential-proxies/location-settings/coordinates)
{% endcontent-ref %}

{% content-ref url="/pages/ATRXHGvVOBqV6HM3m3j4" %}
[ASN Targeting](/products/proxies/residential-proxies/location-settings/asn-targeting)
{% endcontent-ref %}

### Country, State, City Mapping

We use the [**MaxMind GeoIP2**](https://www.maxmind.com/en/geoip2-databases) database to assign our exit nodes `cc`, `st`, and `city` values. This database is updated weekly.

Some other public IP databases may show different locations. In cases where there can not be any location mismatches, please double-check if the location of the assigned proxy is the same on the IP database used by the target website.

If you have any additional questions, please contact your account manager or our support team at [**support@oxylabs.io**](mailto:support@oxylabs.io).


# Country

Use country-level targeting with Residential Proxies. Learn about parameters, country-specific entry nodes, and find the list of regional ports.

Adding a `cc` flag to the authorization header enables one to specify which country IP to use to process the request. The value of this parameter is a case insensitive country code in 2-letter [**3166-1 alpha-2 format**](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). For example, `DE` for Germany, `GB` for the United Kingdom, and `TH` for Thailand proxy. See the examples for more details.

Here are a few examples of `country` parameters:<br>

<table><thead><tr><th width="298">Country</th><th>Country parameter</th></tr></thead><tbody><tr><td>United States</td><td><code>cc-US</code></td></tr><tr><td>Italy</td><td><code>cc-IT</code></td></tr><tr><td>Thailand</td><td><code>cc-TH</code></td></tr><tr><td>Japan</td><td><code>cc-JP</code></td></tr><tr><td>Australia</td><td><code>cc-AU</code></td></tr><tr><td>Spain</td><td><code>cc-ES</code></td></tr></tbody></table>

#### Code example

In this example, a query to `ip.oxylabs.io/location` is performed from a random IP address from Germany:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
entry = ('http://customer-%s-cc-%s:%s@pr.oxylabs.io:7777' %
    (username, country, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME-cc-DE", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME-cc-DE", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME-cc-DE', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

***

## Country Specific Entry Nodes

Oxylabs residential network has coverage in almost every country in the world. **A random country-specific proxy entry point will return new IP with every new request.**

You do not need to pass any additional parameters, just `customer-username:password`. If you have whitelisted IPs, you do not need to pass login credentials. Country-specific ports do not support city-level results.

#### Code examples

In this example, a query to `ip.oxylabs.io/location` is performed from a random Turkish IP:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x tr-pr.oxylabs.io:30000 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'tr-pr.oxylabs.io:30000';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
entry = ('http://customer-%s:%s@tr-pr.oxylabs.io:30000' %
    (username, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("tr-pr.oxylabs.io", 30000);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("tr-pr.oxylabs.io:30000");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
#!/usr/bin/ruby

require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('tr-pr.oxylabs.io', 30000, 'customer-USERNAME', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

<details>

<summary>Available entry points</summary>

```
pr.oxylabs.io:7777
us-pr.oxylabs.io:10000
ca-pr.oxylabs.io:30000
gb-pr.oxylabs.io:20000
de-pr.oxylabs.io:30000
fr-pr.oxylabs.io:40000
es-pr.oxylabs.io:10000
it-pr.oxylabs.io:20000
se-pr.oxylabs.io:30000
gr-pr.oxylabs.io:40000
pt-pr.oxylabs.io:10000
nl-pr.oxylabs.io:20000
be-pr.oxylabs.io:30000
ru-pr.oxylabs.io:40000
ua-pr.oxylabs.io:10000
pl-pr.oxylabs.io:20000
il-pr.oxylabs.io:20000
tr-pr.oxylabs.io:30000
au-pr.oxylabs.io:40000
my-pr.oxylabs.io:10000
th-pr.oxylabs.io:20000
kr-pr.oxylabs.io:30000
jp-pr.oxylabs.io:40000
ph-pr.oxylabs.io:10000
sg-pr.oxylabs.io:20000
cn-pr.oxylabs.io:30000
hk-pr.oxylabs.io:40000
tw-pr.oxylabs.io:10000
in-pr.oxylabs.io:20000
pk-pr.oxylabs.io:30000
ir-pr.oxylabs.io:40000
id-pr.oxylabs.io:10000
az-pr.oxylabs.io:20000
kz-pr.oxylabs.io:30000
ae-pr.oxylabs.io:40000
mx-pr.oxylabs.io:10000
br-pr.oxylabs.io:20000
ar-pr.oxylabs.io:30000
cl-pr.oxylabs.io:40000
pe-pr.oxylabs.io:10000
ec-pr.oxylabs.io:20000
co-pr.oxylabs.io:30000
za-pr.oxylabs.io:40000
eg-pr.oxylabs.io:10000
sa-pr.oxylabs.io:44000
dk-pr.oxylabs.io:19000
ao-pr.oxylabs.io:40000
cm-pr.oxylabs.io:41000
cf-pr.oxylabs.io:42000
td-pr.oxylabs.io:43000
bj-pr.oxylabs.io:44000
et-pr.oxylabs.io:45000
dj-pr.oxylabs.io:46000
gm-pr.oxylabs.io:47000
gh-pr.oxylabs.io:48000
ci-pr.oxylabs.io:49000
ke-pr.oxylabs.io:10000
lr-pr.oxylabs.io:11000
mg-pr.oxylabs.io:12000
ml-pr.oxylabs.io:13000
mr-pr.oxylabs.io:14000
mu-pr.oxylabs.io:15000
ma-pr.oxylabs.io:16000
mz-pr.oxylabs.io:17000
ng-pr.oxylabs.io:18000
sn-pr.oxylabs.io:19000
sc-pr.oxylabs.io:20000
zw-pr.oxylabs.io:21000
ss-pr.oxylabs.io:22000
sd-pr.oxylabs.io:23000
tg-pr.oxylabs.io:24000
tn-pr.oxylabs.io:25000
ug-pr.oxylabs.io:26000
zm-pr.oxylabs.io:27000
af-pr.oxylabs.io:28000
bh-pr.oxylabs.io:29000
bd-pr.oxylabs.io:30000
am-pr.oxylabs.io:31000
bt-pr.oxylabs.io:32000
mm-pr.oxylabs.io:33000
kh-pr.oxylabs.io:34000
ge-pr.oxylabs.io:36000
iq-pr.oxylabs.io:37000
jo-pr.oxylabs.io:38000
lb-pr.oxylabs.io:39000
mv-pr.oxylabs.io:40000
mn-pr.oxylabs.io:41000
om-pr.oxylabs.io:42000
qa-pr.oxylabs.io:43000
sa-pr.oxylabs.io:44000
vn-pr.oxylabs.io:45000
tm-pr.oxylabs.io:46000
uz-pr.oxylabs.io:47000
ye-pr.oxylabs.io:48000
al-pr.oxylabs.io:49000
ad-pr.oxylabs.io:10000
at-pr.oxylabs.io:11000
ba-pr.oxylabs.io:13000
bg-pr.oxylabs.io:14000
by-pr.oxylabs.io:15000
hr-pr.oxylabs.io:16000
cy-pr.oxylabs.io:35000
cz-pr.oxylabs.io:18000
dk-pr.oxylabs.io:19000
ee-pr.oxylabs.io:20000
fi-pr.oxylabs.io:21000
hu-pr.oxylabs.io:23000
is-pr.oxylabs.io:24000
ie-pr.oxylabs.io:25000
lv-pr.oxylabs.io:26000
li-pr.oxylabs.io:27000
lt-pr.oxylabs.io:28000
lu-pr.oxylabs.io:29000
mt-pr.oxylabs.io:30000
mc-pr.oxylabs.io:31000
md-pr.oxylabs.io:32000
me-pr.oxylabs.io:33000
no-pr.oxylabs.io:34000
ro-pr.oxylabs.io:35000
rs-pr.oxylabs.io:36000
sk-pr.oxylabs.io:37000
si-pr.oxylabs.io:38000
ch-pr.oxylabs.io:39000
mk-pr.oxylabs.io:40000
bs-pr.oxylabs.io:41000
bz-pr.oxylabs.io:42000
vg-pr.oxylabs.io:43000
cr-pr.oxylabs.io:44000
cu-pr.oxylabs.io:45000
dm-pr.oxylabs.io:46000
ht-pr.oxylabs.io:47000
hn-pr.oxylabs.io:48000
jm-pr.oxylabs.io:49000
aw-pr.oxylabs.io:10000
pa-pr.oxylabs.io:11000
pr-pr.oxylabs.io:12000
tt-pr.oxylabs.io:13000
fj-pr.oxylabs.io:14000
nz-pr.oxylabs.io:15000
bo-pr.oxylabs.io:16000
py-pr.oxylabs.io:17000
uy-pr.oxylabs.io:18000
ve-pr.oxylabs.io:19000
kw-pr.oxylabs.io:20000
eu-pr.oxylabs.io:10000
do-pr.oxylabs.io:21000
la-pr.oxylabs.io:22000
tz-pr.oxylabs.io:23000
lk-pr.oxylabs.io:24000
bn-pr.oxylabs.io:25000
np-pr.oxylabs.io:26000
kw-pr.oxylabs.io:20000
gt-pr.oxylabs.io:27000
dz-pr.oxylabs.io:29000
na-pr.oxylabs.io:28000
```

</details>

Please see the dashboard for entry point information. Download a complete list of random entry points or find them in the table below.

{% file src="/files/ExSDCOrjD9hWTy6R0Dm5" %}

#### Table of entry points&#x20;

| <p><strong>Random</strong><br>pr.oxylabs.io:7777</p>             | <p><strong>USA</strong><br>us-pr.oxylabs.io:10000</p>                      | <p><strong>Canada</strong><br>ca-pr.oxylabs.io:30000</p>                 |
| ---------------------------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| <p><strong>Great Britain</strong><br>gb-pr.oxylabs.io:20000</p>  | <p><strong>Germany</strong><br>de-pr.oxylabs.io:30000</p>                  | <p><strong>France</strong><br>fr-pr.oxylabs.io:40000</p>                 |
| <p><strong>Spain</strong><br>es-pr.oxylabs.io:10000</p>          | <p><strong>Italy</strong><br>it-pr.oxylabs.io:20000</p>                    | <p><strong>Sweden</strong><br>se-pr.oxylabs.io:30000</p>                 |
| <p><strong>Greece</strong><br>gr-pr.oxylabs.io:40000</p>         | <p><strong>Portugal</strong><br>pt-pr.oxylabs.io:10000</p>                 | <p><strong>Netherlands</strong><br>nl-pr.oxylabs.io:20000</p>            |
| <p><strong>Belgium</strong><br>be-pr.oxylabs.io:30000</p>        | <p><strong>Russia</strong><br>ru-pr.oxylabs.io:40000</p>                   | <p><strong>Ukraine</strong><br>ua-pr.oxylabs.io:10000</p>                |
| <p><strong>Poland</strong><br>pl-pr.oxylabs.io:20000</p>         | <p><strong>Israel</strong><br>il-pr.oxylabs.io:20000</p>                   | <p><strong>Turkey</strong><br>tr-pr.oxylabs.io:30000</p>                 |
| <p><strong>Australia</strong><br>au-pr.oxylabs.io:40000</p>      | <p><strong>Malaysia</strong><br>my-pr.oxylabs.io:10000</p>                 | <p><strong>Thailand</strong><br>th-pr.oxylabs.io:20000</p>               |
| <p><strong>South Korea</strong><br>kr-pr.oxylabs.io:30000</p>    | <p><strong>Japan</strong><br>jp-pr.oxylabs.io:40000</p>                    | <p><strong>Philippines</strong><br>ph-pr.oxylabs.io:10000</p>            |
| <p><strong>Singapore</strong><br>sg-pr.oxylabs.io:20000</p>      | <p><strong>China</strong><br>cn-pr.oxylabs.io:30000</p>                    | <p><strong>Hong Kong</strong><br>hk-pr.oxylabs.io:40000</p>              |
| <p><strong>Taiwan</strong><br>tw-pr.oxylabs.io:10000</p>         | <p><strong>India</strong><br>in-pr.oxylabs.io:20000</p>                    | <p><strong>Pakistan</strong><br>pk-pr.oxylabs.io:30000</p>               |
| <p><strong>Iran</strong><br>ir-pr.oxylabs.io:40000</p>           | <p><strong>Indonesia</strong><br>id-pr.oxylabs.io:10000</p>                | <p><strong>Azerbaijan</strong><br>az-pr.oxylabs.io:20000</p>             |
| <p><strong>Kazakhstan</strong><br>kz-pr.oxylabs.io:30000</p>     | <p><strong>UAE</strong><br>ae-pr.oxylabs.io:40000</p>                      | <p><strong>Mexico</strong><br>mx-pr.oxylabs.io:10000</p>                 |
| <p><strong>Brazil</strong><br>br-pr.oxylabs.io:20000</p>         | <p><strong>Argentina</strong><br>ar-pr.oxylabs.io:30000</p>                | <p><strong>Chile</strong><br>cl-pr.oxylabs.io:40000</p>                  |
| <p><strong>Peru</strong><br>pe-pr.oxylabs.io:10000</p>           | <p><strong>Ecuador</strong><br>ec-pr.oxylabs.io:20000</p>                  | <p><strong>Colombia</strong><br>co-pr.oxylabs.io:30000</p>               |
| <p>​​<strong>South Africa</strong><br>za-pr.oxylabs.io:40000</p> | <p><strong>Egypt</strong><br>eg-pr.oxylabs.io:10000</p>                    | <p><strong>Angola</strong><br>ao-pr.oxylabs.io:40000</p>                 |
| <p><strong>Cameroon</strong><br>cm-pr.oxylabs.io:41000</p>       | <p><strong>Central African Republic</strong><br>cf-pr.oxylabs.io:42000</p> | <p><strong>Chad</strong><br>td-pr.oxylabs.io:43000</p>                   |
| <p><strong>Benin</strong><br>bj-pr.oxylabs.io:44000</p>          | <p><strong>Ethiopia</strong><br>et-pr.oxylabs.io:45000</p>                 | <p><strong>Djibouti</strong><br>dj-pr.oxylabs.io:46000</p>               |
| <p><strong>Gambia</strong><br>gm-pr.oxylabs.io:47000</p>         | <p><strong>Ghana</strong><br>gh-pr.oxylabs.io:48000</p>                    | <p><strong>Côte d'Ivoire</strong><br>ci-pr.oxylabs.io:49000</p>          |
| <p><strong>Kenya</strong><br>ke-pr.oxylabs.io:10000</p>          | <p><strong>Liberia</strong><br>lr-pr.oxylabs.io:11000</p>                  | <p><strong>Madagascar</strong><br>mg-pr.oxylabs.io:12000</p>             |
| <p><strong>Mali</strong><br>ml-pr.oxylabs.io:13000</p>           | <p><strong>Mauritania</strong><br>mr-pr.oxylabs.io:14000</p>               | <p><strong>Mauritius</strong><br>mu-pr.oxylabs.io:15000</p>              |
| <p><strong>Morocco</strong><br>ma-pr.oxylabs.io:16000</p>        | <p><strong>Mozambique</strong><br>mz-pr.oxylabs.io:17000</p>               | <p><strong>Nigeria</strong><br>ng-pr.oxylabs.io:18000</p>                |
| <p><strong>Senegal</strong><br>sn-pr.oxylabs.io:19000</p>        | <p><strong>Seychelles</strong><br>sc-pr.oxylabs.io:20000</p>               | <p><strong>Zimbabwe</strong><br>zw-pr.oxylabs.io:21000</p>               |
| <p><strong>South Sudan</strong><br>ss-pr.oxylabs.io:22000</p>    | <p><strong>Sudan</strong><br>sd-pr.oxylabs.io:23000</p>                    | <p><strong>Togo</strong><br>tg-pr.oxylabs.io:24000</p>                   |
| <p><strong>Tunisia</strong><br>tn-pr.oxylabs.io:25000</p>        | <p><strong>Uganda</strong><br>ug-pr.oxylabs.io:26000</p>                   | <p><strong>Zambia</strong><br>zm-pr.oxylabs.io:27000</p>                 |
| <p><strong>Afghanistan</strong><br>af-pr.oxylabs.io:28000</p>    | <p><strong>Bahrain</strong><br>bh-pr.oxylabs.io:29000</p>                  | <p><strong>Bangladesh</strong><br>bd-pr.oxylabs.io:30000</p>             |
| <p><strong>Armenia</strong><br>am-pr.oxylabs.io:31000</p>        | <p><strong>Bhutan</strong><br>bt-pr.oxylabs.io:32000</p>                   | <p><strong>Myanmar</strong><br>mm\_pr.oxylabs.io:33000</p>               |
| <p><strong>Cambodia</strong><br>kh-pr.oxylabs.io:34000</p>       | <p><strong>Georgia</strong><br>ge-pr.oxylabs.io:36000</p>                  | <p><strong>Iraq</strong><br>iq-pr.oxylabs.io:37000</p>                   |
| <p><strong>Jordan</strong><br>jo-pr.oxylabs.io:38000</p>         | <p><strong>Lebanon</strong><br>lb-pr.oxylabs.io:39000</p>                  | <p><strong>Maldives</strong><br>mv-pr.oxylabs.io:40000</p>               |
| <p><strong>Mongolia</strong><br>mn-pr.oxylabs.io:41000</p>       | <p><strong>Oman</strong><br>om-pr.oxylabs.io:42000</p>                     | <p><strong>Qatar</strong></p><p>qa-pr.oxylabs.io:43000</p>               |
| <p><strong>Saudi Arabia</strong><br>sa-pr.oxylabs.io:44000</p>   | <p><strong>Vietnam</strong><br>vn-pr.oxylabs.io:45000</p>                  | <p><strong>Turkmenistan</strong><br>tm-pr.oxylabs.io:46000</p>           |
| <p><strong>Uzbekistan</strong><br>uz-pr.oxylabs.io:47000</p>     | <p><strong>Yemen</strong><br>ye-pr.oxylabs.io:48000</p>                    | <p><strong>Albania</strong></p><p>al-pr.oxylabs.io:49000</p>             |
| <p><strong>Andorra</strong><br>ad-pr.oxylabs.io:10000</p>        | <p><strong>Austria</strong><br>at-pr.oxylabs.io:11000</p>                  | <p><strong>Bosnia and Herzegovina</strong><br>ba-pr.oxylabs.io:13000</p> |
| <p><strong>Bulgaria</strong><br>bg-pr.oxylabs.io:14000</p>       | <p><strong>Belarus</strong><br>by-pr.oxylabs.io:15000</p>                  | <p><strong>Croatia</strong><br>hr-pr.oxylabs.io:16000</p>                |
| <p><strong>Cyprus</strong><br>cy-pr.oxylabs.io:35000</p>         | <p><strong>Czech Republic</strong></p><p>cz-pr.oxylabs.io:18000</p>        | <p><strong>Denmark</strong><br>dk-pr.oxylabs.io:19000</p>                |
| <p><strong>Estonia</strong><br>ee-pr.oxylabs.io:20000</p>        | <p><strong>Finland</strong><br>fi-pr.oxylabs.io:21000</p>                  | <p><strong>Hungary</strong><br>hu-pr.oxylabs.io:23000</p>                |
| <p><strong>Iceland</strong><br>is-pr.oxylabs.io:24000</p>        | <p><strong>Ireland</strong><br>ie-pr.oxylabs.io:25000</p>                  | <p><strong>Latvia</strong><br>lv-pr.oxylabs.io:26000</p>                 |
| <p><strong>Liechtenstein</strong><br>li-pr.oxylabs.io:27000</p>  | <p><strong>Lithuania</strong><br>lt-pr.oxylabs.io:28000</p>                | <p><strong>Luxembourg</strong><br>lu-pr.oxylabs.io:29000</p>             |
| <p><strong>Malta</strong><br>mt-pr.oxylabs.io:30000</p>          | <p><strong>Monaco</strong><br>mc-pr.oxylabs.io:31000</p>                   | <p><strong>Moldova</strong><br>md-pr.oxylabs.io:32000</p>                |
| <p><strong>Montenegro</strong><br>me-pr.oxylabs.io:33000</p>     | <p><strong>Norway</strong><br>no-pr.oxylabs.io:34000</p>                   | <p><strong>Romania</strong><br>ro-pr.oxylabs.io:35000</p>                |
| <p><strong>Serbia</strong><br>rs-pr.oxylabs.io:36000</p>         | <p><strong>Slovakia</strong><br>sk-pr.oxylabs.io:37000</p>                 | <p><strong>Slovenia</strong><br>si-pr.oxylabs.io:38000</p>               |
| <p><strong>Switzerland</strong><br>ch-pr.oxylabs.io:39000</p>    | <p><strong>Macedonia</strong></p><p>mk-pr.oxylabs.io:40000</p>             | <p><strong>Bahamas</strong><br>bs-pr.oxylabs.io:41000</p>                |
| <p><strong>Belize</strong><br>bz-pr.oxylabs.io:42000</p>         | <p><strong>British Virgin Islands</strong><br>vg-pr.oxylabs.io:43000</p>   | <p><strong>Costa Rica</strong><br>cr-pr.oxylabs.io:44000</p>             |
| <p><strong>Cuba</strong><br>cu-pr.oxylabs.io:45000</p>           | <p><strong>Dominica</strong><br>dm-pr.oxylabs.io:46000</p>                 | <p><strong>Haiti</strong><br>ht-pr.oxylabs.io:47000</p>                  |
| <p><strong>Honduras</strong><br>hn-pr.oxylabs.io:48000</p>       | <p><strong>Jamaica</strong><br>jm-pr.oxylabs.io:49000</p>                  | <p><strong>Aruba</strong><br>aw-pr.oxylabs.io:10000</p>                  |
| <p><strong>Panama</strong><br>pa-pr.oxylabs.io:11000</p>         | <p><strong>Puerto Rico</strong><br>pr-pr.oxylabs.io:12000</p>              | <p><strong>Trinidad and Tobago</strong><br>tt-pr.oxylabs.io:13000</p>    |
| <p><strong>Fiji</strong><br>fj-pr.oxylabs.io:14000</p>           | <p><strong>New Zealand</strong><br>nz-pr.oxylabs.io:15000</p>              | <p><strong>Bolivia</strong><br>bo-pr.oxylabs.io:16000</p>                |
| <p><strong>Paraguay</strong><br>py-pr.oxylabs.io:17000</p>       | <p><strong>Uruguay</strong><br>uy-pr.oxylabs.io:18000</p>                  | <p><strong>Venezuela</strong><br>ve-pr.oxylabs.io:19000</p>              |
| <p><strong>European Union</strong><br>eu-pr.oxylabs.io:10000</p> | <p><strong>Dominican Republic</strong></p><p>do-pr.oxylabs.io:21000</p>    | <p><strong>Laos</strong></p><p>la-pr.oxylabs.io:22000</p>                |
| <p><strong>Tanzania</strong></p><p>tz-pr.oxylabs.io:23000</p>    | <p><strong>Sri Lanka</strong></p><p>lk-pr.oxylabs.io:24000</p>             | <p><strong>Brunei</strong></p><p>bn-pr.oxylabs.io:25000</p>              |
| <p><strong>Nepal</strong></p><p>np-pr.oxylabs.io:26000</p>       | <p><strong>Kuwait</strong></p><p>kw-pr.oxylabs.io:20000</p>                | <p><strong>Guatemala</strong></p><p>gt-pr.oxylabs.io:27000</p>           |
| <p><strong>Algeria</strong><br>dz-pr.oxylabs.io:29000</p>        | <p><strong>Namibia</strong><br>na-pr.oxylabs.io:28000</p>                  |                                                                          |


# City

Target specific cities in various countries with Residential Proxies. Learn to use the parameters to filter IPs by city and combine it with country-level targeting.

Add a `city` parameter to narrow down to city-level targeting. For example, `cc-DE-city-munich` means that a proxy from Munich, Germany, will handle the query.&#x20;

{% hint style="info" %}
We support every city in the world, yet due to the dynamic nature of Residential Proxies we do not guarantee we will have proxies there at specific moment in time. Most popular cities are well covered.
{% endhint %}

Here are a few examples of valid combinations of `cc` and `city` parameters:\
`cc-US-city-los_angeles`\
`cc-IT-city-rome`\
`cc-TH-city-bangkok`\
`cc-JP-city-tokyo`\
`cc-AU-city-sydney`\
`cc-ES-city-barcelona`

#### Code examples

In this example, a query to `ip.oxylabs.io/location` is performed from a random IP address from Munich, Germany:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-city-munich:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$city = 'munich';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country-city-$city:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
city = 'munich'
entry = ('http://customer-%s-cc-%s-city-%s:%s@pr.oxylabs.io:7777' %
    (username, country, city, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME-cc-DE-city-munich", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME-cc-DE-city-munich", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME-cc-DE-city-munich', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

Download the list of supported cities by clicking the file below:

{% file src="/files/628qdEipraPVtaUrEWuA" %}


# State

Target specific US states with Residential Proxies. Learn to use the parameters to filter IPs by state and combine it with city-level targeting.

To get a proxy from a specific US state, add the `st` flag to the authorization string. For example, `us_california`, `us_illinois`. Find the complete list of US states by clicking the file below:

{% file src="/files/EvsJRuHoN38IvMVSY0x2" %}

Here are a few examples of valid combinations of `state` parameters:

`st-us_california-city-los_angeles`\
`st-us_illinois-city-springfield`\
`st-us_michigan-city-detroit`\
`st-us_ohio-city-columbus`\
`st-us_maine-city-portland`\
`st-us_tennessee-city-memphis`

#### Code example

In this example, a query to `ip.oxylabs.io/location` is performed from a random IP address from California, USA:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-st-us_california:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$state = 'us_california';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-st-$state:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
state = 'us_california'
entry = ('http://customer-%s-st-%s:%s@pr.oxylabs.io:7777' %
    (username, state, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME-st-us_california", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME-st-us_california", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME-st-us_california', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

```

{% endtab %}
{% endtabs %}


# Continent

Filter Residential Proxies by continent. Learn to use the parameters and two-letter codes to target IPs from all regions.

To get a proxy from any of the seven continents, add the `cn-`  parameter and two-letter code to the authorization string.&#x20;

The list of continents and corresponding letter codes to chose from:\
\
`cn-AF` for Africa\
`cn-AN` for Antarctica\
`cn-AS` for Asia\
`cn-EU` for Europe\
`cn-NA` for North America\
`cn-OC` for Oceania\
`cn-SA` for South America

#### Code example

In this example, a query to `ip.oxylabs.io/location` is performed from a random IP address from Asia:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cn-AS:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$continent = 'AS';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cn-$continent:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
continent = 'AS'
entry = ('http://customer-%s-cn-%s:%s@pr.oxylabs.io:7777' %
    (username, continent, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME-cn-AS", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME-cn-AS", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME-cn-AS', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}


# ZIP/Postal code

Target Residential Proxies by ZIP code. Learn how to use the postalcode parameter alongside country codes for precise US location targeting.

To connect to a proxy using a ZIP code, add and specify the `postalcode` parameter with a **five-digit** ZIP code in the username. This parameter must be used combined with the country code parameter `cc` and a case-insensitive country code in 2-letter [**3166-1 alpha-2 format**](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2).&#x20;

Here is an example of the username:\
`customer-USERNAME-cc-US-postalcode-90210`

{% hint style="info" %}
Currently we support only US-based codes for ZIP code targeting.&#x20;
{% endhint %}

{% hint style="info" %}
Proxy location using ZIP code is being matched using [**MaxMind IP Geolocation**](https://www.maxmind.com/en/geoip-demo) database. There can be a mismatch between ZIP codes when checking IP addresses against other IP geo-location databases.
{% endhint %}

#### Code examples

In this example, a query to `ip.oxylabs.io/location` is performed from a proxy located in the United States with a ZIP code `90210`:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-US-postalcode-90210:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'US';
$postalcode = '90210';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country-postalcode-$postalcode:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'US'
postalcode = '90210'
entry = ('http://customer-%s-cc-%s-postalcode-%s:%s@pr.oxylabs.io:7777' %
    (username, country, postalcode, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME-cc-US-postalcode-90210", "PASS")
            .execute(Request.Get("https://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME-cc-US-postalcode-90210", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME-cc-US-postalcode-90210', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}


# Coordinates

Target Residential Proxies using specific coordinates and learn to configure the header.

Coordinates targeting allows to select IPs in a specific location based on provided latitude/longitude and radius parameters.

For using this feature, you have to specify a proxy header:

`X-Oxylabs-Geolocation` with value `Latitude:Longitude;Accuracy radius in miles`.

**For example**, if you need an IP from the Canadian pool within 10 miles of the coordinates of latitude 49.9235, longitude -97.081, your request will look like this:

```bash
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" --proxy-header "X-Oxylabs-Geolocation: 49.9235:-97.0811;10" https://ip.oxylabs.io/location
```

{% hint style="info" %}
If no IP is found within the provided coordinates and radius, you will receive `502` response code. See full list of response codes [**here**](/products/proxies/residential-proxies/additional-information).&#x20;
{% endhint %}

Please note that the `Accuracy radius in miles` value cannot be lower than 10 miles.

In order to widen your search zone, you should increase the radius value.


# ASN Targeting

Target Residential Proxies by ASN and select specific carriers. Learn about the requests and ASN targeting limitations.

Our Residential Proxies support targeting by ASN number which means that you can choose proxies from specific carriers. You have to enter the required ASN number in your request. Below is the example for T-Mobile, its ASN number in the US being 21928:

`customer-username-ASN-21928-sessid-abcde12345:password`

You can find ASN numbers [**here**](https://asnlookup.com/)**.**

{% hint style="warning" %}
Our ASN targeting is available to all users, though some ASNs are reserved for KYC-approved clients and may return a `403 Access denied: restricted ASN` error.\
If you need access to a restricted ASN, please contact Customer Support or your Account Manager regarding the KYC process.
{% endhint %}

Residential Proxies pool is dynamic in its nature so if there are no IPs under that specific ASN at that moment, you will receive a `502 Bad Gateway` response code. In such case, you should try another ASN number.

{% hint style="info" %}
You can use either Country or ASN parameter per each request. If both location parameters are used, only Country parameter will be applied.
{% endhint %}


# Session Control

Learn how to manage Residential Proxy sessions to keep the same IP address across multiple requests and control session length and IP rotation.

## Set up a default session

The `sessid` parameter lets you route several requests through the same IP address. Add `sessid` after your `username` with a randomly generated alphanumeric string, for example `sessid-abcd1234`.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FxR5NdybM3rjlbhAbPBZN%2Fsession-id.mp4?alt=media>" %}

For example, an initial request using `sessid-abcd1234` might be assigned the IP `1.1.1.1`. As long as you keep sending requests with the same session ID and that IP stays online, your queries continue to route through `1.1.1.1`. If you pause for 60 seconds or the IP goes offline, the system assigns a new one, so your next request with `sessid-abcd1234` is routed through a different IP, such as `1.1.1.2`.

By default, a session lasts 10 minutes, or ends after 60 seconds without any requests – whichever comes first. Once that happens, a new IP address is assigned automatically. To change the session length, please refer to [**Extend session duration**](#extend-session-duration).

#### **Credentials list example:**

Example represents a list of credentials that establish different sessions.

```
customer-USERNAME-cc-DE-sessid-qwert:PASSWORD
customer-USERNAME-cc-US-sessid-asdfg:PASSWORD
customer-USERNAME-cc-GB-sessid-zxcvb:PASSWORD
```

#### Code example

In this example, we are using German IP with `sessid-abcd1234` in the username with the first request. All following requests will keep the same German IP with further queries:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-sessid-abcd1234:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$session = mt_rand();
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country-sessid-$session:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
session = random.random()
entry = ('http://customer-%s-cc-%s-sessid-%s:%s@pr.oxylabs.io:7777' %
    (username, country, session, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import java.io.*;
import java.util.Random;
import org.apache.http.HttpHost;
import org.apache.http.auth.*;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

class Client {
    public static final String username = "USERNAME";
    public static final String password = "PASSWORD";
    public String session_id = Integer.toString(new Random().nextInt(Integer.MAX_VALUE));
    public CloseableHttpClient client;

    public Client(String country) {
        String login = "customer-"+username+(country!=null ? "-cc-"+country : "")
            +"-sessid-" + session_id;
        HttpHost entry_node = new HttpHost("pr.oxylabs.io:7777");
        CredentialsProvider credentials_provider = new BasicCredentialsProvider();
        credentials_provider.setCredentials(new AuthScope(entry_node),
            new UsernamePasswordCredentials(login, password));
        client = HttpClients.custom()
            .setConnectionManager(new BasicHttpClientConnectionManager())
            .setProxy(entry_node)
            .setDefaultCredentialsProvider(credentials_provider)
            .build();
    }

    public String request(String url) throws IOException {
        HttpGet request = new HttpGet(url);
        CloseableHttpResponse response = client.execute(request);
        try {
            return EntityUtils.toString(response.getEntity());
        } finally { response.close(); }
    }

    public void close() throws IOException { client.close(); }
}

public class Example {
    public static void main(String[] args) throws IOException {
        Client client = new Client("de");
        try {
            System.out.println(client.request("https://ip.oxylabs.io/location"));
        } finally { client.close(); }
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Client : WebClient
{
    public static string username = "USERNAME";
    public static string password = "PASSWORD";
    public string session_id = new Random().Next().ToString();

    public Client(string country_iso = null)
    {
        this.Proxy = new WebProxy("pr.oxylabs.io:7777");
        var login = "customer-"+username+(country_iso != null ? "-cc-"+country_iso : "")
            +"-sessid-"+session_id;
        this.Proxy.Credentials = new NetworkCredential(login, password);
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address) as HttpWebRequest;
        request.ConnectionGroupName = session_id;
        return request;
    }
}

class Example
{
    static void Main()
    {
        var client = new Client("de");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'
require 'net/https'

entry_node = 'pr.oxylabs.io'
entry_port = '7777'
username = 'USERNAME'
password = 'PASSWORD'
session_id = Random.rand(1000000)

uri = URI.parse("https://ip.oxylabs.io/location")
headers = {
    'Accept-Encoding' => 'gzip'
}

proxy = Net::HTTP::Proxy(entry_node, entry_port, "#{username}-cc-DE-sessid-#{session_id}", password)
http = proxy.new(uri.host,uri.port)

if uri.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end

req = Net::HTTP::Get.new(uri.path, headers)

result = http.start do |con|
    con.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

## Extend session duration

The sesstime parameter is used together with sessid to keep a session running longer than the default 10 minutes or up to 60 seconds of inactivity (no requests).

{% hint style="success" %}
**Disclaimer:** You can use the `sesstime` parameter to **maintain the same IP for up to 1440 minutes** (24 hours). However, because the residential proxy pool is dynamic, your connection may end sooner. If that happens, start a session with a new session parameter.
{% endhint %}

{% hint style="warning" %}
**Note:** The session time parameter does not guarantee that all of your requests finish before the session ends. The session expires once the time limit is reached, even if some requests are still in progress.
{% endhint %}

#### **Credentials list example:**

Example represents a list of credentials that establish different sessions with different sessions time (minutes).

```
customer-USERNAME-cc-DE-sessid-qwert-sesstime-10:PASSWORD
customer-USERNAME-cc-US-sessid-asdfg-sesstime-20:PASSWORD
customer-USERNAME-cc-GB-sessid-zxcvb-sesstime-30:PASSWORD
```

#### Code example

We chose the same German IP as in the previous example, this time we are adding `sessid` string and `sesstime` parameter for 7 minutes:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-sessid-abcd1234-sesstime-7:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$session = mt_rand();
$sesstime = 7;
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country-sessid-$session-sesstime-$sesstime:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
session = random.random()
sesstime = 7
entry = ('http://customer-%s-cc-%s-sessid-%s-sesstime-%d:%s@pr.oxylabs.io:7777' %
    (username, country, city, session, sesstime, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import java.io.*;
import java.util.Random;
import org.apache.http.HttpHost;
import org.apache.http.auth.*;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

class Client {
    public static final String username = "USERNAME";
    public static final String password = "PASSWORD";
    public String session_id = Integer.toString(new Random().nextInt(Integer.MAX_VALUE));
    public String sesstime = "7";
    public CloseableHttpClient client;

    public Client(String country) {
        String login = "customer-"+username+(country_iso != null ? "-cc-"+country_iso : "")+"-sessid-"+session_id+"-sesstime-" +sesstime;
        HttpHost entry_node = new HttpHost("pr.oxylabs.io:7777");
        CredentialsProvider credentials_provider = new BasicCredentialsProvider();
        credentials_provider.setCredentials(new AuthScope(entry_node),
            new UsernamePasswordCredentials(login, password));
        client = HttpClients.custom()
            .setConnectionManager(new BasicHttpClientConnectionManager())
            .setProxy(entry_node)
            .setDefaultCredentialsProvider(credentials_provider)
            .build();
    }

    public String request(String url) throws IOException {
        HttpGet request = new HttpGet(url);
        CloseableHttpResponse response = client.execute(request);
        try {
            return EntityUtils.toString(response.getEntity());
        } finally { response.close(); }
    }

    public void close() throws IOException { client.close(); }
}

public class Example {
    public static void main(String[] args) throws IOException {
        Client client = new Client("de");
        try {
            System.out.println(client.request("https://ip.oxylabs.io/location"));
        } finally { client.close(); }
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Client : WebClient
{
    public static string username = "USERNAME";
    public static string password = "PASSWORD";
    public string session_id = new Random().Next().ToString();

    public Client(string country_iso = null)
    {
        this.Proxy = new WebProxy("pr.oxylabs.io:7777");
        var login = "customer-"+username+(country_iso != null ? "-cc-"+country_iso : "")
            +"-sessid-"+session_id;
        this.Proxy.Credentials = new NetworkCredential(login, password);
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address) as HttpWebRequest;
        request.ConnectionGroupName = session_id;
        return request;
    }
}

class Example
{
    static void Main()
    {
        var client = new Client("de");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'
require 'net/https'

entry_node = 'pr.oxylabs.io'
entry_port = '7777'
username = 'USERNAME'
password = 'PASSWORD'
session_id = Random.rand(1000000)
sesstime = 7

uri = URI.parse("https://ip.oxylabs.io/location")
headers = {
    'Accept-Encoding' => 'gzip'
}

proxy = Net::HTTP::Proxy(entry_node, entry_port, "#{username}-cc-DE-sessid-#{session_id}-sesstime-#{sesstime}", password)
http = proxy.new(uri.host,uri.port)

if uri.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end

req = Net::HTTP::Get.new(uri.path, headers)

result = http.start do |con|
    con.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

## Control session IP rotation

The `sessid_oneip` parameter is an alternative to `sessid` for cases where you must keep the exact same IP for the entire session.

With a regular `sessid`, if the assigned exit node goes offline before the session time expires, the system automatically assigns a new IP and your session continues. With `sessid_oneip`, the session is bound to a single exit node: once that IP is no longer available, instead of rotating to a new one, the request fails with an HTTP `502` response. At that point, start a new session with a fresh `sessid_oneip` value. `sessid_oneip` can be combined with `sesstime` in the same way as sessid.

{% hint style="info" %}
**Note:** `sessid_oneip` is an optional alternative to `sessid`. The default `sessid` behavior (automatic rotation to a new IP when the exit node expires) is unchanged.
{% endhint %}

#### Credentials list example:

The following credentials each establish a separate single-IP session, with a different country and session time:

```
customer-USERNAME-cc-DE-sessid_oneip-qwert-sesstime-10:PASSWORD
customer-USERNAME-cc-US-sessid_oneip-asdfg-sesstime-20:PASSWORD
customer-USERNAME-cc-GB-sessid_oneip-zxcvb-sesstime-30:PASSWORD
```

#### Code example

This example uses a German (`DE`) IP with `sessid_oneip-qwert` and a `sesstime` of 10 minutes. The IP stays fixed for the session; if it becomes unavailable, the request returns HTTP `502` instead of rotating:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-sessid_oneip-qwert-sesstime-10:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}
{% endtabs %}

To use another language, take any `sessid` sample from the sections above and replace `sessid` with `sessid_oneip` in the login string.


# Sticky Proxy Entry Nodes

Find out how to set up a random or country-specific sticky proxy entry point to keep the same Residential Proxy IP for 10 minutes.

The country-specific sticky proxy entry point will return the same IP with every new request while you use the same port. IP stickiness works for up to 10 minutes. After that, the IP is replaced with a new one.

You do not need to pass any additional parameters, just `customer-username:password`. If you have whitelisted IPs, you do not need to pass login credentials. Country-specific ports do not support city-level results.

Please see the [**dashboard**](https://dashboard.oxylabs.io/en/) for entry point information. Download a complete list of sticky entry points or see them in the table below.

{% file src="/files/9iaqY6oaoc8X7lW6q31e" %}

| <p>Random<br>pr.oxylabs.io:10000 - 49999</p>                      | <p>US<br>us-pr.oxylabs.io:10001 - 19999</p>                     | <p>Canada<br>ca-pr.oxylabs.io:30001 - 39999</p>                 |
| ----------------------------------------------------------------- | --------------------------------------------------------------- | --------------------------------------------------------------- |
| <p>Great Britain<br>gb-pr.oxylabs.io:20001 - 29999</p>            | <p>Germany<br>de-pr.oxylabs.io:30001 - 39999</p>                | <p>France<br>fr-pr.oxylabs.io:40001 - 49999</p>                 |
| <p>Spain<br>es-pr.oxylabs.io:10001 - 19999</p>                    | <p>Italy<br>it-pr.oxylabs.io:20001 - 29999</p>                  | <p>Sweden<br>se-pr.oxylabs.io:30001 - 39999</p>                 |
| <p>Greece<br>gr-pr.oxylabs.io:40001 - 49999</p>                   | <p>Portugal<br>pt-pr.oxylabs.io:10001 - 19999</p>               | <p>Netherlands<br>nl-pr.oxylabs.io:20001 - 29999</p>            |
| <p>Belgium<br>be-pr.oxylabs.io:30001 - 39999</p>                  | <p>Russia<br>ru-pr.oxylabs.io:40001 - 49999</p>                 | <p>Ukraine<br>ua-pr.oxylabs.io:10001 - 19999</p>                |
| <p>Poland<br>pl-pr.oxylabs.io:20001 - 29999</p>                   | <p>Israel<br>il-pr.oxylabs.io:20001 - 29999</p>                 | <p>Turkey<br>tr-pr.oxylabs.io:30001 - 39999</p>                 |
| <p>Australia<br>au-pr.oxylabs.io:40001 - 49999</p>                | <p>Malaysia<br>my-pr.oxylabs.io:10001 - 19999</p>               | <p>Thailand<br>th-pr.oxylabs.io:20001 - 29999</p>               |
| <p>South Korea<br>kr-pr.oxylabs.io:30001 - 39999</p>              | <p>Japan<br>jp-pr.oxylabs.io:40001 - 49999</p>                  | <p>Philippines<br>ph-pr.oxylabs.io:10001 - 19999</p>            |
| <p>Singapore<br>sg-pr.oxylabs.io:20001 - 29999</p>                | <p>China<br>cn-pr.oxylabs.io:30001 - 39999</p>                  | <p>Hong Kong<br>hk-pr.oxylabs.io:40001 - 49999</p>              |
| <p>Taiwan<br>tw-pr.oxylabs.io:10001 - 19999</p>                   | <p>India<br>in-pr.oxylabs.io:20001 - 29999</p>                  | <p>Pakistan<br>pk-pr.oxylabs.io:30001 - 39999</p>               |
| <p>Iran<br>ir-pr.oxylabs.io:40001 - 49999</p>                     | <p>Indonesia<br>id-pr.oxylabs.io:10001 - 19999</p>              | <p>Azerbaijan<br>az-pr.oxylabs.io:20001 - 29999</p>             |
| <p>Kazakhstan<br>kz-pr.oxylabs.io:30001 - 39999</p>               | <p>UAE<br>ae-pr.oxylabs.io:40001 - 49999</p>                    | <p>Mexico<br>mx-pr.oxylabs.io:10001 - 19999</p>                 |
| <p>Brazil<br>br-pr.oxylabs.io:20001 - 29999</p>                   | <p>Argentina<br>ar-pr.oxylabs.io:30001 - 39999</p>              | <p>Chile<br>cl-pr.oxylabs.io:40001 - 49999</p>                  |
| <p>Peru<br>pe-pr.oxylabs.io:10001 - 19999</p>                     | <p>Ecuador<br>ec-pr.oxylabs.io:20001 - 29999</p>                | <p>Colombia<br>co-pr.oxylabs.io:30001 - 39999</p>               |
| <p>South Africa<br>za-pr.oxylabs.io:40001 - 49999</p>             | <p>Egypt<br>eg-pr.oxylabs.io:10001 - 19999</p>                  | <p>Saudi Arabia<br>sa-pr.oxylabs.io:44001 - 44999</p>           |
| <p>Denmark<br>dk-pr.oxylabs.io:19001 - 19999</p>                  | <p>Mali<br>ml-pr.oxylabs.io:13001 - 13999</p>                   | <p>Cyprus<br>cy-pr.oxylabs.io:35001 - 35999</p>                 |
| <p>Honduras<br>hn-pr.oxylabs.io:48001 - 48999</p>                 | <p>Georgia<br>ge-pr.oxylabs.io:36001 - 36999</p>                | <p>Serbia<br>rs-pr.oxylabs.io:36001 - 36999</p>                 |
| <p>Costa Rica<br>cr-pr.oxylabs.io:44001 - 44999</p>               | <p>Malta<br>mt-pr.oxylabs.io:30001 - 30999</p>                  | <p>Haiti<br>ht-pr.oxylabs.io:47001 - 47999</p>                  |
| <p>Senegal<br>sn-pr.oxylabs.io:19001 - 19999</p>                  | <p>Slovenia<br>si-pr.oxylabs.io:38001 - 38999</p>               | <p>Cameroon<br>cm-pr.oxylabs.io:41001 - 41999</p>               |
| <p>Djibouti<br>dj-pr.oxylabs.io:46001 - 46999</p>                 | <p>Angola<br>ao-pr.oxylabs.io:40001 - 40999</p>                 | <p>Liberia<br>lr-pr.oxylabs.io:11001 - 11999</p>                |
| <p>Afghanistan<br>af-pr.oxylabs.io:28001 - 28999</p>              | <p>Bangladesh<br>bd-pr.oxylabs.io:30001 - 30999</p>             | <p>Bahamas<br>bs-pr.oxylabs.io:41001 - 41999</p>                |
| <p>Hungary<br>hu-pr.oxylabs.io:23001 - 23999</p>                  | <p>Slovakia<br>sk-pr.oxylabs.io:37001 - 37999</p>               | <p>Dominica<br>dm-pr.oxylabs.io:46001 - 46999</p>               |
| <p>Kenya<br>ke-pr.oxylabs.io:10001 - 10999</p>                    | <p>Bosnia and Herzegovina<br>ba-pr.oxylabs.io:13001 - 13999</p> | <p>Nigeria<br>ng-pr.oxylabs.io:18001 - 18999</p>                |
| <p>Qatar<br>qa-pr.oxylabs.io:43001 - 43999</p>                    | <p>Yemen<br>ye-pr.oxylabs.io:48001 - 48999</p>                  | <p>Belize<br>bz-pr.oxylabs.io:42001 - 42999</p>                 |
| <p>Chad<br>td-pr.oxylabs.io:43001 - 43999</p>                     | <p>Tunisia<br>tn-pr.oxylabs.io:25001 - 25999</p>                | <p>Zimbabwe<br>zw-pr.oxylabs.io:21001 - 21999</p>               |
| <p>Zambia<br>zm-pr.oxylabs.io:27001 - 27999</p>                   | <p>Bahrain<br>bh-pr.oxylabs.io:29001 - 29999</p>                | <p>Austria<br>at-pr.oxylabs.io:11001 - 11999</p>                |
| <p>Ireland<br>ie-pr.oxylabs.io:25001 - 25999</p>                  | <p>Norway<br>no-pr.oxylabs.io:34001 - 34999</p>                 | <p>Ethiopia<br>et-pr.oxylabs.io:45001 - 45999</p>               |
| <p>Côte d'Ivoire<br>ci-pr.oxylabs.io:49001 - 49999</p>            | <p>Fiji<br>fj-pr.oxylabs.io:14001 - 14999</p>                   | <p>South Sudan<br>ss-pr.oxylabs.io:22001 - 22999</p>            |
| <p>Jamaica<br>jm-pr.oxylabs.io:49001 - 49999</p>                  | <p>Belarus<br>by-pr.oxylabs.io:15001 - 15999</p>                | <p>Finland<br>fi-pr.oxylabs.io:21001 - 21999</p>                |
| <p>Monaco<br>mc-pr.oxylabs.io:31001 - 31999</p>                   | <p>New Zealand<br>nz-pr.oxylabs.io:15001 - 15999</p>            | <p>Turkmenistan<br>tm-pr.oxylabs.io:46001 - 46999</p>           |
| <p>Armenia<br>am-pr.oxylabs.io:31001 - 31999</p>                  | <p>Iceland<br>is-pr.oxylabs.io:24001 - 24999</p>                | <p>Mauritania<br>mr-pr.oxylabs.io:14001 - 14999</p>             |
| <p>Czech Republic<br>cz-pr.oxylabs.io:18001 - 18999</p>           | <p>Venezuela<br>ve-pr.oxylabs.io:19001 - 19999</p>              | <p>Lebanon<br>lb-pr.oxylabs.io:39001 - 39999</p>                |
| <p>Mongolia<br>mn-pr.oxylabs.io:41001 - 41999</p>                 | <p>Benin<br>bj-pr.oxylabs.io:44001 - 44999</p>                  | <p>Sudan<br>sd-pr.oxylabs.io:23001 - 23999</p>                  |
| <p>Jordan<br>jo-pr.oxylabs.io:38001 - 38999</p>                   | <p>Estonia<br>ee-pr.oxylabs.io:20001 - 20999</p>                | <p>Paraguay<br>py-pr.oxylabs.io:17001 - 17999</p>               |
| <p>Central African Republic<br>cf-pr.oxylabs.io:42001 - 42999</p> | <p>Cambodia<br>kh-pr.oxylabs.io:34001 - 34999</p>               | <p>Panama<br>pa-pr.oxylabs.io:10001 - 10999</p>                 |
| <p>Uruguay<br>uy-pr.oxylabs.io:18001 - 18999</p>                  | <p>Ghana<br>gh-pr.oxylabs.io:48001 - 48999</p>                  | <p>Uzbekistan<br>uz-pr.oxylabs.io:47001 - 47999</p>             |
| <p>Albania<br>al-pr.oxylabs.io:49001 - 49999</p>                  | <p>Morocco<br>ma-pr.oxylabs.io:16001 - 16999</p>                | <p>Bhutan<br>bt-pr.oxylabs.io:32001 - 32999</p>                 |
| <p>Mauritius<br>mu-pr.oxylabs.io:15001 - 15999</p>                | <p>Latvia<br>lv-pr.oxylabs.io:26001 - 26999</p>                 | <p>Madagascar<br>mg-pr.oxylabs.io:12001 - 12999</p>             |
| <p>Lithuania<br>lt-pr.oxylabs.io:28001 - 28999</p>                | <p>Moldova<br>md-pr.oxylabs.io:32001 - 32999</p>                | <p>Montenegro<br>me-pr.oxylabs.io:33001 - 33999</p>             |
| <p>Romania<br>ro-pr.oxylabs.io:35001 - 35999</p>                  | <p>Iraq<br>iq-pr.oxylabs.io:37001 - 37999</p>                   | <p>Gambia<br>gm-pr.oxylabs.io:47001 - 47999</p>                 |
| <p>Mozambique<br>mz-pr.oxylabs.io:17001 - 17999</p>               | <p>Croatia<br>hr-pr.oxylabs.io:16001 - 16999</p>                | <p>Puerto Rico<br>pr-pr.oxylabs.io:12001 - 12999</p>            |
| <p>Cuba<br>cu-pr.oxylabs.io:45001 - 45999</p>                     | <p>Aruba<br>aw-pr.oxylabs.io:10001 - 10999</p>                  | <p>Seychelles<br>sc-pr.oxylabs.io:20001 - 20999</p>             |
| <p>Macedonia<br>mk-pr.oxylabs.io:40001 - 40999</p>                | <p>Maldives<br>mv-pr.oxylabs.io:40001 - 40999</p>               | <p>Oman<br>om-pr.oxylabs.io:42001 - 42999</p>                   |
| <p>Liechtenstein<br>li-pr.oxylabs.io:27001 - 27999</p>            | <p>Switzerland<br>ch-pr.oxylabs.io:39001 - 39999</p>            | <p>Bolivia<br>bo-pr.oxylabs.io:16001 - 16999</p>                |
| <p>Uganda<br>ug-pr.oxylabs.io:26001 - 26999</p>                   | <p>Bulgaria<br>bg-pr.oxylabs.io:14001 - 14999</p>               | <p>Myanmar<br>mm-pr.oxylabs.io:33001 - 33999</p>                |
| <p>Andorra<br>ad-pr.oxylabs.io:10001 - 10999</p>                  | <p>Togo<br>tg-pr.oxylabs.io:24001 - 24999</p>                   | <p>British Virgin Islands<br>vg-pr.oxylabs.io:43001 - 43999</p> |
| <p>Trinidad and Tobago<br>tt-pr.oxylabs.io:13001 - 13999</p>      | <p>Luxembourg<br>lu-pr.oxylabs.io:29001 - 29999</p>             | <p>​European Union</p><p>eu-pr.oxylabs.io:10001 - 29999</p>     |

#### Code examples

In this example, we run a query from a Turkish IP to `ip.oxylabs.io`. The same IP will stay for up to 10 minutes. We have chosen port 30001. However, Turkey's sticky entry points cover ports from 30001 to 39999.

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x tr-pr.oxylabs.io:30001 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'tr-pr.oxylabs.io:30001';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
entry = ('http://customer-%s:%s@tr-pr.oxylabs.io:30001' %
    (username, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("tr-pr.oxylabs.io", 30001);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("tr-pr.oxylabs.io:30001");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('tr-pr.oxylabs.io', 30001, 'customer-USERNAME', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}


# Advanced Filters

Learn how to filter Residential Proxies by operating system (OS) or IP version using advanced parameters.

Advanced filters let you narrow down your Residential Proxy pool by the operating system (OS) or Internet Protocol (IP) version:

* [**Platform (OS)**](/products/proxies/residential-proxies/advanced-filters/platform-os) – Select proxies that originate from a specific OS (Windows, iOS, etc.)
* [**IP Version**](/products/proxies/residential-proxies/advanced-filters/ip-version) – Select proxies that use only IPv4 or IPv6.


# Platform (OS)

Use the platform parameter to select your residential proxy's OS and improve scraping success by matching TCP and HTTP fingerprints.

The platform parameter lets you select the **operating system (OS) of the residential proxy** for the Transmission Control Protocol (TCP) connection.

This can significantly **improve your scraping success rates** by ensuring your proxy and machine fingerprints match. For example, if your HTTP request emulates Google Chrome desktop but you are using an Android residential proxy, the target website may identify a fingerprint mismatch and handle such traffic.

{% hint style="success" %}
To **enable this feature**, contact your Account Manager (details available in the [Dashboard](https://dashboard.oxylabs.io/)). You may need to complete a quick [KYC](https://oxylabs.io/kyc-and-safety) procedure.
{% endhint %}

### Usage

Add the `platform` parameter to your username string to specify the platform. It works alongside other parameters. Available values are:

* `windows`
* `macos`
* `linux`
* `android`
* `ios`

For instance, to get a proxy IP that comes from a Windows platform, your proxy username string should be: `customer-USERNAME-platform-windows`. Here's a complete cURL example:

```bash
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-platform-windows:PASSWORD" https://ip.oxylabs.io/location
```

{% hint style="warning" %}
Residential Proxies are dynamic, so we cannot guarantee availability when combining the platform with specific locations (e.g., city, ZIP).
{% endhint %}


# IP Version

Learn how to filter Residential Proxies by their Internet Protocol version to receive only IPv4 or IPv6 proxies.

By default, our Residential Proxies include both IPv4 and IPv6 addresses. If needed, you can select the Internet Protocol (IP) version to **receive only IPv4 or IPv6 proxies**.

{% hint style="success" %}
To **enable this feature**, contact your Account Manager (details available in the [Dashboard](https://dashboard.oxylabs.io/)). You may need to complete a quick [KYC](https://oxylabs.io/kyc-and-safety) procedure.
{% endhint %}

### Usage

Add the `ipversion` parameter to your username string to specify the IP version. It works alongside other parameters.&#x20;

* `ipversion-4` selects proxies from the **IPv4** pool
* `ipversion-6` selects proxies from the **IPv6** pool

For example, if you want to receive only IPv6 proxies, your username string should be: `customer-USERNAME-ipversion-6`. Here's a complete cURL example:

```bash
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-ipversion-6:PASSWORD" https://ip.oxylabs.io/location
```

{% hint style="warning" %}
Residential Proxies are dynamic, so we cannot guarantee availability when combining the IP version with specific locations (e.g., city, ZIP).
{% endhint %}

If the target website does not support a specific IP version, our system will resolve the supported IP version where possible. For example, if you use the "IPv6 only" parameter with a website that only supports IPv4, the proxy may automatically resolve the target using IPv4 instead.

{% hint style="info" %}
Reach out to your Account Manager to **skip the automatic resolution** and restrict the IP version to the selected one.
{% endhint %}

### Error handling

If the target website does not support IPv6 you have disabled automatic resolution, you will receive a `522` error code. In that case, switch to IPv4 for the specific website or remove the `ipversion` parameter altogether.


# Protocols

Explore supported Residential Proxy protocols and learn how to configure HTTP, HTTPS, and SOCKS5 connections.

### HTTP

Our documentation includes code examples showcasing how to connect to the proxies using `HTTP` protocol. The protocol is supported by common libraries and third-party software.

### HTTPS

You can also use the fully encrypted `HTTP` connection using `HTTPS` protocol for an extra layer of security. For that, you have to add `https://` to your proxy entry point. For example: `https://pr.oxylabs.io:7777` (this also applies to [country-specific entry nodes](/products/proxies/residential-proxies/location-settings/select-country)).&#x20;

Please note that some libraries (or their older versions) and some 3rd party tools may not support `HTTPS` protocol, so double-check before making changes to your code.

### **HTTP/3**

`HTTP3` is supported via proxies that can handle `UDP` traffic, as it is based on `QUIC`, a UDP-based transport protocol.

Standard `HTTP`/`HTTPS` proxy endpoints are not compatible with `HTTP3`, so to proxy requests, you need to use a `SOCKS5` proxy with `UDP` traffic support, available through the following dedicated endpoint:

```
socks.pr.oxylabs.io:7777
```

Most common tools do not natively support `HTTP3` over `SOCKS5` with `UDP`, so custom implementations may be required, such as our custom HTTP/3 [Go](https://github.com/oxylabs/gohttp3viaSOCKS5UDP), [C#](https://github.com/oxylabs/csharphttp3viaSOCKS5UDP), and [Java](https://github.com/oxylabs/javahttp3viaSOCKS5UDP) solution repositories on GitHub.

{% hint style="info" %}
**Note:** Make sure your firewall allows UDP traffic on the required ports, as many ports block UDP by default
{% endhint %}

### **SOCKS5**&#x20;

{% hint style="info" %}
`SOCKS5` `UDP` connection is now available in beta. Contact your Account Manager or Customer Success team to enable testing.
{% endhint %}

Oxylabs Residential Proxies `SOCKS5` protocol does not work with Chrome, so we suggest using Firefox instead.

Our Residential Proxies support only `TCP` connection at the moment. \
For using `SOCKS5` protocol, you have to add `socks5h` in your request, for example:

```bash
curl -x socks5h://pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" ip.oxylabs.io/location
```

Please note that at the moment, `SOCKS5` protocol does not support country specific entry nodes. You can target specific locations by adding [**additional parameters**](/products/proxies/residential-proxies/making-requests) in your username. Here is a sample of targeting France:

```bash
curl -x socks5h://pr.oxylabs.io:7777 -U "customer-USERNAME-cc-FR:PASSWORD" ip.oxylabs.io/location
```

{% hint style="info" %}
Note that some websites may identify a proxy IP when using the`SOCKS5` protocol. We highly suggest switching to an alternative protocol in such instances.&#x20;
{% endhint %}

### Ports of proxies

The default configuration of proxy ports includes `80` and `443`, which are standard ports designed to accommodate the `HTTP` and `HTTPS` protocols, as outlined in the table below. To access other ports, it is necessary to undergo compliance verification, please contact our [**support**](mailto:support@oxylabs.io).

| Protocol | Port |
| -------- | ---- |
| `HTTP`   | 80   |
| `HTTPS`  | 443  |


# Whitelisting IPs

Learn how to create or edit an IP whitelist for your Residential Proxies.

IP whitelisting allows you to access our Residential Proxy pool by simply connecting via whitelisted IPs.&#x20;

{% hint style="info" %}
You can only add IPs that are in IPv4 format (xx.xx.xx.xx). Make sure that the IP you are adding is yours and you are **not using a Proxy or VPN service** at the time.
{% endhint %}

#### Create an IP whitelist

To whitelist IP addresses log in to the [**dashboard**](https://dashboard.oxylabs.io/), on the left hand side select **Residential Proxies** → **Whitelist**, click on **Edit whitelist**. Enter **up to 10 IPs** in text format and click Submit.

{% hint style="info" %}
If it’s important to distinguish traffic statistics among proxy users, we recommend not using the whitelisted IPs functionality, especially when the same public IP might be shared among service users (teams, departments, etc.).&#x20;

**Note:** If using a browser or headless browser, it will attempt to use the proxy without regular auth and will only send auth if it receives a `407`.
{% endhint %}

If you want to remove or update the list, edit it as a text document and click **Submit**. If you need more IPs, please get in touch with our customer support team at [**support@oxylabs.io**](mailto:support@oxylabs.io) or via the 24/7 live chat on our [**website**](https://oxylabs.io/) or your Oxylabs dashboard. IP whitelisting allows you to access our Residential Proxy pool by simply connecting via whitelisted IPs.


# Requests with Whitelisted IPs

Find out how to make requests with Residential Proxies when you've whitelisted your IPs.

With Whitelisted IPs, you can access Oxylabs Residential Proxies **without needing to provide a `username` and `password`**. By whitelisting your IP address, you can specify all your proxy parameters **directly in the subdomain.**&#x20;

If you add an IP to the whitelist, you should connect using **either the whitelisted IP or credentials**, but not both, as doing so can lead to unexpected behavior.

#### Code example&#x20;

Here's an example code targeting New York City with a given session ID:&#x20;

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x https://cc-us-city-new_york-sessid-test123.bc.pr.oxylabs.io:7777 https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$session_id = 'test123';  // Your session ID
$city = 'new_york';  // The city you want to target
$proxy = "cc-us-city-$city-sessid-$session_id.bc.pr.oxylabs.io:7777";
$query = curl_init('https://ip.oxylabs.io/location');

curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
$output = curl_exec($query);
curl_close($query);

if ($output)
    echo $output;
?>

```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request

session_id = 'test123'  # Your session ID
city = 'new_york'  # The city you want to target
proxy = 'cc-us-city-%s-sessid-%s.bc.pr.oxylabs.io:7777' % (city, session_id)

query = urllib.request.ProxyHandler({
    'http': proxy,
    'https': proxy,
})

execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())

```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("cc-us-city-new_york-sessid-test123.bc.pr.oxylabs.io", 7777);

        String query = Executor.newInstance()
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        
        System.out.println(query);
    }
}

```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        
        client.Proxy = new WebProxy("cc-us-city-new_york-sessid-test123.bc.pr.oxylabs.io:7777");

        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}

```

{% endtab %}

{% tab title="Go" %}

```ruby
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
)

func main() {
	proxyURL, _ := url.Parse("https://cc-us-city-new_york-sessid-test123.bc.pr.oxylabs.io:7777")
	client := &http.Client{Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)}}

	resp, err := client.Get("https://ip.oxylabs.io/location")
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	defer resp.Body.Close()

	body, _ := ioutil.ReadAll(resp.Body)
	fmt.Println(string(body))
}
```

{% endtab %}
{% endtabs %}

**Query parameters**

| Parameter    | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `cc`         | Case insensitive country code in 2-letter [**3166-1 alpha-2 format**](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). For example, `DE` for Germany, `GB` for the United Kingdom, `TH` for Thailand. You can find more details on how to use country-specific proxies [**here**](/products/proxies/residential-proxies/location-settings/select-country).                                                                                                                                  |
| `city`       | Case insensitive city name in English. This parameter must be accompanied by `cc` for better accuracy, for example, `cc-GB-city-london` for London, United Kingdom; `cc-DE-city-berlin` for Berlin, Germany. For a city with more than two words, replace space with `_`, for example, `city-st_petersburg` or `city-rio_de_janeiro`. Click [**here**](https://developers.oxylabs.io/proxies/residential-proxies/location-settings/select-city) for more information on city-level targeting. |
| `st`         | Case insensitive US state name with us\_ in the beginning, for example, `us_california`, `us_illinois`. [**Click here** ](https://developers.oxylabs.io/proxies/residential-proxies/location-settings/select-state)for more information on state-level targeting.                                                                                                                                                                                                                             |
| `cn`         | To get a proxy from any of the seven continents, add the `cn-`  parameter and two-letter code to the authorization string. Click here for more information on continent-level targeting                                                                                                                                                                                                                                                                                                       |
| `postalcode` | <p>To connect to a proxy using a ZIP code, add and specify the <code>postalcode</code> parameter with a <strong>five-digit</strong> ZIP code. This parameter must be used combined with the country code parameter <code>cc</code> and a case-insensitive country code in 2-letter <a href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2"><strong>3166-1 alpha-2 format</strong></a>. <br><a href="/pages/ReB4Ej6De1X1uPh5QrRB">Learn more here.</a></p>                                  |
| `ASN`        | You can choose proxies from specific carriers. You have to enter the required ASN number in your request. Learn more [**here**](/products/proxies/residential-proxies/location-settings/asn-targeting).                                                                                                                                                                                                                                                                                       |
| `sessid`     | Session ID to keep the same IP with upcoming queries. The session expires in 10 minutes. After that, a new IP address is assigned to that session ID. Random string, 0-9, and A-Z characters are supported.                                                                                                                                                                                                                                                                                   |
| `sesstime`   | The session time parameter keeps the same IP for a certain period. The maximum session time is 30 minutes.                                                                                                                                                                                                                                                                                                                                                                                    |


# Endpoint Generator

Simplify integration with the Endpoint Generator. Configure Residential Proxy locations, sessions, and authentication to export your lists.

The Endpoint Generator is built to help you integrate Residential Proxies effortlessly. Select location and session type parameters, and export the list of endpoints in CSV, JSON, or TXT formats. If you have already purchased Residential Proxies, you will find the Endpoint Generator by logging in to the [**dashboard**](https://dashboard.oxylabs.io/?route=/overview/RP/endpoint-generator).

Follow these steps to get Residential Proxies endpoints list:

{% stepper %}
{% step %}

### Select a Region

* Choose **Hong Kong** or **Beijing** if you are connecting from [**China**](/products/proxies/residential-proxies/making-requests/entry-node-for-china)
* **Global** for the rest of the world
  {% endstep %}

{% step %}

### Set the Output Format

Select the format in which you would like to receive your endpoints. Available formats include plain **endpoint:port** or with **HTTP**, **HTTPS**, or **SOCKS5** protocol prefix.
{% endstep %}

{% step %}

### Select the **Authentication Method**

* **User authentication** – to use this method, you need to create a proxy user. When you have one, select your proxy user’s username and enter a password.
* [**Whitelisted IPs**](/products/proxies/residential-proxies/whitelisting-ips) **–** this method does not require a username and password. We take your whitelisted IPs list automatically.

<figure><img src="/files/frSdwrFn4LiRYC06JrF5" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Select the Endpoint Type

* [**Backconnect entry**](/products/proxies/residential-proxies/making-requests) – adds additional parameters to your username. It supports country, state, and city targeting.
* [**Country entry**](/products/proxies/residential-proxies/location-settings/select-country#country-specific-entry-nodes) – requires no additional parameters in a username. It uses a country-specific entry node and supports country-level targeting.
  {% endstep %}

{% step %}

### Set the Location Settings

* If you have chosen the **backconnect entry** type, select the **country**, **state**, and **city**, or set specific values to **Any** to get a random location.
* If you have chosen the **country entry** type, select the **country** or set it to **Any** to get a random location.

Refer to the [location settings](/products/proxies/residential-proxies/location-settings) page to learn more.

<figure><img src="/files/twydY4m8OhgTKCsB2SX1" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Select the **Session Type**

* [**Sticky session**](/products/proxies/residential-proxies/session-control) – allows you to keep the same IP address for a specified duration.
  * If you have chosen the **backconnect entry,** you can specify the [**session duration**](/products/proxies/residential-proxies/session-control#session-time) that lasts for up to *1440* minutes.
  * If you have chosen the **country entry**, your [**session country node**](/products/proxies/residential-proxies/session-control/sticky-proxy-entry-nodes) will last up to *10* minutes.
* **Rotating session** – returns a new IP address with every request.
  {% endstep %}

{% step %}

### Export the endpoints list

Enter the number of endpoints you need and export your list in one of the suggested formats, or simply copy it to the clipboard.

<figure><img src="/files/TGLtYu12ROCuhYDvOLQo" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

That's it! You have successfully created a ready-to-use list of Residential Proxies endpoints!&#x20;


# Restricted Targets

Find out which targets are restricted when using our Residential Proxies.

Some websites are restricted on our Residential Proxy network to avoid abuse and unclear activities.

{% hint style="success" %}
**Some targets can be accessed after going through a short KYC procedure.** Get in touch with our [**Customer Support Team**](mailto:support@oxylabs.io) if your target falls under the mentioned groups to ensure you can access the target before purchasing.
{% endhint %}

**❗️The list includes but is not limited to targets such as:**

| Target category                          | Example                          |
| ---------------------------------------- | -------------------------------- |
| Entertainment & streaming                | Netflix, Spotify, Twitch, Disney |
| Banking and other financial institutions | PayPal, Bank of America, Binance |
| Government websites                      | usa.gov, canada.ca               |
| Gaming                                   | Playstation, Steam               |
| Ticketing                                | Ticketmaster, Eventbrite         |
| Mailing                                  | Outlook, Yahoo mail              |
| Ads                                      | Google Tag Manager, Doubleclick  |
| IP checking websites\*                   | ipinfo.info, 2ip.io              |

\*Please use ip.oxylabs.io ip.oxylabs.io/json or ip.oxylabs.io/location to check your IP address.

Get in touch with our customer support team at [**support@oxylabs.io**](mailto:support@oxylabs.io) or via the 24/7 live chat on our [**website**](https://oxylabs.io/).


# Response Codes

Learn about different response codes for Residential Proxies. Understand issues under the codes and resolve common status errors.

Errors originating from our infrastructure will include additional information in the `X-Error-Description` **response header**. This header provides details about the error and guidance on what to do next.

{% hint style="warning" %}
&#x20;If you receive an error from the targeted website, this header will not be included in the response. In such cases, please review your scraping setup and see if it helps resolving the issue.
{% endhint %}

If you encounter a response code not listed here, please reach out to Customer Success or your Account Manager for further assistance.

<table><thead><tr><th width="236.86328125">Response Code</th><th>Error Message</th><th>Description </th></tr></thead><tbody><tr><td><code>400</code></td><td><code>Bad Request</code></td><td>Could not parse the request. Please check if the request is formatted correctly.</td></tr><tr><td><code>400</code></td><td><code>Bad Request</code></td><td>SOCKS version unsupported. Please use SOCKS5 to make requests.</td></tr><tr><td><code>400</code></td><td><code>Bad Request</code></td><td>Unsupported parameters were used. Please contact support or your account manager if you have any questions.</td></tr><tr><td><code>400</code></td><td><code>Bad Request</code></td><td>Invalid HTTP request received. Please try again.</td></tr><tr><td><code>403</code></td><td><code>Access Denied</code></td><td>Restricted target. Please contact support or your account manager if you have any questions.</td></tr><tr><td><code>407</code></td><td><code>Access Denied</code></td><td>Access denied: user authentication failed. Please check your credentials and try again.</td></tr><tr><td><code>407</code></td><td><code>Access Denied</code></td><td>Access denied: traffic limit reached. Please contact support or your account manager if you have any questions.</td></tr><tr><td><code>500</code></td><td><code>Internal Server Error</code></td><td>Internal server error: we have encountered an internal error. Please try again.</td></tr><tr><td><code>502</code></td><td><code>Bad Response</code></td><td>Invalid HTTP response received during the request. Please try again.</td></tr><tr><td><code>502</code></td><td><code>Bad Response</code></td><td>Invalid response received during the request. Please try again.</td></tr><tr><td><code>502</code></td><td><code>Bad Gateway</code></td><td>Session failed. Please start a new session.</td></tr><tr><td><code>502</code></td><td><code>Bad Gateway</code></td><td>Exit node not found (session ended). Try using different filters (or start a new session).</td></tr><tr><td><code>502</code></td><td><code>Bad Gateway</code></td><td>We have encountered an error. Please try again.</td></tr><tr><td><code>502</code></td><td><code>Bad Gateway</code></td><td>Client disconnected. Please try again.</td></tr><tr><td><code>504</code></td><td><code>Timeout</code></td><td>Request timed out. Please try again.</td></tr><tr><td><code>504</code></td><td><code>Timeout</code></td><td>Unable to reach the target. Please check if the target URL is correct and try again.</td></tr><tr><td><code>522</code></td><td><code>Bad Response</code></td><td>Invalid response received during the request. Please try again.</td></tr></tbody></table>


# Public API

Programmatically manage Residential Proxy sub-users, set traffic limits, and track usage statistics with the Public API.

The [**Public API**](https://residential-api.oxylabs.io/v2/docs) enables you to **manage proxy users programmatically** without using the dashboard. You can create, delete, and modify proxy sub-users, set traffic usage limits, and view current and historic traffic usage.

### Available paths

**Base endpoint:** `https://residential-api.oxylabs.io/v2`

Combine the base endpoint with the path to perform specific actions:

<table data-full-width="false"><thead><tr><th width="99.15625">Method</th><th width="449.92578125">Path</th><th>Description</th></tr></thead><tbody><tr><td><mark style="color:$success;">POST</mark></td><td><code>/login</code></td><td>Authenticate to get the access token (JWT).</td></tr><tr><td><mark style="color:blue;">GET</mark></td><td><code>/users/{userId}/sub-users</code></td><td>Retrieve all active sub-users</td></tr><tr><td><mark style="color:$success;">POST</mark></td><td><code>/users/{userId}/sub-users</code></td><td>Create a new sub-user.</td></tr><tr><td><mark style="color:blue;">GET</mark></td><td><code>/users/{userId}/sub-users/{subUserId}</code></td><td>Retrieve traffic usage statistics for a specific sub-user.</td></tr><tr><td><mark style="color:$primary;">PATCH</mark></td><td><code>/users/{userId}/sub-users/{subUserId}</code></td><td>Modify a sub-user.</td></tr><tr><td><mark style="color:red;">DELETE</mark></td><td><code>/users/{userId}/sub-users/{subUserId}</code></td><td>Delete a sub-user.</td></tr><tr><td><mark style="color:blue;">GET</mark></td><td><code>/users/{userId}/sub-users/{subUserId}/target-stats</code></td><td>Retrieve traffic usage statistics per target for a sub-user. Requires you to specify a date (last 30 days available).</td></tr><tr><td><mark style="color:blue;">GET</mark></td><td><code>/users/{userId}/client-stats</code></td><td>Retrieve total traffic usage for the current month.</td></tr></tbody></table>

### How to use the Public API

<details>

<summary><strong>Testing through the web interface</strong></summary>

#### 1. Authorize your main user

***

If you're testing the functionality through the [Public API](https://residential-api.oxylabs.io/v2/docs) interface, click the **Authorize** button.

<figure><img src="/files/HIe9nbPveRKYBir3lMyg" alt=""><figcaption></figcaption></figure>

Next, enter your main proxy user's credentials in the newly opened window and select **Authorize** once again.

{% hint style="info" %}
The main user is the **first sub-user** in your [**users list**](https://dashboard.oxylabs.io/?route=/overview/RP/users).
{% endhint %}

<figure><img src="/files/GJgKNofGQIs4kbGfPCsa" alt="" width="375"><figcaption></figcaption></figure>

#### 2. Log in to generate JWT

***

After authorization, navigate to the **POST** `/login` tab to generate the JSON Web Token (JWT) that's required to finalize authorization.

<figure><img src="/files/EOogzclag8MJka3MeGSp" alt=""><figcaption></figcaption></figure>

Then, select **Try it out** **→** **Execute**. Save the `user_id` and `token` values for later use.

{% hint style="warning" %}
**JWT expires in 1 hour**. After that, you'll need to generate a new one.
{% endhint %}

{% hint style="warning" %}
If you've changed your main user's password recently, you'll receive an error. To handle this, you must **use your original password** or **contact our 24/7 Support Team** via [live chat ](https://oxylabs.drift.click/oxybot)or [email](mailto:support@oxylabs.io).
{% endhint %}

<figure><img src="/files/TmeJa7vHOiowSwtWLVwR" alt=""><figcaption></figcaption></figure>

#### 3. Finalize authorization with JWT

***

Open the **Authorization** window again and **paste the token** from the previous step in the JWT Token authentication field. Then, click the **Authorize** button to save.

<figure><img src="/files/eoO4OdI4IuLHHn254DSH" alt="" width="435"><figcaption></figcaption></figure>

#### 4. Test the Public API

You can now test the Public API endpoints in your browser. For every endpoint, you'll need to enter the `user_id`,  acquired in Step 2.

</details>

{% stepper %}
{% step %}

#### Log in and generate JWT

Use Basic Authentication to log in with your main user's credentials (encoded in base64) to receive a JWT token.

{% hint style="info" %}
The main user is the **first sub-user** in your [**users list**](https://dashboard.oxylabs.io/?route=/overview/RP/users)**.**
{% endhint %}

**Endpoint:** `https://residential-api.oxylabs.io/v2/login`

**Header:** `Authorization: Basic base64(username:password)`

<pre class="language-bash"><code class="lang-bash">curl -X "POST" \
  "https://residential-api.oxylabs.io/v2/login" \
  -H "accept: application/json" \
  -u "<a data-footnote-ref href="#user-content-fn-1">USERNAME:PASSWORD</a>"
</code></pre>

{% hint style="warning" %}
If you've changed your main user's password recently, you'll receive an error. To handle this, you must **use your original password** or **contact our 24/7 Support Team** via [live chat ](https://oxylabs.drift.click/oxybot)or [email](mailto:support@oxylabs.io).
{% endhint %}

Once executed, the server will respond with **two important values** required for later steps:

* `user_id` is the unique user identifier required for API requests.
* `token` is the JSON Web Token (JWT) required for further authorization.

{% code title="Output example:" %}

```json
{
  "user_id": "00000000-0000-0000-0000-000000000000",
  "token": "example token"
}
```

{% endcode %}

{% hint style="warning" %}
**JWT expires in 1 hour**. After that, you'll need to generate a new one.
{% endhint %}
{% endstep %}

{% step %}

#### Use the `token` and `user_id` with requests

You can now query the API to manage users and check statistics. All subsequent requests require the JWT `token` and your `user_id`.

**Header:** `Authorization: Bearer {token}`

For example, let's check the total traffic usage for the current month.

<pre class="language-bash" data-full-width="false"><code class="lang-bash">curl -X "GET" \
  "https://residential-api.oxylabs.io/v2/users/<a data-footnote-ref href="#user-content-fn-2">{userId}</a>/client-stats" \
  -H "accept: application/json" \
  -H "Authorization: Bearer <a data-footnote-ref href="#user-content-fn-3">{token}</a>"
</code></pre>

<details>

<summary><strong>Output sample</strong></summary>

```json
{
  "traffic": 1.2354839,
  "date_from": "2026-01-01",
  "date_to": "2026-01-15"
}
```

</details>
{% endstep %}
{% endstepper %}

### Backonnect Entry IPs

If you want to use your own backconnect entry node DNS name, you can point your subdomain/domain to our entry node. To do that, you need to add a DNS `CNAME` record with `pr.oxylabs.io` as the target. This is how such setup looks on Cloudflare DNS manager for `entry` subdomain:

![Backconnect](/files/5tt6VuASGsfDW3uhc57P)

For more information, please contact [**support@oxylabs.io**](mailto:support@oxylabs.io) or your account manager.

[^1]: Replace with your **main user's credentials**. cURL automatically encodes to base64 and uses the Basic Authentication method.

[^2]: Replace with your `user_id`

[^3]: Replace with your JWT `token`


# Mobile Proxies

Real mobile proxy IPs from 140+ locations with automatic rotation. Thie documentation covers setup, session control, protocols, Public API integration, and more.

[**Mobile Proxies**](https://oxylabs.io/products/mobile-proxies) contain real IP addresses provided by Internet Service Providers (ISPs). These IP addresses are attached to mobile devices across the globe at a country level. Therefore, it is easy to replicate human behaviour and avoid blocks using this type of proxy.

Oxylabs Mobile Proxies are fully equipped, rotate automatically, and are easy to set up. Mobile Proxies allow you to access 3G/4G/5G cellular networks.&#x20;

Find everything about Mobile Proxies integration in this documentation, and to begin with, head to the [**Getting Started**](/products/proxies/mobile-proxies/getting-started) part. &#x20;

If you need any assistance, feel free to contact us at [**support@oxylabs.io**](mailto:support@oxylabs.io) or via the 24/7 live chat on our [**website**](https://oxylabs.io/).


# Getting Started

Learn the basics of using Mobile Proxies for your project. See how to test proxy connections, choose the geo-location, and control your sessions.

Make a request to `https://ip.oxylabs.io/location` using a mobile proxy from a random location through our [**backconnect entry**](/products/proxies/mobile-proxies/making-requests). Replace `USERNAME` and `PASSWORD` with your proxy user credentials. Keep in mind that each request returns a new IP address as Oxylabs Mobile Proxies rotate automatically.

{% hint style="info" %}
Use [**ip.oxylabs.io/location**](https://ip.oxylabs.io/location) to check the parameters of your IPs—this domain delivers information from four geolocation databases: MaxMind, IP2Location, DB-IP, and IPinfo.io. The parameters include IP address, provider, country, city, ZIP code, ASN, organization name, time zone, and meta (when disclosed by database).
{% endhint %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% hint style="info" %}
Our Mobile Proxies support `HTTP`, `HTTPS`, `HTTP3`, and `SOCKS5` protocols. You can learn more about using them [**here**](/products/proxies/mobile-proxies/protocols).&#x20;
{% endhint %}

Now make a request using a proxy from France. All you need to do is add `cc-FR` to your username string. Below is an example in cURL, and [**here**](/products/proxies/mobile-proxies/location-settings/country) you can find code samples in other languages.

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-FR:PASSWORD" https://ip.oxylabs.io/location
```

If you need to keep the same proxy for more than one request, use [**session control**](/products/proxies/mobile-proxies/session-control)**.** Add `sessid-abc12345` to your username string, where `abc12345` can be any random string, and as long as you keep sending requests with this string (session ID), you will get the same proxy IP.

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-sessid-randomString123:PASSWORD" https://ip.oxylabs.io/location
```

You can also set up Mobile Proxies using the [**Endpoint generator**](/products/proxies/mobile-proxies/endpoint-generator).

If you have any additional questions, please contact your account manager or our support team at [**support@oxylabs.io**](mailto:support@oxylabs.io).


# Making Requests

Learn to make requests with Oxylabs Mobile Proxies. Master the basic query structure and use parameters for location targeting, city selection, and sessions.

## Basic query

Basic query only requires passing `username` and `password`. No other parameters are needed. Such a query will result in the request being made from a random IP address (proxy). Every new request will use a different proxy.

#### Code examples

In this example, a query to `ip.oxylabs.io` is performed from a random IP:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
entry = ('http://customer-%s:%s@pr.oxylabs.io:7777' %
    (username, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
c
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

A single backconnect proxy enables you to choose a specific country proxy via additional parameters in the username. This approach also supports session control. Below is a sample of credentials structure:

`customer-USERNAME-cc-US-sessid-abcde12345:PASSWORD`

#### Query parameters

| Parameter                                                 | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| --------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <mark style="background-color:green;">**customer**</mark> | Username                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `cc`                                                      | Case insensitive country code in 2-letter [**3166-1 alpha-2 format**](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). For example, `DE` for Germany, `GB` for the United Kingdom, `TH` for Thailand. You can find more details on how to use country-specific proxies [**here**](/products/proxies/mobile-proxies/location-settings/country#country-specific-entry-nodes).                                                                                        |
| `city`                                                    | Case insensitive city name in English. This parameter must be accompanied by `cc` for better accuracy, for example, `cc-GB-city-london` for London, United Kingdom; `cc-DE-city-berlin` for Berlin, Germany. For a city with more than two words, replace space with `_`, for example, `city-st_petersburg` or `city-rio_de_janeiro`. Click [**here**](/products/proxies/mobile-proxies/location-settings/select-city) for more information on city-level targeting. |
| `st`                                                      | Case insensitive US state name with us\_ in the beginning, for example, `us_california`, `us_illinois`. [**Click here**](/products/proxies/mobile-proxies/location-settings/select-state) for more information on state-level targeting.                                                                                                                                                                                                                             |
| `sessid`                                                  | Session ID to keep the same IP with upcoming queries. The session expires in 10 minutes. After that, a new IP address is assigned to that session ID. Random string, 0-9, and A-Z characters are supported.                                                                                                                                                                                                                                                          |
| `sesstime`                                                | The session time parameter keeps the same IP for a certain period. The maximum session time is 30 minutes.                                                                                                                                                                                                                                                                                                                                                           |
| <mark style="background-color:green;">**password**</mark> | Password                                                                                                                                                                                                                                                                                                                                                                                                                                                             |

&#x20;     \- Mandatory parameter


# Entry Node for China

Learn how to use Mobile Proxy entry nodes for China through HTTPS proxy configurations.

```
https://a81298871.com:8000 - Hong Kong
```

<pre><code><strong>https://cnt9t1is.com:8000 - Beijing
</strong></code></pre>

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
entry = ('http://customer-%s:%s@pr.oxylabs.io:7777' %
    (username, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
c
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

We have configured entry nodes in Hong Kong and Beijing regions for better connectivity from China. Note that it is an HTTPS proxy node. All username parameters are identical to the regular entry node.

We are currently working on fixing the rest of the integrations on which HTTPS protocol will be supported.

If you are connecting to our Mobile network from China and still have issues with provided entry nodes, please get in touch at [**support@oxylabs.io**](mailto:support@oxylabs.io), and we will figure out a solution together.


# Agent Skills

Configure AI tools and coding assistants with official Agent Skills for Oxylabs Mobile Proxies.

Oxylabs Agent Skills (`skills.md`) teach LLMs and AI coding assistants how to configure and interact with Oxylabs products.

Agent Skills for Oxylabs proxies will help your model generate accurate connection strings, handle entry nodes, and apply geo-targeting parameters without syntax or parameter hallucinations.

## Installation

### Claude Code (plugin marketplace)

Inside Claude Code, run the following commands:

```
/plugin marketplace add oxylabs/agent-skills
/plugin install oxylabs@oxylabs-agent-skills
```

This installs all 5 skills as a single plugin:

* [`skills/proxies`](https://github.com/oxylabs/agent-skills/blob/main/skills/proxies/SKILL.md)
* [`skills/web-unblocker`](https://github.com/oxylabs/agent-skills/blob/main/skills/web-unblocker/SKILL.md)
* [`skills/web-scraper-api`](https://github.com/oxylabs/agent-skills/blob/main/skills/web-scraper-api/SKILL.md)
* [`skills/headless-browser`](https://github.com/oxylabs/agent-skills/blob/main/skills/headless-browser/SKILL.md)
* [`skills/video-data`](https://github.com/oxylabs/agent-skills/blob/main/skills/video-data/SKILL.md)

To update skills, run this command:

```
/plugin marketplace update oxylabs-agent-skills
```

### Other agents (generic)

For other agents and custom environments, load the repository into your project workspace via the standard skills CLI:

```
npx skills add https://github.com/oxylabs/agent-skills.git
```

## Configuration

All Oxylabs Agent Skills authenticate via environment variables defined in a `.env` file. To use proxy skills, add these keys to your `.env` file:

| Variable          | Description                         |
| ----------------- | ----------------------------------- |
| `OXY_DC_USERNAME` | Your Oxylabs proxy user `username`. |
| `OXY_DC_PASSWORD` | Your Oxylabs proxy user `password`. |

## How to use

Once the skill is active in your workspace, you can prompt your AI assistant to build custom solutions using Oxylabs proxies.

* **Example 1:** "Write a Python script using `requests` to fetch `target-url.com` through Oxylabs Mobile Proxies with `US` geo-targeting."
* **Example 2:** "Create a Node.js script using `axios` that rotates proxy sessions for every request using my Oxylabs credentials."

## Supported proxy networks

This skill applies to all following proxy types:

* [Residential Proxies](/products/proxies/residential-proxies)
* [Mobile Proxies](/products/proxies/mobile-proxies)
* [ISP Proxies](/products/proxies/isp-proxies)
* [Dedicated ISP Proxies (enterprise)](/products/proxies/dedicated-isp-proxies/enterprise)
* [Dedicated ISP Proxies (self-service)](/products/proxies/dedicated-isp-proxies/self-service)
* [Datacenter Proxies](/products/proxies/datacenter-proxies)
* [Dedicated Datacenter Proxies (enterprise)](/products/proxies/dedicated-datacenter-proxies/enterprise)
* [Dedicated Datacenter Proxies (self-service)](/products/proxies/dedicated-datacenter-proxies/self-service)

## More Oxylabs Agent Skills

Learn more about Agent Skills for other Oxylabs solutions:

* [Web Scraper API](/products/web-scraper-api/solutions-for-ai-workflows/agent-skills)
* [Web Unblocker](/products/web-unblocker/agent-skills)
* [Headless Browser](/products/headless-browser/ai-workflows/agent-skills)
* [Video Data](/products/proxies/high-bandwidth-proxies#agent-skills)


# Location Settings

Configure Mobile Proxies to target IPs by country, city, state, continent, coordinates, or ASN. Complete guide to all geo-targeting methods.

Oxylabs Mobile Proxies network covers 140+ locations and offers country, city, state, ZIP code, coordinate-level, and ASN targeting.

You can find more information on selecting geo-location parameters in the pages listed below:

{% content-ref url="/pages/w66EaMHnyuIjuwX81kUd" %}
[Country](/products/proxies/mobile-proxies/location-settings/country)
{% endcontent-ref %}

{% content-ref url="/pages/CNfvZ7PQRvIcDg9dZeA9" %}
[City](/products/proxies/mobile-proxies/location-settings/select-city)
{% endcontent-ref %}

{% content-ref url="/pages/9cG2UzInE9t3vW5oHSNZ" %}
[State](/products/proxies/mobile-proxies/location-settings/select-state)
{% endcontent-ref %}

{% content-ref url="/pages/GZqlA7kjGCjYeRz47eX0" %}
[Continent](/products/proxies/residential-proxies/location-settings/continent)
{% endcontent-ref %}

{% content-ref url="/pages/5n2fLJW98hHbWK8cF8GD" %}
[Coordinates](/products/proxies/mobile-proxies/location-settings/coordinates)
{% endcontent-ref %}

{% content-ref url="/pages/vEiKRfeINoZYUltzHnMQ" %}
[ASN Targeting](/products/proxies/mobile-proxies/location-settings/asn-targeting)
{% endcontent-ref %}

#### Country Mapping

We use the [**MaxMind GeoIP2**](https://www.maxmind.com/en/geoip2-databases) database to assign our exit nodes `cc` values. This database is updated weekly.

Some other public IP databases may show different locations. In cases where there can not be any location mismatches, please double-check if the location of the assigned proxy is the same on the IP database used by the target website.


# Country

Use country-level targeting with Mobile Proxies. Learn about parameters, country-specific entry nodes, and find the list of regional ports.

Adding a `cc` flag to the authorization header enables one to specify which country IP to use to process the request. The value of this parameter is a case insensitive country code in 2-letter [**3166-1 alpha-2 format**](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2). For example, `DE` for Germany, `GB` for the United Kingdom, and `TH` for Thailand proxy. See the examples for more details.

Here are a few examples of `country` parameters:<br>

<table><thead><tr><th width="298">Country</th><th>Country parameter</th></tr></thead><tbody><tr><td>United States</td><td><code>cc-US</code></td></tr><tr><td>Italy</td><td><code>cc-IT</code></td></tr><tr><td>Thailand</td><td><code>cc-TH</code></td></tr><tr><td>Japan</td><td><code>cc-JP</code></td></tr><tr><td>Australia</td><td><code>cc-AU</code></td></tr><tr><td>Spain</td><td><code>cc-ES</code></td></tr></tbody></table>

#### Code example

In this example, a query to `ip.oxylabs.io/location` is performed from a random IP address from Germany:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
entry = ('http://customer-%s-cc-%s:%s@pr.oxylabs.io:7777' %
    (username, country, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME-cc-DE", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME-cc-DE", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME-cc-DE', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

***

## Country Specific Entry Nodes

Oxylabs residential network has coverage in almost every country in the world. **A random country-specific proxy entry point will return new IP with every new request.**

You do not need to pass any additional parameters, just `customer-username:password`. If you have whitelisted IPs, you do not need to pass login credentials. Country-specific ports do not support city-level results.

#### Code examples

In this example, a query to `ip.oxylabs.io/location` is performed from a random Turkish IP:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x tr-pr.oxylabs.io:30000 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'tr-pr.oxylabs.io:30000';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
entry = ('http://customer-%s:%s@tr-pr.oxylabs.io:30000' %
    (username, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("tr-pr.oxylabs.io", 30000);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("tr-pr.oxylabs.io:30000");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
#!/usr/bin/ruby

require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('tr-pr.oxylabs.io', 30000, 'customer-USERNAME', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

<details>

<summary>Available entry points</summary>

```
pr.oxylabs.io:7777
us-pr.oxylabs.io:10000
ca-pr.oxylabs.io:30000
gb-pr.oxylabs.io:20000
de-pr.oxylabs.io:30000
fr-pr.oxylabs.io:40000
es-pr.oxylabs.io:10000
it-pr.oxylabs.io:20000
se-pr.oxylabs.io:30000
gr-pr.oxylabs.io:40000
pt-pr.oxylabs.io:10000
nl-pr.oxylabs.io:20000
be-pr.oxylabs.io:30000
ru-pr.oxylabs.io:40000
ua-pr.oxylabs.io:10000
pl-pr.oxylabs.io:20000
il-pr.oxylabs.io:20000
tr-pr.oxylabs.io:30000
au-pr.oxylabs.io:40000
my-pr.oxylabs.io:10000
th-pr.oxylabs.io:20000
kr-pr.oxylabs.io:30000
jp-pr.oxylabs.io:40000
ph-pr.oxylabs.io:10000
sg-pr.oxylabs.io:20000
cn-pr.oxylabs.io:30000
hk-pr.oxylabs.io:40000
tw-pr.oxylabs.io:10000
in-pr.oxylabs.io:20000
pk-pr.oxylabs.io:30000
ir-pr.oxylabs.io:40000
id-pr.oxylabs.io:10000
az-pr.oxylabs.io:20000
kz-pr.oxylabs.io:30000
ae-pr.oxylabs.io:40000
mx-pr.oxylabs.io:10000
br-pr.oxylabs.io:20000
ar-pr.oxylabs.io:30000
cl-pr.oxylabs.io:40000
pe-pr.oxylabs.io:10000
ec-pr.oxylabs.io:20000
co-pr.oxylabs.io:30000
za-pr.oxylabs.io:40000
eg-pr.oxylabs.io:10000
sa-pr.oxylabs.io:44000
dk-pr.oxylabs.io:19000
ao-pr.oxylabs.io:40000
cm-pr.oxylabs.io:41000
cf-pr.oxylabs.io:42000
td-pr.oxylabs.io:43000
bj-pr.oxylabs.io:44000
et-pr.oxylabs.io:45000
dj-pr.oxylabs.io:46000
gm-pr.oxylabs.io:47000
gh-pr.oxylabs.io:48000
ci-pr.oxylabs.io:49000
ke-pr.oxylabs.io:10000
lr-pr.oxylabs.io:11000
mg-pr.oxylabs.io:12000
ml-pr.oxylabs.io:13000
mr-pr.oxylabs.io:14000
mu-pr.oxylabs.io:15000
ma-pr.oxylabs.io:16000
mz-pr.oxylabs.io:17000
ng-pr.oxylabs.io:18000
sn-pr.oxylabs.io:19000
sc-pr.oxylabs.io:20000
zw-pr.oxylabs.io:21000
ss-pr.oxylabs.io:22000
sd-pr.oxylabs.io:23000
tg-pr.oxylabs.io:24000
tn-pr.oxylabs.io:25000
ug-pr.oxylabs.io:26000
zm-pr.oxylabs.io:27000
af-pr.oxylabs.io:28000
bh-pr.oxylabs.io:29000
bd-pr.oxylabs.io:30000
am-pr.oxylabs.io:31000
bt-pr.oxylabs.io:32000
mm-pr.oxylabs.io:33000
kh-pr.oxylabs.io:34000
ge-pr.oxylabs.io:36000
iq-pr.oxylabs.io:37000
jo-pr.oxylabs.io:38000
lb-pr.oxylabs.io:39000
mv-pr.oxylabs.io:40000
mn-pr.oxylabs.io:41000
om-pr.oxylabs.io:42000
qa-pr.oxylabs.io:43000
sa-pr.oxylabs.io:44000
vn-pr.oxylabs.io:45000
tm-pr.oxylabs.io:46000
uz-pr.oxylabs.io:47000
ye-pr.oxylabs.io:48000
al-pr.oxylabs.io:49000
ad-pr.oxylabs.io:10000
at-pr.oxylabs.io:11000
ba-pr.oxylabs.io:13000
bg-pr.oxylabs.io:14000
by-pr.oxylabs.io:15000
hr-pr.oxylabs.io:16000
cy-pr.oxylabs.io:35000
cz-pr.oxylabs.io:18000
dk-pr.oxylabs.io:19000
ee-pr.oxylabs.io:20000
fi-pr.oxylabs.io:21000
hu-pr.oxylabs.io:23000
is-pr.oxylabs.io:24000
ie-pr.oxylabs.io:25000
lv-pr.oxylabs.io:26000
li-pr.oxylabs.io:27000
lt-pr.oxylabs.io:28000
lu-pr.oxylabs.io:29000
mt-pr.oxylabs.io:30000
mc-pr.oxylabs.io:31000
md-pr.oxylabs.io:32000
me-pr.oxylabs.io:33000
no-pr.oxylabs.io:34000
ro-pr.oxylabs.io:35000
rs-pr.oxylabs.io:36000
sk-pr.oxylabs.io:37000
si-pr.oxylabs.io:38000
ch-pr.oxylabs.io:39000
mk-pr.oxylabs.io:40000
bs-pr.oxylabs.io:41000
bz-pr.oxylabs.io:42000
vg-pr.oxylabs.io:43000
cr-pr.oxylabs.io:44000
cu-pr.oxylabs.io:45000
dm-pr.oxylabs.io:46000
ht-pr.oxylabs.io:47000
hn-pr.oxylabs.io:48000
jm-pr.oxylabs.io:49000
aw-pr.oxylabs.io:10000
pa-pr.oxylabs.io:11000
pr-pr.oxylabs.io:12000
tt-pr.oxylabs.io:13000
fj-pr.oxylabs.io:14000
nz-pr.oxylabs.io:15000
bo-pr.oxylabs.io:16000
py-pr.oxylabs.io:17000
uy-pr.oxylabs.io:18000
ve-pr.oxylabs.io:19000
kw-pr.oxylabs.io:20000
eu-pr.oxylabs.io:10000
do-pr.oxylabs.io:21000
la-pr.oxylabs.io:22000
tz-pr.oxylabs.io:23000
lk-pr.oxylabs.io:24000
bn-pr.oxylabs.io:25000
np-pr.oxylabs.io:26000
kw-pr.oxylabs.io:20000
gt-pr.oxylabs.io:27000
dz-pr.oxylabs.io:29000
na-pr.oxylabs.io:28000
```

</details>

Please see the dashboard for entry point information. Download a complete list of random entry points or find them in the table below.

{% file src="/files/ExSDCOrjD9hWTy6R0Dm5" %}

#### Table of entry points&#x20;

| <p><strong>Random</strong><br>pr.oxylabs.io:7777</p>             | <p><strong>USA</strong><br>us-pr.oxylabs.io:10000</p>                      | <p><strong>Canada</strong><br>ca-pr.oxylabs.io:30000</p>                 |
| ---------------------------------------------------------------- | -------------------------------------------------------------------------- | ------------------------------------------------------------------------ |
| <p><strong>Great Britain</strong><br>gb-pr.oxylabs.io:20000</p>  | <p><strong>Germany</strong><br>de-pr.oxylabs.io:30000</p>                  | <p><strong>France</strong><br>fr-pr.oxylabs.io:40000</p>                 |
| <p><strong>Spain</strong><br>es-pr.oxylabs.io:10000</p>          | <p><strong>Italy</strong><br>it-pr.oxylabs.io:20000</p>                    | <p><strong>Sweden</strong><br>se-pr.oxylabs.io:30000</p>                 |
| <p><strong>Greece</strong><br>gr-pr.oxylabs.io:40000</p>         | <p><strong>Portugal</strong><br>pt-pr.oxylabs.io:10000</p>                 | <p><strong>Netherlands</strong><br>nl-pr.oxylabs.io:20000</p>            |
| <p><strong>Belgium</strong><br>be-pr.oxylabs.io:30000</p>        | <p><strong>Russia</strong><br>ru-pr.oxylabs.io:40000</p>                   | <p><strong>Ukraine</strong><br>ua-pr.oxylabs.io:10000</p>                |
| <p><strong>Poland</strong><br>pl-pr.oxylabs.io:20000</p>         | <p><strong>Israel</strong><br>il-pr.oxylabs.io:20000</p>                   | <p><strong>Turkey</strong><br>tr-pr.oxylabs.io:30000</p>                 |
| <p><strong>Australia</strong><br>au-pr.oxylabs.io:40000</p>      | <p><strong>Malaysia</strong><br>my-pr.oxylabs.io:10000</p>                 | <p><strong>Thailand</strong><br>th-pr.oxylabs.io:20000</p>               |
| <p><strong>South Korea</strong><br>kr-pr.oxylabs.io:30000</p>    | <p><strong>Japan</strong><br>jp-pr.oxylabs.io:40000</p>                    | <p><strong>Philippines</strong><br>ph-pr.oxylabs.io:10000</p>            |
| <p><strong>Singapore</strong><br>sg-pr.oxylabs.io:20000</p>      | <p><strong>China</strong><br>cn-pr.oxylabs.io:30000</p>                    | <p><strong>Hong Kong</strong><br>hk-pr.oxylabs.io:40000</p>              |
| <p><strong>Taiwan</strong><br>tw-pr.oxylabs.io:10000</p>         | <p><strong>India</strong><br>in-pr.oxylabs.io:20000</p>                    | <p><strong>Pakistan</strong><br>pk-pr.oxylabs.io:30000</p>               |
| <p><strong>Iran</strong><br>ir-pr.oxylabs.io:40000</p>           | <p><strong>Indonesia</strong><br>id-pr.oxylabs.io:10000</p>                | <p><strong>Azerbaijan</strong><br>az-pr.oxylabs.io:20000</p>             |
| <p><strong>Kazakhstan</strong><br>kz-pr.oxylabs.io:30000</p>     | <p><strong>UAE</strong><br>ae-pr.oxylabs.io:40000</p>                      | <p><strong>Mexico</strong><br>mx-pr.oxylabs.io:10000</p>                 |
| <p><strong>Brazil</strong><br>br-pr.oxylabs.io:20000</p>         | <p><strong>Argentina</strong><br>ar-pr.oxylabs.io:30000</p>                | <p><strong>Chile</strong><br>cl-pr.oxylabs.io:40000</p>                  |
| <p><strong>Peru</strong><br>pe-pr.oxylabs.io:10000</p>           | <p><strong>Ecuador</strong><br>ec-pr.oxylabs.io:20000</p>                  | <p><strong>Colombia</strong><br>co-pr.oxylabs.io:30000</p>               |
| <p>​​<strong>South Africa</strong><br>za-pr.oxylabs.io:40000</p> | <p><strong>Egypt</strong><br>eg-pr.oxylabs.io:10000</p>                    | <p><strong>Angola</strong><br>ao-pr.oxylabs.io:40000</p>                 |
| <p><strong>Cameroon</strong><br>cm-pr.oxylabs.io:41000</p>       | <p><strong>Central African Republic</strong><br>cf-pr.oxylabs.io:42000</p> | <p><strong>Chad</strong><br>td-pr.oxylabs.io:43000</p>                   |
| <p><strong>Benin</strong><br>bj-pr.oxylabs.io:44000</p>          | <p><strong>Ethiopia</strong><br>et-pr.oxylabs.io:45000</p>                 | <p><strong>Djibouti</strong><br>dj-pr.oxylabs.io:46000</p>               |
| <p><strong>Gambia</strong><br>gm-pr.oxylabs.io:47000</p>         | <p><strong>Ghana</strong><br>gh-pr.oxylabs.io:48000</p>                    | <p><strong>Côte d'Ivoire</strong><br>ci-pr.oxylabs.io:49000</p>          |
| <p><strong>Kenya</strong><br>ke-pr.oxylabs.io:10000</p>          | <p><strong>Liberia</strong><br>lr-pr.oxylabs.io:11000</p>                  | <p><strong>Madagascar</strong><br>mg-pr.oxylabs.io:12000</p>             |
| <p><strong>Mali</strong><br>ml-pr.oxylabs.io:13000</p>           | <p><strong>Mauritania</strong><br>mr-pr.oxylabs.io:14000</p>               | <p><strong>Mauritius</strong><br>mu-pr.oxylabs.io:15000</p>              |
| <p><strong>Morocco</strong><br>ma-pr.oxylabs.io:16000</p>        | <p><strong>Mozambique</strong><br>mz-pr.oxylabs.io:17000</p>               | <p><strong>Nigeria</strong><br>ng-pr.oxylabs.io:18000</p>                |
| <p><strong>Senegal</strong><br>sn-pr.oxylabs.io:19000</p>        | <p><strong>Seychelles</strong><br>sc-pr.oxylabs.io:20000</p>               | <p><strong>Zimbabwe</strong><br>zw-pr.oxylabs.io:21000</p>               |
| <p><strong>South Sudan</strong><br>ss-pr.oxylabs.io:22000</p>    | <p><strong>Sudan</strong><br>sd-pr.oxylabs.io:23000</p>                    | <p><strong>Togo</strong><br>tg-pr.oxylabs.io:24000</p>                   |
| <p><strong>Tunisia</strong><br>tn-pr.oxylabs.io:25000</p>        | <p><strong>Uganda</strong><br>ug-pr.oxylabs.io:26000</p>                   | <p><strong>Zambia</strong><br>zm-pr.oxylabs.io:27000</p>                 |
| <p><strong>Afghanistan</strong><br>af-pr.oxylabs.io:28000</p>    | <p><strong>Bahrain</strong><br>bh-pr.oxylabs.io:29000</p>                  | <p><strong>Bangladesh</strong><br>bd-pr.oxylabs.io:30000</p>             |
| <p><strong>Armenia</strong><br>am-pr.oxylabs.io:31000</p>        | <p><strong>Bhutan</strong><br>bt-pr.oxylabs.io:32000</p>                   | <p><strong>Myanmar</strong><br>mm\_pr.oxylabs.io:33000</p>               |
| <p><strong>Cambodia</strong><br>kh-pr.oxylabs.io:34000</p>       | <p><strong>Georgia</strong><br>ge-pr.oxylabs.io:36000</p>                  | <p><strong>Iraq</strong><br>iq-pr.oxylabs.io:37000</p>                   |
| <p><strong>Jordan</strong><br>jo-pr.oxylabs.io:38000</p>         | <p><strong>Lebanon</strong><br>lb-pr.oxylabs.io:39000</p>                  | <p><strong>Maldives</strong><br>mv-pr.oxylabs.io:40000</p>               |
| <p><strong>Mongolia</strong><br>mn-pr.oxylabs.io:41000</p>       | <p><strong>Oman</strong><br>om-pr.oxylabs.io:42000</p>                     | <p><strong>Qatar</strong></p><p>qa-pr.oxylabs.io:43000</p>               |
| <p><strong>Saudi Arabia</strong><br>sa-pr.oxylabs.io:44000</p>   | <p><strong>Vietnam</strong><br>vn-pr.oxylabs.io:45000</p>                  | <p><strong>Turkmenistan</strong><br>tm-pr.oxylabs.io:46000</p>           |
| <p><strong>Uzbekistan</strong><br>uz-pr.oxylabs.io:47000</p>     | <p><strong>Yemen</strong><br>ye-pr.oxylabs.io:48000</p>                    | <p><strong>Albania</strong></p><p>al-pr.oxylabs.io:49000</p>             |
| <p><strong>Andorra</strong><br>ad-pr.oxylabs.io:10000</p>        | <p><strong>Austria</strong><br>at-pr.oxylabs.io:11000</p>                  | <p><strong>Bosnia and Herzegovina</strong><br>ba-pr.oxylabs.io:13000</p> |
| <p><strong>Bulgaria</strong><br>bg-pr.oxylabs.io:14000</p>       | <p><strong>Belarus</strong><br>by-pr.oxylabs.io:15000</p>                  | <p><strong>Croatia</strong><br>hr-pr.oxylabs.io:16000</p>                |
| <p><strong>Cyprus</strong><br>cy-pr.oxylabs.io:35000</p>         | <p><strong>Czech Republic</strong></p><p>cz-pr.oxylabs.io:18000</p>        | <p><strong>Denmark</strong><br>dk-pr.oxylabs.io:19000</p>                |
| <p><strong>Estonia</strong><br>ee-pr.oxylabs.io:20000</p>        | <p><strong>Finland</strong><br>fi-pr.oxylabs.io:21000</p>                  | <p><strong>Hungary</strong><br>hu-pr.oxylabs.io:23000</p>                |
| <p><strong>Iceland</strong><br>is-pr.oxylabs.io:24000</p>        | <p><strong>Ireland</strong><br>ie-pr.oxylabs.io:25000</p>                  | <p><strong>Latvia</strong><br>lv-pr.oxylabs.io:26000</p>                 |
| <p><strong>Liechtenstein</strong><br>li-pr.oxylabs.io:27000</p>  | <p><strong>Lithuania</strong><br>lt-pr.oxylabs.io:28000</p>                | <p><strong>Luxembourg</strong><br>lu-pr.oxylabs.io:29000</p>             |
| <p><strong>Malta</strong><br>mt-pr.oxylabs.io:30000</p>          | <p><strong>Monaco</strong><br>mc-pr.oxylabs.io:31000</p>                   | <p><strong>Moldova</strong><br>md-pr.oxylabs.io:32000</p>                |
| <p><strong>Montenegro</strong><br>me-pr.oxylabs.io:33000</p>     | <p><strong>Norway</strong><br>no-pr.oxylabs.io:34000</p>                   | <p><strong>Romania</strong><br>ro-pr.oxylabs.io:35000</p>                |
| <p><strong>Serbia</strong><br>rs-pr.oxylabs.io:36000</p>         | <p><strong>Slovakia</strong><br>sk-pr.oxylabs.io:37000</p>                 | <p><strong>Slovenia</strong><br>si-pr.oxylabs.io:38000</p>               |
| <p><strong>Switzerland</strong><br>ch-pr.oxylabs.io:39000</p>    | <p><strong>Macedonia</strong></p><p>mk-pr.oxylabs.io:40000</p>             | <p><strong>Bahamas</strong><br>bs-pr.oxylabs.io:41000</p>                |
| <p><strong>Belize</strong><br>bz-pr.oxylabs.io:42000</p>         | <p><strong>British Virgin Islands</strong><br>vg-pr.oxylabs.io:43000</p>   | <p><strong>Costa Rica</strong><br>cr-pr.oxylabs.io:44000</p>             |
| <p><strong>Cuba</strong><br>cu-pr.oxylabs.io:45000</p>           | <p><strong>Dominica</strong><br>dm-pr.oxylabs.io:46000</p>                 | <p><strong>Haiti</strong><br>ht-pr.oxylabs.io:47000</p>                  |
| <p><strong>Honduras</strong><br>hn-pr.oxylabs.io:48000</p>       | <p><strong>Jamaica</strong><br>jm-pr.oxylabs.io:49000</p>                  | <p><strong>Aruba</strong><br>aw-pr.oxylabs.io:10000</p>                  |
| <p><strong>Panama</strong><br>pa-pr.oxylabs.io:11000</p>         | <p><strong>Puerto Rico</strong><br>pr-pr.oxylabs.io:12000</p>              | <p><strong>Trinidad and Tobago</strong><br>tt-pr.oxylabs.io:13000</p>    |
| <p><strong>Fiji</strong><br>fj-pr.oxylabs.io:14000</p>           | <p><strong>New Zealand</strong><br>nz-pr.oxylabs.io:15000</p>              | <p><strong>Bolivia</strong><br>bo-pr.oxylabs.io:16000</p>                |
| <p><strong>Paraguay</strong><br>py-pr.oxylabs.io:17000</p>       | <p><strong>Uruguay</strong><br>uy-pr.oxylabs.io:18000</p>                  | <p><strong>Venezuela</strong><br>ve-pr.oxylabs.io:19000</p>              |
| <p><strong>European Union</strong><br>eu-pr.oxylabs.io:10000</p> | <p><strong>Dominican Republic</strong></p><p>do-pr.oxylabs.io:21000</p>    | <p><strong>Laos</strong></p><p>la-pr.oxylabs.io:22000</p>                |
| <p><strong>Tanzania</strong></p><p>tz-pr.oxylabs.io:23000</p>    | <p><strong>Sri Lanka</strong></p><p>lk-pr.oxylabs.io:24000</p>             | <p><strong>Brunei</strong></p><p>bn-pr.oxylabs.io:25000</p>              |
| <p><strong>Nepal</strong></p><p>np-pr.oxylabs.io:26000</p>       | <p><strong>Kuwait</strong></p><p>kw-pr.oxylabs.io:20000</p>                | <p><strong>Guatemala</strong></p><p>gt-pr.oxylabs.io:27000</p>           |
| <p><strong>Algeria</strong><br>dz-pr.oxylabs.io:29000</p>        | <p><strong>Namibia</strong><br>na-pr.oxylabs.io:28000</p>                  |                                                                          |


# City

Target specific cities in various countries with Mobile Proxies. Filter IPs by city and combine it with country-level targeting.

Add a `city` parameter to narrow down to city-level targeting. For example, `cc-DE-city-munich` means that a proxy from Munich, Germany, will handle the query.&#x20;

{% hint style="info" %}
We support every city in the world, yet due to the dynamic nature of Mobile Proxies we do not guarantee we will have proxies there at specific moment in time. Most popular cities are well covered.
{% endhint %}

Here are a few examples of valid combinations of `cc` and `city` parameters:\
`cc-US-city-los_angeles`\
`cc-IT-city-rome`\
`cc-TH-city-bangkok`\
`cc-JP-city-tokyo`\
`cc-AU-city-sydney`\
`cc-ES-city-barcelona`

#### Code examples

In this example, a query to `ip.oxylabs.io` is performed from a random IP address from Munich, Germany:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-city-munich:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$city = 'munich';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country-city-$city:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
city = 'munich'
entry = ('http://customer-%s-cc-%s-city-%s:%s@pr.oxylabs.io:7777' %
    (username, country, city, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME-cc-DE-city-munich", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME-cc-DE-city-munich", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME-cc-DE-city-munich', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

Download the list of supported cities by clicking the file below:

{% file src="/files/628qdEipraPVtaUrEWuA" %}


# State

Target specific US states with Mobile Proxies. Learn to filter IPs by state and combine it with city-level targeting.

To get a proxy from a specific US state, add the `st` flag to the authorization string. For example, `us_california`, `us_illinois`. Find the complete list of US states by clicking the file below:

{% file src="/files/EvsJRuHoN38IvMVSY0x2" %}

Here are a few examples of valid combinations of `state` parameters:\
`st-us_california-city-los_angeles`\
`st-us_illinois-city-springfield`\
`st-us_michigan-city-detroit`\
`st-us_ohio-city-columbus`\
`st-us_maine-city-portland`\
`st-us_tennessee-city-memphis`

#### Code example

In this example, a query to `ip.oxylabs.io` is performed from a random IP address from California, USA:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-st-us_california:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$state = 'us_california';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-st-$state:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
state = 'us_california'
entry = ('http://customer-%s-st-%s:%s@pr.oxylabs.io:7777' %
    (username, state, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME-st-us_california", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME-st-us_california", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/')
proxy = Net::HTTP::Proxy('pr.oxylabs.io/location', 7777, 'customer-USERNAME-st-us_california', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

```

{% endtab %}
{% endtabs %}


# Continent

Filter Mobile Proxies by continent. Learn to use the parameters and two-letter codes to target IPs from all regions.

To get a proxy from any of the seven continents, add the `cn-`  parameter and two-letter code to the authorization string.&#x20;

The list of continents and corresponding letter codes to chose from:\
\
`cn-AF` for Africa\
`cn-AN` for Antarctica\
`cn-AS` for Asia\
`cn-EU` for Europe\
`cn-NA` for North America\
`cn-OC` for Oceania\
`cn-SA` for South America

#### Code example

In this example, a query to `ip.oxylabs.io/location` is performed from a random IP address from Asia:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cn-AS:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$continent = 'AS';
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cn-$continent:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
continent = 'AS'
entry = ('http://customer-%s-cn-%s:%s@pr.oxylabs.io:7777' %
    (username, continent, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("pr.oxylabs.io", 7777);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME-cn-AS", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("pr.oxylabs.io:7777");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME-cn-AS", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('pr.oxylabs.io', 7777, 'customer-USERNAME-cn-AS', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}


# Coordinates

Target Mobile Proxies using specific coordinates and learn to configure the header.

Coordinates targeting allows to select IPs in a specific location based on provided latitude/longitude and radius parameters.

For using this feature, you have to specify a proxy header:

`X-Oxylabs-Geolocation` with value `Latitude:Longitude;Accuracy radius in miles`.

**For example**, if you need an IP from the Canadian pool within 10 miles of the coordinates of latitude 49.9235, longitude -97.081, your request will look like this:

```bash
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" --proxy-header "X-Oxylabs-Geolocation: 49.9235:-97.0811;10" https://ip.oxylabs.io/location
```

{% hint style="info" %}
If no IP is found within the provided coordinates and radius, you will receive `502` response code. See full list of response codes [**here**](/products/proxies/mobile-proxies/response-codes).&#x20;
{% endhint %}

Please note that the `Accuracy radius in miles` value cannot be lower than 10 miles.

In order to widen your search zone, you should increase the radius value.


# ASN Targeting

Target Mobile Proxies by ASN and select specific carriers. Learn about the requests and ASN targeting limitations.

Our Mobile Proxies support targeting by ASN number which means that you can choose proxies from specific carriers. You have to enter the required ASN number in your request. Below is the example for T-Mobile, its ASN number in the US being 21928:

`customer-username-ASN-21928-sessid-abcde12345:password`

You can find ASN numbers [**here**](https://asnlookup.com/)**.**

{% hint style="warning" %}
Our ASN targeting is available to all users, though some ASNs are reserved for KYC-approved clients and may return a `403 Access denied: restricted ASN` error.\
If you need access to a restricted ASN, please contact Customer Support or your Account Manager regarding the KYC process.
{% endhint %}

Mobile Proxies pool is dynamic by nature, so if there are no IPs under that specific ASN at that moment, you will receive a `502 Bad Gateway` response code. In such case, you should try another ASN number.

{% hint style="info" %}
You can use either Country or ASN parameter per each request. If both location parameters are used, only Country parameter will be applied.
{% endhint %}


# Session Control

Learn how to manage Mobile Proxy sessions to keep the same IP address across multiple requests and control session length and IP rotation.

### Set up a default session

The `sessid` parameter lets you route several requests through the same IP address. Add `sessid` after your `username` with a randomly generated alphanumeric string, for example `sessid-abcd1234`.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FxR5NdybM3rjlbhAbPBZN%2Fsession-id.mp4?alt=media>" %}

For example, an initial request using `sessid-abcd1234` might be assigned the IP `1.1.1.1`. As long as you keep sending requests with the same session ID and that IP stays online, your queries continue to route through `1.1.1.1`. If you pause for 60 seconds or the IP goes offline, the system assigns a new one, so your next request with `sessid-abcd1234` is routed through a different IP, such as `1.1.1.2`.

By default, a session lasts 10 minutes, or ends after 60 seconds without any requests – whichever comes first. Once that happens, a new IP address is assigned automatically. To change the session length, please refer to [**Extend session duration**](#extend-session-duration)**.**

#### **Credentials list example:**

Example represents a list of credentials that establish different sessions.

```
customer-USERNAME-cc-DE-sessid-qwert:PASSWORD
customer-USERNAME-cc-US-sessid-asdfg:PASSWORD
customer-USERNAME-cc-GB-sessid-zxcvb:PASSWORD
```

#### Code example

In this example we are using German IP with `sessid-abcd1234` in the username with the first request. All following requests will keep the same German IP with further queries:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-sessid-abcd1234:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$session = mt_rand();
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country-sessid-$session:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
session = random.random()
entry = ('http://customer-%s-cc-%s-sessid-%s:%s@pr.oxylabs.io:7777' %
    (username, country, session, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import java.io.*;
import java.util.Random;
import org.apache.http.HttpHost;
import org.apache.http.auth.*;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

class Client {
    public static final String username = "USERNAME";
    public static final String password = "PASSWORD";
    public String session_id = Integer.toString(new Random().nextInt(Integer.MAX_VALUE));
    public CloseableHttpClient client;

    public Client(String country) {
        String login = "customer-"+username+(country!=null ? "-cc-"+country : "")
            +"-sessid-" + session_id;
        HttpHost entry_node = new HttpHost("pr.oxylabs.io:7777");
        CredentialsProvider credentials_provider = new BasicCredentialsProvider();
        credentials_provider.setCredentials(new AuthScope(entry_node),
            new UsernamePasswordCredentials(login, password));
        client = HttpClients.custom()
            .setConnectionManager(new BasicHttpClientConnectionManager())
            .setProxy(entry_node)
            .setDefaultCredentialsProvider(credentials_provider)
            .build();
    }

    public String request(String url) throws IOException {
        HttpGet request = new HttpGet(url);
        CloseableHttpResponse response = client.execute(request);
        try {
            return EntityUtils.toString(response.getEntity());
        } finally { response.close(); }
    }

    public void close() throws IOException { client.close(); }
}

public class Example {
    public static void main(String[] args) throws IOException {
        Client client = new Client("de");
        try {
            System.out.println(client.request("https://ip.oxylabs.io/location"));
        } finally { client.close(); }
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Client : WebClient
{
    public static string username = "USERNAME";
    public static string password = "PASSWORD";
    public string session_id = new Random().Next().ToString();

    public Client(string country_iso = null)
    {
        this.Proxy = new WebProxy("pr.oxylabs.io:7777");
        var login = "customer-"+username+(country_iso != null ? "-cc-"+country_iso : "")
            +"-sessid-"+session_id;
        this.Proxy.Credentials = new NetworkCredential(login, password);
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address) as HttpWebRequest;
        request.ConnectionGroupName = session_id;
        return request;
    }
}

class Example
{
    static void Main()
    {
        var client = new Client("de");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'
require 'net/https'

entry_node = 'pr.oxylabs.io'
entry_port = '7777'
username = 'USERNAME'
password = 'PASSWORD'
session_id = Random.rand(1000000)

uri = URI.parse("https://ip.oxylabs.io/location")
headers = {
    'Accept-Encoding' => 'gzip'
}

proxy = Net::HTTP::Proxy(entry_node, entry_port, "#{username}-cc-DE-sessid-#{session_id}", password)
http = proxy.new(uri.host,uri.port)

if uri.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end

req = Net::HTTP::Get.new(uri.path, headers)

result = http.start do |con|
    con.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

### Extend session duration

The `sesstime` parameter is used together with `sessid` to keep a session running longer than the default 10 minutes or up to 60 seconds of inactivity (no requests).

{% hint style="success" %}
**Note:** You can use the `sesstime` parameter to **maintain the same IP for up to 1440 minutes** (24 hours). \
However, because the mobile proxy pool is dynamic, your connection may end sooner. If that happens, start a session with a new session parameter.
{% endhint %}

{% hint style="warning" %}
**Disclaimer:** The session time parameter does not guarantee that all of your requests finish before the session ends. The session expires once the time limit is reached, even if some requests are still in progress.
{% endhint %}

#### **Credentials list example:**

Example represents a list of credentials that establish different sessions with different sessions time (minutes).

```
customer-USERNAME-cc-DE-sessid-qwert-sesstime-10:PASSWORD
customer-USERNAME-cc-US-sessid-asdfg-sesstime-20:PASSWORD
customer-USERNAME-cc-GB-sessid-zxcvb-sesstime-30:PASSWORD
```

#### Code example

We chose the same German IP as in the previous example, this time we are adding `sessid`string and `sesstime` parameter for 7 minutes:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-sessid-abcd1234-sesstime-7:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$country = 'DE';
$session = mt_rand();
$sesstime = 7;
$proxy = 'pr.oxylabs.io:7777';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username-cc-$country-sessid-$session-sesstime-$sesstime:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
country = 'DE'
session = random.random()
sesstime = 7
entry = ('http://customer-%s-cc-%s-sessid-%s-sesstime-%d:%s@pr.oxylabs.io:7777' %
    (username, country, city, session, sesstime, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import java.io.*;
import java.util.Random;
import org.apache.http.HttpHost;
import org.apache.http.auth.*;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.fluent.Request;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

class Client {
    public static final String username = "USERNAME";
    public static final String password = "PASSWORD";
    public String session_id = Integer.toString(new Random().nextInt(Integer.MAX_VALUE));
    public String sesstime = "7";
    public CloseableHttpClient client;

    public Client(String country) {
        String login = "customer-"+username+(country_iso != null ? "-cc-"+country_iso : "")+"-sessid-"+session_id+"-sesstime-" +sesstime;
        HttpHost entry_node = new HttpHost("pr.oxylabs.io:7777");
        CredentialsProvider credentials_provider = new BasicCredentialsProvider();
        credentials_provider.setCredentials(new AuthScope(entry_node),
            new UsernamePasswordCredentials(login, password));
        client = HttpClients.custom()
            .setConnectionManager(new BasicHttpClientConnectionManager())
            .setProxy(entry_node)
            .setDefaultCredentialsProvider(credentials_provider)
            .build();
    }

    public String request(String url) throws IOException {
        HttpGet request = new HttpGet(url);
        CloseableHttpResponse response = client.execute(request);
        try {
            return EntityUtils.toString(response.getEntity());
        } finally { response.close(); }
    }

    public void close() throws IOException { client.close(); }
}

public class Example {
    public static void main(String[] args) throws IOException {
        Client client = new Client("de");
        try {
            System.out.println(client.request("https://ip.oxylabs.io/location"));
        } finally { client.close(); }
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Client : WebClient
{
    public static string username = "USERNAME";
    public static string password = "PASSWORD";
    public string session_id = new Random().Next().ToString();

    public Client(string country_iso = null)
    {
        this.Proxy = new WebProxy("pr.oxylabs.io:7777");
        var login = "customer-"+username+(country_iso != null ? "-cc-"+country_iso : "")
            +"-sessid-"+session_id;
        this.Proxy.Credentials = new NetworkCredential(login, password);
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address) as HttpWebRequest;
        request.ConnectionGroupName = session_id;
        return request;
    }
}

class Example
{
    static void Main()
    {
        var client = new Client("de");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'
require 'net/https'

entry_node = 'pr.oxylabs.io'
entry_port = '7777'
username = 'USERNAME'
password = 'PASSWORD'
session_id = Random.rand(1000000)
sesstime = 7

uri = URI.parse("https://ip.oxylabs.io/location")
headers = {
    'Accept-Encoding' => 'gzip'
}

proxy = Net::HTTP::Proxy(entry_node, entry_port, "#{username}-cc-DE-sessid-#{session_id}-sesstime-#{sesstime}", password)
http = proxy.new(uri.host,uri.port)

if uri.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end

req = Net::HTTP::Get.new(uri.path, headers)

result = http.start do |con|
    con.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}

To set up sticky proxy entry nodes, learn more [**here**](/products/proxies/mobile-proxies/session-control/sticky-proxy-entry-nodes).

### Control session IP rotation

The `sessid_oneip` parameter is an alternative to `sessid` for cases where you must keep the exact same IP for the entire session.

With a regular `sessid`, if the assigned exit node goes offline before the session time expires, the system automatically assigns a new IP and your session continues. With `sessid_oneip`, the session is bound to a single exit node: once that IP is no longer available, instead of rotating to a new one, the request fails with an HTTP `502` response. At that point, start a new session with a fresh `sessid_oneip` value. `sessid_oneip` can be combined with `sesstime` in the same way as `sessid`.

{% hint style="info" %}
**Note:** `sessid_oneip` is an optional alternative to `sessid`. The default `sessid` behavior (automatic rotation to a new IP when the exit node expires) is unchanged.
{% endhint %}

#### **Credentials list example:**

The following credentials each establish a separate single-IP session, with a different country and session time:

```
customer-USERNAME-cc-DE-sessid_oneip-qwert-sesstime-10:PASSWORD
customer-USERNAME-cc-US-sessid_oneip-asdfg-sesstime-20:PASSWORD
customer-USERNAME-cc-GB-sessid_oneip-zxcvb-sesstime-30:PASSWORD
```

#### Code example

This example uses a German (`DE`) IP with `sessid_oneip-qwert` and a `sesstime` of 10 minutes. The IP stays fixed for the session; if it becomes unavailable, the request returns HTTP `502` instead of rotating:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x pr.oxylabs.io:7777 -U "customer-USERNAME-cc-DE-sessid_oneip-qwert-sesstime-10:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}
{% endtabs %}

To use another language, take any `sessid` sample from the sections above and replace `sessid` with `sessid_oneip` in the login string.


# Sticky Proxy Entry Nodes

Find Sticky Proxy Entry Nodes for Oxylabs Mobile Proxies. Maintain IPs using country-specific ports and access the full list of supported regions.

The country-specific sticky proxy entry point will return the same IP with every new request while you use the same port. IP stickiness works for up to 10 minutes. After that, the IP is replaced with a new one.

You do not need to pass any additional parameters, just `customer-username:password`. If you have whitelisted IPs, you do not need to pass login credentials. Country-specific ports do not support city-level results.

Please see the dashboard for entry point information. Download a complete list of sticky entry points or see them in the table below.

{% file src="/files/9iaqY6oaoc8X7lW6q31e" %}

| <p>Random<br>pr.oxylabs.io:10000 - 49999</p>                                                                                                            | <p>US<br>us-pr.oxylabs.io:10001 - 19999</p>                                                                                                             | <p><img src="https://residential.oxylabs.io/0d067fa04caa8df594891aa2d10ce5fe.svg" alt="" data-size="line">Canada<br>ca-pr.oxylabs.io:30001 - 39999</p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <p>Great Britain<br>gb-pr.oxylabs.io:20001 - 29999</p>                                                                                                  | <p><img src="https://residential.oxylabs.io/ba83717811755fd02b806c07c79598aa.svg" alt="" data-size="line">Germany<br>de-pr.oxylabs.io:30001 - 39999</p> | <p><img src="https://residential.oxylabs.io/48ed3d318197d7c80ecd9009688330c4.svg" alt="" data-size="line">France<br>fr-pr.oxylabs.io:40001 - 49999</p> |
| <p>Spain<br>es-pr.oxylabs.io:10001 - 19999</p>                                                                                                          | <p>Italy<br>it-pr.oxylabs.io:20001 - 29999</p>                                                                                                          | <p>Sweden<br>se-pr.oxylabs.io:30001 - 39999</p>                                                                                                        |
| <p><img src="https://residential.oxylabs.io/9823f616a21e743394d856b6292bf8fd.svg" alt="" data-size="line">Greece<br>gr-pr.oxylabs.io:40001 - 49999</p>  | <p>Portugal<br>pt-pr.oxylabs.io:10001 - 19999</p>                                                                                                       | <p>Netherlands<br>nl-pr.oxylabs.io:20001 - 29999</p>                                                                                                   |
| <p><img src="https://residential.oxylabs.io/3911e782a75880578ad6aaf6c43cf4cc.svg" alt="" data-size="line">Belgium<br>be-pr.oxylabs.io:30001 - 39999</p> | <p>Russia<br>ru-pr.oxylabs.io:40001 - 49999</p>                                                                                                         | <p>Ukraine<br>ua-pr.oxylabs.io:10001 - 19999</p>                                                                                                       |
| <p>Poland<br>pl-pr.oxylabs.io:20001 - 29999</p>                                                                                                         | <p>Israel<br>il-pr.oxylabs.io:20001 - 29999</p>                                                                                                         | <p>Turkey<br>tr-pr.oxylabs.io:30001 - 39999</p>                                                                                                        |
| <p>Australia<br>au-pr.oxylabs.io:40001 - 49999</p>                                                                                                      | <p>Malaysia<br>my-pr.oxylabs.io:10001 - 19999</p>                                                                                                       | <p>Thailand<br>th-pr.oxylabs.io:20001 - 29999</p>                                                                                                      |
| <p>South Korea<br>kr-pr.oxylabs.io:30001 - 39999</p>                                                                                                    | <p>Japan<br>jp-pr.oxylabs.io:40001 - 49999</p>                                                                                                          | <p>Philippines<br>ph-pr.oxylabs.io:10001 - 19999</p>                                                                                                   |
| <p>Singapore<br>sg-pr.oxylabs.io:20001 - 29999</p>                                                                                                      | <p>China<br>cn-pr.oxylabs.io:30001 - 39999</p>                                                                                                          | <p>Hong Kong<br>hk-pr.oxylabs.io:40001 - 49999</p>                                                                                                     |
| <p>Taiwan<br>tw-pr.oxylabs.io:10001 - 19999</p>                                                                                                         | <p>India<br>in-pr.oxylabs.io:20001 - 29999</p>                                                                                                          | <p>Pakistan<br>pk-pr.oxylabs.io:30001 - 39999</p>                                                                                                      |
| <p>Iran<br>ir-pr.oxylabs.io:40001 - 49999</p>                                                                                                           | <p>Indonesia<br>id-pr.oxylabs.io:10001 - 19999</p>                                                                                                      | <p>Azerbaijan<br>az-pr.oxylabs.io:20001 - 29999</p>                                                                                                    |
| <p>Kazakhstan<br>kz-pr.oxylabs.io:30001 - 39999</p>                                                                                                     | <p>UAE<br>ae-pr.oxylabs.io:40001 - 49999</p>                                                                                                            | <p>Mexico<br>mx-pr.oxylabs.io:10001 - 19999</p>                                                                                                        |
| <p>Brazil<br>br-pr.oxylabs.io:20001 - 29999</p>                                                                                                         | <p>Argentina<br>ar-pr.oxylabs.io:30001 - 39999</p>                                                                                                      | <p>Chile<br>cl-pr.oxylabs.io:40001 - 49999</p>                                                                                                         |
| <p>Peru<br>pe-pr.oxylabs.io:10001 - 19999</p>                                                                                                           | <p>Ecuador<br>ec-pr.oxylabs.io:20001 - 29999</p>                                                                                                        | <p>Colombia<br>co-pr.oxylabs.io:30001 - 39999</p>                                                                                                      |
| <p>South Africa<br>za-pr.oxylabs.io:40001 - 49999</p>                                                                                                   | <p>Egypt<br>eg-pr.oxylabs.io:10001 - 19999</p>                                                                                                          | <p>Saudi Arabia<br>sa-pr.oxylabs.io:44001 - 44999</p>                                                                                                  |
| <p>Denmark<br>dk-pr.oxylabs.io:19001 - 19999</p>                                                                                                        | <p>Mali<br>ml-pr.oxylabs.io:13001 - 13999</p>                                                                                                           | <p>Cyprus<br>cy-pr.oxylabs.io:35001 - 35999</p>                                                                                                        |
| <p>Honduras<br>hn-pr.oxylabs.io:48001 - 48999</p>                                                                                                       | <p>Georgia<br>ge-pr.oxylabs.io:36001 - 36999</p>                                                                                                        | <p>Serbia<br>rs-pr.oxylabs.io:36001 - 36999</p>                                                                                                        |
| <p>Costa Rica<br>cr-pr.oxylabs.io:44001 - 44999</p>                                                                                                     | <p>Malta<br>mt-pr.oxylabs.io:30001 - 30999</p>                                                                                                          | <p>Haiti<br>ht-pr.oxylabs.io:47001 - 47999</p>                                                                                                         |
| <p>Senegal<br>sn-pr.oxylabs.io:19001 - 19999</p>                                                                                                        | <p>Slovenia<br>si-pr.oxylabs.io:38001 - 38999</p>                                                                                                       | <p>Cameroon<br>cm-pr.oxylabs.io:41001 - 41999</p>                                                                                                      |
| <p>Djibouti<br>dj-pr.oxylabs.io:46001 - 46999</p>                                                                                                       | <p>Angola<br>ao-pr.oxylabs.io:40001 - 40999</p>                                                                                                         | <p>Liberia<br>lr-pr.oxylabs.io:11001 - 11999</p>                                                                                                       |
| <p>Afghanistan<br>af-pr.oxylabs.io:28001 - 28999</p>                                                                                                    | <p>Bangladesh<br>bd-pr.oxylabs.io:30001 - 30999</p>                                                                                                     | <p>Bahamas<br>bs-pr.oxylabs.io:41001 - 41999</p>                                                                                                       |
| <p>Hungary<br>hu-pr.oxylabs.io:23001 - 23999</p>                                                                                                        | <p>Slovakia<br>sk-pr.oxylabs.io:37001 - 37999</p>                                                                                                       | <p>Dominica<br>dm-pr.oxylabs.io:46001 - 46999</p>                                                                                                      |
| <p>Kenya<br>ke-pr.oxylabs.io:10001 - 10999</p>                                                                                                          | <p>Bosnia and Herzegovina<br>ba-pr.oxylabs.io:13001 - 13999</p>                                                                                         | <p>Nigeria<br>ng-pr.oxylabs.io:18001 - 18999</p>                                                                                                       |
| <p>Qatar<br>qa-pr.oxylabs.io:43001 - 43999</p>                                                                                                          | <p>Yemen<br>ye-pr.oxylabs.io:48001 - 48999</p>                                                                                                          | <p>Belize<br>bz-pr.oxylabs.io:42001 - 42999</p>                                                                                                        |
| <p>Chad<br>td-pr.oxylabs.io:43001 - 43999</p>                                                                                                           | <p>Tunisia<br>tn-pr.oxylabs.io:25001 - 25999</p>                                                                                                        | <p>Zimbabwe<br>zw-pr.oxylabs.io:21001 - 21999</p>                                                                                                      |
| <p>Zambia<br>zm-pr.oxylabs.io:27001 - 27999</p>                                                                                                         | <p>Bahrain<br>bh-pr.oxylabs.io:29001 - 29999</p>                                                                                                        | <p>Austria<br>at-pr.oxylabs.io:11001 - 11999</p>                                                                                                       |
| <p>Ireland<br>ie-pr.oxylabs.io:25001 - 25999</p>                                                                                                        | <p>Norway<br>no-pr.oxylabs.io:34001 - 34999</p>                                                                                                         | <p>Ethiopia<br>et-pr.oxylabs.io:45001 - 45999</p>                                                                                                      |
| <p>Côte d'Ivoire<br>ci-pr.oxylabs.io:49001 - 49999</p>                                                                                                  | <p>Fiji<br>fj-pr.oxylabs.io:14001 - 14999</p>                                                                                                           | <p>South Sudan<br>ss-pr.oxylabs.io:22001 - 22999</p>                                                                                                   |
| <p>Jamaica<br>jm-pr.oxylabs.io:49001 - 49999</p>                                                                                                        | <p>Belarus<br>by-pr.oxylabs.io:15001 - 15999</p>                                                                                                        | <p>Finland<br>fi-pr.oxylabs.io:21001 - 21999</p>                                                                                                       |
| <p>Monaco<br>mc-pr.oxylabs.io:31001 - 31999</p>                                                                                                         | <p>New Zealand<br>nz-pr.oxylabs.io:15001 - 15999</p>                                                                                                    | <p>Turkmenistan<br>tm-pr.oxylabs.io:46001 - 46999</p>                                                                                                  |
| <p>Armenia<br>am-pr.oxylabs.io:31001 - 31999</p>                                                                                                        | <p>Iceland<br>is-pr.oxylabs.io:24001 - 24999</p>                                                                                                        | <p>Mauritania<br>mr-pr.oxylabs.io:14001 - 14999</p>                                                                                                    |
| <p>Czech Republic<br>cz-pr.oxylabs.io:18001 - 18999</p>                                                                                                 | <p>Venezuela<br>ve-pr.oxylabs.io:19001 - 19999</p>                                                                                                      | <p>Lebanon<br>lb-pr.oxylabs.io:39001 - 39999</p>                                                                                                       |
| <p>Mongolia<br>mn-pr.oxylabs.io:41001 - 41999</p>                                                                                                       | <p>Benin<br>bj-pr.oxylabs.io:44001 - 44999</p>                                                                                                          | <p>Sudan<br>sd-pr.oxylabs.io:23001 - 23999</p>                                                                                                         |
| <p>Jordan<br>jo-pr.oxylabs.io:38001 - 38999</p>                                                                                                         | <p>Estonia<br>ee-pr.oxylabs.io:20001 - 20999</p>                                                                                                        | <p>Paraguay<br>py-pr.oxylabs.io:17001 - 17999</p>                                                                                                      |
| <p>Central African Republic<br>cf-pr.oxylabs.io:42001 - 42999</p>                                                                                       | <p>Cambodia<br>kh-pr.oxylabs.io:34001 - 34999</p>                                                                                                       | <p>Panama<br>pa-pr.oxylabs.io:10001 - 10999</p>                                                                                                        |
| <p>Uruguay<br>uy-pr.oxylabs.io:18001 - 18999</p>                                                                                                        | <p>Ghana<br>gh-pr.oxylabs.io:48001 - 48999</p>                                                                                                          | <p>Uzbekistan<br>uz-pr.oxylabs.io:47001 - 47999</p>                                                                                                    |
| <p>Albania<br>al-pr.oxylabs.io:49001 - 49999</p>                                                                                                        | <p>Morocco<br>ma-pr.oxylabs.io:16001 - 16999</p>                                                                                                        | <p>Bhutan<br>bt-pr.oxylabs.io:32001 - 32999</p>                                                                                                        |
| <p>Mauritius<br>mu-pr.oxylabs.io:15001 - 15999</p>                                                                                                      | <p>Latvia<br>lv-pr.oxylabs.io:26001 - 26999</p>                                                                                                         | <p>Madagascar<br>mg-pr.oxylabs.io:12001 - 12999</p>                                                                                                    |
| <p>Lithuania<br>lt-pr.oxylabs.io:28001 - 28999</p>                                                                                                      | <p>Moldova<br>md-pr.oxylabs.io:32001 - 32999</p>                                                                                                        | <p>Montenegro<br>me-pr.oxylabs.io:33001 - 33999</p>                                                                                                    |
| <p>Romania<br>ro-pr.oxylabs.io:35001 - 35999</p>                                                                                                        | <p>Iraq<br>iq-pr.oxylabs.io:37001 - 37999</p>                                                                                                           | <p>Gambia<br>gm-pr.oxylabs.io:47001 - 47999</p>                                                                                                        |
| <p>Mozambique<br>mz-pr.oxylabs.io:17001 - 17999</p>                                                                                                     | <p>Croatia<br>hr-pr.oxylabs.io:16001 - 16999</p>                                                                                                        | <p>Puerto Rico<br>pr-pr.oxylabs.io:12001 - 12999</p>                                                                                                   |
| <p>Cuba<br>cu-pr.oxylabs.io:45001 - 45999</p>                                                                                                           | <p>Aruba<br>aw-pr.oxylabs.io:10001 - 10999</p>                                                                                                          | <p>Seychelles<br>sc-pr.oxylabs.io:20001 - 20999</p>                                                                                                    |
| <p>Macedonia<br>mk-pr.oxylabs.io:40001 - 40999</p>                                                                                                      | <p>Maldives<br>mv-pr.oxylabs.io:40001 - 40999</p>                                                                                                       | <p>Oman<br>om-pr.oxylabs.io:42001 - 42999</p>                                                                                                          |
| <p>Liechtenstein<br>li-pr.oxylabs.io:27001 - 27999</p>                                                                                                  | <p>Switzerland<br>ch-pr.oxylabs.io:39001 - 39999</p>                                                                                                    | <p>Bolivia<br>bo-pr.oxylabs.io:16001 - 16999</p>                                                                                                       |
| <p>Uganda<br>ug-pr.oxylabs.io:26001 - 26999</p>                                                                                                         | <p>Bulgaria<br>bg-pr.oxylabs.io:14001 - 14999</p>                                                                                                       | <p>Myanmar<br>mm-pr.oxylabs.io:33001 - 33999</p>                                                                                                       |
| <p>Andorra<br>ad-pr.oxylabs.io:10001 - 10999</p>                                                                                                        | <p>Togo<br>tg-pr.oxylabs.io:24001 - 24999</p>                                                                                                           | <p>British Virgin Islands<br>vg-pr.oxylabs.io:43001 - 43999</p>                                                                                        |
| <p>Trinidad and Tobago<br>tt-pr.oxylabs.io:13001 - 13999</p>                                                                                            | <p>Luxembourg<br>lu-pr.oxylabs.io:29001 - 29999</p>                                                                                                     | <p>​European Union</p><p>eu-pr.oxylabs.io:10001 - 29999</p>                                                                                            |

#### Code examples

In this example, we run a query from a Turkish IP to `ip.oxylabs.io`. The same IP will stay for up to 10 minutes. We have chosen port 30001. However, Turkey's sticky entry points cover ports from 30001 to 39999.

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x tr-pr.oxylabs.io:30001 -U "customer-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'tr-pr.oxylabs.io:30001';
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
curl_setopt($query, CURLOPT_PROXYUSERPWD, "customer-$username:$password");
$output = curl_exec($query);
curl_close($query);
if ($output)
    echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import urllib.request
import random
username = 'USERNAME'
password = 'PASSWORD'
entry = ('http://customer-%s:%s@tr-pr.oxylabs.io:30001' %
    (username, password))
query = urllib.request.ProxyHandler({
    'http': entry,
    'https': entry,
})
execute = urllib.request.build_opener(query)
print(execute.open('https://ip.oxylabs.io/location').read())
```

{% endtab %}

{% tab title="Java" %}

```java
package example;

import org.apache.http.HttpHost;
import org.apache.http.client.fluent.*;

public class Example {
    public static void main(String[] args) throws Exception {
        HttpHost entry = new HttpHost("tr-pr.oxylabs.io", 30001);
        String query = Executor.newInstance()
            .auth(entry, "customer-USERNAME", "PASS")
            .execute(Request.Get("http://ip.oxylabs.io/location").viaProxy(entry))
            .returnContent().asString();
        System.out.println(query);
    }
}
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("tr-pr.oxylabs.io:30001");
        client.Proxy.Credentials = new NetworkCredential("customer-USERNAME", "PASSWORD");
        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}

{% tab title="Ruby" %}

```ruby
require 'uri'
require 'net/http'

uri = URI.parse('https://ip.oxylabs.io/location')
proxy = Net::HTTP::Proxy('tr-pr.oxylabs.io', 30001, 'customer-USERNAME', 'PASSWORD')

req = Net::HTTP::Get.new(uri.path)

result = proxy.start(uri.host,uri.port) do |http|
    http.request(req)
end

puts result.body
```

{% endtab %}
{% endtabs %}


# Protocols

Explore supported Mobile Proxy protocols and learn how to configure HTTP, HTTPS, and SOCKS5 connections.

#### HTTP

Our documentation includes code examples showcasing how to connect to the proxies using `HTTP` protocol. The protocol is supported by common libraries and third-party software.

#### HTTPS

You can also use the fully encrypted connection using `HTTPS` protocol for an extra layer of security. For that, you have to add `https://` to your proxy entry point. For example: `https://pr.oxylabs.io:7777` (this also applies to [**country specific entry nodes**](/products/proxies/mobile-proxies/location-settings/country#country-specific-entry-nodes)).&#x20;

Please note that some libraries (or their older versions) and some 3rd party tools may not support `HTTPS` protocol, so double-check before making changes to your code.

### **HTTP/3**

`HTTP3` is supported via proxies that can handle `UDP` traffic, as it is based on `QUIC`, a UDP-based transport protocol.

Standard `HTTP`/`HTTPS` proxy endpoints are not compatible with `HTTP3`, so to proxy requests, you need to use a `SOCKS5` proxy with `UDP` traffic support, available through the following dedicated endpoint:

```
socks.pr.oxylabs.io:7777
```

Most common tools do not natively support `HTTP3` over `SOCKS5` with `UDP`, so custom implementations may be required, such as our custom HTTP/3 [Go](https://github.com/oxylabs/gohttp3viaSOCKS5UDP), [C#](https://github.com/oxylabs/csharphttp3viaSOCKS5UDP), and [Java](https://github.com/oxylabs/javahttp3viaSOCKS5UDP) solution repositories on GitHub.

{% hint style="info" %}
**Note:** Make sure your firewall allows UDP traffic on the required ports, as many ports block UDP by default
{% endhint %}

#### **SOCKS5**&#x20;

{% hint style="info" %}
`SOCKS5` `UDP` connection is now available in beta. Contact your Account Manager or Customer Success team to enable testing.
{% endhint %}

Oxylabs Mobile Proxies support only `TCP` connection at the moment.&#x20;

For using `SOCKS5` protocol, you have to add `socks5h` in your request, for example:

```bash
curl -x socks5h://pr.oxylabs.io:7777 -U "customer-USERNAME:PASSWORD" ip.oxylabs.io/location
```

Please note that at the moment, `SOCKS5` protocol does not support country specific entry nodes. You can target specific locations by adding [**additional parameters**](/products/proxies/mobile-proxies/making-requests) in your username. Here is a sample of targeting France:

```bash
curl -x socks5h://pr.oxylabs.io:7777 -U "customer-USERNAME-cc-FR:PASSWORD" ip.oxylabs.io/location
```

#### Ports of proxies

The default configuration of proxy ports includes `80` and `443`, which are standard ports designed to accommodate the `HTTP` and `HTTPS` protocols, as outlined in the table below. To access other ports, it is necessary to undergo compliance verification, please contact our [**support**](mailto:support@oxylabs.io).

| Protocol | Port  |
| -------- | ----- |
| `HTTP`   | `80`  |
| `HTTPS`  | `443` |


# Whitelisting IPs

Whitelist IPs for Mobile Proxies to access the pool without credentials. Learn to configure IPv4 addresses and check protocol support.

IP whitelisting allows you to access our Mobile Proxy pool by simply connecting via whitelisted IPs.&#x20;

{% hint style="info" %}
You can only add IPs that are in IPv4 format (xx.xx.xx.xx). Make sure that the IP you are adding is yours and you are **not using a Proxy or VPN service** at the time.
{% endhint %}

{% hint style="info" %}
`SOCKS5` protocol currently does not support whitelisted IPs. However, you can use other supported protocols for whitelisting.&#x20;
{% endhint %}

#### Create an IP whitelist

To whitelist IP addresses log in to the [**dashboard**](https://dashboard.oxylabs.io/), on the left hand side select **Mobile Proxies** → **Whitelist**, click on **Edit whitelist**. Enter **up to 10 IPs** in text format and click Submit.

<figure><img src="/files/UgflLSscTvUAiGmsJIgT" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If it’s important to distinguish traffic statistics among proxy users, we recommend not using the whitelisted IPs functionality, especially when the same public IP might be shared among service users (teams, departments, etc.).&#x20;

**Note:** If using a browser or headless browser, it will attempt to use the proxy without regular auth and will only send auth if it receives a `407`.
{% endhint %}

If you want to remove or update the list, edit it as a text document and click **Submit**. If you need more IPs, please get in touch with our customer support team at [**support@oxylabs.io**](mailto:support@oxylabs.io) or via the 24/7 live chat on our [**website**](https://oxylabs.io/).&#x20;


# Endpoint Generator

Generate custom Mobile Proxy endpoints with your preferred locations and session types. Export lists instantly in CSV, JSON, or TXT.

The Endpoint Generator is built to help you integrate Mobile Proxies effortlessly. Select location and session type parameters, and export the list of endpoints in CSV, JSON, or TXT formats. If you have already purchased Mobile Proxies, you will find the Endpoint Generator by logging in to the [**dashboard**](https://dashboard.oxylabs.io/?route=/overview/MP/endpoint-generator).

Follow these steps to get Mobile Proxies endpoints list:

{% stepper %}
{% step %}

### Select a Region

* Choose **Hong Kong** or **Beijing** if you are connecting from [**China**](/products/proxies/mobile-proxies/making-requests/entry-node-for-china)
* **Global** for the rest of the world
  {% endstep %}

{% step %}

### Set the Output Format

Select the format in which you would like to receive your endpoints. Available formats include plain **endpoint:port** or with **HTTP**, **HTTPS**, or **SOCKS5** protocol prefix.
{% endstep %}

{% step %}

### Select the **Authentication Method**

* **User authentication** – to use this method, you need to create a proxy user. When you have one, select your proxy user’s username and enter a password.
* [**Whitelisted IPs**](/products/proxies/mobile-proxies/whitelisting-ips) **–** this method does not require a username and password. We take your whitelisted IPs list automatically.

<figure><img src="/files/3RXP9CcBYI10xJQRxvry" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Select the Endpoint Type

* [**Backconnect entry**](/products/proxies/mobile-proxies/making-requests) – adds additional parameters to your username. It supports country, state, and city targeting.
* [**Country entry**](/products/proxies/mobile-proxies/location-settings/country#country-specific-entry-nodes) – requires no additional parameters in a username. It uses a country-specific entry node and supports country-level targeting.
  {% endstep %}

{% step %}

### Set the Location Settings

Select a specific **country** or set it to **Any** to get a random location. Refer to the [location settings](/products/proxies/mobile-proxies/location-settings) page to learn more.

<figure><img src="/files/8MAilxWXKVnau2ZgUuo4" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Select the **Session Type**

* [**Sticky session**](/products/proxies/mobile-proxies/session-control) – allows you to keep the same IP address for a specified duration.
  * If you have chosen the **backconnect entry,** you can specify the [**session duration**](/products/proxies/mobile-proxies/session-control#session-time) that lasts for up to *1440* minutes.
  * If you have chosen the **country entry**, your [**sticky country session**](/products/proxies/mobile-proxies/session-control/sticky-proxy-entry-nodes) will last up to *10* minutes.
* **Rotating session** – returns a new IP address with every request.
  {% endstep %}

{% step %}

### Export the endpoints list

Enter the number of endpoints you need and export your list in one of the suggested formats, or simply copy it to the clipboard.

<figure><img src="/files/nbpxvIfmIO0K4Xr6zbCP" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

That's it! You have successfully created a ready-to-use list of Mobile Proxies endpoints!&#x20;


# Restricted Targets

Learn more about restricted targets and website categories for Oxylabs Mobile Proxies.

Some websites are restricted on our Mobile Proxy network to avoid abuse and unclear activities.

{% hint style="success" %}
**Some targets can be accessed after going through a short KYC procedure.** Get in touch with our [**Customer Support Team**](mailto:support@oxylabs.io) if your target falls under the mentioned groups to ensure you can access the target before purchasing.
{% endhint %}

**❗️The list includes but is not limited to targets such as:**

| Target category                          | Example                          |
| ---------------------------------------- | -------------------------------- |
| Entertainment & streaming                | Netflix, Spotify, Twitch, Disney |
| Banking and other financial institutions | PayPal, Bank of America, Binance |
| Government websites                      | usa.gov, canada.ca               |
| Gaming                                   | Playstation, Steam               |
| Ticketing                                | Ticketmaster, Eventbrite         |
| Mailing                                  | Outlook, Yahoo mail              |
| Ads                                      | Google Tag Manager, Doubleclick  |
| IP checking websites\*                   | ipinfo.info, 2ip.io              |

\*Please use ip.oxylabs.io ip.oxylabs.io/json or ip.oxylabs.io/location to check your IP address.

Get in touch with our customer support team at [**support@oxylabs.io**](mailto:support@oxylabs.io) or via the 24/7 live chat on our [**website**](https://oxylabs.io/).


# Response Codes

Learn about different response codes for Oxylabs Mobile Proxies. Understand issues under the codes and resolve common status errors.

Errors originating from our infrastructure will include additional information in the `X-Error-Description` **response header**. This header provides details about the error and guidance on what to do next.

{% hint style="warning" %}
&#x20;If you receive an error from the targeted website, this header will not be included in the response. In such cases, please review your scraping setup and see if it helps resolving the issue.
{% endhint %}

If you encounter a response code not listed here, please reach out to Customer Success or your Account Manager for further assistance.

<table><thead><tr><th width="236.453125">Response Code</th><th>Error Message</th><th>Description </th></tr></thead><tbody><tr><td><code>400</code></td><td><code>Bad Request</code></td><td>Could not parse the request. Please check if the request is formatted correctly.</td></tr><tr><td><code>400</code></td><td><code>Bad Request</code></td><td>SOCKS version unsupported. Please use SOCKS5 to make requests.</td></tr><tr><td><code>400</code></td><td><code>Bad Request</code></td><td>Unsupported parameters were used. Please contact support or your account manager if you have any questions.</td></tr><tr><td><code>400</code></td><td><code>Bad Request</code></td><td>Invalid HTTP request received. Please try again.</td></tr><tr><td><code>403</code></td><td><code>Access Denied</code></td><td>Restricted target. Please contact support or your account manager if you have any questions.</td></tr><tr><td><code>407</code></td><td><code>Access Denied</code></td><td>User authentication failed. Please check your credentials and try again.</td></tr><tr><td><code>407</code></td><td><code>Access Denied</code></td><td>Traffic limit reached. Please contact support or your account manager if you have any questions.</td></tr><tr><td><code>500</code></td><td><code>Internal Server Error</code></td><td>We have encountered an internal error. Please try again.</td></tr><tr><td><code>502</code></td><td><code>Bad Response</code></td><td>Invalid HTTP response received during the request. Please try again.</td></tr><tr><td><code>502</code></td><td><code>Bad Response</code></td><td>Invalid response received during the request. Please try again.</td></tr><tr><td><code>502</code></td><td><code>Bad Gateway</code></td><td>Session failed. Please start a new session.</td></tr><tr><td><code>502</code></td><td><code>Bad Gateway</code></td><td>Exit node not found (session ended). Try using different filters (or start a new session).</td></tr><tr><td><code>502</code></td><td><code>Bad Gateway</code></td><td>We have encountered an error. Please try again.</td></tr><tr><td><code>502</code></td><td><code>Bad Gateway</code></td><td>Client disconnected. Please try again.</td></tr><tr><td><code>504</code></td><td><code>Timeout</code></td><td>Request timed out. Please try again.</td></tr><tr><td><code>504</code></td><td><code>Timeout</code></td><td>Unable to reach the target. Please check if the target URL is correct and try again.</td></tr><tr><td><code>522</code></td><td><code>Bad Response</code></td><td>Invalid response received during the request. Please try again.</td></tr></tbody></table>


# Public API

Programmatically manage Mobile Proxy sub-users, set traffic limits, and track usage statistics with the Public API.

The [**Public API**](https://residential-api.oxylabs.io/v2/docs) enables you to **manage proxy users programmatically** without using the dashboard. You can create, delete, and modify proxy sub-users, set traffic usage limits, and view current and historic traffic usage for Mobile Proxies.

### Available paths

**Base endpoint:** `https://residential-api.oxylabs.io/v2`

Combine the base endpoint with the path to perform specific actions:

<table data-full-width="false"><thead><tr><th width="99.15625">Method</th><th width="449.92578125">Path</th><th>Description</th></tr></thead><tbody><tr><td><mark style="color:$success;">POST</mark></td><td><code>/login</code></td><td>Authenticate to get the access token (JWT).</td></tr><tr><td><mark style="color:blue;">GET</mark></td><td><code>/users/{userId}/sub-users</code></td><td>Retrieve all active sub-users</td></tr><tr><td><mark style="color:$success;">POST</mark></td><td><code>/users/{userId}/sub-users</code></td><td>Create a new sub-user.</td></tr><tr><td><mark style="color:blue;">GET</mark></td><td><code>/users/{userId}/sub-users/{subUserId}</code></td><td>Retrieve traffic usage statistics for a specific sub-user.</td></tr><tr><td><mark style="color:$primary;">PATCH</mark></td><td><code>/users/{userId}/sub-users/{subUserId}</code></td><td>Modify a sub-user.</td></tr><tr><td><mark style="color:red;">DELETE</mark></td><td><code>/users/{userId}/sub-users/{subUserId}</code></td><td>Delete a sub-user.</td></tr><tr><td><mark style="color:blue;">GET</mark></td><td><code>/users/{userId}/sub-users/{subUserId}/target-stats</code></td><td>Retrieve traffic usage statistics per target for a sub-user. Requires you to specify a date (last 30 days available).</td></tr><tr><td><mark style="color:blue;">GET</mark></td><td><code>/users/{userId}/client-stats</code></td><td>Retrieve total traffic usage for the current month.</td></tr></tbody></table>

### How to use the Public API

<details>

<summary><strong>Testing through the web interface</strong></summary>

#### 1. Authorize your main user

***

If you're testing the functionality through the [Public API](https://residential-api.oxylabs.io/v2/docs) interface, click the **Authorize** button.

<figure><img src="/files/HIe9nbPveRKYBir3lMyg" alt=""><figcaption></figcaption></figure>

Next, enter your main proxy user's credentials in the newly opened window and select **Authorize** once again.

{% hint style="info" %}
The main user is the **first sub-user** in your [**users list**](https://dashboard.oxylabs.io/?route=/overview/MP/users).
{% endhint %}

<figure><img src="/files/GJgKNofGQIs4kbGfPCsa" alt="" width="375"><figcaption></figcaption></figure>

#### 2. Log in to generate JWT

***

After authorization, navigate to the **POST** `/login` tab to generate the JSON Web Token (JWT) that's required to finalize authorization.

<figure><img src="/files/EOogzclag8MJka3MeGSp" alt=""><figcaption></figcaption></figure>

Then, select **Try it out** **→** **Execute**. Save the `user_id` and `token` values for later use.

{% hint style="warning" %}
**JWT expires in 1 hour**. After that, you'll need to generate a new one.
{% endhint %}

{% hint style="warning" %}
If you've changed your main user's password recently, you'll receive an error. To handle this, you must **use your original password** or **contact our 24/7 Support Team** via [live chat ](https://oxylabs.drift.click/oxybot)or [email](mailto:support@oxylabs.io).
{% endhint %}

<figure><img src="/files/TmeJa7vHOiowSwtWLVwR" alt=""><figcaption></figcaption></figure>

#### 3. Finalize authorization with JWT

***

Open the **Authorization** window again and **paste the token** from the previous step in the JWT Token authentication field. Then, click the **Authorize** button to save.

<figure><img src="/files/eoO4OdI4IuLHHn254DSH" alt="" width="435"><figcaption></figcaption></figure>

#### 4. Test the Public API

You can now test the Public API endpoints in your browser. For every endpoint, you'll need to enter the `user_id`,  acquired in Step 2.

</details>

{% stepper %}
{% step %}

#### Log in and generate JWT

Use Basic Authentication to log in with your main user's credentials (encoded in base64) to receive a JWT token.

{% hint style="info" %}
The main user is the **first sub-user** in your [**users list**](https://dashboard.oxylabs.io/?route=/overview/MP/users)**.**
{% endhint %}

**Endpoint:** `https://residential-api.oxylabs.io/v2/login`

**Header:** `Authorization: Basic base64(username:password)`

<pre class="language-bash"><code class="lang-bash">curl -X "POST" \
  "https://residential-api.oxylabs.io/v2/login" \
  -H "accept: application/json" \
  -u "<a data-footnote-ref href="#user-content-fn-1">USERNAME:PASSWORD</a>"
</code></pre>

{% hint style="warning" %}
If you've changed your main user's password recently, you'll receive an error. To handle this, you must **use your original password** or **contact our 24/7 Support Team** via [live chat ](https://oxylabs.drift.click/oxybot)or [email](mailto:support@oxylabs.io).
{% endhint %}

Once executed, the server will respond with **two important values** required for later steps:

* `user_id` is the unique user identifier required for API requests.
* `token` is the JSON Web Token (JWT) required for further authorization.

{% code title="Output example:" %}

```json
{
  "user_id": "00000000-0000-0000-0000-000000000000",
  "token": "example token"
}
```

{% endcode %}

{% hint style="warning" %}
**JWT expires in 1 hour**. After that, you'll need to generate a new one.
{% endhint %}
{% endstep %}

{% step %}

#### Use the `token` and `user_id` with requests

You can now query the API to manage users and check statistics. All subsequent requests require the JWT `token` and your `user_id`.

**Header:** `Authorization: Bearer {token}`

For example, let's check the total traffic usage for the current month.

<pre class="language-bash" data-full-width="false"><code class="lang-bash">curl -X "GET" \
  "https://residential-api.oxylabs.io/v2/users/<a data-footnote-ref href="#user-content-fn-2">{userId}</a>/client-stats" \
  -H "accept: application/json" \
  -H "Authorization: Bearer <a data-footnote-ref href="#user-content-fn-3">{token}</a>"
</code></pre>

<details>

<summary><strong>Output sample</strong></summary>

```json
{
  "traffic": 1.2354839,
  "date_from": "2026-01-01",
  "date_to": "2026-01-15"
}
```

</details>
{% endstep %}
{% endstepper %}

### Backonnect Entry IPs

If you want to use your own backconnect entry node DNS name, you can point your subdomain/domain to our entry node. To do that, you need to add a DNS `CNAME` record with `pr.oxylabs.io` as the target. This is how such setup looks on Cloudflare DNS manager for `entry` subdomain:

![Backconnect](/files/5tt6VuASGsfDW3uhc57P)

For more information, please contact [**support@oxylabs.io**](mailto:support@oxylabs.io) or your account manager.

[^1]: Replace with your **main user's credentials**. cURL automatically encodes to base64 and uses the Basic Authentication method.

[^2]: Replace with your `user_id`

[^3]: Replace with your JWT `token`


# ISP Proxies

ISP Proxies combine Datacenter speed with Residential anonymity. Learn about port-based access, rotation, protocols, and fair usage limits.

ISP Proxies offer reliable solutions for data gathering. With unlimited-duration sessions and bandwidth, these proxies ensure uninterrupted and efficient connections, ideal for traffic-intensive tasks.\
Sourced from premium ASN providers, Oxylabs [ISP Proxies](https://oxylabs.io/products/isp-proxies) guarantee high-quality and stable connections, making them perfect for challenging targets.

***

#### Getting started

To start using Oxylabs ISP Proxies, you must first go to [**Oxylabs' dashboard**](https://dashboard.oxylabs.io/en/) and purchase a plan that fits your needs. After, you will be guided to create your proxy user:

<figure><img src="/files/KPNdH5NWtaHrQcr7Tkjh" alt=""><figcaption></figcaption></figure>

Within seconds you will be prompted to make your [**first request**](/products/proxies/isp-proxies/making-requests)**.**


# Making Requests

See how to make requests with Oxylabs ISP Proxies and master the basic query structure.

Make a request to `https://ip.oxylabs.io/location` using the first ISP proxy in your list. Replace `USERNAME` and `PASSWORD` with your proxy user credentials.&#x20;

{% hint style="info" %}
Use [**ip.oxylabs.io/location**](https://ip.oxylabs.io/location) to check the parameters of your IPs—this domain delivers information from four geolocation databases: MaxMind, IP2Location, DB-IP, and IPinfo.io. The parameters include IP address, provider, country, city, ZIP code, ASN, organization name, time zone, and meta (when disclosed by database).
{% endhint %}

```sh
curl -x isp.oxylabs.io:8001 -U "user-USERNAME:PASSWORD" https://ip.oxylabs.io/location 
```

Please note that you must follow the above example of building the username string to make requests successfully. Use the exact grammar and be aware that username and password values are case-sensitive.

**Code examples**

{% tabs %}
{% tab title="cURL" %}

```sh
curl -x isp.oxylabs.io:8001 -U "user-USERNAME:PASSWORD" https://ip.oxylabs.io/location 
```

{% endtab %}

{% tab title="Python" %}

```python
#pip install requests
import requests

username = 'USERNAME'
password = 'PASSWORD'
proxy = 'isp.oxylabs.io:8001'

proxies = {
   "https": ('https://user-%s:%s@%s' % (username, password, proxy))
}

response=requests.get("https://ip.oxylabs.io/location", proxies=proxies)

print(response.content)
```

{% endtab %}

{% tab title="Node.js" %}

<pre class="language-javascript"><code class="lang-javascript">//npm install axios
<strong>const axios = require("axios");
</strong>const https = require("https");

const client = axios.create({
    httpsAgent: new https.Agent({
        rejectUnauthorized: false,
    }),
});
const username = 'USERNAME';
const password = 'PASSWORD'

client
    .get("https://ip.oxylabs.io/location", {
        proxy: {
            protocol: "https",
            host: "isp.oxylabs.io",
            port: 8001,
            auth: {
                username: `user-${username}`,
                password: password,
            },
        },
    })
    .then((res) => {
        console.log(res.data);
    })
    .catch((err) => console.error(err));

</code></pre>

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'https://isp.oxylabs.io:8001';
$target = 'https://ip.oxylabs.io/location';

$request = curl_init($target);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_PROXY, $proxy);
curl_setopt($request, CURLOPT_PROXYUSERPWD, "user-$username:$password");
$responseBody = curl_exec($request);
$error = curl_error($request);
curl_close($request);

if ($responseBody !== false) {
    echo 'Response: ' . $responseBody;
} else {
    echo 'Failed to connect to proxy: ' . $error;
}
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	username, password, entry := "USERNAME", "PASSWORD", "isp.oxylabs.io:8001"
	proxy, err := url.Parse(fmt.Sprintf("https://user-%s:%s@%s", username, password, entry))
	if err != nil {
		panic(err)
	}

	transport := &http.Transport{
		Proxy: http.ProxyURL(proxy),
	}
	client := &http.Client{Transport: transport}
	target := "https://ip.oxylabs.io/location"
	response, err := client.Get(target)
	if err != nil {
		panic(err)
	}
	defer response.Body.Close()

	body, err := io.ReadAll(response.Body)
	if err != nil {
		panic(err)
	}

	fmt.Println("Response:")
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
package com.example;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Base64;

import org.apache.hc.client5.http.fluent.Request;
import org.apache.hc.core5.http.HttpHost;

public class App {
    public static void main(String[] args) throws IOException, URISyntaxException {
        String target = "http://ip.oxylabs.io/location";
        String username = "USERNAME";
        String password = "PASSWORD";
        String proxy = "isp.oxylabs.io:8001";

        URI proxyURI = new URI(String.format("https://user-%s:%s@%s", username, password, proxy));

        String basicAuth = new String(
                Base64.getEncoder()
                        .encode(
                                proxyURI.getUserInfo().getBytes()));
        String response = Request.get(target)
                .addHeader("Proxy-Authorization", "Basic " + basicAuth)
                .viaProxy(HttpHost.create(proxyURI))
                .execute().returnContent().asString();

        System.out.println(response);
    }
}

```

{% endtab %}

{% tab title="C#" %}

```csharp
using System.Net;

// .NET currently does not support HTTPS proxies
var proxy = new WebProxy {
    Address = new Uri("http://isp.oxylabs.io:8001"),
    Credentials = new NetworkCredential(
        userName: "user-USERNAME",
        password: "PASSWORD"
    )
};

var httpClientHandler = new HttpClientHandler {Proxy = proxy};

using var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);

var result = await client.GetStringAsync("https://ip.oxylabs.io/location");
Console.WriteLine(result);
```

{% endtab %}
{% endtabs %}

The first IP in your proxy list will always use the`8001` port. To make a request using a different proxy, you will need to find your [**proxy list**](/products/proxies/isp-proxies/proxy-list) and take port values from there.&#x20;


# Agent Skills

Configure AI tools and coding assistants with official Agent Skills for Oxylabs ISP Proxies.

Oxylabs Agent Skills (`skills.md`) teach LLMs and AI coding assistants how to configure and interact with Oxylabs products.

Agent Skills for Oxylabs proxies will help your model generate accurate connection strings, handle entry nodes, and apply geo-targeting parameters without syntax or parameter hallucinations.

## Installation

### Claude Code (plugin marketplace)

Inside Claude Code, run the following commands:

```
/plugin marketplace add oxylabs/agent-skills
/plugin install oxylabs@oxylabs-agent-skills
```

This installs all 5 skills as a single plugin:

* [`skills/proxies`](https://github.com/oxylabs/agent-skills/blob/main/skills/proxies/SKILL.md)
* [`skills/web-unblocker`](https://github.com/oxylabs/agent-skills/blob/main/skills/web-unblocker/SKILL.md)
* [`skills/web-scraper-api`](https://github.com/oxylabs/agent-skills/blob/main/skills/web-scraper-api/SKILL.md)
* [`skills/headless-browser`](https://github.com/oxylabs/agent-skills/blob/main/skills/headless-browser/SKILL.md)
* [`skills/video-data`](https://github.com/oxylabs/agent-skills/blob/main/skills/video-data/SKILL.md)

To update skills, run this command:

```
/plugin marketplace update oxylabs-agent-skills
```

### Other agents (generic)

For other agents and custom environments, load the repository into your project workspace via the standard skills CLI:

```
npx skills add https://github.com/oxylabs/agent-skills.git
```

## Configuration

All Oxylabs Agent Skills authenticate via environment variables defined in a `.env` file. To use proxy skills, add these keys to your `.env` file:

| Variable          | Description                         |
| ----------------- | ----------------------------------- |
| `OXY_DC_USERNAME` | Your Oxylabs proxy user `username`. |
| `OXY_DC_PASSWORD` | Your Oxylabs proxy user `password`. |

## How to use

Once the skill is active in your workspace, you can prompt your AI assistant to build custom solutions using Oxylabs proxies.

* **Example 1:** "Write a Python script using `requests` to fetch `target-url.com` through Oxylabs ISP Proxies with `US` geo-targeting."
* **Example 2:** "Create a Node.js script using `axios` that rotates proxy sessions for every request using my Oxylabs credentials."

## Supported proxy networks

This skill applies to all following proxy types:

* [Residential Proxies](/products/proxies/residential-proxies)
* [Mobile Proxies](/products/proxies/mobile-proxies)
* [ISP Proxies](/products/proxies/isp-proxies)
* [Dedicated ISP Proxies (enterprise)](/products/proxies/dedicated-isp-proxies/enterprise)
* [Dedicated ISP Proxies (self-service)](/products/proxies/dedicated-isp-proxies/self-service)
* [Datacenter Proxies](/products/proxies/datacenter-proxies)
* [Dedicated Datacenter Proxies (enterprise)](/products/proxies/dedicated-datacenter-proxies/enterprise)
* [Dedicated Datacenter Proxies (self-service)](/products/proxies/dedicated-datacenter-proxies/self-service)

## More Oxylabs Agent Skills

Learn more about Agent Skills for other Oxylabs solutions:

* [Web Scraper API](/products/web-scraper-api/solutions-for-ai-workflows/agent-skills)
* [Web Unblocker](/products/web-unblocker/agent-skills)
* [Headless Browser](/products/headless-browser/ai-workflows/agent-skills)
* [Video Data](/products/proxies/high-bandwidth-proxies#agent-skills)


# Proxy List

Access your ISP Proxies list to find assigned IPs and ports. Ensure consistent connections and gain better control over your usage.

Find the complete list of your purchased proxies under **My Products** -> **ISP  Proxies** -> **Proxy list** menu in the dashboard. You can also conveniently export your proxy list in JSON or CSV formats.

<figure><img src="/files/BnOEGOiAxsCqzcqdAG2l" alt=""><figcaption></figcaption></figure>

Your proxy list contains the following information:

<table data-header-hidden><thead><tr><th width="158"></th><th></th></tr></thead><tbody><tr><td><strong>Entry point</strong></td><td>The gateway to connect to your proxies - this value never changes and is always <code>isp.oxylabs.io</code></td></tr><tr><td><strong>Port</strong></td><td>The specific port that allows you to access a particular proxy from your list. Port number always starts from <code>8001</code> and goes up.</td></tr><tr><td><strong>Country</strong></td><td>Two-letter country code that represents the location of your proxy.</td></tr><tr><td><strong>Assigned IP</strong></td><td>A specific proxy assigned to the indicated port.</td></tr></tbody></table>

\
**Please note that you will use ports for making requests** with your IPs, meaning you will not directly access your IPs. This method ensures a more stable and convenient service than direct access to IPs. The integration and configuration process is less complicated, and in the case of IP replacement, your port number won't change.

{% hint style="warning" %}
Please note that the system automatically assigns IPs to the ports. After making changes to your plan, IP allocation to ports may also change.
{% endhint %}


# Proxy Rotation

Learn how to use the proxy rotation feature of ISP Proxies to switch IPs automatically. This will improve your scraping success.

ISP Proxies support proxy rotation. To use this feature you need to change your port number to `8000`. With each new request you will receive a random IP from your proxy list.

**Code examples**

{% tabs %}
{% tab title="cURL" %}

```sh
curl -x isp.oxylabs.io:8000 -U "user-USERNAME:PASSWORD" https://ip.oxylabs.io/location 
```

{% endtab %}

{% tab title="Python" %}

<pre class="language-python"><code class="lang-python">#pip install requests
<strong>import requests
</strong>
username = 'USERNAME'
password = 'PASSWORD'
proxy = 'isp.oxylabs.io:8000'

proxies = {
   "https": ('https://user-%s:%s@%s' % (username, password, proxy))
}

response=requests.get("https://ip.oxylabs.io/location", proxies=proxies)

print(response.content)
</code></pre>

{% endtab %}

{% tab title="Node.js" %}

<pre class="language-javascript"><code class="lang-javascript">//npm install axios
<strong>const axios = require("axios");
</strong><strong>const https = require("https");
</strong>
const client = axios.create({
    httpsAgent: new https.Agent({
        rejectUnauthorized: false,
    }),
});
const username = 'USERNAME';
const password = 'PASSWORD'

client
    .get("https://ip.oxylabs.io/location", {
        proxy: {
            protocol: "https",
            host: "isp.oxylabs.io",
            port: 8000,
            auth: {
                username: `user-${username}`,
                password: password,
            },
        },
    })
    .then((res) => {
        console.log(res.data);
    })
    .catch((err) => console.error(err));


</code></pre>

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'https://isp.oxylabs.io:8000';
$target = 'https://ip.oxylabs.io/location';

$request = curl_init($target);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_PROXY, $proxy);
curl_setopt($request, CURLOPT_PROXYUSERPWD, "user-$username:$password");
$responseBody = curl_exec($request);
$error = curl_error($request);
curl_close($request);

if ($responseBody !== false) {
    echo 'Response: ' . $responseBody;
} else {
    echo 'Failed to connect to proxy: ' . $error;
}
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	username, password, entry := "USERNAME", "PASSWORD", "isp.oxylabs.io:8000"
	proxy, err := url.Parse(fmt.Sprintf("https://user-%s:%s@%s", username, password, entry))
	if err != nil {
		panic(err)
	}

	transport := &http.Transport{
		Proxy: http.ProxyURL(proxy),
	}
	client := &http.Client{Transport: transport}
	target := "https://ip.oxylabs.io/location"
	response, err := client.Get(target)
	if err != nil {
		panic(err)
	}
	defer response.Body.Close()

	body, err := io.ReadAll(response.Body)
	if err != nil {
		panic(err)
	}

	fmt.Println("Response:")
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
package com.example;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Base64;

import org.apache.hc.client5.http.fluent.Request;
import org.apache.hc.core5.http.HttpHost;

public class App {
    public static void main(String[] args) throws IOException, URISyntaxException {
        String target = "http://ip.oxylabs.io/location";
        String username = "USERNAME";
        String password = "PASSWORD";
        String proxy = "isp.oxylabs.io:8000";

        URI proxyURI = new URI(String.format("https://user-%s:%s@%s", username, password, proxy));

        String basicAuth = new String(
                Base64.getEncoder()
                        .encode(
                                proxyURI.getUserInfo().getBytes()));
        String response = Request.get(target)
                .addHeader("Proxy-Authorization", "Basic " + basicAuth)
                .viaProxy(HttpHost.create(proxyURI))
                .execute().returnContent().asString();

        System.out.println(response);
    }
}

```

{% endtab %}

{% tab title="C#" %}

```csharp
using System.Net;

// .NET currently does not support HTTPS proxies
var proxy = new WebProxy {
    Address = new Uri("http://isp.oxylabs.io:8000"),
    Credentials = new NetworkCredential(
        userName: "user-USERNAME",
        password: "PASSWORD"
    )
};

var httpClientHandler = new HttpClientHandler {Proxy = proxy};

using var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);

var result = await client.GetStringAsync("https://ip.oxylabs.io/location");
Console.WriteLine(result);
```

{% endtab %}
{% endtabs %}

IPs will be selected from the indicated country pool if you provide a `country-` parameter. For example, if you want to rotate your United States proxy pool only, use a parameter `country-` and add two letter country code `country-US` in your user string.&#x20;

**Code examples**

{% tabs %}
{% tab title="cURL" %}

```sh
curl -x https://isp.oxylabs.io:8000 -U 'user-USERNAME-country-COUNTRY:PASSWORD' https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="Python" %}

```python
#pip install requests
import requests

username = 'USERNAME'
password = 'PASSWORD'
country = 'COUNTRY'
proxy = 'isp.oxylabs.io:8001'

proxies = {
   "https": ('https://user-%s-country-%s:%s@%s' % (username, country, password, proxy))
}

response=requests.get("https://ip.oxylabs.io/location", proxies=proxies)

print(response.content)
```

{% endtab %}

{% tab title="Node.js" %}

<pre class="language-javascript"><code class="lang-javascript">//npm install axios
<strong>const axios = require("axios");
</strong>const https = require("https");

const client = axios.create({
    httpsAgent: new https.Agent({
        rejectUnauthorized: false,
    }),
});
const username = 'USERNAME';
const country = 'COUNTRY'
const password = 'PASSWORD'

client
    .get("https://ip.oxylabs.io/location", {
        proxy: {
            protocol: "https",
            host: "isp.oxylabs.io",
            port: 8000,
            auth: {
                username: `user-${username}-country-${country}`,
                password: password,
            },
        },
    })
    .then((res) => {
        console.log(res.data);
    })
    .catch((err) => console.error(err));

</code></pre>

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$username = 'USERNAME';
$country = 'COUNTRY';
$password = 'PASSWORD';
$proxy = 'https://isp.oxylabs.io:8000';
$target = 'https://ip.oxylabs.io/location';

$request = curl_init($target);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_PROXY, $proxy);
curl_setopt($request, CURLOPT_PROXYUSERPWD, "user-$username-country-$country:$password");
$responseBody = curl_exec($request);
$error = curl_error($request);
curl_close($request);

if ($responseBody !== false) {
    echo 'Response: ' . $responseBody;
} else {
    echo 'Failed to connect to proxy: ' . $error;
}

```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	username, country, password, entry := "USERNAME", "COUNTRY", "PASSWORD", "isp.oxylabs.io:8000"

	proxy, err := url.Parse(fmt.Sprintf("https://user-%s-country-%s:%s@%s", username, country, password, entry))
	if err != nil {
		panic(err)
	}

	transport := &http.Transport{
		Proxy: http.ProxyURL(proxy),
	}
	client := &http.Client{Transport: transport}
	target := "https://ip.oxylabs.io/location"
	response, err := client.Get(target)
	if err != nil {
		panic(err)
	}
	defer response.Body.Close()

	body, err := io.ReadAll(response.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println("Response:")
	fmt.Println(string(body))
}

```

{% endtab %}

{% tab title="Java" %}

```java
package com.example;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Base64;

import org.apache.hc.client5.http.fluent.Request;
import org.apache.hc.core5.http.HttpHost;

public class App {
    public static void main(String[] args) throws IOException, URISyntaxException {
        String targetUrl = "http://ip.oxylabs.io/location";
        String username = "USERNAME";
        String country = "COUNTRY";
        String password = "PASSWORD";
        String proxy = "isp.oxylabs.io:8000";

        URI proxyURI = new URI(String.format("https://user-%s-country-%s:%s@%s", username, country, password, proxy));

        String basicAuth = new String(
                Base64.getEncoder()
                        .encode(
                                proxyURI.getUserInfo().getBytes()));
        String response = Request.get(targetUrl)
                .addHeader("Proxy-Authorization", "Basic " + basicAuth)
                .viaProxy(HttpHost.create(proxyURI))
                .execute().returnContent().asString();

        System.out.println(response);
    }
}

```

{% endtab %}

{% tab title="C#" %}

```csharp
using System.Net;

// .NET currently does not support HTTPS proxies
var proxy = new WebProxy {
    Address = new Uri("http://isp.oxylabs.io:8001"),
    Credentials = new NetworkCredential(
        userName: "user-USERNAME-country-COUNTRY",
        password: "PASSWORD"
    )
};

var httpClientHandler = new HttpClientHandler {Proxy = proxy};

using var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);

var result = await client.GetStringAsync("https://ip.oxylabs.io/location");
Console.WriteLine(result);
```

{% endtab %}
{% endtabs %}


# Location & ISP Info

Verify your ISP proxy location, ISP provider, and ASN using RIPEstat for real-time data instead of outdated databases.

We use the [MaxMind GeoIP2](https://www.maxmind.com/en/geoip2-databases) database to determine IPs location.&#x20;

To access an IP with a specific location, you do not need to provide any additional parameters. Simply send a request to the port associated with the desired location's assigned IP.&#x20;

### ISP provider and ASN checking

We understand that you may need to verify the network provider of your ISP IPs. Some databases may show inaccurate data for the ISP provider or ASN because they often display the original IP address owner rather than the network where the IP is currently announced. To ensure you have the most accurate, real-time data, we recommend checking the ISP provider and ASN data in the [RIPEstat](https://stat.ripe.net/) database. It reflects the current internet announcement status of the IP.


# Protocols

ISP Proxies support HTTP, HTTPS, and SOCKS5 protocols. Learn how to configure these protocols for secure and versatile tasks.

### HTTP

Our documentation includes code examples showcasing how to connect to the proxies using `HTTP` protocol. The protocol is supported by common libraries and third-party software.

### HTTPS

You can also use the fully encrypted connection using `HTTPS` protocol for an extra layer of security. For that, you have to add ‘https\://’ to your proxy entry point. For example: `https://isp.oxylabs.io:8001`

<pre class="language-sh"><code class="lang-sh"><strong>curl -x https://isp.oxylabs.io:8000 -U user-USERNAME:PASSWORD https://ip.oxylabs.io/location 
</strong></code></pre>

### SOCKS5

Oxylabs ISP Proxies support both `TCP` and `UDP` connections.

For using `SOCKS5` protocol, you have to add `socks5h://` to your proxy entry point. For example: `socks5h://isp.oxylabs.io:8001`

```bash
curl -x socks5h://user-USERNAME:PASSWORD@isp.oxylabs.io:8000 https://ip.oxylabs.io/location
```

{% hint style="info" %}
Note that some websites may identify a proxy IP when using the `SOCKS5` protocol. We highly suggest switching to an alternative protocol in such instances.
{% endhint %}


# Whitelisting IPs

Learn how to use ISP Proxies with password-free authentication. Secure your connection by adding trusted IPs to the whitelist via the dashboard.

Authenticate your IPs by creating the IP whitelist on the dashboard. Log in to your account and navigate to **ISP Proxies** → **Whitelist** → **Edit whitelist**:

Add up to 10 IPs in IPv4 format (`xx.xx.xx.xx`).

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FzrXw45naRpCZ0Ku9AjY1%2Fuploads%2FgEfsvGwee9NNwIC9mLmh%2Fisp_whitelist.mp4?alt=media&token=624da86b-7c0c-4f30-b75a-c2666a1eb32c>" %}

When adding an IP address to the whitelist, ensure that it belongs exclusively to you, and avoid connecting through Proxy or VPN services.

If you're using services like Amazon Web Services (AWS), we highly recommend using username and password authentication over relying solely on IP whitelisting.


# Response Codes

Understand ISP Proxies response codes to troubleshoot errors. Learn what status codes like 407, 504, and 429 mean.

Here are the most common response codes you may get while using Oxylabs ISP Proxies.

<table><thead><tr><th width="166">Response code</th><th width="268.0481770833333">Error message</th><th>Description</th></tr></thead><tbody><tr><td><code>400</code></td><td><code>Bad Request</code></td><td>The request could not be understood. Please check if the request is formatted correctly.</td></tr><tr><td><code>403</code></td><td><code>Forbidden</code></td><td>Access denied: restricted target. Please contact support or your account manager if you have any questions.</td></tr><tr><td><code>404</code></td><td><code>Not Found</code></td><td>The domain specified could not be found or the resource is unavailable.</td></tr><tr><td><code>407</code></td><td><code>Proxy Authentication Required</code></td><td>User credentials are not provided / are incorrect / the user is connecting from an IP that is not whitelisted.</td></tr><tr><td><code>429</code></td><td><code>Too Many Requests</code></td><td>User has reached the thread/concurrent session limit.</td></tr><tr><td><code>500</code></td><td><code>Internal Server Error</code></td><td>We had a problem with our server. Try again later.</td></tr><tr><td><code>502</code></td><td><code>Bad Gateway</code></td><td>The proxy received an invalid response from the upstream or target server.</td></tr><tr><td><code>503</code></td><td><code>Service Unavailable</code></td><td>Failed to connect to the target server. DNS failure to resolve the target server address.</td></tr><tr><td><code>504</code></td><td><code>Gateway Timeout</code></td><td>A proxy server timed out, waiting for a response from the target server. It usually takes about 60s.</td></tr></tbody></table>


# Restricted Targets

Find out which websites are unavailable for ISP Proxies and how to access certain sites.

Some websites are restricted on our ISP Proxy network to avoid abuse and unclear activities.&#x20;

{% hint style="success" %}
Get in touch with our [**Customer Support Team**](mailto:support@oxylabs.io) if your target falls under the mentioned groups to ensure you can access the target before purchasing.
{% endhint %}

**❗️The list includes but is not limited to targets such as:**

| Target category                          | Example                          |
| ---------------------------------------- | -------------------------------- |
| Entertainment & streaming                | Netflix, Spotify, Twitch, Disney |
| Banking and other financial institutions | PayPal, Bank of America, Binance |
| Government websites                      | usa.gov, canada.ca               |
| Gaming                                   | Playstation, Steam               |
| Ticketing                                | Ticketmaster, Eventbrite         |
| Mailing                                  | Outlook, Yahoo mail              |

\*Please use ip.oxylabs.io ip.oxylabs.io/json or ip.oxylabs.io/location to check your IP address.

If you’re unsure whether ISP Proxies could support your use case, please get in touch with our customer support team at  [**support@oxylabs.io**](mailto:support@oxylabs.io) or via the 24/7 live chat on our [**website**](https://oxylabs.io/).


# Fair Usage Policy

Understand ISP Proxies session limits and bandwidth rules that ensure optimal service performance and stability.

To ensure stability of services and prevent any potential traffic abuse, Oxylabs limits the concurrent sessions of provided ISP proxies. The available concurrent sessions depend on the amount of traffic used per 1 ISP proxy during a billing cycle:

* **Until 50 GBs of usage per 1 ISP proxy in a month is reached**, available concurrent sessions shall be limited to 100 concurrent sessions per 1 purchased ISP proxy (For example, purchasing 100 ISP proxies means that 10,000 concurrent sessions will be available until 5,000 GB of usage is reached);
* **If 50 GBs of usage per 1 ISP proxy is reached**, the available concurrent sessions are reduced to 10 concurrent sessions per 1 ISP proxy for the remainder of the ongoing billing cycle (For example, purchasing 100 ISP proxies and reaching 5,000 GB of usage means that 1,000 concurrent sessions will be available until the end of the current billing cycle).

Proxy usage is tracked automatically and an email notification is sent when 80% and 100% of the data allowance is reached. Once 100% of the fair usage limit is reached, the concurrent session limit is applied automatically.

If you need any assistance, feel free to contact us at [**support@oxylabs.io**](mailto:support@oxylabs.io) or via the 24/7 live chat on our [**website**](https://oxylabs.io/).


# Dedicated ISP Proxies

Learn about Oxylabs Dedicated ISP Proxies, enterprise and self-service options, and how to use them for your projects.

Oxylabs **Dedicated ISP Proxies** give exclusive IPs provided by trusted Internet Service Providers (ISPs). They offer the performance of Datacenter Proxies and reliability of Residential Proxies. With Oxylabs Dedicated ISP Proxies, you can expect stable connections, high success rates, and the ability to freely choose from premium ASNs globally.

{% columns %}
{% column %}
**If you were assisted by our Sales Team when purchasing Dedicated ISP Proxies**, follow Enterprise documentation:

{% content-ref url="/pages/6gadS6wdJI6YRW84QITW" %}
[Enterprise](/products/proxies/dedicated-isp-proxies/enterprise)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
**If you have purchased Dedicated ISP Proxies via self-service on Oxylabs Dashboard**, follow Self-Service documentation:

{% content-ref url="/pages/De552zzKIXowZzp8bsTM" %}
[Self-Service](/products/proxies/dedicated-isp-proxies/self-service)
{% endcontent-ref %}
{% endcolumn %}
{% endcolumns %}

If you need any assistance, feel free to contact us at [**support@oxylabs.io**](mailto:support@oxylabs.io) or via the 24/7 live chat.


# Enterprise

Learn more about Enterprise Dedicated ISP Proxies and how to use them for your projects.

This documentation is intended for Dedicated ISP Proxies purchased through our Sales or Account Team.&#x20;

{% content-ref url="/pages/N7dVYgB7mcNtvMN7jVbD" %}
[Getting Started](/products/proxies/dedicated-isp-proxies/enterprise/getting-started)
{% endcontent-ref %}

{% content-ref url="/pages/utu0fn9dz7Bjca3yg5Kz" %}
[Proxy List](/products/proxies/dedicated-isp-proxies/enterprise/proxy-lists)
{% endcontent-ref %}

{% content-ref url="/pages/0jt2NDfqvdGMCA2P8TMf" %}
[Making Requests](/products/proxies/dedicated-isp-proxies/enterprise/making-requests)
{% endcontent-ref %}

{% content-ref url="/pages/SQnH1QFalQFNhefJc5Gn" %}
[Protocols](/products/proxies/dedicated-isp-proxies/enterprise/protocols)
{% endcontent-ref %}

{% content-ref url="/pages/AkcNtnLvCko3pwaxkntq" %}
[Whitelisting IPs (RESTful)](/products/proxies/dedicated-isp-proxies/enterprise/restful)
{% endcontent-ref %}

{% content-ref url="/pages/0QARtWp8IvuY7XSiUa0y" %}
[Proxy API](/products/proxies/dedicated-isp-proxies/enterprise/proxy-api)
{% endcontent-ref %}

{% content-ref url="/pages/2GDUycglNzzna9TVQ7Mu" %}
[Proxy Rotator - Optional](/products/proxies/dedicated-isp-proxies/enterprise/proxy-rotator-optional)
{% endcontent-ref %}

{% content-ref url="/pages/NIFzdeU435NNRKM0zP1k" %}
[Response Codes](/products/proxies/dedicated-isp-proxies/enterprise/response-codes)
{% endcontent-ref %}


# Getting Started

Get started with Dedicated ISP Proxies. Access your IP list, set up authentication, and make your first proxy request using code samples.

Before we begin, please make sure you have received a username, password, and all URLs linking to your IP list from a Sales Representative, Dedicated Account Manager, or Support Team.

There are two ways you can get to your IP list. You can access the IP list directly from your browser by opening the URL you received (e.g., `https://proxy.oxylabs.io/all`). You will then be asked to enter your login credentials (HTTP Basic Authentication).

Or you can retrieve the list by making a GET request to the URL you received (e.g., `https://proxy.oxylabs.io/all`). Don't forget to replace `USERNAME` and `PASSWORD` with your proxy user credentials.

```shell
curl -u "USERNAME:PASSWORD" https://proxy.oxylabs.io/all
```

To make a request using a proxy, you must choose an IP address from the acquired list and specify it in the request parameters. You can see an example in cURL below. You can find more code samples in other languages [**here**](/products/proxies/dedicated-isp-proxies/enterprise/making-requests) or check complete code examples on our [**GitHub**](https://github.com/oxylabs/product-integrations/tree/master/datacenter-proxies).

```shell
curl -x 1.2.3.4:60000 -U "USERNAME:PASSWORD" http://ip.oxylabs.io/location
```

If there are any questions we have not covered in this documentation, please contact your Dedicated Account Manager or our Support at [**support@oxylabs.io**](mailto:support@oxylabs.io).


# Making Requests

Learn Dedicated ISP Proxies authentication methods including username/password and IP whitelisting. Configure ports and credentials for seamless proxy requests.

By default, Oxylabs proxies and Proxy Rotator use a basic [**HTTP authentication**](https://en.wikipedia.org/wiki/Basic_access_authentication) that requires you to provide a username and password. You can get your credentials by contacting your Dedicated Account Manager or our Support Team at [**support@oxylabs.io**](mailto:support@oxylabs.io).

We also support authentication based on whitelisted IP addresses; see [**Whitelisting IPs**](/products/proxies/dedicated-isp-proxies/enterprise/restful). Depending on your authentication method, you might need to change the proxy port.

| Proxy Port | Usage                                                                                                                                                                                                                                                            |
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `60000`    | This port is required with proxies when login credentials are used (username and password). It is also used with [**Proxy Rotator** ](/products/proxies/dedicated-isp-proxies/enterprise/proxy-rotator-optional)with both login credentials and whitelisted IPs. |
| `65432`    | Required with proxies when authorization is done via whitelisted IPs.                                                                                                                                                                                            |

#### Code examples

If you want to use Dedicated ISP Proxies via username and password authentication method:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x 1.2.3.4:60000 -U user1:pass1 http://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
    $username = 'user1';
    $password = 'pass1';
    $proxy = '1.2.3.4:60000';
    $query = curl_init('https://ip.oxylabs.io/location');
    curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
    curl_setopt($query, CURLOPT_PROXYUSERPWD, "$username:$password");
    $output = curl_exec($query);
    curl_close($query);
    if ($output)
        echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

response = requests.get(
    'https://ip.oxylabs.io/location',
    proxies={'http': 'http://username:password@1.2.3.4:60000',
            'https': 'http://username:password@1.2.3.4:60000'}
)
print(response.text)
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var proxy = new WebProxy
        {
            Address = new Uri($"http://1.2.3.4:60000"),
            BypassProxyOnLocal = false,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential("username", "password")
        };

        var handler = new HttpClientHandler
        {
            Proxy = proxy,
        };

        HttpClient client = new HttpClient(handler);
        var task = Task.Run(async () =>
        {
            var response = await client.GetAsync("https://ip.oxylabs.io/location");
            var content = response.Content;
            var result = await content.ReadAsStringAsync();
            return result;
        });

        task.Wait();
        Console.WriteLine(task.Result);
    }
}
```

{% endtab %}
{% endtabs %}

If you want to use Dedicated ISP Proxies via Whitelisted IP authentication method:

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x 1.2.3.4:65432 https://ip.oxylabs.io/location 
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
    $proxy = '1.2.3.4:65432';
    $query = curl_init('https://ip.oxylabs.io/location');
    curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($query, CURLOPT_PROXY, "http://$proxy");
    $output = curl_exec($query);
    curl_close($query);
    if ($output)
        echo $output;
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

response = requests.get(
    'https://ip.oxylabs.io/location',
    proxies={'http': 'http://1.2.3.4:65432',
            'https': 'http://1.2.3.4:65432'}
)
print(response.text)
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var proxy = new WebProxy
        {
            Address = new Uri($"http://1.2.3.4:65432"),
            BypassProxyOnLocal = false,
            UseDefaultCredentials = false,
        };

        var handler = new HttpClientHandler
        {
            Proxy = proxy,
        };

        HttpClient client = new HttpClient(handler);
        var task = Task.Run(async () =>
        {
            var response = await client.GetAsync("https://ip.oxylabs.io/location");
            var content = response.Content;
            var result = await content.ReadAsStringAsync();
            return result;
        });

        task.Wait();
        Console.WriteLine(task.Result);
    }
}
```

{% endtab %}
{% endtabs %}


# Agent Skills

Configure AI tools and coding assistants with official Agent Skills for Oxylabs Enterprise Dedicated ISP Proxies.

Oxylabs Agent Skills (`skills.md`) teach LLMs and AI coding assistants how to configure and interact with Oxylabs products.

Agent Skills for Oxylabs proxies will help your model generate accurate connection strings, handle entry nodes, and apply geo-targeting parameters without syntax or parameter hallucinations.

## Installation

### Claude Code (plugin marketplace)

Inside Claude Code, run the following commands:

```
/plugin marketplace add oxylabs/agent-skills
/plugin install oxylabs@oxylabs-agent-skills
```

This installs all 5 skills as a single plugin:

* [`skills/proxies`](https://github.com/oxylabs/agent-skills/blob/main/skills/proxies/SKILL.md)
* [`skills/web-unblocker`](https://github.com/oxylabs/agent-skills/blob/main/skills/web-unblocker/SKILL.md)
* [`skills/web-scraper-api`](https://github.com/oxylabs/agent-skills/blob/main/skills/web-scraper-api/SKILL.md)
* [`skills/headless-browser`](https://github.com/oxylabs/agent-skills/blob/main/skills/headless-browser/SKILL.md)
* [`skills/video-data`](https://github.com/oxylabs/agent-skills/blob/main/skills/video-data/SKILL.md)

To update skills, run this command:

```
/plugin marketplace update oxylabs-agent-skills
```

### Other agents (generic)

For other agents and custom environments, load the repository into your project workspace via the standard skills CLI:

```
npx skills add https://github.com/oxylabs/agent-skills.git
```

## Configuration

All Oxylabs Agent Skills authenticate via environment variables defined in a `.env` file. To use proxy skills, add these keys to your `.env` file:

| Variable          | Description                         |
| ----------------- | ----------------------------------- |
| `OXY_DC_USERNAME` | Your Oxylabs proxy user `username`. |
| `OXY_DC_PASSWORD` | Your Oxylabs proxy user `password`. |

## How to use

Once the skill is active in your workspace, you can prompt your AI assistant to build custom solutions using Oxylabs proxies.

* **Example 1:** "Write a Python script using `requests` to fetch a list of e-commerce target URLs through the Oxylabs Enterprise Dedicated ISP Proxy Rotator."
* **Example 2:** "Create a Node.js script using `axios` that accepts an array of my assigned Enterprise Dedicated ISP direct IP addresses and cycles through a new IP for every request."

## Supported proxy networks

This skill applies to all following proxy types:

* [Residential Proxies](/products/proxies/residential-proxies)
* [Mobile Proxies](/products/proxies/mobile-proxies)
* [ISP Proxies](/products/proxies/isp-proxies)
* [Dedicated ISP Proxies (enterprise)](/products/proxies/dedicated-isp-proxies/enterprise)
* [Dedicated ISP Proxies (self-service)](/products/proxies/dedicated-isp-proxies/self-service)
* [Datacenter Proxies](/products/proxies/datacenter-proxies)
* [Dedicated Datacenter Proxies (enterprise)](/products/proxies/dedicated-datacenter-proxies/enterprise)
* [Dedicated Datacenter Proxies (self-service)](/products/proxies/dedicated-datacenter-proxies/self-service)

## More Oxylabs Agent Skills

Learn more about Agent Skills for other Oxylabs solutions:

* [Web Scraper API](/products/web-scraper-api/solutions-for-ai-workflows/agent-skills)
* [Web Unblocker](/products/web-unblocker/agent-skills)
* [Headless Browser](/products/headless-browser/ai-workflows/agent-skills)
* [Video Data](/products/proxies/high-bandwidth-proxies#agent-skills)


# Proxy List

Learn about the methods for retrieving your Dedicated ISP Proxy list, including basic URL access and the RESTful API endpoints.

## Basic

You should receive a URL to your proxy list from your Dedicated Account Manager or our Support, and it should look something like this:

`https://proxy.oxylabs.io/key/a27c5343ce4c4637a85a9297ddf1cace`

Open this URL in your browser (or any other preferred software). You will then be asked to enter your login credentials (HTTP Basic Authentication):

![](/files/UTFonmKbzUAgfa6sBvvi)

Once you do that, you will have a list of proxies in plain text.&#x20;

If you have multiple lists and wish to get all IPs assigned to your account, you can use this URL:

`https://proxy.oxylabs.io/all`

You can also include `?showCountry` or `?showCity` at the end of your URL to get IPs with their corresponding locations.

```
127.0.0.1:60000
127.0.0.2:60000
127.0.0.3:60000
127.0.0.4:60000
```

## RESTful

### Showing All Available Proxy Lists

With this endpoint, you can retrieve proxy lists that belong to your user:

`GET https://api.oxylabs.io/v1/proxies/lists`

#### Code examples

{% tabs %}
{% tab title="cURL" %}

```shell
curl -u username:password "https://api.oxylabs.io/v1/proxies/lists"
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.oxylabs.io/v1/proxies/lists");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, 'username:password');

$result = curl_exec($curl);
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
requests.get('https://api.oxylabs.io/v1/proxies/lists', auth=('username', 'password'))
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;
using System.Text;

class Example
{
    static void Main()
    {
        HttpClient client = new HttpClient();
        var byteArray = Encoding.ASCII.GetBytes("username:password");
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
        var task = Task.Run(async () => {
            var response = await client.GetAsync("https://api.oxylabs.io/v1/proxies/lists");
            var content = response.Content;
            var result = await content.ReadAsStringAsync();
            return result;
        }); 
        task.Wait();
    
        Console.WriteLine(task.Result);
    }
}
```

{% endtab %}
{% endtabs %}

#### Sample output

```shell
[
  {
    "uuid": "123e4567-e89b-12d3-a456-426655440000",
    "key": "12345678",
    "updated_timestamp": "2016-09-28T13:03:50+0300",
    "ips_count": 2000,
    "href": "http://api.oxylabs.io/v1/proxies/lists/123e4567-e89b-12d3-a456-426655440000"
  }
]
```

### Retrieving a Specific Proxy List

With this endpoint, you can retrieve a specific proxy list:

`GET https://api.oxylabs.io/v1/proxies/lists/{uuid}`

#### Request parameter

| Parameter | Description                            |
| --------- | -------------------------------------- |
| `uuid`    | The uuid of the proxy-list to retrieve |

#### Code examples

{% tabs %}
{% tab title="cURL" %}

```shell
curl -u username:password "https://api.oxylabs.io/v1/proxies/lists/{uuid}"
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.oxylabs.io/v1/proxies/lists/{uuid}");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, 'username:password');
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
requests.get('https://api.oxylabs.io/v1/proxies/lists/{uuid}', auth=('username', 'password'))
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;
using System.Text;

class Example
{
    static void Main()
    {
        HttpClient client = new HttpClient();
        var byteArray = Encoding.ASCII.GetBytes("username:password");
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
        var task = Task.Run(async () => {
            var response = await client.GetAsync("https://api.oxylabs.io/v1/proxies/lists/{uuid}");
            var content = response.Content;
            var result = await content.ReadAsStringAsync();
            return result;
        }); 
        task.Wait();
    
        Console.WriteLine(task.Result);
    }
}
```

{% endtab %}
{% endtabs %}

#### Sample output

```shell
[
  {
    "ip": "127.0.0.1",
    "port": "60000",
    "country": "BE",
    "city": "Brussels",
    "created_at": "2022-04-06 13:03:10"
  },
  { 
    "ip": "127.0.0.2",
    "port": "60000",
    "country": "BE",
     "city": "Brussels",
    "created_at": "2022-04-06 13:03:10"
  }
]
```


# Protocols

Learn about supported protocols and the default port configurations for Dedicated ISP Proxy service.

{% hint style="info" %}
Our Customer Support team is available 24/7 - reach out through [**support@oxylabs.io**](mailto:support@oxylabs.io) or via live chat on our [**website**](https://oxylabs.io/). They will assist you in activating SOCKS5 protocol for your account. By default, the HTTP protocol is enabled.
{% endhint %}

#### HTTP

Our documentation includes code examples showcasing how to connect to the proxies using `HTTP` protocol. The protocol is supported by common libraries and third-party software.

#### **SOCKS5**&#x20;

For using `SOCKS5` protocol, you have to add `socks5h` in your request, for example:&#x20;

```
curl -x socks5h://1.2.3.4:1180 -U USERNAME:PASSWORD ip.oxylabs.io
```

#### Ports of proxies

The default configuration of proxy ports includes `80` and `443`, which are standard ports designed to accommodate the `HTTP` and `HTTPS` protocols, as outlined in the table below. To access other ports, it is necessary to undergo compliance verification, please contact our [**support**](mailto:support@oxylabs.io).

| Protocol | Port  |
| -------- | ----- |
| `HTTP`   | `80`  |
| `HTTPS`  | `443` |


# Whitelisting IPs (RESTful)

Learn about managing your Dedicated ISP Proxy IP whitelist via the RESTful API, including endpoints for viewing, adding, and removing IPs.

Whitelist IPs by sending queries directly to our endpoints.

{% hint style="info" %}
Please note there is a 5-minute cooldown to confirm changes to your whitelisted IP list.
{% endhint %}

{% content-ref url="/pages/4UxklQ4RWvOQWCrWubmp" %}
[Getting Whitelisted IPs List](/products/proxies/dedicated-datacenter-proxies/enterprise/whitelisting-ips/restful/getting-whitelisted-ips-list)
{% endcontent-ref %}

{% content-ref url="/pages/3CO8LQBpr9cJBSO8Wt2v" %}
[Adding a Whitelisted IP](/products/proxies/dedicated-datacenter-proxies/enterprise/whitelisting-ips/restful/adding-a-whitelisted-ip)
{% endcontent-ref %}

{% content-ref url="/pages/GQ7av1AuElKTvU0foqHu" %}
[Removing a Whitelisted IP](/products/proxies/dedicated-datacenter-proxies/enterprise/whitelisting-ips/restful/removing-a-whitelisted-ip)
{% endcontent-ref %}

{% content-ref url="/pages/iIYBreywT2Nff9syWBXB" %}
[Saving Changes (5min Cooldown)](/products/proxies/dedicated-datacenter-proxies/enterprise/whitelisting-ips/restful/saving-changes-5min-cooldown)
{% endcontent-ref %}


# Getting Whitelisted IPs List

Find the RESTful API endpoint and code examples for retrieving your current list of whitelisted Dedicated ISP Proxies IPs.

`GET https://api.oxylabs.io/v1/whitelisted_ips`

| Response | Description                                                                  |
| -------- | ---------------------------------------------------------------------------- |
| `200`    | Success. Response body contains all currently whitelisted IPs and their ids. |

#### Code example

{% tabs %}
{% tab title="cURL" %}

```shell
curl -u username:password "https://api.oxylabs.io/v1/whitelisted_ips"
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.oxylabs.io/v1/whitelisted_ips");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, 'username:password');

$result = curl_exec($curl);
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
requests.get('https://api.oxylabs.io/v1/whitelisted_ips', auth=('username', 'password'))
```

{% endtab %}
{% endtabs %}

#### Sample output

```
{
    "data": [
        {
            "id": 9765,
            "address": "127.0.0.1"
        },
        {
            "id": 9766,
            "address": "127.0.0.2"
        }
    ]
}
```


# Adding a Whitelisted IP

Learn how to add new IP addresses to your Dedicated ISP proxy whitelist using the API.

`POST https://api.oxylabs.io/v1/whitelisted_ips`

| Response | Description                                                                                                    |
| -------- | -------------------------------------------------------------------------------------------------------------- |
| `201`    | Success. The IP address has been added to the list. Response body contains the newly added `address` and `id`. |
| `422`    | Error. Request body contains an invalid IP address. Response body contains the error message                   |

#### Code example

{% tabs %}
{% tab title="cURL" %}

```shell
curl -X POST -u username:password "https://api.oxylabs.io/v1/whitelisted_ips"
--header "Content-Type: application/json" --data '{"address": "127.0.0.1"}'
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.oxylabs.io/v1/whitelisted_ips");
$payload = json_encode( array( "address"=> "127.0.0.1" ) );
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
curl_setopt( $curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, 'username:password');

$result = curl_exec($curl);
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
requests.post('https://api.oxylabs.io/v1/whitelisted_ips',
              json={"address": "127.0.0.1"},
              auth=('username', 'password'))
```

{% endtab %}
{% endtabs %}

```
{
    "error": {
        "message": "This is not a valid IP address.",
        "code": 422
    }
}
```

#### Sample output

```
{
    "id": 9767,
    "address": "127.0.0.1"
}
```


# Removing a Whitelisted IP

Learn more about the RESTful API endpoint and code examples for removing whitelisted IPs from your Dedicated ISP proxies.

`DELETE https://api.oxylabs.io/v1/whitelisted_ips/{id}`

| Parameter | Description                                                                                      |
| --------- | ------------------------------------------------------------------------------------------------ |
| `id`      | The `id` of the IP address you want to delete (you can get it from GET whitelisted IPs endpoint) |

| Response | Description                                                                                        |
| -------- | -------------------------------------------------------------------------------------------------- |
| `204`    | Success. The IP address has been removed from the list. Response body is empty.                    |
| `403`    | Error. Request contains an invalid `id`. Response body contains the error message "Access Denied". |

#### Code examples

{% tabs %}
{% tab title="cURL" %}

```shell
curl -X DELETE -u username:password "https://api.oxylabs.io/v1/whitelisted_ips/{id}"
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://api.oxylabs.io/v1/whitelisted_ips/{id}');
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, 'username:password');
$result = curl_exec($curl);
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
requests.delete('https://api.oxylabs.io/v1/whitelisted_ips/{id}', auth=('username', 'password'))
```

{% endtab %}
{% endtabs %}


# Saving Changes (5min Cooldown)

Learn how the RESTful API endpoint is used to confirm and save changes to your IP whitelist, including details on the 5-minute cooldown.

`POST https://api.oxylabs.io/v1/whitelisted_ips/upload_to_servers`

| Response | Description                                                                                                                                                                                                     |
| -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `202`    | <p>Success. Changes to your whitelisted IP list have been confirmed. Response body is empty.<br></p>                                                                                                            |
| `429`    | <p>Error. Changes have not been confirmed, the endpoint is on a 5 minute cooldown. Response body contains the error message "You have exceeded the rate limit for the endpoint. Please try again later"<br></p> |

#### Code examples

{% tabs %}
{% tab title="cURL" %}

```shell
curl -X POST -u username:password "https://api.oxylabs.io/v1/whitelisted_ips/upload_to_servers"
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://api.oxylabs.io/v1/whitelisted_ips/upload_to_servers");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_USERPWD, 'username:password');

$result = curl_exec($curl);
?>
```

{% endtab %}

{% tab title="Python" %}

```python
import requests
requests.post("https://api.oxylabs.io/v1/whitelisted_ips/upload_to_servers", auth=('username', 'password'))
```

{% endtab %}
{% endtabs %}


# Proxy API

Manage Dedicated ISP Proxies via API: add or replace subnets, check offline IPs, and track replacement processes in real-time.

### Managing IPs

To manage your proxies via Proxy API, please refer to this documentation in [**OpenAPI format**](https://dc-api-spec.oxylabs.io/?urls.primaryName=Proxy%20list). The API allows you to add or replace proxy subnets in your proxy lists. API also lets you see the status of the initiated replacement or addition processes and historical changes with new and replaced proxies. [**Acquire the proxy list UUID**](/products/proxies/dedicated-isp-proxies/enterprise/restful) and modify your proxy lists at any time by referring to the API.

### Checking offline IPs

[**Subnets endpoint**](https://dc-api-spec.oxylabs.io/?urls.primaryName=Subnet#/) will return a list of currently offline IPs due to ongoing downtime. IPs included in this list are automatically included in our recovery processes, and they will come online ASAP. This visibility lets users exclude offline IPs from their scraping operations to ensure a high success rate or initiate replacement processes to minimize performance impact.


# Proxy Rotator - Optional

Learn about the Proxy Rotator, its function as a rotating endpoint, and its session control features.

This service is optional, if you wish to use Proxy Rotator - contact your Account Manager to receive a domain.

Instead of connecting to individual IPs, we provide you with a single endpoint to your assigned proxy list. With every request, the endpoint fetches a different IP. Please see the example below to learn how to use the endpoint as a proxy.

{% hint style="info" %}
The [vm.oxylabs.io](http://vm.oxylabs.io) domain is an example only. Contact your Account Manager to get a domain forwarded to you.
{% endhint %}

{% hint style="success" %}
Proxy Rotator should be used only with port `60000`.
{% endhint %}

#### Code examples

{% tabs %}
{% tab title="cURL" %}

```shell
curl -x vm.oxylabs.io:60000 -U user1:pass1 https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, 'http://vm.oxylabs.io:60000');
curl_setopt($query, CURLOPT_PROXYUSERPWD, "username:password");
$output = curl_exec($query);
curl_close($query);
if ($output) {
    echo $output;
}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

response = requests.get(
    'https://ip.oxylabs.io/location',
    proxies={'http': 'http://user1:pass1@vm.oxylabs.io:60000',
            'https': 'http://user1:pass1@vm.oxylabs.io:60000'}
)
print(response.text)
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var proxy = new WebProxy
        {
            Address = new Uri($"http://vm.oxylabs.io:60000"),
            BypassProxyOnLocal = false,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential("username", "password")
        };

        var handler = new HttpClientHandler
        {
            Proxy = proxy,
        };

        HttpClient client = new HttpClient(handler);
        var task = Task.Run(async () =>
        {
            var response = await client.GetAsync("https://ip.oxylabs.io/location");
            var content = response.Content;
            var result = await content.ReadAsStringAsync();
            return result;
        });

        task.Wait();
        Console.WriteLine(task.Result);
    }
}
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Proxy rotation selects IPs only from proxies within the ASNs you selected during initial setup. Automatic rotation will not switch to a different ISPs or change your ASNs you did not choose.
{% endhint %}

### Session Control Using Proxy Rotator

It is possible to keep the same IP address with the Proxy Rotator. Firstly, you will need to know how many proxies your Proxy Rotator has. Then add the `--proxy-header "Proxy-Server: sXXX"` header to your request, where `sXXX` is the number of the proxy, for example, `s5` or `s2541`.

#### Code examples

{% tabs %}
{% tab title="cURL" %}

```shell
user1@machine:~$ curl -x vm.oxylabs.io:60000 -U user1:pass1 https://ip.oxylabs.io/location --proxy-header "Proxy-Server: s10"
1.2.30.40
user1@machine:~$ curl -x vm.oxylabs.io:60000 -U user1:pass1 https://ip.oxylabs.io/location --proxy-header "Proxy-Server: s10"
1.2.30.40
user1@machine:~$ curl -x vm.oxylabs.io:60000 -U user1:pass1 https://ip.oxylabs.io/location --proxy-header "Proxy-Server: s10"
1.2.30.40
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$query = curl_init('https://ip.oxylabs.io/location');
curl_setopt($query, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($query, CURLOPT_PROXY, 'http://vm.oxylabs.io:60000');
curl_setopt($query, CURLOPT_PROXYUSERPWD, "username:password");
curl_setopt($query, CURLOPT_PROXYHEADER, [
    "Proxy-Server: s10",
]);

$output = curl_exec($query);
curl_close($query);
if ($output) {
    echo $output;
}
```

{% endtab %}

{% tab title="Python" %}

```python
import requests


class ProxyAdapter(requests.adapters.HTTPAdapter):
    def proxy_headers(self, proxy):
        headers = super(ProxyAdapter, self).proxy_headers(proxy)
        headers['Proxy-Server'] = 's10'
        return headers


s = requests.Session()
s.proxies = {'http': 'http://username:password@vm.oxylabs.io:60000',
             'https': 'http://username:password@vm.oxylabs.io:60000'}
s.mount('http://', ProxyAdapter())
s.mount('https://', ProxyAdapter())
response = s.get('https://ip.oxylabs.io/location')
print(response.text)
```

{% endtab %}

{% tab title="C#" %}

```csharp
using System;
using System.Net;

class Example
{
    static void Main()
    {
        var client = new WebClient();
        client.Proxy = new WebProxy("http://vm.oxylabs.io:60000");
        client.Proxy.Credentials = new NetworkCredential("user1", "pass1");

        client.Headers.Add("Proxy-Server", "s10");

        Console.WriteLine(client.DownloadString("https://ip.oxylabs.io/location"));
    }
}
```

{% endtab %}
{% endtabs %}


# Response Codes

Learn about the most common response codes and their meanings when using Dedicated ISP Proxies.

These are the most common response codes you can get while using Oxylabs Dedicated ISP Proxies. If you receive any other response code, please contact your Dedicated Account Manager for more information.

<table><thead><tr><th width="166">Response code</th><th width="268.3177083333333">Error message</th><th>Description</th></tr></thead><tbody><tr><td><code>400</code></td><td><code>Bad Request</code></td><td>The request could not be understood. Please check if the request is formatted correctly.</td></tr><tr><td><code>403</code></td><td><code>Forbidden</code></td><td>Access denied: restricted target. Please contact support or your account manager if you have any questions.</td></tr><tr><td><code>404</code></td><td><code>Not Found</code></td><td>The domain specified could not be found or the resource is unavailable.</td></tr><tr><td><code>407</code></td><td><code>Proxy Authentication Required</code></td><td>User credentials are not provided / are incorrect / the user is connecting from an IP that is not whitelisted.</td></tr><tr><td><code>429</code></td><td><code>Too Many Requests</code></td><td>User has reached the thread/concurrent session limit.</td></tr><tr><td><code>500</code></td><td><code>Internal Server Error</code></td><td>We had a problem with our server. Try again later.</td></tr><tr><td><code>502</code></td><td><code>Bad Gateway</code></td><td>The proxy received an invalid response from the upstream or target server.</td></tr><tr><td><code>503</code></td><td><code>Service Unavailable</code></td><td>Failed to connect to the target server. DNS failure to resolve the target server address.</td></tr><tr><td><code>504</code></td><td><code>Gateway Timeout</code></td><td>A proxy server timed out, waiting for a response from the target server. It usually takes about 60s.</td></tr></tbody></table>


# Self-Service

Learn more about Self-Service Dedicated ISP proxies and how to use them

The Self-Service documentation is intended for Dedicated ISP Proxies purchased through Oxylabs' dashboard.&#x20;

{% content-ref url="/pages/jMPrDmbIa5HZbf9jxeBD" %}
[Getting Started](/products/proxies/dedicated-isp-proxies/self-service/getting-started)
{% endcontent-ref %}

{% content-ref url="/pages/kE7yNdCwNFZVb8M1ts6g" %}
[Making Requests](/products/proxies/dedicated-isp-proxies/self-service/making-requests)
{% endcontent-ref %}

{% content-ref url="/pages/OMntz0sJmAsqbMdiwI3C" %}
[Proxy List](/products/proxies/dedicated-isp-proxies/self-service/proxy-list)
{% endcontent-ref %}

{% content-ref url="/pages/elMbZl82Jnuk1kqhQFBA" %}
[Proxy Rotation](/products/proxies/dedicated-isp-proxies/self-service/proxy-rotation)
{% endcontent-ref %}

{% content-ref url="/pages/QeH1dK1DtF46Gj88jhz3" %}
[Location & ISP Info](/products/proxies/dedicated-isp-proxies/self-service/location-settings)
{% endcontent-ref %}

{% content-ref url="/pages/nwc35KKVPKkaGsYMAsWt" %}
[Protocols](/products/proxies/dedicated-isp-proxies/self-service/protocols)
{% endcontent-ref %}

{% content-ref url="/pages/vBmqEOHni1iw77K4u7UH" %}
[Whitelisting IPs](/products/proxies/dedicated-isp-proxies/self-service/whitelisting-ips)
{% endcontent-ref %}

{% content-ref url="/pages/hvBydj9IyCUJiGzxbkyH" %}
[Response Codes](/products/proxies/dedicated-isp-proxies/self-service/response-codes)
{% endcontent-ref %}

{% content-ref url="/pages/Y8C5Ypikcy057HHjpf5g" %}
[Restricted Targets](/products/proxies/dedicated-isp-proxies/self-service/restricted-targets)
{% endcontent-ref %}

{% content-ref url="/pages/TmMwiJ7XWNMAHohJAt0D" %}
[Fair Usage Policy](/products/proxies/dedicated-isp-proxies/self-service/fair-usage-policy)
{% endcontent-ref %}


# Getting Started

Discover the first steps of using Dedicated ISP proxies through self-service plans.

To start using Oxylabs' Dedicated ISP Proxies, you must first go to [**Oxylabs' dashboard**](https://dashboard.oxylabs.io/en/), pick a plan that fits your needs, adjust proxy locations, choose from premium ASNs supported in the country, and finish the transaction. After that, you will be guided to create your proxy user:

<figure><img src="/files/PAXfDFLIMyuvsjtXarMW" alt="" width="365"><figcaption></figcaption></figure>

Within seconds you will be prompted to make your first request.&#x20;

<figure><img src="/files/V85bgFnPMP1EZO35wqsK" alt="" width="365"><figcaption></figcaption></figure>


# Making Requests

Learn how to make requests with Dedicated ISP Proxies using the endpoints and user credentials, with basic code examples.

Make a request to `https://ip.oxylabs.io/location` using the first Dedicated ISP proxy in your list. Replace `USERNAME` and `PASSWORD` with your proxy user credentials.&#x20;

{% hint style="info" %}
Use [**ip.oxylabs.io/location**](https://ip.oxylabs.io/location) to check the parameters of your IPs—this domain delivers information from four geolocation databases: MaxMind, IP2Location, DB-IP, and IPinfo.io. The parameters include IP address, provider, country, city, ZIP code, ASN, organization name, time zone, and meta (when disclosed by database).
{% endhint %}

```sh
curl -x disp.oxylabs.io:8001 -U "user-USERNAME:PASSWORD" https://ip.oxylabs.io/location 
```

Please note that you must follow the above example of building the username string to make requests successfully (`user-` prefix is required). Use the exact grammar and be aware that username and password values are case-sensitive.

#### **Code examples**

{% tabs %}
{% tab title="cURL" %}

```sh
curl -x disp.oxylabs.io:8001 -U "user-USERNAME:PASSWORD" https://ip.oxylabs.io/location 
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

username = 'USERNAME'
password = 'PASSWORD'
proxy = 'disp.oxylabs.io:8001'

proxies = {
   "https": ('https://user-%s:%s@%s' % (username, password, proxy))
}

response=requests.get("https://ip.oxylabs.io/location", proxies=proxies)

print(response.content)
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
const axios = require("axios");
const https = require("https");

const client = axios.create({
    httpsAgent: new https.Agent({
        rejectUnauthorized: false,
    }),
});
const username = 'USERNAME';
const password = 'PASSWORD'

client
    .get("https://ip.oxylabs.io/location", {
        proxy: {
            protocol: "https",
            host: "disp.oxylabs.io",
            port: 8001,
            auth: {
                username: `user-${username}`,
                password: password,
            },
        },
    })
    .then((res) => {
        console.log(res.data);
    })
    .catch((err) => console.error(err));

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'https://disp.oxylabs.io:8001';
$target = 'https://ip.oxylabs.io/location';

$request = curl_init($target);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_PROXY, $proxy);
curl_setopt($request, CURLOPT_PROXYUSERPWD, "user-$username:$password");
$responseBody = curl_exec($request);
$error = curl_error($request);
curl_close($request);

if ($responseBody !== false) {
    echo 'Response: ' . $responseBody;
} else {
    echo 'Failed to connect to proxy: ' . $error;
}
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	username, password, entry := "USERNAME", "PASSWORD", "disp.oxylabs.io:8001"
	proxy, err := url.Parse(fmt.Sprintf("https://user-%s:%s@%s", username, password, entry))
	if err != nil {
		panic(err)
	}

	transport := &http.Transport{
		Proxy: http.ProxyURL(proxy),
	}
	client := &http.Client{Transport: transport}
	target := "https://ip.oxylabs.io/location"
	response, err := client.Get(target)
	if err != nil {
		panic(err)
	}
	defer response.Body.Close()

	body, err := io.ReadAll(response.Body)
	if err != nil {
		panic(err)
	}

	fmt.Println("Response:")
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
package com.example;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Base64;

import org.apache.hc.client5.http.fluent.Request;
import org.apache.hc.core5.http.HttpHost;

public class App {
    public static void main(String[] args) throws IOException, URISyntaxException {
        String target = "http://ip.oxylabs.io/location";
        String username = "USERNAME";
        String password = "PASSWORD";
        String proxy = "disp.oxylabs.io:8001";

        URI proxyURI = new URI(String.format("https://user-%s:%s@%s", username, password, proxy));

        String basicAuth = new String(
                Base64.getEncoder()
                        .encode(
                                proxyURI.getUserInfo().getBytes()));
        String response = Request.get(target)
                .addHeader("Proxy-Authorization", "Basic " + basicAuth)
                .viaProxy(HttpHost.create(proxyURI))
                .execute().returnContent().asString();

        System.out.println(response);
    }
}

```

{% endtab %}

{% tab title="C#" %}

```csharp
using System.Net;

// .NET currently does not support HTTPS proxies
var proxy = new WebProxy {
    Address = new Uri("http://disp.oxylabs.io:8001"),
    Credentials = new NetworkCredential(
        userName: "user-USERNAME",
        password: "PASSWORD"
    )
};

var httpClientHandler = new HttpClientHandler {Proxy = proxy};

using var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);

var result = await client.GetStringAsync("https://ip.oxylabs.io/location");
Console.WriteLine(result);
```

{% endtab %}
{% endtabs %}

The first IP in your proxy list will always use the`8001` port. To make a request using a different proxy, you will need to find your [**proxy list**](/products/proxies/dedicated-isp-proxies/self-service/proxy-list) and take port values from there.&#x20;


# Agent Skills

Oxylabs Agent Skills (`skills.md`) teach LLMs and AI coding assistants how to configure and interact with Oxylabs products.

Agent Skills for Oxylabs proxies will help your model generate accurate connection strings, handle entry nodes, and apply geo-targeting parameters without syntax or parameter hallucinations.

## Installation

### Claude Code (plugin marketplace)

Inside Claude Code, run the following commands:

```
/plugin marketplace add oxylabs/agent-skills
/plugin install oxylabs@oxylabs-agent-skills
```

This installs all 5 skills as a single plugin:

* [`skills/proxies`](https://github.com/oxylabs/agent-skills/blob/main/skills/proxies/SKILL.md)
* [`skills/web-unblocker`](https://github.com/oxylabs/agent-skills/blob/main/skills/web-unblocker/SKILL.md)
* [`skills/web-scraper-api`](https://github.com/oxylabs/agent-skills/blob/main/skills/web-scraper-api/SKILL.md)
* [`skills/headless-browser`](https://github.com/oxylabs/agent-skills/blob/main/skills/headless-browser/SKILL.md)
* [`skills/video-data`](https://github.com/oxylabs/agent-skills/blob/main/skills/video-data/SKILL.md)

To update skills, run this command:

```
/plugin marketplace update oxylabs-agent-skills
```

### Other agents (generic)

For other agents and custom environments, load the repository into your project workspace via the standard skills CLI:

```
npx skills add https://github.com/oxylabs/agent-skills.git
```

## Configuration

All Oxylabs Agent Skills authenticate via environment variables defined in a `.env` file. To use proxy skills, add these keys to your `.env` file:

| Variable          | Description                         |
| ----------------- | ----------------------------------- |
| `OXY_DC_USERNAME` | Your Oxylabs proxy user `username`. |
| `OXY_DC_PASSWORD` | Your Oxylabs proxy user `password`. |

## How to use

Once the skill is active in your workspace, you can prompt your AI assistant to build custom solutions using Oxylabs proxies.

* **Example 1:** "Write an async Python script using `httpx` to scrape 50 product pages concurrently using Oxylabs Dedicated ISP Proxies (Self-Service) with sticky sessions."
* **Example 2:** "Create a Node.js Playwright script that maintains a login session using a specific sticky proxy from my Self-Service Dedicated ISP pool."

## Supported proxy networks

This skill applies to all following proxy types:

* [Residential Proxies](/products/proxies/residential-proxies)
* [Mobile Proxies](/products/proxies/mobile-proxies)
* [ISP Proxies](/products/proxies/isp-proxies)
* [Dedicated ISP Proxies (enterprise)](/products/proxies/dedicated-isp-proxies/enterprise)
* [Dedicated ISP Proxies (self-service)](/products/proxies/dedicated-isp-proxies/self-service)
* [Datacenter Proxies](/products/proxies/datacenter-proxies)
* [Dedicated Datacenter Proxies (enterprise)](/products/proxies/dedicated-datacenter-proxies/enterprise)
* [Dedicated Datacenter Proxies (self-service)](/products/proxies/dedicated-datacenter-proxies/self-service)

## More Oxylabs Agent Skills

Learn more about Agent Skills for other Oxylabs solutions:

* [Web Scraper API](/products/web-scraper-api/solutions-for-ai-workflows/agent-skills)
* [Web Unblocker](/products/web-unblocker/agent-skills)
* [Headless Browser](/products/headless-browser/ai-workflows/agent-skills)
* [Video Data](/products/proxies/high-bandwidth-proxies#agent-skills)


# Proxy List

Learn about your Dedicated ISP Proxy list, including the entry point, port numbers, assigned IPs, and how to use ports for making requests.

Find the complete list of your purchased proxies and your chosen premium ASNs under **My Products** -> **Dedicated ISP Proxies** -> **Proxy list** menu in the dashboard. You can also conveniently export your proxy list in JSON or CSV formats.

<figure><img src="/files/9GBJimDkgUmChWrO09If" alt=""><figcaption></figcaption></figure>

Your proxy list contains the following information:

<table data-header-hidden><thead><tr><th width="158"></th><th></th></tr></thead><tbody><tr><td><strong>Entry point</strong></td><td>The gateway to connect to your proxies - this value never changes and is always <code>disp.oxylabs.io</code></td></tr><tr><td><strong>Port</strong></td><td>The specific port that allows you to access a particular proxy from your list. Port number always starts from <code>8001</code> and goes up.</td></tr><tr><td><strong>Country</strong></td><td>Two-letter country code that represents the location of your proxy.</td></tr><tr><td><strong>ISP (ASN)</strong></td><td>The name of the ISP/ASN source chosen (or assigned if set to "Random locations") during the initial setup</td></tr><tr><td><strong>Assigned IP</strong></td><td>A specific proxy assigned to the indicated port.</td></tr></tbody></table>

**Please note that you will use ports for making requests** with your IPs, meaning you will not directly access your IPs. This method ensures a more stable and convenient service than direct access to IPs. The integration and configuration process is less complicated, and in the case of IP replacement, your port number won't change.

{% hint style="warning" %}
**Note:** the system automatically assigns IPs to the ports. After making changes to your plan, IP allocation to ports may also change.
{% endhint %}


# Proxy Rotation

Learn how to enable proxy rotation for Dedicated ISP Proxies and how to rotate IPs from a specific country pool.

Self-Service Dedicated ISP Proxies supports automatic proxy rotation. To use this feature you need to change your port number to `8000`. With each new request you will receive a random IP from your proxy list.

**Code examples**

{% tabs %}
{% tab title="cURL" %}

```sh
curl -x disp.oxylabs.io:8000 -U "user-USERNAME:PASSWORD" https://ip.oxylabs.io/location 
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

username = 'USERNAME'
password = 'PASSWORD'
proxy = 'disp.oxylabs.io:8000'

proxies = {
   "https": ('https://user-%s:%s@%s' % (username, password, proxy))
}

response=requests.get("https://ip.oxylabs.io/location", proxies=proxies)

print(response.content)
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
const axios = require("axios");
const https = require("https");

const client = axios.create({
    httpsAgent: new https.Agent({
        rejectUnauthorized: false,
    }),
});
const username = 'USERNAME';
const password = 'PASSWORD'

client
    .get("https://ip.oxylabs.io/location", {
        proxy: {
            protocol: "https",
            host: "disp.oxylabs.io",
            port: 8000,
            auth: {
                username: `user-${username}`,
                password: password,
            },
        },
    })
    .then((res) => {
        console.log(res.data);
    })
    .catch((err) => console.error(err));

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$username = 'USERNAME';
$password = 'PASSWORD';
$proxy = 'https://disp.oxylabs.io:8000';
$target = 'https://ip.oxylabs.io/location';

$request = curl_init($target);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_PROXY, $proxy);
curl_setopt($request, CURLOPT_PROXYUSERPWD, "user-$username:$password");
$responseBody = curl_exec($request);
$error = curl_error($request);
curl_close($request);

if ($responseBody !== false) {
    echo 'Response: ' . $responseBody;
} else {
    echo 'Failed to connect to proxy: ' . $error;
}
```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	username, password, entry := "USERNAME", "PASSWORD", "disp.oxylabs.io:8000"
	proxy, err := url.Parse(fmt.Sprintf("https://user-%s:%s@%s", username, password, entry))
	if err != nil {
		panic(err)
	}

	transport := &http.Transport{
		Proxy: http.ProxyURL(proxy),
	}
	client := &http.Client{Transport: transport}
	target := "https://ip.oxylabs.io/location"
	response, err := client.Get(target)
	if err != nil {
		panic(err)
	}
	defer response.Body.Close()

	body, err := io.ReadAll(response.Body)
	if err != nil {
		panic(err)
	}

	fmt.Println("Response:")
	fmt.Println(string(body))
}
```

{% endtab %}

{% tab title="Java" %}

```java
package com.example;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Base64;

import org.apache.hc.client5.http.fluent.Request;
import org.apache.hc.core5.http.HttpHost;

public class App {
    public static void main(String[] args) throws IOException, URISyntaxException {
        String target = "http://ip.oxylabs.io/location";
        String username = "USERNAME";
        String password = "PASSWORD";
        String proxy = "disp.oxylabs.io:8000";

        URI proxyURI = new URI(String.format("https://user-%s:%s@%s", username, password, proxy));

        String basicAuth = new String(
                Base64.getEncoder()
                        .encode(
                                proxyURI.getUserInfo().getBytes()));
        String response = Request.get(target)
                .addHeader("Proxy-Authorization", "Basic " + basicAuth)
                .viaProxy(HttpHost.create(proxyURI))
                .execute().returnContent().asString();

        System.out.println(response);
    }
}

```

{% endtab %}

{% tab title="C#" %}

```csharp
using System.Net;

// .NET currently does not support HTTPS proxies
var proxy = new WebProxy {
    Address = new Uri("http://disp.oxylabs.io:8000"),
    Credentials = new NetworkCredential(
        userName: "user-USERNAME",
        password: "PASSWORD"
    )
};

var httpClientHandler = new HttpClientHandler {Proxy = proxy};

using var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);

var result = await client.GetStringAsync("https://ip.oxylabs.io/location");
Console.WriteLine(result);
```

{% endtab %}
{% endtabs %}

IPs will be selected from the indicated country pool if you provide a `country-` parameter. For example, if you want to rotate your United States proxy pool only, use a parameter `country-` and add two letter country code `country-US` in your user string.&#x20;

**Code examples**

{% tabs %}
{% tab title="cURL" %}

```sh
curl -x https://disp.oxylabs.io:8000 -U 'user-USERNAME-country-COUNTRY:PASSWORD' https://ip.oxylabs.io/location
```

{% endtab %}

{% tab title="Python" %}

```python
import requests

username = 'USERNAME'
password = 'PASSWORD'
country = 'COUNTRY'
proxy = 'disp.oxylabs.io:8000'

proxies = {
   "https": ('https://user-%s-country-%s:%s@%s' % (username, country, password, proxy))
}

response=requests.get("https://ip.oxylabs.io/location", proxies=proxies)

print(response.content)
```

{% endtab %}

{% tab title="Node.js" %}

```javascript
const axios = require("axios");
const https = require("https");

const client = axios.create({
    httpsAgent: new https.Agent({
        rejectUnauthorized: false,
    }),
});
const username = 'USERNAME';
const country = 'COUNTRY'
const password = 'PASSWORD'

client
    .get("https://ip.oxylabs.io/location", {
        proxy: {
            protocol: "https",
            host: "disp.oxylabs.io",
            port: 8000,
            auth: {
                username: `user-${username}-country-${country}`,
                password: password,
            },
        },
    })
    .then((res) => {
        console.log(res.data);
    })
    .catch((err) => console.error(err));

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$username = 'USERNAME';
$country = 'COUNTRY';
$password = 'PASSWORD';
$proxy = 'https://disp.oxylabs.io:8000';
$target = 'https://ip.oxylabs.io/location';

$request = curl_init($target);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($request, CURLOPT_PROXY, $proxy);
curl_setopt($request, CURLOPT_PROXYUSERPWD, "user-$username-country-$country:$password");
$responseBody = curl_exec($request);
$error = curl_error($request);
curl_close($request);

if ($responseBody !== false) {
    echo 'Response: ' . $responseBody;
} else {
    echo 'Failed to connect to proxy: ' . $error;
}

```

{% endtab %}

{% tab title="Go" %}

```go
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	username, country, password, entry := "USERNAME", "COUNTRY", "PASSWORD", "disp.oxylabs.io:8000"

	proxy, err := url.Parse(fmt.Sprintf("https://user-%s-country-%s:%s@%s", username, country, password, entry))
	if err != nil {
		panic(err)
	}

	transport := &http.Transport{
		Proxy: http.ProxyURL(proxy),
	}
	client := &http.Client{Transport: transport}
	target := "https://ip.oxylabs.io/location"
	response, err := client.Get(target)
	if err != nil {
		panic(err)
	}
	defer response.Body.Close()

	body, err := io.ReadAll(response.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println("Response:")
	fmt.Println(string(body))
}

```

{% endtab %}

{% tab title="Java" %}

```java
package com.example;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Base64;

import org.apache.hc.client5.http.fluent.Request;
import org.apache.hc.core5.http.HttpHost;

public class App {
    public static void main(String[] args) throws IOException, URISyntaxException {
        String targetUrl = "http://ip.oxylabs.io/location";
        String username = "USERNAME";
        String country = "COUNTRY";
        String password = "PASSWORD";
        String proxy = "disp.oxylabs.io:8000";

        URI proxyURI = new URI(String.format("https://user-%s-country-%s:%s@%s", username, country, password, proxy));

        String basicAuth = new String(
                Base64.getEncoder()
                        .encode(
                                proxyURI.getUserInfo().getBytes()));
        String response = Request.get(targetUrl)
                .addHeader("Proxy-Authorization", "Basic " + basicAuth)
                .viaProxy(HttpHost.create(proxyURI))
                .execute().returnContent().asString();

        System.out.println(response);
    }
}

```

{% endtab %}

{% tab title="C#" %}

```csharp
using System.Net;

// .NET currently does not support HTTPS proxies
var proxy = new WebProxy {
    Address = new Uri("http://disp.oxylabs.io:8000"),
    Credentials = new NetworkCredential(
        userName: "user-USERNAME-country-COUNTRY",
        password: "PASSWORD"
    )
};

var httpClientHandler = new HttpClientHandler {Proxy = proxy};

using var client = new HttpClient(handler: httpClientHandler, disposeHandler: true);

var result = await client.GetStringAsync("https://ip.oxylabs.io/location");
Console.WriteLine(result);
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Proxy rotation selects IPs only from proxies within the ASN you selected during initial setup. Automatic rotation will not switch to a different ISP or change your ASN.
{% endhint %}


# Location & ISP Info

Learn about Dedicated ISP Proxy location settings, how to access specific locations, and how to verify ISP provider and ASN of your proxies.

We use the [MaxMind GeoIP2](https://www.maxmind.com/en/geoip2-databases) database to determine IP location.&#x20;

To access an IP with a specific location, you do not need to provide any additional parameters. Simply send a request to the port associated with the desired location's assigned IP.&#x20;

### ISP provider and ASN checking

We understand that you may need to verify the network provider of your ISP IPs. Some databases can show inaccurate data for the ISP provider or ASN because they often display the original IP address owner rather than the network where the IP is currently announced. To ensure you have the most accurate, real-time data, we recommend checking your chosen ISP provider and ASN data in the [RIPEstat](https://stat.ripe.net/) database. It reflects the current internet announcement status of the IP.


# Protocols

Learn about using Dedicated ISP Proxies with supported protocols and requirements for each type.

### HTTP

Our documentation includes code examples showcasing how to connect to the proxies using `HTTP` protocol. The protocol is supported by common libraries and third-party software.

### HTTPS

You can also use the fully encrypted connection using `HTTPS` protocol for an extra layer of security. For that, you have to add `https://` to your proxy entry point. For example: `https://disp.oxylabs.io:8000`

<pre class="language-sh"><code class="lang-sh"><strong>curl -x https://disp.oxylabs.io:8000 -U user-USERNAME:PASSWORD https://ip.oxylabs.io/location 
</strong></code></pre>

### SOCKS5

Oxylabs Dedicated ISP Proxies support both `TCP` and `UDP` connections.

For using `SOCKS5` protocol, you have to add `socks5h://` to your proxy entry point. For example: `socks5h://disp.oxylabs.io:8000`

```bash
curl -x socks5h://user-USERNAME:PASSWORD@disp.oxylabs.io:8000 https://ip.oxylabs.io/location
```

{% hint style="info" %}
Note that some websites may identify a proxy IP when using the `SOCKS5` protocol. We highly suggest switching to an alternative protocol in such instances.
{% endhint %}


# Whitelisting IPs

Learn how to authenticate Dedicated ISP Proxies by creating and managing an IP whitelist through the Oxylabs dashboard.

Authenticate your IPs by creating the IP whitelist on the dashboard. Log in to your account and navigate to **Dedicated ISP Proxies** → **Whitelist** → **Edit whitelist**:

<figure><img src="/files/ZRMoctTlAd7pRo88jMoe" alt=""><figcaption></figcaption></figure>

Add up to 10 IPs in IPv4 format (xx.xx.xx.xx).

<figure><img src="/files/K1unZnrTfGvHcu5tApLg" alt=""><figcaption></figcaption></figure>

When adding an IP address to the whitelist, ensure that it belongs exclusively to you, and avoid connecting through Proxy or VPN services.

If you're using services like Amazon Web Services (AWS), we highly recommend using username and password authentication over relying solely on IP whitelisting.


# Response Codes

Learn about the common response codes and errors for Dedicated ISP Proxies and their meaning.

These are the most common response codes you can get while using Oxylabs Dedicated ISP Proxies.

<table><thead><tr><th width="166">Response code</th><th width="254.33333333333331">Error message</th><th>Description</th></tr></thead><tbody><tr><td><code>407</code></td><td><code>Proxy Authentication Required</code></td><td>User credentials are not provided / are incorrect / the user is connecting from an IP that is not whitelisted.</td></tr><tr><td><code>504</code></td><td><code>Gateway Timeout</code></td><td>A proxy server timed out, waiting for a response from the target server. It usually takes about 60s.</td></tr><tr><td><code>503</code></td><td><code>Service Unavailable</code></td><td>Failed to connect to the target server. DNS failure to resolve the target server address.</td></tr><tr><td><code>404</code></td><td><code>Not Found</code></td><td>The domain specified could not be found.</td></tr><tr><td><code>500</code></td><td><code>Internal Server Error</code></td><td>We had a problem with our server. Try again later.</td></tr><tr><td><code>429</code></td><td><code>Too Many Requests</code></td><td>User has reached the thread/concurrent session limit.</td></tr></tbody></table>


# Restricted Targets

Learn about restricted targets and website categories not accessible via the Dedicated ISP Proxy network.

Some websites are restricted on our Dedicated ISP Proxy network to avoid abuse and unclear activities.&#x20;

{% hint style="success" %}
Get in touch with our [**Customer Support Team**](mailto:support@oxylabs.io) if your target falls under the mentioned groups to ensure you can access the target before purchasing.
{% endhint %}

**❗️The list includes but is not limited to targets such as:**

| **Target category**                      | **Example**                      |
| ---------------------------------------- | -------------------------------- |
| Entertainment & streaming                | Netflix, Spotify, Twitch, Disney |
| Banking and other financial institutions | PayPal, Bank of America, Binance |
| Government websites                      | usa.gov, canada.ca               |
| Gaming                                   | Playstation, Steam               |
| Ticketing                                | Ticketmaster, Eventbrite         |
| Mailing                                  | Outlook, Yahoo mail              |

If you’re unsure whether Oxylabs’ Dedicated ISP Proxies could support your use case, please get in touch with our customer support team at  [**support@oxylabs.io**](mailto:support@oxylabs.io) or via the 24/7 live chat on our [**website**](https://oxylabs.io/).




---

[Next Page](/llms-full.txt/1)

