Account API
Balance, traffic left on each product, the main proxy login and its password.
Start here when you wire the API into a script. Get the account is the cheapest way to check that a key works: it returns the balance and the traffic left on residential and mobile in one call, and costs no traffic.
Every account has one main proxy login per product. Get proxy credentials returns it with the gateway host and ports, so a script can build its own proxy strings with the targeting keys. Sub-users have their own logins.
Check the API
/api/v1/statusNo key neededAnswers without a key. Use it in health checks and to see the API version.
No parameters.
Request
curl "https://aeonproxy.com/api/v1/status"import requests
r = requests.get(
"https://aeonproxy.com/api/v1/status",
timeout=30,
)
data = r.json()
if not r.ok:
raise SystemExit(data["error"]["message"])
print(data)// Node.js 18+, as an ES module (.mjs)
const res = await fetch("https://aeonproxy.com/api/v1/status");
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data);<?php
$ch = curl_init('https://aeonproxy.com/api/v1/status');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$data = json_decode($body, true);
if ($status >= 400) {
fwrite(STDERR, $data['error']['message'] . PHP_EOL);
exit(1);
}
print_r($data);package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://aeonproxy.com/api/v1/status", nil)
if err != nil {
panic(err)
}
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status)
fmt.Println(string(out))
}Response 200
{
"status": "ok",
"api_version": "v1",
"time": "2026-10-28T09:30:00.000Z"
}Get the account
/api/v1/meThe balance, the traffic you have bought and used per product, the number of sub-users and active orders. Traffic counts in GB (1 GB = 10⁹ bytes), money in US dollars.
No parameters.
Request
curl "https://aeonproxy.com/api/v1/me" \
-H "Authorization: Bearer $AEONPROXY_API_KEY"import os
import requests
r = requests.get(
"https://aeonproxy.com/api/v1/me",
headers={"Authorization": f"Bearer {os.environ['AEONPROXY_API_KEY']}"},
timeout=30,
)
data = r.json()
if not r.ok:
raise SystemExit(data["error"]["message"])
print(data)// Node.js 18+, as an ES module (.mjs)
const res = await fetch("https://aeonproxy.com/api/v1/me", {
headers: {
Authorization: `Bearer ${process.env.AEONPROXY_API_KEY}`,
},
});
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data);<?php
$ch = curl_init('https://aeonproxy.com/api/v1/me');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('AEONPROXY_API_KEY'),
],
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$data = json_decode($body, true);
if ($status >= 400) {
fwrite(STDERR, $data['error']['message'] . PHP_EOL);
exit(1);
}
print_r($data);package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://aeonproxy.com/api/v1/me", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("AEONPROXY_API_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status)
fmt.Println(string(out))
}Response 200
{
"id": 1042,
"email": "[email protected]",
"created_at": "2026-10-20T09:14:03.000Z",
"balance_usd": 42.5,
"traffic": {
"residential": {
"gb_total": 25,
"gb_used": 6.204,
"gb_left": 18.796
},
"mobile": {
"gb_total": 0,
"gb_used": 0,
"gb_left": 0
}
},
"sub_users": {
"residential": 3,
"mobile": 0
},
"active_orders": 2
}Errors
| Status | Code | When |
|---|---|---|
| 401 | unauthorized | no key, or a key that was rotated |
| 403 | forbidden | the account email is not confirmed yet |
Get proxy credentials
/api/v1/credentialsThe main proxy login of one product, the gateway host and ports, and the traffic left. Append targeting keys to username (-cc-us, -sid-…), or let Generate a proxy list build the lines.
Query parameters
| Name | Type | Description |
|---|---|---|
productrequired | residential | mobile | Which pool: residential or mobile. |
Request
curl "https://aeonproxy.com/api/v1/credentials?product=residential" \
-H "Authorization: Bearer $AEONPROXY_API_KEY"import os
import requests
r = requests.get(
"https://aeonproxy.com/api/v1/credentials?product=residential",
headers={"Authorization": f"Bearer {os.environ['AEONPROXY_API_KEY']}"},
timeout=30,
)
data = r.json()
if not r.ok:
raise SystemExit(data["error"]["message"])
print(data)// Node.js 18+, as an ES module (.mjs)
const res = await fetch("https://aeonproxy.com/api/v1/credentials?product=residential", {
headers: {
Authorization: `Bearer ${process.env.AEONPROXY_API_KEY}`,
},
});
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data);<?php
$ch = curl_init('https://aeonproxy.com/api/v1/credentials?product=residential');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('AEONPROXY_API_KEY'),
],
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$data = json_decode($body, true);
if ($status >= 400) {
fwrite(STDERR, $data['error']['message'] . PHP_EOL);
exit(1);
}
print_r($data);package main
import (
"fmt"
"io"
"net/http"
"os"
)
func main() {
req, err := http.NewRequest("GET", "https://aeonproxy.com/api/v1/credentials?product=residential", nil)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("AEONPROXY_API_KEY"))
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status)
fmt.Println(string(out))
}Response 200
{
"product": "residential",
"host": "gate.aeonproxy.com",
"port_http": 7000,
"port_socks5": 7001,
"username": "ap_u1a2b",
"password": "Xr7pQ2mK9sLd",
"traffic": {
"gb_total": 25,
"gb_used": 6.204,
"gb_left": 18.796
}
}Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_parameter | product is missing or not residential / mobile |
Rotate the proxy password
/api/v1/credentials/passwordGives the main login of one product a new password. The old one stops working at once, in every proxy line that uses it; sub-users keep theirs.
Body (JSON)
| Name | Type | Description |
|---|---|---|
productrequired | residential | mobile | Which pool: residential or mobile. |
Request
curl -X POST "https://aeonproxy.com/api/v1/credentials/password" \
-H "Authorization: Bearer $AEONPROXY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"product":"residential"}'import os
import requests
r = requests.post(
"https://aeonproxy.com/api/v1/credentials/password",
headers={"Authorization": f"Bearer {os.environ['AEONPROXY_API_KEY']}"},
json={"product": "residential"},
timeout=30,
)
data = r.json()
if not r.ok:
raise SystemExit(data["error"]["message"])
print(data)// Node.js 18+, as an ES module (.mjs)
const res = await fetch("https://aeonproxy.com/api/v1/credentials/password", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AEONPROXY_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ product: "residential" }),
});
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
console.log(data);<?php
$ch = curl_init('https://aeonproxy.com/api/v1/credentials/password');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('AEONPROXY_API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['product' => 'residential']),
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$data = json_decode($body, true);
if ($status >= 400) {
fwrite(STDERR, $data['error']['message'] . PHP_EOL);
exit(1);
}
print_r($data);package main
import (
"fmt"
"io"
"net/http"
"os"
"strings"
)
func main() {
body := strings.NewReader(`{"product":"residential"}`)
req, err := http.NewRequest("POST", "https://aeonproxy.com/api/v1/credentials/password", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("AEONPROXY_API_KEY"))
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
out, _ := io.ReadAll(res.Body)
fmt.Println(res.Status)
fmt.Println(string(out))
}Response 200
{
"product": "residential",
"username": "ap_u1a2b",
"password": "Ws8nB3xR6pYc"
}Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_parameter | product is missing or not residential / mobile |