NodeProxies

API Reference

The NodeProxies REST API lets you manage your account, retrieve plan details and credentials, check your balance, view transaction history, and create top-up payments.

All endpoints are at https://nodeproxies.xyz/api and require a Bearer token.

Token auth

Bearer token on every request

JSON responses

All responses are JSON

REST

Standard HTTP methods

Authentication

Include your API token in the Authorization header on every request. Find your token in the dashboard under Account Settings.

http
Authorization: Bearer YOUR_API_TOKEN

Base URL

text
https://nodeproxies.xyz/api
Never share your API token. If compromised, regenerate it from the dashboard immediately.

Balance

GET/api/balanceGet your current account balance

Request

cURL
curl https://nodeproxies.xyz/api/balance \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Response

json
{
  "balance": 24.50
}
FieldTypeDescription
balancenumberCurrent balance in USD

List Plans

GET/api/plansList all active plans on your account

Request

cURL
curl https://nodeproxies.xyz/api/plans \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Response

json
[
  {
    "id": "uuid",
    "plan_type": "residential",
    "amount_gb": 10,
    "used_gb": 1.23,
    "status": "active",
    "expires_at": "2026-05-08T00:00:00Z",
    "created_at": "2026-04-08T12:00:00Z"
  }
]
FieldTypeDescription
idstringUnique plan UUID
plan_typestringresidential, datacenter, mobile, or unlimited
amount_gbnumberTotal GB allocated
used_gbnumberGB consumed so far
statusstringactive or expired
expires_atstringISO 8601 expiry timestamp

Get Plan & Credentials

GET/api/plans/:idGet a specific plan including proxy credentials

Request

cURL
curl https://nodeproxies.xyz/api/plans/PLAN_UUID \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Response

json
{
  "plan_id": "uuid",
  "username": "user_abc123",
  "password": "pass_xyz789",
  "plan_type": "residential",
  "max_bytes": 10737418240,
  "used_bytes": 1320000000,
  "enabled": true,
  "active": true,
  "last_used": "2026-04-08T10:30:00Z"
}
FieldTypeDescription
plan_idstringPlan UUID
usernamestringProxy username for this plan
passwordstringProxy password for this plan
max_bytesnumberTotal allocated bandwidth in bytes
used_bytesnumberBandwidth consumed in bytes
enabledbooleanWhether this plan is currently usable
Use the username and password from this response to authenticate your proxy connections.

Purchase Plan

POST/api/plans/purchasePurchase a new proxy plan using your account balance

Request Body

FieldTypeRequiredDescription
plan_typestringYesType of plan: 'residential', 'mobile', 'datacenter', 'unlimited_datacenter', or 'unlimited_residential'
amountnumberConditionalBandwidth amount. Required for data-based plans (residential, mobile, datacenter)
unitstringConditionalBandwidth unit: 'MB' or 'GB'. Required for data-based plans (min 1 GB or 100 MB)
bandwidth_mbnumberNoAlternative explicit bandwidth allocation in megabytes
time_hoursnumberConditionalDuration in hours. Required for time-based plans or adding duration
duration_daysnumberNoAlternative plan duration in days
expires_atstringNoExplicit ISO 8601 expiry timestamp
promocodestringNoOptional promo code to apply to the purchase

Request (Data-based Plan)

cURL
curl -X POST https://nodeproxies.xyz/api/plans/purchase \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "plan_type": "residential",
    "amount": 10,
    "unit": "GB",
    "promocode": "WELCOME10"
  }'

Request (Time-based Plan)

cURL
curl -X POST https://nodeproxies.xyz/api/plans/purchase \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "plan_type": "unlimited_residential",
    "time_hours": 24,
    "timeUnit": "daily"
  }'

Response

json
{
  "success": true,
  "plan": {
    "id": "uuid",
    "plan_id": "PLAN_SHORT_ID",
    "username": "proxy_user_123",
    "password": "proxy_password_abc",
    "plan_type": "residential",
    "amount_gb": 10,
    "amount_mb": 0,
    "time_hours": 0,
    "status": "active",
    "enabled": true,
    "active": true,
    "created_at": "2026-07-01T17:00:00Z"
  },
  "charged": 18.00,
  "subtotal": 20.00,
  "discount": 2.00,
  "new_balance": 32.00
}
The purchase amount is deducted directly from your account balance. Reseller accounts receive their designated reseller $/GB rate (or custom per-user rate) without bulk volume discounts and cannot use promocodes.

Update / Top Up Plan

POST/api/plans/updateAdd additional bandwidth or extend duration on an existing proxy plan

Request Body

FieldTypeRequiredDescription
plan_idstringYesThe UUID of the plan to update/top up
update_typestringYesType of update: 'bandwidth' (to add GB data) or 'time' (to extend hours)
add_amountnumberYesThe quantity to add (e.g., 5 for 5 GB bandwidth or 24 for 24 hours of time)

Request Example (Add Bandwidth)

cURL
curl -X POST https://nodeproxies.xyz/api/plans/update \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "plan_id": "PLAN_UUID_HERE",
    "update_type": "bandwidth",
    "add_amount": 5
  }'

Request Example (Extend Time)

cURL
curl -X POST https://nodeproxies.xyz/api/plans/update \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "plan_id": "PLAN_UUID_HERE",
    "update_type": "time",
    "add_amount": 72
  }'

Response

json
{
  "success": true,
  "message": "Plan updated successfully",
  "charged": 2.50,
  "new_balance": 47.50,
  "updated_field": "amount_gb",
  "new_value": 15
}
Updating a plan deducts the required cost from your account balance. Resellers receive their designated reseller rate for plan updates without volume tier surcharges.

Reset Proxy Password

POST/api/plans/reset-passwordReset or customize the proxy authentication password for a plan

Request Body

FieldTypeRequiredDescription
plan_idstringYesThe ID of the plan to reset password for
new_passwordstringNoOptional custom password. If omitted, a secure random password is generated

Request Example

cURL
curl -X POST https://nodeproxies.xyz/api/plans/reset-password \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "plan_id": "PLAN_ID_HERE",
    "new_password": "MyCustomSecretPass123"
  }'

Response

json
{
  "success": true,
  "newPassword": "MyCustomSecretPass123"
}

Transactions

GET/api/transactionsList account transactions with optional filters

Query Parameters

ParameterTypeDescription
typestringtopup or plan_purchase
statusstringcompleted, pending, or failed
timeFilterstringdaily, weekly, or yearly
limitnumberMax results (default 50)
offsetnumberPagination offset (default 0)

Request

cURL
curl "https://nodeproxies.xyz/api/transactions?limit=10&type=topup" \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Response

json
{
  "transactions": [
    {
      "id": "uuid",
      "type": "topup",
      "amount": 10.00,
      "status": "completed",
      "description": "Balance top-up via Stripe",
      "created_at": "2026-04-08T12:00:00Z"
    }
  ],
  "total": 42
}

Countries

GET/api/countriesList all available countries per proxy type

Request

cURL
curl https://nodeproxies.xyz/api/countries \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Response

json
{
  "residential": ["us", "gb", "de", "fr", ...],
  "datacenter":  ["us", "gb", "de", ...],
  "mobile":      ["us", "gb", ...],
  "unlimited":   ["us", "gb", ...]
}
Values are ISO 3166-1 alpha-2 country codes. Use these in the proxy username parameter for geo-targeting (see Geo Targeting section).

Create Payment

POST/api/paymentsCreate a balance top-up checkout session

Request Body

FieldTypeRequiredDescription
amountnumberYesUSD amount. Min $1 (crypto) or $3 (card). Max $1000
methodstringYes"stripe" or "crypto"

Request

cURL
curl -X POST https://nodeproxies.xyz/api/payments \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"amount": 20, "method": "stripe"}'

Response — Stripe

json
{
  "url": "https://checkout.stripe.com/...",
  "sessionId": "cs_live_..."
}

Response — Crypto

json
{
  "url": "https://pay.cryptomus.com/...",
  "orderId": "uuid"
}
Redirect the user to the returned url to complete payment. Balance is credited automatically via webhook on confirmation.

Dedicated ISP Packages & Stock

GET/api/isp/packagesList all available dedicated ISP location packages and real-time inventory

Request

cURL
curl https://nodeproxies.xyz/api/isp/packages \
  -H "Authorization: Bearer YOUR_API_TOKEN"

Response

json
[
  {
    "id": "4d616e76-5594-4876-8af0-35f464cc5b6d",
    "package_name": "US Ashburn Dedicated ISP",
    "country": "US Ashburn",
    "monthlyPrice": 1.59,
    "in_stock": 142
  }
]

Deploy Dedicated ISP Proxies

POST/api/isp/purchaseDeploy custom dedicated ISP proxies with custom duration, protocol, and authentication

Request Body

FieldTypeRequiredDescription
package_idstringYesThe ISP package ID from /api/isp/packages
expiry_daysnumberNoDuration in days (default: 30)
quantitynumberNoNumber of dedicated IP addresses (default: 1)
custom_usernamestringNoOptional custom username for proxy authentication
socksbooleanNoEnable SOCKS5 & UDP protocol support (default: false)
ip_authbooleanNoEnable IP Whitelist authentication mode (default: false)
ips_allowedarrayNoArray of client IPv4 addresses for IP whitelist auth

Request Example

cURL
curl -X POST https://nodeproxies.xyz/api/isp/purchase \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "package_id": "4d616e76-5594-4876-8af0-35f464cc5b6d",
    "expiry_days": 30,
    "quantity": 1,
    "socks": true
  }'

Response

json
{
  "success": true,
  "plan": {
    "id": "isp_1787495435349_z6r9k",
    "plan_type": "isp",
    "country_code": "US Ashburn",
    "proxy_list": ["192.168.1.1:8080:user:pass"],
    "expires_at": "2026-09-23T12:00:00Z"
  },
  "totalCost": 1.59,
  "newBalance": 3298.41
}

Renew Dedicated ISP Plan

POST/api/isp/renewExtend duration / renew an active dedicated ISP proxy plan

Request Body

FieldTypeRequiredDescription
plan_idstringYesThe ID of the dedicated ISP plan
expiry_daysnumberNoNumber of extension days to add (default: 30)

Request Example

cURL
curl -X POST https://nodeproxies.xyz/api/isp/renew \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "plan_id": "isp_1787495435349_z6r9k",
    "expiry_days": 30
  }'

Response

json
{
  "success": true,
  "expiresAt": "2026-10-23T12:00:00Z",
  "newBalance": 3296.82
}

Rotate ISP Subnet IP (Free)

PATCH/api/isp/rotateInstant 1-click IP subnet swap for dedicated ISP proxy lines (100% Free)

Request Body

FieldTypeRequiredDescription
plan_idstringYesThe ID of the dedicated ISP plan

Request Example

cURL
curl -X PATCH https://nodeproxies.xyz/api/isp/rotate \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "plan_id": "isp_1787495435349_z6r9k" }'

Response

json
{
  "success": true,
  "message": "Subnet IP rotated successfully",
  "plan": {
    "id": "isp_1787495435349_z6r9k",
    "proxy_list": ["198.51.100.42:8080:user:pass"]
  }
}
Subnet IP swaps are 100% free of charge and do not deduct balance.

IP Whitelist Management

PATCH/api/isp/whitelistUpdate allowed client IP whitelist for IP-authenticated plans

Request Body

FieldTypeRequiredDescription
plan_idstringYesThe ID of the plan
ips_allowedarrayYesArray of IPv4 addresses allowed to connect

Request Example

cURL
curl -X PATCH https://nodeproxies.xyz/api/isp/whitelist \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "plan_id": "isp_1787495435349_z6r9k",
    "ips_allowed": ["198.51.100.10", "203.0.113.5"]
  }'

Response (Success)

json
{
  "success": true,
  "plan": {
    "id": "isp_1787495435349_z6r9k",
    "whitelisted_ips": ["198.51.100.10", "203.0.113.5"]
  }
}

Error Response (User/Pass ISP Proxies — HTTP 400)

json
{
  "error": "This dedicated ISP proxy was created in User/Pass authentication mode. Upstream ISP proxies lock authentication mode at creation time. To use IP authentication, enter allowed IPs during initial purchase."
}
Dedicated ISP proxies lock their authentication mode at creation time. If a dedicated ISP proxy was provisioned in User/Pass authentication mode, updating its IP whitelist returns an HTTP 400 error. To deploy an IP-authenticated Dedicated ISP proxy, pass ip_auth: true and ips_allowed during initial deployment via POST /api/isp/purchase.

Proxy Connection

Use the username and password from GET /api/plans/:id to connect. Port is 8080.

GatewayRegionPort
global.nodeproxies.xyzAuto — recommended8080
eu-1.nodeproxies.xyzEurope 18080
eu-2.nodeproxies.xyzEurope 28080
na.nodeproxies.xyzNorth America8080
cURL
curl -x "http://USERNAME:[email protected]:8080" "https://httpbin.org/ip"
Python
import requests

proxies = {
    "http":  "http://USERNAME:[email protected]:8080",
    "https": "http://USERNAME:[email protected]:8080",
}
r = requests.get("https://httpbin.org/ip", proxies=proxies)
print(r.json())

Geo Targeting

Append targeting flags to your proxy username using hyphens.

SyntaxExampleEffect
-country-{cc}-country-usRoute through a US exit IP
-city-{city}-city-newyorkRoute through a specific city
-type-mobile-type-mobileUse mobile carrier IPs
-country-{cc}-city-{city}-country-gb-city-londonCountry + city combined
cURL
# US exit IP
curl -x "http://USERNAME-country-us:[email protected]:8080" https://httpbin.org/ip

# Germany, mobile
curl -x "http://USERNAME-country-de-type-mobile:[email protected]:8080" https://httpbin.org/ip

Sticky Sessions

Append -session-{key} to your username to pin all requests with that key to the same exit IP for ~10 minutes.

cURL
# Same exit IP for all requests with session-order123
curl -x "http://USERNAME-session-order123:[email protected]:8080" https://httpbin.org/ip

# Combine with country
curl -x "http://USERNAME-country-us-session-order123:[email protected]:8080" https://httpbin.org/ip
Sessions expire after ~10 minutes of inactivity. Use a unique key per task (e.g. order ID) to avoid sharing IPs between unrelated requests.

Error Codes

All API errors return JSON with an error field.

json
{ "error": "Invalid token" }
StatusMeaningCommon Cause
400Bad RequestMissing or invalid parameters
401UnauthorizedMissing or invalid API token
403ForbiddenAccount banned
404Not FoundResource doesn't exist or belongs to another user
429Too Many RequestsRate limit hit (3 req/min for payments)
500Internal Server ErrorUnexpected error — try again

Need help?

Support responds quickly.