Docs

Run your first request in 5 minutes.

Endpoint format, credentials, rotation, and city, ISP and OS targeting for our main residential pool — everything between the dashboard and your first 200.

The endpoint

eu-residential2.basilproxies.com

host

eu- · us- · ap- — three doors into the same pool

4242

port

4242 rotating · 4243 sticky — the port picks the behavior

USER-country-de-session-9f2k41ab-lifetime-60

username + targeting

PASS

password

Everything you configure rides the username: hyphen-separated tokens, always in the order country → city or ISP → OS → session → lifetime. The password never changes. Both ports speak HTTP, and https:// targets tunnel straight through — point any HTTP-proxy setting at them.

Three doors, one pool

Every credential works on all three hosts. The door only decides where your traffic enters the network — pick the one closest to your machines and shave the round trip. It never limits which countries you can exit from.

  • eu-residential2.basilproxies.comEurope
  • us-residential2.basilproxies.comAmericas
  • ap-residential2.basilproxies.comAsia-Pacific

The dashboard generator picks a default from your account country; the globe in its footer overrides it. A scraper in Frankfurt exiting from US IPs still wants the eu- door.

Credentials

Your proxy user and password live on the pool's page in the dashboard, right above the generator — every token in this guide rides on top of that username. Access is rolling out account by account; if the page isn't enabled on yours yet, write to us. One thing to know: brand-new credentials can answer 407 for the first minute or two while they propagate. That's not a wrong password — wait briefly and retry.

Open the dashboard

Rotating vs sticky

You choose the session model with the port, not a flag. Sticky sessions then take two extra username tokens to name the session and cap its life.

  • port 4242

    Rotating — every request exits from a new IP. Nothing to configure; this is the default the generator hands you.

  • port 4243 · -session-k4mz61pq-lifetime-60

    Sticky — invent any 8-character id (lowercase letters and digits) and the same id keeps the same IP. Lifetime is in minutes; when it runs out the session re-rolls.

  • -lifetime-1440

    The ceiling: 1440 minutes, a full 24 hours on one IP. Any value from 1 to 1440 works.

  • -session-x9d02mvq

    Need a fresh IP mid-run? Change the id. Run many ids in parallel for a pool of stable identities — one per account, one per worker.

Targeting

Four dials, all on the username. Country is the anchor — city and ISP refine it and are mutually exclusive; OS works with anything. Skip every token and you get the worldwide pool.

  • -country-us

    Two-letter ISO code, lowercase. Leave it off entirely for the worldwide pool.

  • -country-us-city-newyork

    City targeting — use the code exactly as the dashboard's city picker writes it (lowercase, spaces and punctuation stripped). Needs the country token in front, and can't be combined with an ISP token.

  • -country-us-asn-7922

    ISP targeting — pin one network by its ASN, digits only, no "AS" prefix. The dashboard's ISP picker knows the numbers per country. Needs the country token, and can't be combined with a city token.

  • -type-residential-os-windows

    OS targeting — exit only from devices reporting windows, mac, ios, or android. The -type-residential- segment is mandatory; a bare -os- token is ignored. Combines with everything above.

Order matters, and it's fixed: country → city or ISP → OS → session → lifetime. The dashboard generator always emits tokens in that order — when a hand-built string misbehaves, diff it against a generated one.

Make a request

The same request in three stacks. Swap USER:PASS for your pair and run it — the -country-us token means every response should report a US exit.

request.sh
# New IP on every request — targeting rides the username
curl -x "http://USER-country-us:[email protected]:4242" \
  https://ipinfo.io/json

See what it's doing

The dashboard keeps a live statistics page for this pool: bandwidth and request charts over 24 hours to 30 days, success rate and latency headlines, and a per-domain table of your top targets. When a job misbehaves, look there before you look at your code — a sinking success rate on one domain tells you more than a stack trace.

Open statistics

Use the API

Every account has a read-only API for its own balance, usage, orders and proxy lines — for a script that tops you up before you run dry, or a dashboard of your own. Create a key under Tools → API in the dashboard and send it as a Bearer header.

Create an API key

Base URL

https://api.basilproxies.com/api/v1
  • GET /me

    Your account id, email, sign-up date and pricing group.

  • GET /balance

    Residential MB left (both pools, merged the way the dashboard shows it), mobile MB, and every ISP subscription with its region, IP count, status and renewal date.

  • GET /usage?from=&to=&granularity=day|hour

    MB used per day or per hour. ISO dates; defaults to the last 30 days, 90 at most.

  • GET /orders?limit=&cursor=

    Your purchases, newest first — amount in minor units in the order's own currency, plus amountEur. Up to 100 per page (default 25); pass nextCursor back for the next one.

  • GET /subscriptions

    Every subscription, including ones that are past due.

  • GET /proxies?product=residential|isp&country=&session=rotating|sticky&count=&format=

    Ready-to-use proxy lines built from the credentials you already hold — nothing is created and the call spends no data. count up to 1000 (default 10); format host:port:user:pass (default), user:pass@host:port or url.

  • GET /res2/subaccounts

    Your main account and each sub-account, with its own balance and credentials.

balance.sh
# Keep the key in an env var, not in the script
curl "https://api.basilproxies.com/api/v1/balance" \
  -H "Authorization: Bearer $BASIL_API_KEY"

GET /balance answers like this:

response.json
{
  "residential": {
    "remainingMb": 42350,
    "pool": "res2",
    "classicMb": 0,
    "res2Mb": 42350
  },
  "mobile": {
    "remainingMb": 0
  },
  "isp": [
    {
      "id": "8c1e2f60-4b7a-4d19-9e3a-51f0c2d7a8b4",
      "region": "australia",
      "ipCount": 25,
      "status": "ACTIVE",
      "periodEnd": "2026-10-12T08:31:00.000Z",
      "cancelAtPeriodEnd": false
    }
  ]
}
  • Authorization: Bearer bp_uk_live_…

    The key is shown once when you create it. Up to 2 active keys per account; revoke one on the same page and it stops working on the very next request. A key works only on /api/v1 — never on the dashboard.

  • 60 requests / minute

    Per account, shared by both keys. Past that you get 429 RATE_LIMITED with a Retry-After header in seconds.

  • {"error": {"code": "…", "message": "…"}}

    Every error has this shape: 401 UNAUTHORIZED for a missing, wrong or revoked key; 422 VALIDATION_ERROR for a bad query parameter; 404 NOT_FOUND from /proxies when there's no residential balance to build lines from.

  • 1 GB = 1000 MB

    Data is always in MB. Money is in minor units (cents) next to its currency.

  • Read-only

    A key can't buy, cancel or change anything. A leaked key exposes your account data, not your money — revoke it and make a new one.

When it doesn't work

  • 407 Proxy Authentication Required

    Freshly issued credentials need a minute or two to propagate — wait and retry before touching anything. Still 407 after that? Copy the pair from the dashboard again, and remember targeting tokens belong on the username, never the password.

  • Everything times out

    Check the port: 4242 rotating, 4243 sticky — nothing else answers. Endpoints saved before August 2026 use retired hosts and ports; regenerate them in the dashboard.

  • The exit country isn't what I asked for

    Token order and case are strict: lowercase codes, country before everything else. Generate one string in the dashboard and diff it against yours.

  • City or ISP targeting errors out

    City and ISP can't ride one username together — pick one. Both need a country token in front, and the code must match the dashboard picker exactly.

  • Connects, but the target blocks you

    That exit is burned for that target. Rotate the session id, narrow the targeting to a cleaner region, or check the statistics page to see if the block is domain-wide.