Proxy reseller API, explained step by step
An API (application programming interface) lets your own website or script talk to ours without anyone clicking buttons. With this one you can order proxies for your customers, choose their country and rotation, follow their data use, renew them and export their details, all through ordinary web (HTTP) requests. In other words, you can run a white-label shop, sold under your own name, on top of our network. Replies come back as JSON, a simple text format that almost every programming language can read.
What you can do with the API
Once you are an approved reseller, the Budget Proxies REST API lets your own code handle the whole job: create proxy plans, change their targeting (country, rotation and protocol), check live usage, renew plans, and export the login details you hand to your customers. Each request carries your API key, which tells us it is really you, and every reply comes back as JSON.
/plans/create and manage it afterwards by its id, the number the API gives it.
GET /data at any time.
Getting your first plan running
- Get approved. Your API key will then be waiting in the dashboard; copy it somewhere safe.
- Look up the plans you can sell with
GET /catalog. - Create a plan. Its login details come back in the same reply:
# Buy 5 GB of US residential and get gateway credentials back
curl -X POST https://budgetproxies.com/api/v1/YOUR_KEY/plans/create \
-d "type=residential" -d "gb=5" -d "country=United States" -d "protocol=HTTP"
Your API key: where to find it and how to send it
Your API key is a secret code that identifies your account, and it lives in the reseller dashboard. The simplest way to send it is inside the web address (URL) of each request:
https://budgetproxies.com/api/v1/{API_KEY}/{action}
…or, if you prefer, send it in an X-API-Key header (an extra line of information attached to a request) to /api/v1/index.php?action=…. Guard the key like a password, because anyone holding it can spend your wallet balance. If you think it has leaked, create a new one in the reseller hub.
Where requests go, and what comes back
https://budgetproxies.com/api/v1/{API_KEY}/
A request that works returns HTTP 200 (the web’s “OK” code) and a reply shaped like { "status": "success", "data": { … } }. When something goes wrong you get a 4xx or 5xx code instead, and errors[0].message says what happened. All amounts are in USD. Anything that makes a change (create/renew/config/ipauth/delete) has to be sent with POST, while simply looking things up is done with GET.
How many requests you can send
You can send up to 60 requests/minute with each key. Go past that and the API answers with a 429 code, which simply means “slow down”: wait a moment, then try again. If your shop really needs more room, ask our support team.
GET/catalog
Shows every plan you are able to sell, with its price per GB.
curl https://budgetproxies.com/api/v1/YOUR_KEY/catalog
{ "status":"success", "data": { "plans": [
{ "plan_id":3, "name":"Residential", "type":"residential", "price_per_gb":3.98,
"currency":"USD", "min_gb":1, "max_gb":1000, "protocols":["HTTP","HTTPS","SOCKS5"] }
] } }
GET/locations
Tells you which countries a proxy type can be set to.
| Parameter | Required | Description |
|---|---|---|
| type | No | residential (used when you leave it out), datacenter, mobile or premium. |
curl "https://budgetproxies.com/api/v1/YOUR_KEY/locations?type=residential"
{ "status":"success", "data": { "type":"residential",
"countries":[ {"code":"us","name":"United States"}, {"code":"gb","name":"United Kingdom"} ], "total":2 } }
GET/plans
Lists all of your plans. Each entry includes its connection details and its current settings.
curl https://budgetproxies.com/api/v1/YOUR_KEY/plans
{ "status":"success", "data": { "items": [
{ "id":123, "type":"residential", "plan":"Residential", "status":"active",
"gb":5, "gb_limit":5, "gb_used":0.42, "created_at":"…", "expires_at":"…",
"connection": { "host":"budgetproxies.com", "port":823,
"username":"u_ab12__cr.us", "password":"…", "protocol":"HTTP" },
"config": { "countries":["us"], "exclude_countries":[], "rotation":0, "sticky":false, "protocol":"HTTP" } }
], "total":1 } }
GET/plans/get
Fetches one plan, with up-to-the-minute usage figures.
| Parameter | Required | Description |
|---|---|---|
| id | Yes | The id of your plan. |
curl "https://budgetproxies.com/api/v1/YOUR_KEY/plans/get?id=123"
{ "status":"success", "data": { "id":123, …, "connection":{…},
"usage": { "gb_total":5, "gb_used":0.42, "gb_left":4.58, "source":"live" } } }
GET/plans/usage
Shows how much data a plan has left right now, and how its usage has changed over time.
| Parameter | Required | Description |
|---|---|---|
| id | Yes | The id of your plan. |
| period | No | week, month (used when you leave it out), 3months or 6months. |
curl "https://budgetproxies.com/api/v1/YOUR_KEY/plans/usage?id=123&period=month"
POST/plans/create
Sets up a new plan (sub-user) for you. Whatever GB you request is deducted from your reseller data balance, so make sure there is enough there before you call it, and add more in your dashboard if not. If the plan can’t be set up, the data goes straight back into your balance. The reply contains the new plan and its gateway login (the gateway is the address your proxy traffic goes through).
| Parameter | Required | Description |
|---|---|---|
| type | Yes* | The proxy type: residential, datacenter, mobile or premium. *Send type or plan_id, one or the other. |
| plan_id | Yes* | An exact plan id from /catalog. If you send it, it wins over type. |
| gb | No | Data allowance in GB: 1–1000, or 1 if you leave it out. |
| country | No | A country name or its two-letter ISO code (United States when left out). |
| protocol | No | HTTP (used when left out), HTTPS or SOCKS5, as long as the plan supports it. |
curl -X POST https://budgetproxies.com/api/v1/YOUR_KEY/plans/create \
-d "type=residential" -d "gb=5" -d "country=United States" -d "protocol=HTTP"
{ "status":"success", "data": {
"plan": { "id":124, "type":"residential", "status":"active", "gb":5,
"connection": { "host":"…", "port":823, "username":"u_cd34", "password":"…", "protocol":"HTTP" }, … },
"pending": false, "data_used_gb": 5 } }
POST/plans/renew
Orders the same plan again: you get a new gateway for a new term, paid for from your wallet.
| Parameter | Required | Description |
|---|---|---|
| id | Yes | The id of the plan to buy again. |
curl -X POST https://budgetproxies.com/api/v1/YOUR_KEY/plans/renew -d "id=123"
POST/plans/config
Changes a plan’s targeting. We store your new settings, pass them on to the network and reply with the updated connection. Your targeting choices are built into the username.
| Parameter | Required | Description |
|---|---|---|
| id | Yes | The id of your plan. |
| countries | No | A list (array) of two-letter ISO codes to target, e.g. ["us","gb"]. |
| exclude_countries | No | A list of two-letter ISO codes to leave out. |
| rotation | No | How long a sticky session lasts, in minutes (0–120). Use 0 for a new IP on every request. |
| sticky | No | Set to true to keep the same IP for the whole session. |
| session_id | No | Your own name for a sticky session (letters and numbers only). |
| exclude_asn | No | A list of ASNs to avoid. An ASN is the number that identifies a network, such as an internet provider. |
| anonymous | No | Set to true to switch on the anonymity filter. |
| protocol | No | HTTP or SOCKS5 only. |
curl -X POST https://budgetproxies.com/api/v1/YOUR_KEY/plans/config \
-H "Content-Type: application/json" \
-d '{"id":123,"countries":["us"],"rotation":10,"sticky":true,"protocol":"HTTP"}'
POST/plans/ipauth
Choose up to 3 IP addresses that may use the gateway with no password at all. This is called IP whitelisting.
| Parameter | Required | Description |
|---|---|---|
| id | Yes | The id of your plan. |
| whitelist | Yes | Up to 3 IPv4 addresses, separated by commas or spaces. |
curl -X POST https://budgetproxies.com/api/v1/YOUR_KEY/plans/ipauth -d "id=123" -d "whitelist=203.0.113.7"
POST/plans/delete
Deletes a plan and releases the gateway it was using back upstream.
| Parameter | Required | Description |
|---|---|---|
| id | Yes | The id of your plan. |
curl -X POST https://budgetproxies.com/api/v1/YOUR_KEY/plans/delete -d "id=123"
GET/balance
Shows how much money is in your wallet. Top the wallet up from the dashboard, then use that money to buy GB of data.
curl https://budgetproxies.com/api/v1/YOUR_KEY/balance
{ "status":"success", "data": { "balance":12.50, "currency":"USD" } }
GET/data
Shows the GB balance you resell from, the pool that every sale is taken out of. You can add more GB in the reseller dashboard, and each sub-user you create uses part of it.
curl https://budgetproxies.com/api/v1/YOUR_KEY/data
{ "status":"success", "data": { "available_gb":42.5, "purchased_gb":100, "allocated_gb":57.5 } }
Older per-IP endpoints
These endpoints work with the older per-IP proxies (one record per IP address) instead of GB plans. They are only kept so that existing setups carry on working, so please use the plan endpoints above for anything new.
GET/list[/status] — shows the per-IP proxies on your account; add a status to the path to see just one group (status = active|expired|disabled).
GET/export?format=txt|csv|json — turns your active per-IP proxies into a downloadable list; with txt you can set the layout using template=%ip%:%port%:%login%:%password% (%protocol% %country% work too).
GET/prolong/calc?ids=&days= — tells you what renewing per-IP proxies would cost.
POST/prolong/make — pays for the renewal from your wallet and extends the per-IP proxies (ids, days).
POST/comment — lets you attach your own text to per-IP proxies (ids, text).
Examples you can copy
Python: create a plan, pass it on, adjust it, check usage
import requests
BASE = "https://budgetproxies.com/api/v1/YOUR_KEY"
# 1. Provision 5 GB of US residential for a customer
plan = requests.post(BASE + "/plans/create",
data={"type": "residential", "gb": 5, "country": "United States"}).json()["data"]["plan"]
c = plan["connection"]
# 2. Hand the customer their proxy string
print(f"{c['host']}:{c['port']}:{c['username']}:{c['password']}")
# 3. Later: retarget to the UK with a 10-min sticky session
requests.post(BASE + "/plans/config", json={"id": plan["id"], "countries": ["gb"], "sticky": True, "rotation": 10})
# 4. Check how much bandwidth they've used
print(requests.get(BASE + "/plans/usage", params={"id": plan["id"]}).json()["data"]["balance"])
Node.js
const BASE = 'https://budgetproxies.com/api/v1/YOUR_KEY';
const plan = await fetch(BASE + '/plans/create', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ type: 'residential', gb: 5, country: 'United States' })
}).then(r => r.json());
console.log(plan.data.plan.connection);
PHP
<?php $base = 'https://budgetproxies.com/api/v1/YOUR_KEY'; $plans = json_decode(file_get_contents($base . '/plans'), true); print_r($plans['data']['items']);
Error codes in plain English
Whatever goes wrong, errors[0].message carries a short explanation that you can display or keep in a log.
| HTTP | Meaning |
|---|---|
| 200 | It worked |
| 400 | Something in the request is missing or not valid, such as the plan id |
| 401 | The API key is missing, mistyped or not recognised |
| 402 | Your wallet balance is too low |
| 403 | Your account is not approved for the reseller API yet |
| 404 | That plan or resource does not exist, or the action name is unknown |
| 405 | Wrong method: anything that changes data must use POST |
| 422 | Unknown plan or type, or the request body could not be read |
| 429 | Slow down: you sent more than the 60/minute this key allows |
| 502 | The upstream network turned the request down (you were not charged) |
Webhooks: planned, not live yet
Webhooks are messages our server would send to yours when something happens, such as a plan expiring or your balance running low. They are on our list but not available yet. If they would help your shop, let our support team know.
Want to sell proxies under your own name?
Apply for the reseller programme. Once you are approved, your API key is ready to use within minutes.
Get my API key