Sub-users API

Separate logins for team members, projects and applications, each with its own traffic limit.

A sub-user is a proxy login of its own on your account's traffic. Give one to each script, server or team member: its usage is counted apart, a limit stops it without touching the others, and its password can be changed without breaking theirs.

limit_gb caps a sub-user at that many GB of your account's traffic; 0 means no limit of its own (it can use everything the account has). When a sub-user reaches its limit the gateway answers 402 for its login. You can have up to 50 sub-users per product. Sub-users are for your own organization: giving access to people outside it counts as resale, which our Terms allow only with our written consent.

List sub-users

GET/api/v1/sub-users

All sub-users, or those of one product.

Query parameters

NameTypeDescription
productresidential | mobileresidential or mobile. Omit for both.

Request

curl "https://aeonproxy.com/api/v1/sub-users?product=residential" \
  -H "Authorization: Bearer $AEONPROXY_API_KEY"

Response 200

{
  "count": 1,
  "results": [
    {
      "id": 311,
      "product": "residential",
      "name": "scraper-eu",
      "username": "ap_7f3c",
      "password": "Lm4vT9qZ2wKe",
      "limit_gb": 5,
      "used_gb": 1.274,
      "status": "active",
      "created_at": "2026-10-21T08:12:44.000Z"
    }
  ]
}

Errors

StatusCodeWhen
400invalid_parameterproduct is not residential / mobile

Create a sub-user

POST/api/v1/sub-usersIdempotency-Key

Creates a login with a random password. The name is stored in lower case, with anything other than letters, digits and dashes turned into dashes. Send an Idempotency-Key header to retry safely.

Body (JSON)

NameTypeDescription
productrequiredresidential | mobileWhich pool: residential or mobile.
namerequiredstringUp to 24 characters, unique per product.
limit_gbnumberTraffic limit in GB, in steps of 0.1. 0: no limit of its own. Capped at the traffic you have bought. From 0. Default 0.

Request

curl -X POST "https://aeonproxy.com/api/v1/sub-users" \
  -H "Authorization: Bearer $AEONPROXY_API_KEY" \
  -H "Idempotency-Key: 5f0c7e9a-2d4b-4f61-9a3e-8b1d2c6e7f40" \
  -H "Content-Type: application/json" \
  -d '{"product":"residential","name":"scraper-eu","limit_gb":5}'

Response 201

{
  "id": 311,
  "product": "residential",
  "name": "scraper-eu",
  "username": "ap_7f3c",
  "password": "Lm4vT9qZ2wKe",
  "limit_gb": 5,
  "used_gb": 0,
  "status": "active",
  "created_at": "2026-10-21T08:12:44.000Z"
}

Errors

StatusCodeWhen
400invalid_parameterproduct is missing or not residential / mobile
400invalid_parameterno name, or a negative limit
409conflicta sub-user with this name exists
409limit_reachedthe product already has 50 sub-users

Get a sub-user

GET/api/v1/sub-users/{id}

One sub-user with its login, password, limit and the traffic it has used.

Path parameters

NameTypeDescription
idrequiredintegerThe sub-user id from List sub-users.

Request

curl "https://aeonproxy.com/api/v1/sub-users/311" \
  -H "Authorization: Bearer $AEONPROXY_API_KEY"

Response 200

{
  "id": 311,
  "product": "residential",
  "name": "scraper-eu",
  "username": "ap_7f3c",
  "password": "Lm4vT9qZ2wKe",
  "limit_gb": 5,
  "used_gb": 1.274,
  "status": "active",
  "created_at": "2026-10-21T08:12:44.000Z"
}

Errors

StatusCodeWhen
404not_foundno sub-user with this id on your account

Update a sub-user

PATCH/api/v1/sub-users/{id}

Renames a sub-user or changes its limit; send only the fields to change. The login and password stay the same. Lowering the limit below what it has used stops it at once.

Path parameters

NameTypeDescription
idrequiredintegerThe sub-user id from List sub-users.

Body (JSON)

NameTypeDescription
namestringNew name, same rules as on create.
limit_gbnumberNew limit in GB; 0 removes it. From 0.

Request

curl -X PATCH "https://aeonproxy.com/api/v1/sub-users/311" \
  -H "Authorization: Bearer $AEONPROXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"limit_gb":10}'

Response 200

{
  "id": 311,
  "product": "residential",
  "name": "scraper-eu",
  "username": "ap_7f3c",
  "password": "Lm4vT9qZ2wKe",
  "limit_gb": 10,
  "used_gb": 1.274,
  "status": "active",
  "created_at": "2026-10-21T08:12:44.000Z"
}

Errors

StatusCodeWhen
404not_foundno sub-user with this id on your account
409conflictanother sub-user has this name

Delete a sub-user

DELETE/api/v1/sub-users/{id}

Deletes the login: its proxy lines stop working at once. The traffic it used stays used; nothing is refunded to the account.

Path parameters

NameTypeDescription
idrequiredintegerThe sub-user id from List sub-users.

Request

curl -X DELETE "https://aeonproxy.com/api/v1/sub-users/311" \
  -H "Authorization: Bearer $AEONPROXY_API_KEY"

Response 200

{
  "id": 311,
  "deleted": true
}

Errors

StatusCodeWhen
404not_foundno sub-user with this id on your account

Rotate a sub-user password

POST/api/v1/sub-users/{id}/password

Gives the sub-user a new password; the old one stops working at once.

Path parameters

NameTypeDescription
idrequiredintegerThe sub-user id from List sub-users.

Request

curl -X POST "https://aeonproxy.com/api/v1/sub-users/311/password" \
  -H "Authorization: Bearer $AEONPROXY_API_KEY"

Response 200

{
  "id": 311,
  "username": "ap_7f3c",
  "password": "Qd2hN7yV4cPa"
}

Errors

StatusCodeWhen
404not_foundno sub-user with this id on your account

Example: One sub-user per server

Each machine gets its own login with a 20 GB cap, and its own proxy lines.

import os, requests

API = "https://aeonproxy.com/api/v1"
s = requests.Session()
s.headers["Authorization"] = f"Bearer {os.environ['AEONPROXY_API_KEY']}"

for host in ["worker-1", "worker-2", "worker-3"]:
    sub = s.post(f"{API}/sub-users", json={"product": "residential", "name": host, "limit_gb": 20}, timeout=30).json()
    lines = s.post(f"{API}/proxy-list", json={"product": "residential", "sub_user_id": sub["id"], "count": 50}, timeout=30).json()
    print(host, sub["username"], len(lines["results"]), "lines")

Your API key is already in the dashboard.