# 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/OPJFVQopnd6KvA0OdUPx" class="button secondary">Oxylabs Proxies</a><a href="/pages/cZ9BoE6slOUWXv8yN60y" class="button secondary">Web Scraper API</a><a href="/pages/WiEk9MEfSgd1wUKFHPiR" class="button secondary">Web Unblocker</a><a href="/pages/4p378ZTqE4epJk5qNHiX" class="button secondary">Headless Browser</a><a href="/pages/uVhjrUaSGqawb9Wh0LEK" class="button secondary">AI Studio</a>

#### **Searching for advanced guides and product features?**

Visit the product section to learn more:<a href="/spaces/BQ7Zf9paoN3FTeGcyfY1" 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" class="button secondary" data-icon="puzzle-piece">Integrations</a>

#### **Looking for dedicated scrapers?**

Find all Web Scraper API targets here:<a href="/spaces/BaJCXoqO1zdFnaMnCKrg" 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-24" tags="web-scraper-api" %}

## Granular parsed results for Google Travel: Hotels

The `google_travel_hotels` [source](/api-targets/search-engines/google/travel-hotels) now returns a more granular offers field when `"parse": true`, with additional hotel-offer details in every parsed response. Existing field names and behavior are unchanged, so current integrations require no updates.
{% endupdate %}

{% update date="2026-08-20" tags="web-scraper-api" %}

## Enhanced parsing for Google search news

Parsed output from the `google_search` [source](/api-targets/search-engines/google/search) now returns more detailed data for the additional news component by using `"parse": true` , which appears in searches using the `tbm=nws` parameter.
{% endupdate %}

{% update date="2026-08-18" tags="headless-browser" %}

## Improved session consistency for Headless Browser

[Headless Browser](/products/headless-browser) sessions have been improved to stay more consistent while accessing the targeted sites, instead of regenerating it between requests.
{% endupdate %}

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

## Google Books dedicated parser

A dedicated **Google Books parser** is now available through the `google_search` [source](/api-targets/search-engines/google/search) using the `tbm=bks` parameter with `parse` set to `true` to receive structured book data in JSON format.
{% endupdate %}

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

## YouTube Downloader audio parameter

[YouTube Downloader](/api-targets/video-and-social-media/youtube/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 (may be dubbed).
  {% 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](/api-targets/search-engines/google/ai-mode) source requests has increased **from 4,000 to 8,000 characters**.
{% endupdate %}

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

## Custom browser instructions for LLM sources

[LLM sources](/api-targets/llms-and-ai) now support [**custom browser instructions**](/products/web-scraper-api/features/js-rendering-and-browser-control#browser-instructions), allowing you to define actions (e.g., clicks, scrolls, waits) to control page behavior before content is extracted.
{% 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` [scraping source](https://developers.oxylabs.io/api-targets/). Enable parsing on your request to receive structured product data (such as `title`, `price`, `availability`, and `specifications`) instead of raw HTML.
{% endupdate %}

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

## Structured Google Scholar results

[**Google Scholar**](/api-targets/search-engines/google/scholar) is now a dedicated parsed source in Web Scraper API. Set source to `google_scholar` and `parse` to `true` to receive parsed JSON directly.
{% 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 sites using CAPTCHA. Success rates on these targets should improve, particularly for jobs that previously saw elevated failure or retry rates. 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](/api-targets/e-commerce/walmart) now returns pricing data **more reliably and consistently**. If you're tracking competitor prices or monitoring product catalogs, you'll get cleaner numbers automatically with new requests using `"parse": true`.
{% endupdate %}

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

## Improved fingerprint validation and device-memory alignment

[Headless Browser](/products/headless-browser) now offers more realistic browser fingerprints and continues to align device-memory values with the rest of the emulated fingerprint to lower detection risk for all users. This change applies automatically to all Headless Browser sessions.
{% endupdate %}

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

## Oxylabs Agent Skills

Oxylabs now offers official **Agent Skills** – structured skill files that teach AI agents and coding assistants work with Oxylabs products with significantly more accurate code and fewer hallucinations.

Each Oxylabs agent skill is product-specific and tools like Claude, Cursor, or GitHub Copilot can pick the right product and handle all the technical details with up-to-date information.

Find setup instructions and all skill files in the official [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 source](/api-targets/llms-and-ai/chatgpt) requests with `search` set to `true` now retry citation extraction automatically, roughly doubling citation coverage in the parsed `citations` field.

The overall request success rate is unchanged, and no payload changes are needed for requests already using `search: true`.
{% endupdate %}

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

## Batch requests for LLM targets

[LLM sources](/api-targets/llms-and-ai) now support **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. Learn more about batch requests [here](/products/web-scraper-api/integration-methods/push-pull#batch-query).
{% 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 [LLM & AI sources](/api-targets/llms-and-ai) 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.)
{% endupdate %}

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

## Partial download (trimming) for Video Data API

[YouTube Downloader](/api-targets/video-and-social-media/youtube/youtube-downloader#input-parameter-values) 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.
{% endupdate %}

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

## Video Data API: video quality selection

[YouTube Downloader](/api-targets/video-and-social-media/youtube/youtube-downloader#input-parameter-values) now supports resolution selection for downloaded videos using the `context: video_quality` parameter with specific resolution from `144p` all the way up to `8K`.
{% 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**](/api-targets/video-and-social-media/youtube/youtube-downloader#error-codes) in job status response for easier troubleshooting when a video can't be downloaded.
{% 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="general-updates" %}

## Oxylabs Dashboard API

[**Dashboard API**](/dashboard/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.
{% 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

[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.
{% 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](/products/headless-browser) 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](/products/headless-browser/session-inspection-and-recording#session-inspection-vnc). 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](/api-targets/video-and-social-media/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/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:

* [Help Center](https://developers.oxylabs.io/help-center/)
* [Changelog](/changelog)
  {% endupdate %}

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

## 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 'https://realtime.oxylabs.io/v1/queries' \
--user 'USERNAME:PASSWORD' \
-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](https://developers.oxylabs.io/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.

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

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

\- 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**

```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**

```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/).

### Roles

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

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 & Subscriptions

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:

* [**Accessing billing information**](#accessing-billing-information)
* [**Managing payment methods**](#managing-payment-methods)
* [**Updating billing information**](#updating-billing-information)
* [**Canceling a subscription**](#canceling-a-subscription)

{% 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

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

In your [**Oxylabs dashboard**](https://dashboard.oxylabs.io/en/registration) you can **add**, **update**, or **remove** payment methods.

To manage your account payment methods, click the `Manage subscription` button on the top right of the screen:

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

{% hint style="warning" %}
**Note:** the `Manage subscription` option only appears for paid products, not free trials or free products.
{% endhint %}

### Adding a new payment method

1. In the payment management system, click **+ Add payment method**.
2. A new form will appear with payment options (Card, PayPal, US bank account).
3. Select your preferred method and enter the required information.
4. (Optional) Check/uncheck the box to make your new payment method the default.
5. Click `Add` to save your new payment method. Your new payment method will appear in the list.

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

### Setting a default or removing payment method

In the payment management system, your current default payment method appears at the top of the list. To change it, click the triple-dot menu next to another payment method from your list and select **Make default**.

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

To remove a payment method from the list, use the same triple-dot menu and select **Delete**.

## Updating billing information

1. Select **Manage subscription** in your product page of the [**Oxylabs dashboard**](https://dashboard.oxylabs.io/en/registration)**.**
2. Locate the **BILLING INFORMATION** section.
3. Click `Update information`.
4. Edit your email, billing address, phone number, and tax ID, as needed.
5. Save changes.

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

## Canceling a subscription

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.
4. For inactive subscriptions, you'll see a `Resubscribe` option instead of Cancel.

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


# 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).

{% 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.

<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**](broken://pages/p3sYEN8kOUi5yoQsfPEd) part.

## Getting started

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).
{% 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/shadowrocket), [**SwitchyOmega**](broken://pages/5n3xDX1TOYxpEzUUQt30) , or [**AdsPower**](/integrations/proxy-integrations/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                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |

\- Mandatory parameter

## Entry node for China

```
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/oxy-proxy-extension-for-chrome)
2. [**SwitchyOmega**](/integrations/proxy-integrations/switchyomega)
3. [**Shadowrocket**](/integrations/proxy-integrations/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:

<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="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="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="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

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

{% 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.

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).

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.
{% 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).
{% 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

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)**](#platform-os) – Select proxies that originate from a specific OS (Windows, iOS, etc.)
* [**IP Version**](#ip-version) – Select proxies that use only IPv4 or IPv6.

## Platform (OS)

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

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.

* `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, HTTPS/3, 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)).

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

{% hint style="warning" %}

* `SOCKS5` proxy authentication is not supported by Google Chrome. Use Mozilla Firefox or HTTP clients instead.
* Certain target websites can identify proxy traffic using `SOCKS5`. If you encounter connection errors, switch to `HTTP` or `HTTPS`.
  {% endhint %}

Oxylabs Residential Proxies support `SOCKS5` connections over `TCP` and `UDP`.

{% hint style="info" %}
`UDP` setup may be more challenging, contact your dedicated Account Manager or [Customer Support](mailto:support@oxylabs.io) for assistance.
{% endhint %}

For a `SOCKS5` connection, use `socks5h://` with your connection string:

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

#### Location targeting

`SOCKS5` does not support country-specific entry point domains. To target a specific location, include the [**additional parameters**](/products/proxies/residential-proxies/making-requests) within your username (e.g., 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

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.

{% 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.).

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

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.**

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

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

{% 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**](broken://pages/BxkppPOY5ckWA74dfTvF)
* **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**](broken://pages/R0QUr8pQBszqd43iT44n) 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!


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

Find everything about Mobile Proxies integration in this documentation, and to begin with, head to the [**Getting Started**](broken://pages/cQOEOE45tQcR6aGF7MmD) part.

## Getting started

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).
{% 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                                                                                                                                                                                                                                                                                                                                                                                                                                                             |

\- Mandatory parameter

## Entry nodes for China

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.

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

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

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

{% 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.

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).
{% 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**](broken://pages/wc7vlaxiJwl12yzI07HG).

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

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, HTTP/3, 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)).

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

{% hint style="warning" %}

* `SOCKS5` proxy authentication is not supported by Google Chrome. Use Mozilla Firefox or HTTP clients instead.
* Certain target websites can identify proxy traffic using `SOCKS5`. If you encounter connection errors, switch to `HTTP` or `HTTPS`.
  {% endhint %}

Oxylabs Mobile Proxies support `SOCKS5` connections over `TCP` and `UDP`.

{% hint style="info" %}
`UDP` setup may be more challenging, contact your dedicated Account Manager or [Customer Support](mailto:support@oxylabs.io) for assistance.
{% endhint %}

For a `SOCKS5` connection, use `socks5h://` with your connection string:

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

#### Location targeting

`SOCKS5` does not support country-specific entry point domains. To target a specific location, include the [**additional parameters**](/products/proxies/mobile-proxies/making-requests) within your username (e.g., 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.

{% 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.
{% 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.).

**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/).


# 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**](broken://pages/mvuVSAsgqJVuYNSWp6n9)
* **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**](broken://pages/wc7vlaxiJwl12yzI07HG) 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!


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

{% 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.


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

**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.

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.

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

{% 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. Access your IP list, set up authentication, and make your first proxy request using code samples.

{% hint style="info" %}
This documentation is intended for Dedicated ISP Proxies purchased through our Sales or Account Team.
{% endhint %}

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.

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

For using `SOCKS5` protocol, you have to add `socks5h` in your request, for example:

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

## Getting Whitelisted IPs List

`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

```json
{
    "data": [
        {
            "id": 9765,
            "address": "127.0.0.1"
        },
        {
            "id": 9766,
            "address": "127.0.0.2"
        }
    ]
}
```

## Adding a Whitelisted IP

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

```json
{
    "error": {
        "message": "This is not a valid IP address.",
        "code": 422
    }
}
```

#### Sample output

```json
{
    "id": 9767,
    "address": "127.0.0.1"
}
```

## Removing a Whitelisted IP

`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)

`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

{% hint style="info" %}
The Self-Service documentation is intended for Dedicated ISP Proxies purchased through Oxylabs dashboard.
{% endhint %}

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.

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

{% 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.


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

**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.

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.

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

{% 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/).


# Fair Usage Policy

Learn about the Dedicated ISP Proxies Fair Usage Policy and how it manages proxy usage thresholds.

To ensure stability of provided services and prevent any potential traffic abuse, Oxylabs limits the concurrent sessions of provided Dedicated ISP proxies. The available concurrent sessions depend on the amount of traffic used per 1 Dedicated ISP proxy during a billing cycle:

* **Until 100 GBs of usage per 1 Dedicated ISP proxy in a month is reached,** up to 100 concurrent sessions are available per 1 purchased Dedicated ISP proxy (For example, purchasing 100 Dedicated ISP proxies means that 10,000 concurrent sessions will be available until 10,000 GB of usage is reached);
* **If 100 GBs of usage per 1 Dedicated ISP proxy is reached,** the available concurrent sessions are reduced to 10 concurrent sessions per 1 Dedicated ISP proxy for the remainder of the ongoing billing cycle (For example, purchasing 100 Dedicated ISP proxies and reaching 10,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/).


# Datacenter Proxies

See how to use Datacenter Proxies. Find code samples, IP control information, location settings, and other details.

## User credentials

To start using Oxylabs' Datacenter Proxies, you must first go to [**Oxylabs' dashboard**](https://dashboard.oxylabs.io/en/) and purchase a plan that fits your needs.

After that, you will be guided to create your proxy user. Proxy user credentials are your access to Datacenter Proxies.

<figure><img src="/files/sQbklGcUuC7MDZ4bVVyg" alt="" width="563"><figcaption></figcaption></figure>

{% hint style="success" %}
**Store your credentials safely**. The password is visible temporarily, but you can easily change it later in the dashboard.
{% endhint %}

## Making requests

Once you create a proxy user, a pop-up will appear displaying your first cURL request to test Datacenter Proxies. Running the code will pick a random proxy IP, make an HTTP request, and print the IP to the output.

Copy the code below in your preferred language and change the `USERNAME` and `PASSWORD` parameters to your proxy credentials:

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

```sh
curl -x dc.oxylabs.io:8000 -U "user-USERNAME:PASSWORD" https://ip.oxylabs.io/location 
```

{% endtab %}

{% tab title="Python" %}

```python
#pip install requests
import requests

username = 'USERNAME'
password = 'PASSWORD'
proxy = 'dc.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" %}

<pre class="language-javascript"><code class="lang-javascript"><strong>//npm install axios
</strong><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: "dc.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 = 'dc.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", "dc.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 = "dc.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("dc.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 %}

To get **a specific proxy** while making requests, refer to [**IP Control**](/products/proxies/datacenter-proxies/ip-control) page.

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


# Proxy List

Information in this page is valid for users with pay per IP billing type only. With this billing model you can access specific IPs from your proxy list using ports provided.

Find the complete list of your purchased proxies under **My Products** -> **Datacenter Proxies** -> **Proxy list** menu in the dashboard.

<figure><img src="/files/bUTDPPbmvuciWgPuVpWn" 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>dc.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 different ports to specify which proxy/exit IP to use while making requests through `dc.oxylabs.io`, meaning you will not directly access your proxy/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="info" %}
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 %}


# Agent Skills

Configure AI tools and coding assistants with official Agent Skills for Oxylabs Datacenter 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 Datacenter 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)


# IP Control

Instructions on how to rotate proxies for changing IP addresses and how to use static IPs for maintaining the same IP.

{% hint style="info" %}
Pay per IP users can download the proxy list via the [**Proxy List**](/products/proxies/datacenter-proxies/proxy-list) **in the Oxylabs dashboard.**
{% endhint %}

## Proxy Rotation

Datacenter Proxies support proxy rotation. To use this feature you need to use port number `8000`. With each new request you will use a **random IP.**

**Code examples**

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

```sh
curl -x dc.oxylabs.io:8000 -U "user-USERNAME:PASSWORD" https://ip.oxylabs.io/location 
```

{% endtab %}

{% tab title="Python" %}

```python
#pip install requests
import requests

username = 'USERNAME'
password = 'PASSWORD'
proxy = 'dc.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
//npm install axios
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: "dc.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 = 'dc.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", "dc.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 = "dc.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("dc.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 %}

{% hint style="info" %}
For the **pay per IP** billing type, each request will use **a random IP from your Proxy list** via port `8000`.

For the **pay per traffic** billing type, each request will use a **random IP from the full Datacenter proxy pool** via port `8000`.
{% endhint %}

## Static Sessions

Depending on your billing type, you can utilize specific ports to maintain a consistent IP address for your requests.

#### Datacenter Proxies per IP

For the pay per IP billing type, use a specific static port to make requests. You will find port numbers in your [**proxy list**](/products/proxies/datacenter-proxies/proxy-list)**.**

Here is an example using a port (`8001`) for a static session:

```bash
curl -x dc.oxylabs.io:8001 -U user-USERNAME:PASSWORD https://ip.oxylabs.io/location 
```

Find more code examples in other code languages below:

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

```sh
curl -x dc.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 = 'dc.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
//npm install axios
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: "dc.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 = 'dc.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", "dc.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 = "dc.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("dc.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 %}

For a rotating or static session in a specific country, refer to [**Select country**](/products/proxies/datacenter-proxies/select-country) page.

#### Datacenter Proxies per traffic

For the pay per traffic billing type, a static port within the range of `8001` to `63000` (generate a random number within this range) will be used to make requests. Each request will receive a random IP from the pool, **but the IP will remain consistent for the duration of the session.**

Here is an example using a random port (`35467`) for a static session:

```bash
curl -x dc.oxylabs.io:35467 -U user-USERNAME:PASSWORD https://ip.oxylabs.io/location 
```

Find more code examples in other code languages below:

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

```sh
curl -x dc.oxylabs.io:35467 -U user-USERNAME:PASSWORD https://ip.oxylabs.io/location 
```

{% endtab %}

{% tab title="Python" %}

```python
#pip install requests
import requests

username = 'USERNAME'
password = 'PASSWORD'
proxy = 'dc.oxylabs.io:35467'

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: "dc.oxylabs.io",
            port: 35467,
            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 = 'dc.oxylabs.io:35467';
$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", "dc.oxylabs.io:35467"
	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 = "dc.oxylabs.io:35467";

        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("dc.oxylabs.io:35467"),
    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 %}


# Select Country

Learn how to target specific proxy locations and how to use rotation logic.

If you want to access IPs from specific locations, you have to provide a `country` – parameter with a two letter country code in your username Here is the list of `country` parameters. For example, if you want to use United States country parameter, add `country-US`.

Find complete list of supported countries in the table below.

<details>

<summary><strong>Datacenter per IP supported countries list</strong></summary>

<table><thead><tr><th>Country</th><th>Country code</th><th data-hidden></th></tr></thead><tbody><tr><td>Argentina</td><td><code>country-AR</code></td><td></td></tr><tr><td>Australia</td><td><code>country-AU</code></td><td></td></tr><tr><td>Austria</td><td><code>country-AT</code></td><td></td></tr><tr><td>Belgium</td><td><code>country-BE</code></td><td></td></tr><tr><td>Brazil</td><td><code>country-BR</code></td><td></td></tr><tr><td>Canada</td><td><code>country-CA</code></td><td></td></tr><tr><td>Chile</td><td><code>country-CL</code></td><td></td></tr><tr><td>China</td><td><code>country-CN</code></td><td></td></tr><tr><td>Colombia</td><td><code>country-CO</code></td><td></td></tr><tr><td>Croatia</td><td><code>country-HR</code></td><td></td></tr><tr><td>Czech Republic</td><td><code>country-CZ</code></td><td></td></tr><tr><td>Denmark</td><td><code>country-DK</code></td><td></td></tr><tr><td>Finland</td><td><code>country-FI</code></td><td></td></tr><tr><td>France</td><td><code>country-FR</code></td><td></td></tr><tr><td>Germany</td><td><code>country-DE</code></td><td></td></tr><tr><td>India</td><td><code>country-IN</code></td><td></td></tr><tr><td>Indonesia</td><td><code>country-ID</code></td><td></td></tr><tr><td>Ireland</td><td><code>country-IE</code></td><td></td></tr><tr><td>Israel</td><td><code>country-IL</code></td><td></td></tr><tr><td>Italy</td><td><code>country-IT</code></td><td></td></tr><tr><td>Japan</td><td><code>country-JP</code></td><td></td></tr><tr><td>Mexico</td><td><code>country-MX</code></td><td></td></tr><tr><td>Netherlands</td><td><code>country-NL</code></td><td></td></tr><tr><td>Peru</td><td><code>country-PE</code></td><td></td></tr><tr><td>Philippines</td><td><code>country-PH</code></td><td></td></tr><tr><td>Poland</td><td><code>country-PL</code></td><td></td></tr><tr><td>Portugal</td><td><code>country-PT</code></td><td></td></tr><tr><td>Romania</td><td><code>country-RO</code></td><td></td></tr><tr><td>Saudi Arabia</td><td><code>country-SA</code></td><td></td></tr><tr><td>Singapore</td><td><code>country-SG</code></td><td></td></tr><tr><td>Slovakia</td><td><code>country-SK</code></td><td></td></tr><tr><td>Spain</td><td><code>country-ES</code></td><td></td></tr><tr><td>Switzerland</td><td><code>country-CH</code></td><td></td></tr><tr><td>Thailand</td><td><code>country-TH</code></td><td></td></tr><tr><td>United Arab Emirates</td><td><code>country-AE</code></td><td></td></tr><tr><td>United Kingdom</td><td><code>country-GB</code></td><td></td></tr><tr><td>United States</td><td><code>country-US</code></td><td></td></tr></tbody></table>

</details>

<details>

<summary><strong>Datacenter per traffic supported countries list</strong></summary>

<table><thead><tr><th>Country</th><th>Country code</th><th data-hidden></th></tr></thead><tbody><tr><td>Argentina</td><td><code>country-AR</code></td><td></td></tr><tr><td>Australia</td><td><code>country-AU</code></td><td></td></tr><tr><td>Austria</td><td><code>country-AT</code></td><td></td></tr><tr><td>Belgium</td><td><code>country-BE</code></td><td></td></tr><tr><td>Brazil</td><td><code>country-BR</code></td><td></td></tr><tr><td>Canada</td><td><code>country-CA</code></td><td></td></tr><tr><td>Chile</td><td><code>country-CL</code></td><td></td></tr><tr><td>China</td><td><code>country-CN</code></td><td></td></tr><tr><td>Colombia</td><td><code>country-CO</code></td><td></td></tr><tr><td>Croatia</td><td><code>country-HR</code></td><td></td></tr><tr><td>Denmark</td><td><code>country-DK</code></td><td></td></tr><tr><td>Estonia</td><td><code>country-EE</code></td><td></td></tr><tr><td>Finland</td><td><code>country-FI</code></td><td></td></tr><tr><td>France</td><td><code>country-FR</code></td><td></td></tr><tr><td>Germany</td><td><code>country-DE</code></td><td></td></tr><tr><td>Greece</td><td><code>country-GR</code></td><td></td></tr><tr><td>Hungary</td><td><code>country-HU</code></td><td></td></tr><tr><td>India</td><td><code>country-IN</code></td><td></td></tr><tr><td>Indonesia</td><td><code>country-ID</code></td><td></td></tr><tr><td>Ireland</td><td><code>country-IE</code></td><td></td></tr><tr><td>Israel</td><td><code>country-IL</code></td><td></td></tr><tr><td>Italy</td><td><code>country-IT</code></td><td></td></tr><tr><td>Japan</td><td><code>country-JP</code></td><td></td></tr><tr><td>Latvia</td><td><code>country-LV</code></td><td></td></tr><tr><td>Lithuania</td><td><code>country-LT</code></td><td></td></tr><tr><td>Mexico</td><td><code>country-MX</code></td><td></td></tr><tr><td>Netherlands</td><td><code>country-NL</code></td><td></td></tr><tr><td>New Zealand</td><td><code>country-NZ</code></td><td></td></tr><tr><td>Norway</td><td><code>country-NO</code></td><td></td></tr><tr><td>Peru</td><td><code>country-PE</code></td><td></td></tr><tr><td>Poland</td><td><code>country-PL</code></td><td></td></tr><tr><td>Portugal</td><td><code>country-PT</code></td><td></td></tr><tr><td>Romania</td><td><code>country-RO</code></td><td></td></tr><tr><td>Saudi Arabia</td><td><code>country-SA</code></td><td></td></tr><tr><td>Singapore</td><td><code>country-SG</code></td><td></td></tr><tr><td>Slovakia</td><td><code>country-SK</code></td><td></td></tr><tr><td>Slovenia</td><td><code>country-SI</code></td><td></td></tr><tr><td>South Korea</td><td><code>country-KR</code></td><td></td></tr><tr><td>Spain</td><td><code>country-ES</code></td><td></td></tr><tr><td>Sweden</td><td><code>country-SE</code></td><td></td></tr><tr><td>Switzerland</td><td><code>country-CH</code></td><td></td></tr><tr><td>Thailand</td><td><code>country-TH</code></td><td></td></tr><tr><td>United Kingdom</td><td><code>country-GB</code></td><td></td></tr><tr><td>United States</td><td><code>country-US</code></td><td></td></tr></tbody></table>

</details>

For example, if you want to rotate United States proxy pool only, use rotating port `8000` together with a parameter `country-US` in your username:

```bash
curl -x dc.oxylabs.io:8000 -U 'user-USERNAME-country-US:PASSWORD' https://ip.oxylabs.io/location
```

**Code examples**

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

```sh
curl -x dc.oxylabs.io:8000 -U 'user-USERNAME-country-COUNTRY: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'
country = 'COUNTRY'
proxy = 'dc.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)
</code></pre>

{% endtab %}

{% tab title="Node.js" %}

```javascript
//npm install axios
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: "dc.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 = 'dc.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", "dc.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 = "dc.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("dc.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 %}

#### Differences between subscription methods

`Datacenter per IP` users who provide rotating port and `country` parameter will receive a **random IP from the selected country from their Proxy list** with each new request.\
\
`Datacenter per traffic` users who provide rotating port and `country` parameter will receive **random IP from the selected country from the entire proxy pool.**

{% hint style="info" %}
We use the [**MaxMind GeoIP2**](https://www.maxmind.com/en/geoip2-databases) database to determine IPs location.
{% endhint %}


# Protocols

Explore supported Datacenter 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 to the proxy using `HTTPS` protocol. For that, you have to add `https://` to your proxy entry point. For example: `https://dc.oxylabs.io:8000`

<pre class="language-sh"><code class="lang-sh"><strong>curl -x https://dc.oxylabs.io:8000 -U user-USERNAME:PASSWORD https://ip.oxylabs.io/location 
</strong></code></pre>

### SOCKS5

SOCKS5 protocol support both `TCP` and `UDP` connections.

For using `SOCKS5` protocol, you have to add `socks5h://` to your proxy entry point. For example: `socks5h://dc.oxylabs.io:8000`

```bash
curl -x socks5h://dc.oxylabs.io:8000 -U user-USERNAME:PASSWORD https://ip.oxylabs.io/location
```


# Whitelisting IPs

Learn how to create or edit an IP whitelist for Oxylabs datacenter proxies.

Authenticate your IPs by creating the IP whitelist on the dashboard. Log in to your account and navigate to **Datacenter Proxies** → **Whitelist** → **Edit whitelist**, and then **add up to 10 IPs** in IPv4 format (xx.xx.xx.xx).

<figure><img src="/files/1hWqpTmNEWkNeUJ0nxMn" alt=""><figcaption></figcaption></figure>

With IP Whitelisting you can provide `country` parameter in `username` field.\
When executing cURL command - do not forget to add a "`:`" at the end of `username` string to prevent cURL from asking for a password.

```bash
curl -x dc.oxylabs.io:8000 -U 'country-US:' https://ip.oxylabs.io/location
```

***

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 different response codes for Datacenter Proxies with issues under the codes and common status errors.

These are the most common response codes you can get while using Oxylabs Datacenter Proxies.

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


# Restricted Targets

Find out which targets are restricted when using Oxylabs Datacenter Proxies.

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

**❗️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 Datacenter 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

Learn about the fair usage policy and session limits on traffic usage for Datacenter Proxies.

{% hint style="warning" %}
This page and policy is valid for **Datacenter Proxies per IP billing type** only.
{% endhint %}

To ensure stability of services and prevent any potential traffic abuse, Oxylabs limits the concurrent sessions of provided Datacenter Proxies. The available concurrent sessions depend on the amount of traffic used per 1 Datacenter proxy during a billing cycle:

* **Until 50 GBs of usage per 1 Datacenter proxy in a month is reached,** up to 100 concurrent sessions are available per 1 purchased Datacenter proxy (For example, purchasing 100 Datacenter 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 Datacenter proxy is reached,** the available concurrent sessions are reduced to 10 concurrent sessions per 1 Datacenter proxy for the remainder of the ongoing billing cycle (For example, purchasing 100 Datacenter 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/).


# Free Datacenter IPs

Free datacenter IPs provide an opportunity to easily test Oxylabs proxies. However, for full product functionality and flexibility consider migrating to paid plans.

{% hint style="info" %}
Integrating the free Datacenter IPs follows the same process as our standard [**Datacenter Proxies**](/products/proxies/datacenter-proxies).
{% endhint %}

After registering on our platform, navigate to your dashboard and create a proxy user. This step activates your free plan for 1 month.

After you create a proxy user, you will be prompted to a pop up with your first test request to receive a random IP.\
Copy it and change the `USERNAME` and `PASSWORD` parameters to your proxy credentials:

```bash
curl -x dc.oxylabs.io:8000 -U "user-USERNAME:PASSWORD" https://ip.oxylabs.io/location
```

Find more code examples in other code languages below:

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

```sh
curl -x dc.oxylabs.io:8000 -U "user-USERNAME:PASSWORD" https://ip.oxylabs.io/location 
```

{% endtab %}

{% tab title="Python" %}

```python
#pip install requests
import requests

username = 'USERNAME'
password = 'PASSWORD'
proxy = 'dc.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" %}

<pre class="language-javascript"><code class="lang-javascript"><strong>//npm install axios
</strong><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: "dc.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 = 'dc.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", "dc.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 = "dc.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("dc.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 %}

### Important Notes

#### **No Location Specification Needed**

Free IPs are automatically assigned and offer limited geographic options. **All 5 IPs are located within the United States.** Location selection is not available, so you **don’t need to include specific location parameters** in your requests.

#### **Authentication Methods**

You can authenticate using either username and password or IP whitelisting. Regardless of the method you choose, **the fair usage policy applies.**

#### **Fair usage policy**

To ensure the stability of our services and prevent potential traffic abuse, we have implemented the following limitations for the free Datacenter IPs:

* **Traffic Limit:** The free plan includes a collective limit of 5 GB of traffic per user across all 5 IPs for 1 month from activation. This allowance does not renew.
* **Concurrent Sessions:** You are limited to 20 concurrent threads (sessions) per user to ensure stable service and prevent abuse.
* **Fixed IPs:** The free Datacenter IPs are fixed and cannot be replaced or refreshed. If you require new or different IPs, consider upgrading to a paid plan.


# Dedicated Datacenter Proxies

Learn about Dedicated Datacenter Proxies, enterprise and self-service options, and how to use them for your projects.

[**Dedicated Datacenter Proxies**](https://oxylabs.io/products/datacenter-proxies/dedicated) are not affiliated with an Internet Service Provider (ISP). They come from remote servers and provide you with completely private IP authentication and anonymity. Exceptional performance and speed are guaranteed with Oxylabs Dedicated Datacenter Proxies.

{% columns %}
{% column %}
**If you were assisted by our Sales Team when purchasing Dedicated Datacenter Proxies**, follow Enterprise documentation.

{% content-ref url="/pages/gXrcXJFwyvUTuctLrdLW" %}
[Enterprise](/products/proxies/dedicated-datacenter-proxies/enterprise)
{% endcontent-ref %}
{% endcolumn %}

{% column %}
**If you have purchased Dedicated Datacenter Proxies via self-service on Oxylabs Dashboard**, follow Self-Service documentation:

{% content-ref url="/pages/NUrr0JxTTFxG5A5Xuu0F" %}
[Self-Service](/products/proxies/dedicated-datacenter-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 about Oxylabs Enterprise Dedicated Datacenter Proxies and see quick setup guides, authentication, rotation, and configuration options.

{% hint style="info" %}
The Enterprise documentation is intended for Dedicated Datacenter Proxies purchased through our Sales Team.
{% endhint %}

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

See how to make requests with your Enterprise Dedicated Datacenter Proxies. Find code examples and details about using ports.

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-datacenter-proxies/enterprise/whitelisting-ips) page. 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-datacenter-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 Datacenter 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 Datacenter 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

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 `httpx` that manages a pool of my Oxylabs Enterprise Dedicated Datacenter direct IPs, handling automatic retry logic on status `429` by switching to the next IP."
* **Example 2:** "Create a Node.js script using `Playwright` that connects via my Enterprise Dedicated Datacenter direct IPs using IP whitelisting authentication rather than explicit 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 Enterprise Dedicated Datacenter Proxies list via URL or RESTful API. Retrieve proxy IPs with country and city information programmatically.

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

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

Enterprise Dedicated Datacenter Proxies support HTTP and SOCKS5 protocols. Contact support to activate SOCKS5 and configure additional ports.

{% 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**](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**

For using `SOCKS5` protocol, you have to add `socks5h` in your request, for example:

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

Whitelist IPs for Enterprise Dedicated Datacenter Proxies using dashboard or RESTful API.

You can whitelist your IPs either by visiting our dashboard or by sending queries directly to our endpoints. In this section, we explain how to use these methods:

{% content-ref url="/pages/LfZp6PYx7x2fgZUzhZMs" %}
[Dashboard](/products/proxies/dedicated-datacenter-proxies/enterprise/whitelisting-ips/dashboard)
{% endcontent-ref %}

{% content-ref url="/pages/A2sLoId0SH26jjWhSCMs" %}
[RESTful](/products/proxies/dedicated-datacenter-proxies/enterprise/whitelisting-ips/restful)
{% endcontent-ref %}




---

[Next Page](/llms-full.txt/1)

