Developers /REST API

AuraProxies API

Check your balance, buy plans and generate proxy lists from your own code. JSON over HTTPS, authenticated with an API key.

Base URL
https://auraproxies.net/api/v1
Auth
Bearer API key
Rate limit
120 requests / minute / key
Money
Integers in US cents
01

Quickstart

  1. Create a key on the API Keys page of your dashboard. Copy it — it's only shown once.
  2. Send it as a bearer token with every request.
  3. Top up your balance in the dashboard; API orders are paid from it.
Your first request
curl https://auraproxies.net/api/v1/account \
  -H "Authorization: Bearer pk_your_api_key"
Response
{ "email": "[email protected]", "balanceCents": 4250, "currency": "USD" }

All money amounts are integers in US cents (4250 = $42.50). Dates are ISO 8601 in UTC.

02

Authentication

Base URL: https://auraproxies.net/api/v1. Send your key in the Authorization header on every request. Requests without a valid key get 401.

snippet
Authorization: Bearer pk_your_api_key

Full-access keys can do everything, including placing orders. Read-only keys can view your account, plans and generate proxy lists but can't spend balance — use them for dashboards and monitoring.

Keep keys on your server. Never put them in browser code or public repositories. If a key leaks, delete it on the API Keys page — it stops working immediately.

03

Errors & rate limits

Errors always have this shape, with a stable code you can branch on:

snippet
{ "error": { "code": "insufficient_balance", "message": "Insufficient balance. Please top up your account." } }
400 invalid_requestBad parameters or JSON body. The message names the field.
401 unauthorizedMissing, malformed, revoked or expired key.
402 insufficient_balanceNot enough balance for the order.
403 insufficient_scopeA read-only key tried to place an order.
403 email_unverifiedConfirm the account's email address in the dashboard before buying.
403 account_disabledThe account is suspended.
404 not_found / product_unavailableUnknown plan, or product not on sale.
409 plan_inactiveThe plan has expired.
409 not_meteredData top-up was requested for an unlimited (time-based) plan.
429 rate_limitedToo many requests. Wait until Retry-After seconds have passed.
502 provisioning_failedThe plan couldn't be set up. Your balance was refunded automatically.
500 internal_errorSomething went wrong on our side. Safe to retry with the same Idempotency-Key.

Each key can make 120 requests per minute. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix seconds).

04

Account

GET/api/v1/accountany key

Your email and current balance.

Response
{ "email": "[email protected]", "balanceCents": 4250, "currency": "USD" }
05

Products

GET/api/v1/productsany key

Everything on sale, with the exact prices orders are charged.

  • billingUnit: "GB" — buy any quantity of GB between minQuantity and maxQuantity. volumeTiers lower the per-GB price for bigger orders.
  • billingUnit: "DURATION" — unlimited-traffic plans sold as fixed packages; quantity must equal one package's hours.
Response (shortened)
{
  "products": [
    {
      "slug": "residential",
      "type": "RESIDENTIAL",
      "name": "Residential",
      "billingUnit": "GB",
      "basePriceCents": 300,
      "minQuantity": 1,
      "maxQuantity": 1000,
      "volumeTiers": [{ "minQty": 50, "priceCents": 250 }],
      "packages": []
    }
  ]
}
06

Orders

POST/api/v1/ordersfull-access key

Buy a plan, paid from your balance. On success you get the order and the new plan's credentials straight away.

productSlugstringRequired. From GET /products.
quantityintegerRequired. GB for per-GB products; package hours for unlimited plans.
couponCodestringOptional discount code.

Always send an Idempotency-Key header with a unique value per purchase (a UUID is ideal). If your request times out and you retry with the same key, you get the original order back — with "replayed": true — instead of being charged twice.

Request
curl -X POST https://auraproxies.net/api/v1/orders \
  -H "Authorization: Bearer pk_your_api_key" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 6f1c2b9e-0d4a-4c1e-9a43-2b7d1f0c8e55" \
  -d '{ "productSlug": "residential", "quantity": 10 }'
Response — 201 Created
{
  "order": { "id": "cm1x...", "status": "ACTIVE", "totalCents": 3000, "discountCents": 0 },
  "plan": {
    "planId": "cm1y...",
    "username": "u12345",
    "password": "s3cr3t",
    "host": "us.gate.auraproxies.net",
    "httpPort": 13337,
    "socksPort": 13337,
    "expiresAt": null
  },
  "replayed": false
}
GET/api/v1/orders?limit=50&offset=0any key

Your orders, newest first. limit is 1–100 (default 50). Statuses: ACTIVE, EXPIRED, FAILED, REFUNDED, PROVISIONING.

07

Plans

GET/api/v1/plans?status=activeany key

Your proxy plans with credentials, gateway and usage. status is optional (active or expired).

Response (one plan)
{
  "plans": [
    {
      "id": "cm1y...",
      "label": "Residential — 10 GB",
      "product": "RESIDENTIAL",
      "status": "active",
      "username": "u12345",
      "password": "s3cr3t",
      "gateway": { "host": "us.gate.auraproxies.net", "httpPort": 13337, "socksPort": 13337 },
      "bandwidthBytes": 10737418240,
      "usedBytes": 1288490188,
      "usageUpdatedAt": "2026-10-15T09:20:00.000Z",
      "expiresAt": null,
      "createdAt": "2026-10-01T12:00:00.000Z"
    }
  ]
}

bandwidthBytes is 0 for unlimited (time-based) plans. Usage is refreshed every few minutes; usageUpdatedAt says when.

POST/api/v1/plans/{planId}/topupfull-access key

Add data to a per-GB plan, paid from your balance. The username and password don't change, so your tools keep working. Priced like a new order of the same product (volume discounts apply to the GB you add). Send an Idempotency-Key header, just like for orders.

gbintegerRequired. GB to add (1 up to the product's maximum).
Request
curl -X POST https://auraproxies.net/api/v1/plans/cm1y.../topup \
  -H "Authorization: Bearer pk_your_api_key" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 0b8e6c1a-refill-2026-10-15" \
  -d '{ "gb": 25 }'
Response — 201 Created
{
  "order": { "id": "cm2a...", "status": "ACTIVE", "totalCents": 6250 },
  "plan": { "id": "cm1y...", "bandwidthBytes": 37580963840, "usedBytes": 1288490188 },
  "replayed": false
}

Unlimited plans can't be topped up (409 not_metered) — buy a new package instead. A typical auto-refill script polls GET /plans and tops up when usedBytes gets close to bandwidthBytes.

08

Generate proxies

GET/api/v1/plans/{planId}/proxiesany key

Build a ready-to-use proxy list for one of your plans. Free and unlimited — it doesn't use balance.

count1–1000How many lines. Default 10.
countrystringResidential and Mobile only: 2-letter exit country (e.g. DE). Omit for a random country.
locationus | eu | sgWhich gateway to connect through. Sets the exit for Shared ISP and Datacenter (us or eu only); for Residential and Mobile, pick the one nearest your servers. Default us.
sessionrotating | stickyrotating = new IP per request (default); sticky = keep one IP per line. Datacenter plans always rotate.
ttl1–1440Sticky session length in minutes. Default 10.
protocolhttp | socks5Which scheme to connect with (both use the same port). Default http.
formathost:port:user:pass | user:pass@host:portLine format. Default host:port:user:pass.
outputjson | texttext returns one proxy per line (handy for tools that read a file).
Request
curl "https://auraproxies.net/api/v1/plans/cm1y.../proxies?count=3&country=US&session=sticky&ttl=30&output=text" \
  -H "Authorization: Bearer pk_your_api_key"
Response
us.gate.auraproxies.net:13337:u12345-country-us-session-k2j9x0aq-ttl-30:s3cr3t
us.gate.auraproxies.net:13337:u12345-country-us-session-p0d7m3re-ttl-30:s3cr3t
us.gate.auraproxies.net:13337:u12345-country-us-session-z81wq5nc-ttl-30:s3cr3t
09

Code examples

Buy 10 GB if the balance allows, then fetch 50 rotating US proxies.

Python (requests)
import uuid, requests

API = "https://auraproxies.net/api/v1"
H = {"Authorization": "Bearer pk_your_api_key"}

balance = requests.get(f"{API}/account", headers=H).json()["balanceCents"]
if balance >= 3000:
    r = requests.post(
        f"{API}/orders",
        headers={**H, "Idempotency-Key": str(uuid.uuid4())},
        json={"productSlug": "residential", "quantity": 10},
    )
    r.raise_for_status()
    plan_id = r.json()["plan"]["planId"]

    proxies = requests.get(
        f"{API}/plans/{plan_id}/proxies",
        headers=H,
        params={"count": 50, "country": "US"},
    ).json()["proxies"]
    print("\n".join(proxies))
Node.js (18+)
import { randomUUID } from "node:crypto";

const API = "https://auraproxies.net/api/v1";
const H = { Authorization: "Bearer pk_your_api_key" };

const { balanceCents } = await (await fetch(`${API}/account`, { headers: H })).json();
if (balanceCents >= 3000) {
  const res = await fetch(`${API}/orders`, {
    method: "POST",
    headers: { ...H, "Content-Type": "application/json", "Idempotency-Key": randomUUID() },
    body: JSON.stringify({ productSlug: "residential", quantity: 10 }),
  });
  if (!res.ok) throw new Error((await res.json()).error.message);
  const { plan } = await res.json();

  const list = await fetch(`${API}/plans/${plan.planId}/proxies?count=50&country=US`, { headers: H });
  console.log((await list.json()).proxies.join("\n"));
}

Questions? Email [email protected] or open a ticket from your dashboard.