VaultProxies LogoVaultproxies
Reseller API

API Documentation

Programmatic access to the VaultProxies network. Check your balance, list available plans, place orders, read back live service credentials and generate ready-to-use proxy lines. Six endpoints, one header, JSON in and out.

Introduction

The VaultProxies Reseller API gives you programmatic control over the same proxy infrastructure exposed in the dashboard. Read your balance, list the catalog, place orders, pull live credentials for every service you have provisioned and generate ready-to-use proxy lines with geo targeting and sticky sessions. The surface is intentionally tiny: six endpoints, one header, JSON over HTTPS.

No SDKs, no proprietary client to install. Drop a curl command into your stack and you are running. If you prefer Python or Node, examples are inline on every endpoint below.

Apply for reseller access
API keys are issued from the reseller dashboard once your account is approved. Approval typically lands within 24 hours.

Authentication

Every request must include your API key in the X-API-Key header. For POST /api/reseller/order also send Content-Type: application/json. Keys are issued from the reseller dashboard after your account is approved.

curl
curl -H "X-API-Key: YOUR_API_KEY" \
  https://vaultproxies.net/api/reseller/balance
Keep your key secret
Never commit the key, never expose it in client-side code, never paste it into a public chat. Rotate it from the reseller dashboard the moment you suspect it leaked.

Base URL

All endpoints below are relative to:

curl
https://vaultproxies.net

Reseller pricing

Every order placed with a reseller API key is billed at the reseller rate, not the public retail rate, so there is nothing to enable. Your reseller loyalty discount, if any, applies on top at checkout. The table below is live, read from GET /api/reseller/pricing, so it always matches what you are charged. From code, call GET /api/reseller/categories with your key: its price_per_unit_cents is your rate.

Proxy typeKeyYour costPublic retailMargin

Live reseller rates. Time-priced plans (e.g. dc_unlim) show the per-day rate; pass week or month as time_unit when ordering for those tiers.

Want the full retail price book in one page? See /pricing.

Get balance

Returns your current account balance in cents. Divide by 100 for the dollar amount. The same value is shown on the reseller dashboard wallet card.

GET/api/reseller/balance
curl
curl -X GET \
  -H "X-API-Key: YOUR_API_KEY" \
  "https://vaultproxies.net/api/reseller/balance"

Response

node
{
  "balance_cents": 15000
}

List categories

Returns every plan you can order, priced for your key. price_per_unit_cents is the reseller rate you are billed at, not retail; retail_price_per_unit_cents is our public price for the same unit, so the difference is your margin. volume_tiers is null whenever your rate is flat. Pass a key as category_key when ordering. Cache the response on your side, the catalog moves slowly.

GET/api/reseller/categories
curl
curl -X GET \
  -H "X-API-Key: YOUR_API_KEY" \
  "https://vaultproxies.net/api/reseller/categories"

Response

node
{
  "categories": [
    {
      "id": 1,
      "key": "resi_pergb",
      "display_name": "Residential /GB",
      "pricing_type": "pergb",
      "unit": "GB",
      "price_per_unit_cents": 50,
      "retail_price_per_unit_cents": 100,
      "min_units": 1,
      "max_units": 5000,
      "unit_block_hours": 0,
      "hidden": false,
      "volume_tiers": null
    },
    {
      "id": 3,
      "key": "dc_unlim",
      "display_name": "Datacenter Unlimited",
      "pricing_type": "unlim",
      "unit": "DAY",
      "price_per_unit_cents": 250,
      "retail_price_per_unit_cents": 500,
      "min_units": 1,
      "max_units": 61,
      "unit_block_hours": 24,
      "hidden": false,
      "volume_tiers": null
    }
  ]
}

Create order

Provisions a new proxy service against your balance. Specify the plan with category_key, the quantity with units, and for unlimited plans the billing window with time_unit. The response includes the freshly minted credentials and the matching invoice.

POST/api/reseller/order
curl
curl -X POST \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"category_key": "resi_pergb", "units": 5}' \
  "https://vaultproxies.net/api/reseller/order"

Request body

node
{
  "category_key": "resi_pergb",
  "units": 5,
  "time_unit": "day"
}

category_key accepts resi_pergb, resi_unlim, dc_unlim, dc_pergb, mobile_pergb and dedicated_isp.

Dedicated ISP orders

dedicated_isp takes two extra fields. pool is required, stock is finite per pool and is validated before you are charged, so an order without it is rejected with a 400. Fetch the pools and their live stock from GET /api/reseller/proxy/isp-pools first, with your X-API-Key.

node
{
  "category_key": "dedicated_isp",
  "units": 1,
  "pool": "ISP_US_SNEAKERS",   // required, see GET /api/reseller/proxy/isp-pools
  "term_days": 30              // optional: 30, 60 or 90 (default 30)
}

The term is fixed at purchase. Dedicated ISP has no renewal path, so extending an existing plan is rejected, order a fresh one instead. units is the number of exclusive IPs, and each is delivered with its own credential rather than one pair for the plan.

GET/api/reseller/proxy/isp-pools

Pools available for dedicated_isp, with live stock. Only pools that can be fulfilled right now are returned, so any pool value from here is safe to order against - subject to stock covering your units.

node
{
  "pools": [
    {
      "pool": "ISP_US_SNEAKERS",
      "title": "US Sneaker Proxies (ISP)",
      "stock": 6279,
      "in_stock": true,
      "is_subnet": false
    }
  ]
}

Response

node
{
  "service": {
    "id": 123,
    "user_id": 1,
    "category_id": 1,
    "status": "active",
    "pricing_type": "pergb",
    "unit": "GB",
    "remaining_gb": 5,
    "username": "abc123xyz",
    "password": "secretpass123",
    "created_at": "2026-05-05T12:00:00Z"
  },
  "invoice": {
    "id": 456,
    "amount_cents": 425,
    "status": "paid"
  }
}
Sticky session control
Don't build proxy usernames by hand, POST /api/reseller/proxy/generations/create (documented below) assembles rotating or sticky credentials for you, with the correct session grammar and limits per plan.

List services

Returns every active service on your account along with its live credentials, status and remaining bandwidth. Use this to hand fresh credentials to your downstream customers, or to poll for top-up triggers.

GET/api/reseller/services
curl
curl -X GET \
  -H "X-API-Key: YOUR_API_KEY" \
  "https://vaultproxies.net/api/reseller/services"

Response

node
{
  "services": [
    {
      "id": 123,
      "username": "abc123xyz",
      "password": "secretpass123",
      "remaining_gb": 4.5,
      "status": "active",
      "expires_at": "2026-07-06T12:00:00Z"
    }
  ]
}

Generator locations

Lists what you can geo-target for a plan. Pass the plan with plan_key (defaults to resi_unlim); add country to narrow to one country. What comes back depends on the plan:

  • resi_pergb: every country, and with country=US the US states. Cities are not listed: this pool rejects a city name, so target a city with extra.geoname_id (e.g. 5368361 for Los Angeles). Other countries' states still work as ISO 3166-2 codes in state.
  • pool4_pergb: countries, US states and their cities.
  • mobile_pergb, shared_isp, eu_isp, dc_pergb and resi_unlim_budget: countries only.
  • ipv6_pergb: an empty list, it has no geo targeting.
GET/api/reseller/proxy/generator/locations
curl
curl -X GET \
  -H "X-API-Key: YOUR_API_KEY" \
  "https://vaultproxies.net/api/reseller/proxy/generator/locations?plan_key=resi_pergb&country=US"

Response

node
{
  "countries": [
    {
      "code": "US",
      "name": "United States",
      "states": [
        { "code": "CA", "name": "California" },
        { "code": "NY", "name": "New York" }
      ]
    }
  ]
}

Generate proxies

Turns one of your active services into ready-to-use proxy lines. Supports rotating and sticky sessions, geo targeting (where the plan allows it), HTTP and SOCKS5, and several output formats. The response always carries the exact hostname and port to connect to, so you never have to hardcode gateways.

POST/api/reseller/proxy/generations/create
curl
curl -X POST \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "service_id": 123,
    "plan_key": "resi_pergb",
    "country": "US",
    "protocol": "HTTP",
    "format": "user:pass@ip:port",
    "extra": { "mode": "sticky", "count": 5, "session_seconds": 600 }
  }' \
  "https://vaultproxies.net/api/reseller/proxy/generations/create"

Response

node
{
  "generations": [
    {
      "id": 1751712000000000000,
      "user_id": 1,
      "service_id": 123,
      "plan_key": "resi_pergb",
      "country": "us",
      "protocol": "HTTP",
      "format": "user:pass@ip:port",
      "hostname": "gate-eu.vaultproxies.com",
      "port": 80,
      "username": "abc123xyz-geo-us-sess-k2j9x1pq-life-600",
      "password": "secretpass123",
      "output_line": "abc123xyz-geo-us-sess-k2j9x1pq-life-600:[email protected]:80",
      "created_at": "2026-07-05T12:00:00Z"
    }
  ],
  "generation": { "...": "first entry of generations, same shape" }
}

Request parameters

ParameterTypeRequiredDescription
service_idintegerYesActive service to generate from. Must belong to your account and be status active.
plan_keystringYesMust match the service's plan: resi_pergb, resi_unlim, resi_unlim_budget, dc_unlim, dc_pergb, mobile_pergb, backup_pergb, ipv6_pergb, shared_isp (US ISP), eu_isp (EU ISP).
protocolstringNoHTTP (default) or SOCKS5. Picks the port in the generated line, see the per-plan table below.
formatstringNoOutput line format: ip:port:user:pass (default), user:pass@ip:port, ip:port@user:pass, user:pass:ip:port, ip:port:pass:user, protocol://user:pass@ip:port, protocol://ip:port, ip:port, user:pass. host: is accepted in place of ip:.
countrystringNoISO-2 code (e.g. US) or full name, see the locations endpoint for what each plan allows. On dc_unlim it only picks the EU vs US gateway; ignored on ipv6_pergb. On resi_unlim_budget country is the only geo dimension, state and city are ignored.
regionstringNoresi_pergb only: a multi-country grouping. Continent codes (EU, NA, SA, AS, AF, OC) or a finer region (nordics, dach, benelux, euwest, eueast, apac, mena, latam). Mutually exclusive with country/state/city. The old name `continent` is still accepted.
statestringNoState code or name. Respected on resi_pergb (the locations endpoint lists the US states; elsewhere use the ISO 3166-2 code), pool4_pergb (US, two-letter code), resi_unlim and backup_pergb. Country-only plans (mobile_pergb, shared_isp, eu_isp, dc_pergb) have no state dimension.
citystringNoCity name. Respected on pool4_pergb, resi_unlim and backup_pergb. NOT on resi_pergb: that pool rejects a city name, so use extra.geoname_id there (e.g. 5368361 for Los Angeles).
ipsstring[]Noshared_isp only: static IPs (e.g. ["83.245.53.70"]) to pin each line to. One line is emitted per IP and extra.count is ignored. Mutually exclusive with sticky mode.
extra.postal_codestringNoresi_pergb only: exact postal code, letters and digits, up to 12 characters (e.g. 90011, SW1A1AA). Works best combined with country. With no node online in that code the connection is refused rather than moved to a nearby one.
extra.dmaintegerNoresi_pergb only: US Nielsen metro (DMA) code, 501 New York, 803 Los Angeles.
extra.geoname_idintegerNoresi_pergb only: exact city by GeoNames ID (e.g. 5128581 for New York City). Unambiguous where city names collide, prefer it over city when you know the ID.
extra.asnintegerNoresi_pergb only: autonomous system number, digits only, no AS prefix (e.g. 13335).
extra.ispstringNoresi_pergb only: ISP or carrier name. Spaces, accents and punctuation are removed automatically, so T-Mobile is sent as TMobile.
extra.timezonestringNoresi_pergb only: IANA timezone (e.g. America/New_York). Case-sensitive.
extra.latitudenumberNoresi_pergb only: radius-search centre latitude, -90 to 90. Requires longitude; ignored on its own.
extra.longitudenumberNoresi_pergb only: radius-search centre longitude, -180 to 180. Requires latitude; ignored on its own.
extra.radius_kmintegerNoresi_pergb only: radius in km around latitude/longitude. 1-100; larger values are clamped to 100. Any node inside the circle may be used, the compass letters are added for you, so pass plain signed decimals.
extra.modestringNorotating (default) or sticky. Sticky keeps the same IP for the session window. Not available on ipv6_pergb (always rotating).
extra.countintegerNoHow many proxy lines to generate. 1-10000, default 1.
extra.session_secondsintegerNoSticky session lifetime in seconds (default 600). Caps: resi_pergb 21,600 (6 h); shared_isp and resi_unlim_budget 86,400 (24 h). resi_unlim and mobile_pergb are converted to whole minutes, pass at least 60; mobile_pergb caps at 7,200 (2 h). Ignored on eu_isp.
extra.session_minutesintegerNoAlternative to session_seconds, sticky lifetime in minutes. Ignored when session_seconds is also set.
extra.session_lengthstringNoeu_isp only: qualitative sticky length, long (default) or short. EU ISP sessions take no numeric TTL.

Per-plan hosts, ports & capabilities

Every plan runs its own gateway. HTTP and SOCKS5 may sit on different ports; geo targeting and sticky-session limits also vary. The generate response always returns the correct hostname and port, so treat this table as a reference rather than something to hardcode.

Hostnames are always ours. To give your customers your own domain, point a CNAME at the plan host (or an A record at its IP) and substitute it in the lines you hand out, or run your own gateway in front and forward with the credential. Authentication is by username and password alone, so any of these works with no setup on our side.

PlanHostHTTP / SOCKS5Geo targetingSticky sessions
resi_pergbgate-eu.vaultproxies.com80 / 80 (shared)Country, continent, state, postal code, metro (DMA), GeoNames id, ASN, ISP, timezone, radius, continent is mutually exclusive with country/stateUp to 6 h (session_seconds ≤ 21600)
resi_unlimresi.vaultproxies.com8080 / 1080Country, state, cityUp to 24 h (session_seconds ≤ 86400), converted to whole minutes, pass at least 60
resi_unlim_budgetassigned per servicereturned by generateNoneUp to 24 h (session_seconds ≤ 86400)
dc_unlimeu-dc.vaultproxies.com10808 / 10808 (shared)Country, picks the EU or US gateway onlyUp to 24 h (session_seconds ≤ 86400)
pool4_pergbgate-us.vaultproxies.com10000 / 11000Country, state, city, ASNUp to 10 min (session_seconds ≤ 600)
dc_pergbgate-us.vaultproxies.com777 / 666CountryUp to 24 h (session_seconds ≤ 86400)
mobile_pergbgate-eu.vaultproxies.com8080 / 1080Country, ASNUp to 2 h (session_seconds ≤ 7200), converted to whole minutes
backup_pergbna.vaultproxies.com80 / 80 (shared)Country, state, cityUp to 24 h (session_seconds ≤ 86400)
shared_ispgate-us.vaultproxies.com30 / 31Country, IP pinning, via ips, mutually exclusive with stickyUp to 24 h (session_seconds ≤ 86400), mutually exclusive with ips
eu_ispgate-eu.vaultproxies.com30 / 31CountryNone (always rotating)
ipv6_pergbgate-us.vaultproxies.com30 / 31NoneNone (always rotating)
ipv6_dc_pergbgate-us.vaultproxies.com30 / 31NoneUp to 24 h (session_seconds ≤ 86400)
ipv6_dc_unlimgate-us.vaultproxies.com30 / 31NoneUp to 24 h (session_seconds ≤ 86400)
Rotating vs sticky
Rotating credentials hand you a fresh exit IP on every request, nothing to manage. Sticky mode appends a session token to the username so the same IP is kept for the session window; generate several lines with extra.count and each carries its own independent session.

Targeting tokens

Targeting rides inside the proxy username as -key-value pairs appended to the base username. The generator builds these for you when you pass country, state and city - this reference is for hand-built credentials and for anything you expose to your own customers.

curl
ca3ddbbd85591e7f-geo-us-st-california-sess-drfse9co-life-21600
TokenSelectsExample
geo-Country, ISO-3166 alpha-2geo-us
st-State or provincest-california
loc-Cityloc-dallas
reg-A group of COUNTRIES, not a statereg-nordics
pc-Postal / ZIP codepc-90001
dma-Metro area (Nielsen DMA)dma-501
gid-GeoNames city idgid-5368361
asn-Autonomous system numberasn-7922
isp-ISP or mobile carrierisp-comcast
tz-Timezonetz-america_new_york
near-Radius search, lat, long, kmnear-34.05N118.24W50
ip-Pin one static IP (dots as underscores)ip-203_0_113_7
sess-Sticky session id, same exit IP while it livessess-a1b2c3d4
life-Session lifetime, in secondslife-600
reg- is a group of countries, not a state
For a US state or a Canadian province use st-, st-california, not reg-california. reg- selects a multi-country region (nordics, africa, and so on), so it competes with geo- for the same slot: geo- alongside a real region name is rejected rather than one being silently dropped. Credentials we issued before st- existed spelled the state reg-; those keep working, but st- is what to use now.

A plan only honours the tokens its pool can actually act on. Sending one it does not support is an error, not a silent downgrade, so you never end up somewhere you did not ask for.

PlanTokens it honours
resi_pergbgeo, reg, st, pc, dma, gid, asn, isp, tz, near, sess, life (no loc: a city name is refused, use gid)
mobile_pergbgeo, reg, asn, sess, life
dc_pergbgeo, reg, sess, life, US-only pool
shared_ispgeo, ip, sess, life, US-only pool
ipv6_pergbNone, US-only pool, nothing left to choose
eu_ispgeo, NL-only pool; no sticky, it rotates regardless of session
dedicated_ispNone, the IP you were assigned is the targeting
resi_unlim, resi_unlim_budget, dc_unlim, backup_pergbDifferent grammar, these run on vendor gateways, not ours; generate them from the dashboard or /api/proxy/generate

GET /api/plans/catalog is public and returns the same per-plan targeting list, alongside each plan’s gateway host and ports, read it from your code rather than hard-coding this table.

Order parameters

ParameterTypeRequiredDescription
category_keystringYesAny key from GET /api/reseller/categories, e.g. resi_pergb, mobile_pergb, dedicated_isp.
unitsintegerYesQuantity to purchase. GB for pergb plans, hours/days for unlim plans.
time_unitstringNoFor unlim plans only: hour, day, week, month.
poolstringFor dedicated_ispRequired for dedicated_isp: a pool ID from GET /api/reseller/proxy/isp-pools, e.g. ISP_US_SNEAKERS. Orders without it are rejected.
addonsobject[]Noipv6_dc_unlim new orders only: hand-provisioned extras, each { key, location? }. Keys: dedicated_server_1g ($15 / 30 days, needs a location), ipv6_pool_40 ($15 / 30 days) or ipv6_pool_36 ($50 / 30 days), one pool per order. Charged per 30 days of the plan, rounded up, at cost. Provisioned by hand within 1 business day. Prices and locations: GET /api/catalog/addons?plan_key=ipv6_dc_unlim.
term_daysintegerNodedicated_isp only: 30, 60 or 90 (default 30). Fixed at purchase.

Error responses

Errors are returned as JSON with an error field and the matching HTTP status code. The most common cases are missing parameters (400), invalid keys (401), insufficient balance (402), suspended accounts (403) and rate-limit hits (429).

node
{
  "error": "insufficient balance"
}
StatusMeaning
200Success
201Created
400Bad request, check parameter names and types
401Unauthorized, X-API-Key header missing or invalid
402Insufficient balance for the requested order
403Account suspended
429Rate limit exceeded

Rate limits

The default rate limit is 120 requests per second per API key (7,200 / min) , generous enough for production scrapers, schedulers, and CI jobs without us getting in your way. Each response carries the standard rate-limit headers:

  • X-RateLimit-Limit: max requests per window
  • X-RateLimit-Remaining: remaining requests in this window
  • X-RateLimit-Reset: seconds until the window resets

If you genuinely need uncapped throughput for production scale, message us on /support and we will raise it on your account. Live network status is at /status.

Quick start

Complete workflow: check balance, browse the catalog, place an order, read back the credentials, then generate proxy lines.

curl
# 1. Check your balance
curl -H "X-API-Key: YOUR_API_KEY" "https://vaultproxies.net/api/reseller/balance"

# 2. View available plans
curl -H "X-API-Key: YOUR_API_KEY" "https://vaultproxies.net/api/reseller/categories"

# 3. Order 5 GB residential
curl -X POST \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"category_key": "resi_pergb", "units": 5}' \
  "https://vaultproxies.net/api/reseller/order"

# 4. List all your services with live credentials
curl -H "X-API-Key: YOUR_API_KEY" "https://vaultproxies.net/api/reseller/services"

# 5. Generate 5 US rotating proxy lines from the new service
curl -X POST \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"service_id": 123, "plan_key": "resi_pergb", "country": "US", "extra": {"count": 5}}' \
  "https://vaultproxies.net/api/reseller/proxy/generations/create"
Live request testing inside the dashboard
Once approved, /dashboard/reseller/docs has the same reference with your real keys pre-filled and copy-as-curl on every endpoint.