Aiatera API Documentation
Official REST API for integrating Aiatera digital products, automated ordering, and wallet management into your applications.
Base URL: https://aiatera.online
Introduction
The Aiatera API gives you programmatic access to live product catalogs, stock levels, automated ordering, and wallet operations. All requests and responses use JSON. All endpoints are served over HTTPS — plain HTTP is not supported.
Authentication
Authenticate every request with your secret API key, available in the API Key dashboard page. Send it in the X-API-Key header:
X-API-Key: your-api-key-here
Alternatively, a Bearer token format is accepted:
Authorization: Bearer your-api-key-here
Rate Limits
| Scope | Limit | Window |
|---|---|---|
| All API endpoints | 100 requests | 15 minutes / IP |
| Order creation | 5 requests | 1 minute / user |
| Sensitive actions (password, key regen, topup) | 10 requests | 15 minutes / user |
| Authentication endpoints | 20 requests | 15 minutes / IP |
When you exceed a limit, the API returns 429 Too Many Requests. Back off and retry after the window resets.
Error Codes
| HTTP | error | Meaning |
|---|---|---|
| 400 | invalidProduct | Missing or malformed productId |
| 400 | outOfStock | Product currently out of stock |
| 400 | insufficientBalance | Wallet balance too low for this order |
| 401 | unauthorized | No credentials provided |
| 401 | invalidApiKey | API key is wrong or was regenerated |
| 403 | forbidden | Admin-only endpoint with non-admin credentials |
| 404 | productNotFound | Product ID does not exist in the catalog |
| 429 | — | Rate limit exceeded |
| 500 | serverError | Unexpected server error — retry later |
price value sent by the client is ignored — the authoritative catalog price is charged.Products
Returns the full merged catalog with live stock and pricing from all connected suppliers.
curl -s "https://aiatera.online/api/supplier/products" \ -H "X-API-Key: your-api-key"
{
"products": [
{
"id": "elevenlabs_creator_3_months",
"name": "ElevenLabs Creator — 3 Months",
"category": "ai_chat",
"price": 13.0,
"originalPrice": 18.2,
"inStock": true,
"stock": 42,
"supplier": "dc"
}
]
}
Returns a single product by ID with full details: description, features, stock and price.
curl -s "https://aiatera.online/api/supplier/products/elevenlabs_creator_3_months" \ -H "X-API-Key: your-api-key"
Lightweight live-stock snapshot. Cache TTL is ~90 seconds — poll no faster than that.
Orders
Places an order and deducts the wallet balance atomically. Processing is automatic — typically seconds.
| Field | Type | Required | Description |
|---|---|---|---|
productId | string | required | Product ID from the catalog (max 128 chars) |
price | number | ignored | Server always charges the authoritative catalog price |
curl -s -X POST "https://aiatera.online/api/supplier/orders" \
-H "Content-Type: application/json" \
-H "X-API-Key: your-api-key" \
-d '{"productId": "elevenlabs_creator_3_months"}'
{
"success": true,
"order": {
"id": "8f2c1a9e-...",
"productId": "elevenlabs_creator_3_months",
"amount": 13.0,
"status": "processing"
}
}
Fetches the latest fulfillment status and delivered credentials for an order. Status values: pending → processing → success / failed. Failed orders are auto-refunded to the wallet.
Lists your order history. Optional query: ?status=pending|processing|success|failed.
Account & Wallet
Returns your account profile including current wallet balance.
{
"user": {
"id": "3f873642-...",
"name": "johndoe",
"email": "john@example.com",
"balance": 25.4,
"role": "user"
}
}
Wallet mutation history. Each entry: type (credit/debit), amount, description, created_at.
Creates an instant QRIS deposit (Indonesian e-wallets & banks). Body: { "amount": 10 } (USD, min 1). Then poll GET /api/user/topup/check-qris/:txId every 3s until status: "completed".
Creates a crypto deposit request with automatic blockchain detection. Body: { "amount": 10, "chain": "usdt_bep20" | "usdt_polygon" | "ltc" | "ton" }. The response contains the deposit address plus the exact amount (unique cents) or memo to send. Poll GET /api/user/crypto-deposit/:id/check every 5s — the balance is credited automatically once the on-chain payment is detected.
| Chain | Network | Identification |
|---|---|---|
usdt_bep20 | Binance Smart Chain | Unique amount (e.g. 10.37 USDT) |
usdt_polygon | Polygon | Unique amount (e.g. 10.52 USDT) |
ltc | Litecoin | Unique LTC amount (8 decimals) |
ton | The Open Network | 6-digit memo required |
Quickstart
End-to-end example: list products, order one, poll until delivered.
const BASE = "https://aiatera.online";
const headers = { "Content-Type": "application/json", "X-API-Key": "your-api-key" };
// 1. Pick a product
const { products } = await fetch(BASE + "/api/supplier/products", { headers }).then(r => r.json());
const product = products.find(p => p.inStock);
// 2. Order it (server verifies price & balance)
const { order } = await fetch(BASE + "/api/supplier/orders", {
method: "POST", headers,
body: JSON.stringify({ productId: product.id })
}).then(r => r.json());
// 3. Poll for delivery
let result;
do {
await new Promise(r => setTimeout(r, 3000));
result = await fetch(BASE + `/api/supplier/orders/${order.id}/status`, { headers }).then(r => r.json());
} while (result.status === "pending" || result.status === "processing");
console.log("Delivered:", result.result);
import requests, time
BASE = "https://aiatera.online"
headers = {"X-API-Key": "your-api-key", "Content-Type": "application/json"}
# 1. Pick a product
products = requests.get(f"{BASE}/api/supplier/products", headers=headers).json()["products"]
product = next(p for p in products if p["inStock"])
# 2. Order it
order = requests.post(f"{BASE}/api/supplier/orders", headers=headers,
json={"productId": product["id"]}).json()["order"]
# 3. Poll for delivery
while True:
r = requests.get(f"{BASE}/api/supplier/orders/{order['id']}/status", headers=headers).json()
if r["status"] not in ("pending", "processing"):
break
time.sleep(3)
print("Delivered:", r.get("result"))