Orders API
Price quotes with your discounts, traffic purchases from the balance, and your order history.
Traffic is bought from the account balance, from 1 to 1000 GB at a time, at the rate of the tier the whole purchase falls in (residential from $3.49 down to $1.69 per GB, see pricing). It never expires and joins the product's traffic at once, so the proxy lines you already have keep working. Promo codes and the loyalty discount apply as in the dashboard; the larger of the two wins.
The balance itself is topped up in the dashboard's wallet (crypto). Call Get a price first: it shows exactly what Buy traffic will charge, without charging anything.
List orders
/api/v1/ordersOrders newest first. type is traffic (bought), trial, bonus (the first top-up bonus) or ips (ISP and datacenter IPs). Traffic orders show gb_left; the total of an account's active orders is in Get the account.
Query parameters
| Name | Type | Description |
|---|---|---|
product | string | Only one product. One of: residential, mobile, isp, datacenter. |
status | string | Only one status. One of: active, pending, expired, cancelled. |
limit | integer | Page size. 1–100. Default 50. |
offset | integer | How many orders to skip. From 0. Default 0. |
Request
curl "https://aeonproxy.com/api/v1/orders?product=residential&status=active" \
-H "Authorization: Bearer $AEONPROXY_API_KEY"import os
import requests
r = requests.get(
"https://aeonproxy.com/api/v1/orders?product=residential&status=active",
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/orders?product=residential&status=active", {
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/orders?product=residential&status=active');
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/orders?product=residential&status=active", 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
{
"count": 1,
"limit": 50,
"offset": 0,
"results": [
{
"id": 5120,
"product": "residential",
"type": "traffic",
"status": "active",
"gb_total": 10,
"gb_left": 7.431,
"ip_count": null,
"total_usd": 29.9,
"created_at": "2026-10-24T17:03:12.000Z",
"expires_at": null,
"next_due": null,
"auto_renew": null,
"tag": ""
}
]
}Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_parameter | an unknown product or status |
Get an order
/api/v1/orders/{id}One order. ISP and datacenter orders also list their IPs with ports.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer | The order id. |
Request
curl "https://aeonproxy.com/api/v1/orders/5120" \
-H "Authorization: Bearer $AEONPROXY_API_KEY"import os
import requests
r = requests.get(
"https://aeonproxy.com/api/v1/orders/5120",
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/orders/5120", {
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/orders/5120');
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/orders/5120", 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": 5120,
"product": "residential",
"type": "traffic",
"status": "active",
"gb_total": 10,
"gb_left": 7.431,
"ip_count": null,
"total_usd": 29.9,
"created_at": "2026-10-24T17:03:12.000Z",
"expires_at": null,
"next_due": null,
"auto_renew": null,
"tag": ""
}Errors
| Status | Code | When |
|---|---|---|
| 404 | not_found | no order with this id on your account |
Get a price
/api/v1/traffic/priceWhat a purchase would cost right now: the tier rate, the discount that applies and whether the balance covers it. Nothing is charged.
Query parameters
| Name | Type | Description |
|---|---|---|
productrequired | residential | mobile | Which pool: residential or mobile. |
gbrequired | integer | GB to buy. 1–1000. |
promo_code | string | A promo code to apply. |
Request
curl "https://aeonproxy.com/api/v1/traffic/price?product=residential&gb=10" \
-H "Authorization: Bearer $AEONPROXY_API_KEY"import os
import requests
r = requests.get(
"https://aeonproxy.com/api/v1/traffic/price?product=residential&gb=10",
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/traffic/price?product=residential&gb=10", {
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/traffic/price?product=residential&gb=10');
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/traffic/price?product=residential&gb=10", 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",
"gb": 10,
"rate_usd": 2.99,
"subtotal_usd": 29.9,
"discount": {
"type": null,
"percent": 0
},
"total_usd": 29.9,
"balance_usd": 42.5,
"enough_balance": true
}Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_parameter | product is missing or not residential / mobile |
| 400 | invalid_parameter | gb is not a whole number from 1 to 1000, or the promo code does not exist or has run out |
Buy traffic
/api/v1/traffic/purchaseIdempotency-KeyCharges the balance and adds the traffic to the product. Send an Idempotency-Key header (any unique string up to 64 characters): if the connection drops, send the same request with the same key and you get the first answer back instead of a second purchase. Up to 10 purchases per minute.
Body (JSON)
| Name | Type | Description |
|---|---|---|
productrequired | residential | mobile | Which pool: residential or mobile. |
gbrequired | integer | GB to buy. 1–1000. |
promo_code | string | A promo code to apply. |
start_now | boolean | Customers in the EU and the UK must send true: it asks us to start the service at once, like the checkbox at checkout. If you withdraw within 14 days, you pay for the part already used. Default false. |
Request
curl -X POST "https://aeonproxy.com/api/v1/traffic/purchase" \
-H "Authorization: Bearer $AEONPROXY_API_KEY" \
-H "Idempotency-Key: 5f0c7e9a-2d4b-4f61-9a3e-8b1d2c6e7f40" \
-H "Content-Type: application/json" \
-d '{"product":"residential","gb":10}'import os
import requests
r = requests.post(
"https://aeonproxy.com/api/v1/traffic/purchase",
headers={"Authorization": f"Bearer {os.environ['AEONPROXY_API_KEY']}", "Idempotency-Key": "5f0c7e9a-2d4b-4f61-9a3e-8b1d2c6e7f40"},
json={"product": "residential", "gb": 10},
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/traffic/purchase", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AEONPROXY_API_KEY}`,
"Idempotency-Key": "5f0c7e9a-2d4b-4f61-9a3e-8b1d2c6e7f40",
"Content-Type": "application/json",
},
body: JSON.stringify({ product: "residential", gb: 10 }),
});
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/traffic/purchase');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('AEONPROXY_API_KEY'),
'Idempotency-Key: 5f0c7e9a-2d4b-4f61-9a3e-8b1d2c6e7f40',
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode(['product' => 'residential', 'gb' => 10]),
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","gb":10}`)
req, err := http.NewRequest("POST", "https://aeonproxy.com/api/v1/traffic/purchase", body)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("AEONPROXY_API_KEY"))
req.Header.Set("Idempotency-Key", "5f0c7e9a-2d4b-4f61-9a3e-8b1d2c6e7f40")
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 201
{
"order": {
"id": 5120,
"product": "residential",
"type": "traffic",
"status": "active",
"gb_total": 10,
"gb_left": 10,
"ip_count": null,
"total_usd": 29.9,
"created_at": "2026-10-24T17:03:12.000Z",
"expires_at": null,
"next_due": null,
"auto_renew": null,
"tag": ""
},
"charged_usd": 29.9,
"discount": {
"type": null,
"percent": 0
},
"balance_usd": 12.6
}Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_parameter | product is missing or not residential / mobile |
| 400 | invalid_parameter | a wrong gb, an unknown promo code, or start_now missing for an EU / UK account |
| 402 | insufficient_balance | the balance does not cover the total |
| 429 | rate_limited | more than 10 purchases in a minute |
Orders API: questions
Not yet. Top-ups are crypto payments that you confirm on the payment page, so they start in the dashboard's wallet. Everything you buy with the balance can be bought through the API.
The same as in the dashboard: a promo code or the loyalty discount for regular customers, whichever is larger. They never add up, and the loyalty discount does not apply from 1000 GB. Get a price shows which one you get.