Comment commencer ?
- 1Inscrivez-vous et connectez-vous au tableau de bord.
- 2Ouvrez Connexion et créez une clé API. La clé complète ne s'affiche qu'une seule fois : copiez-la dans un endroit sûr.
- 3Envoyez la clé dans l'en-tête Authorization avec chaque requête qui en a besoin.
- 4Appelez /account pour vérifier que la clé fonctionne, puis passez vos commandes avec /orders.
Comment fonctionne l'authentification ?
Les requêtes concernant votre propre compte (account, orders, proxy-user) nécessitent une clé API. Envoyez-la comme jeton Bearer dans l'en-tête Authorization. Les prix, les pays et les devis sont publics et ne demandent pas de clé.
Nous ne conservons qu'un hash de la clé. Si vous la perdez, créez-en une nouvelle dans le tableau de bord et l'ancienne cesse aussitôt de fonctionner. Ne mettez pas la clé dans du code côté navigateur ni dans des dépôts publics.
Authorization: Bearer rpk_your_api_key
URL de base et format
- URL de base
- https://royalproxy.online/api/v1
- Corps de requête et de réponse
- application/json
- Montants
- Nombres en USD, par exemple 807.90
- Heure
- ISO 8601 (UTC)
Y a-t-il une limite d'appels ?
Chaque clé API peut envoyer jusqu'à 60 requêtes par minute. Les endpoints publics acceptent 60 requêtes par minute et par IP. Au-delà, vous recevez une erreur HTTP 429 : attendez une minute et réessayez.
À quoi ressemblent les erreurs ?
Les erreurs utilisent le code de statut HTTP et un corps JSON avec un code court et un message.
{
"error": {
"code": "insufficient_balance",
"message": "Your balance is too low for this order. Top up in the dashboard."
}
}| HTTP | code | Signification |
|---|---|---|
| bad_requestHTTP 400Une valeur manque ou n'est pas autorisée pour ce produit. | Une valeur manque ou n'est pas autorisée pour ce produit. | |
| unauthorizedHTTP 401La clé API est absente ou invalide. | La clé API est absente ou invalide. | |
| insufficient_balanceHTTP 402Le solde est inférieur au total de la commande. Rien n'a été débité. | Le solde est inférieur au total de la commande. Rien n'a été débité. | |
| not_foundHTTP 404Aucune commande avec cet id sur votre compte. | Aucune commande avec cet id sur votre compte. | |
| rate_limitedHTTP 429Trop de requêtes en une minute. | Trop de requêtes en une minute. | |
| server_errorHTTP 500La requête n'a pas pu aboutir. Rien n'a été débité. | La requête n'a pas pu aboutir. Rien n'a été débité. |
Endpoints
Obtenir votre compte
GET/api/v1/accountClé API
Renvoie votre solde, l'hôte proxy, les ports, le nom d'utilisateur et le mot de passe, ainsi que les IP autorisées.
curl https://royalproxy.online/api/v1/account \ -H "Authorization: Bearer rpk_your_api_key"
{
"username": "royal_user",
"balance_usd": 1300,
"proxy": {
"host": "gate.royalproxy.online",
"http_port": 6100,
"socks5_port": 6200,
"username": "rpexample1",
"password": "your_password"
},
"allowed_ips": [
"203.0.113.10"
]
}Lister les produits et les prix
GET/api/v1/productsSans clé
Renvoie chaque produit avec ses limites, ses paliers de prix et ses remises. Les prix viennent du même tableau que la page des tarifs.
curl https://royalproxy.online/api/v1/products
{
"currency": "USD",
"prices_as_of": "2026-10-31",
"products": [
{
"id": "unlimited",
"unit": "day",
"quantity": {
"meaning": "days",
"min": 1,
"max": 365
},
"...": "..."
},
{
"id": "residential",
"unit": "gb",
"...": "..."
}
]
}Lister les pays et les villes
GET/api/v1/countriesSans clé
Renvoie les pays disponibles pour un produit, avec les valeurs de ville à mettre dans l'identifiant proxy.
| Champ | Type | Signification |
|---|---|---|
productFacultatif | string | unlimited, residential, isp ou datacenter. Par défaut residential. |
curl "https://royalproxy.online/api/v1/countries?product=datacenter"
{
"product": "datacenter",
"countries": [
{
"code": "us",
"name": "United States",
"region": "americas",
"datacenter": true,
"cities": [
{
"name": "New York",
"value": "new_york"
},
{
"name": "Los Angeles",
"value": "los_angeles"
}
]
}
]
}Obtenir un devis
POST/api/v1/quoteSans clé
Calcule le total d'une commande sans rien débiter. Utilisez le même corps que pour passer une commande.
| Champ | Type | Signification |
|---|---|---|
productObligatoire | string | unlimited, residential, isp ou datacenter. |
quantityObligatoire | integer | Jours pour unlimited (1~365), GB pour residential (5~5,000), IP pour isp (1~1,000) ou datacenter (5~5,000). |
concurrencyFacultatif | integer | Illimité uniquement : 200, 500, 1000 ou 2000. |
bandwidthFacultatif | integer | Illimité uniquement, en Mbps : 100, 200, 500 ou 1000. |
monthsFacultatif | integer | isp et datacenter uniquement : 1, 3, 6 ou 12. |
countryFacultatif | string | isp et datacenter uniquement : code pays de deux lettres, par exemple jp. Voir /countries. |
curl -X POST https://royalproxy.online/api/v1/quote \
-H "Content-Type: application/json" \
-d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'{
"product": "unlimited",
"quantity": 30,
"unit_price_usd": 8.97,
"unit": "day",
"total_usd": 269.1
}Passer une commande
POST/api/v1/ordersClé API
Prélève le total sur votre solde et crée la commande. Les nouvelles commandes commencent en pending (en activation) et passent en active quand elles sont prêtes. Si une commande ne peut pas être activée, elle passe en refunded et le montant total revient sur votre solde. Renvoie 402 quand le solde est insuffisant.
| Champ | Type | Signification |
|---|---|---|
productObligatoire | string | unlimited, residential, isp ou datacenter. |
quantityObligatoire | integer | Jours pour unlimited (1~365), GB pour residential (5~5,000), IP pour isp (1~1,000) ou datacenter (5~5,000). |
concurrencyFacultatif | integer | Illimité uniquement : 200, 500, 1000 ou 2000. |
bandwidthFacultatif | integer | Illimité uniquement, en Mbps : 100, 200, 500 ou 1000. |
monthsFacultatif | integer | isp et datacenter uniquement : 1, 3, 6 ou 12. |
countryFacultatif | string | isp et datacenter uniquement : code pays de deux lettres, par exemple jp. Voir /countries. |
curl -X POST https://royalproxy.online/api/v1/orders \
-H "Authorization: Bearer rpk_your_api_key" \
-H "Content-Type: application/json" \
-d '{"product":"unlimited","quantity":30,"concurrency":1000,"bandwidth":200}'{
"order": {
"id": "RP-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.97,
"total_usd": 269.1,
"status": "pending",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:12:44.120Z"
},
"balance_usd": 1030.9
}Lister vos commandes
GET/api/v1/ordersClé API
Renvoie vos 100 dernières commandes, de la plus récente à la plus ancienne.
| Champ | Type | Signification |
|---|---|---|
statusFacultatif | string | pending, active ou refunded. Laissez vide pour tout obtenir. |
curl "https://royalproxy.online/api/v1/orders?status=pending" \ -H "Authorization: Bearer rpk_your_api_key"
{
"orders": [
{
"id": "RP-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.97,
"total_usd": 269.1,
"status": "pending",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:12:44.120Z"
}
]
}Obtenir une commande
GET/api/v1/orders/{id}Clé API
Renvoie une commande à partir de son id, par exemple pour vérifier si elle est active.
| Champ | Type | Signification |
|---|---|---|
idObligatoire | string | L'id de la commande, par exemple RP-7KQ2M-X4HTD. |
curl https://royalproxy.online/api/v1/orders/RP-7KQ2M-X4HTD \ -H "Authorization: Bearer rpk_your_api_key"
{
"order": {
"id": "RP-7KQ2M-X4HTD",
"product": "unlimited",
"quantity": 30,
"months": null,
"concurrency": 1000,
"bandwidth_mbps": 200,
"country": null,
"unit_price_usd": 8.97,
"total_usd": 269.1,
"status": "active",
"created_at": "2026-10-31T09:12:44.120Z",
"updated_at": "2026-10-31T09:40:02.511Z"
}
}Générer un identifiant proxy
GET/api/v1/proxy-userClé API
Renvoie un identifiant proxy avec vos options, ainsi que des URL de proxy HTTP et SOCKS5 prêtes à l'emploi. Sans session, l'IP change à chaque requête.
| Champ | Type | Signification |
|---|---|---|
productFacultatif | string | unlimited, residential, isp ou datacenter. Par défaut unlimited. |
countryFacultatif | string | Code pays de deux lettres, par exemple jp. |
cityFacultatif | string | Valeur de ville issue de /countries, par exemple tokyo. Nécessite country. |
sessionFacultatif | string | De 1~32 lettres ou chiffres au choix. Les requêtes avec la même session gardent la même IP. |
ttlFacultatif | integer | Minutes pendant lesquelles l'IP de session est conservée, 1~60. Par défaut 30. |
curl "https://royalproxy.online/api/v1/proxy-user?product=residential&country=jp&city=tokyo&session=job42&ttl=30" \ -H "Authorization: Bearer rpk_your_api_key"
{
"username": "rpexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30",
"password": "your_password",
"http": "http://rpexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.royalproxy.online:6100",
"socks5": "socks5h://rpexample1-zone-res-cc-jp-city-tokyo-sid-job42-ttl-30:your_password@gate.royalproxy.online:6200"
}Exemples complets
Ces exemples vérifient le prix, commandent depuis le solde et se connectent via une IP japonaise.
import requests
API = "https://royalproxy.online/api/v1"
HEAD = {"Authorization": "Bearer rpk_your_api_key"}
# 1) Check the price first
plan = {"product": "residential", "quantity": 100}
print(requests.post(f"{API}/quote", json=plan).json())
# 2) Order from your balance
r = requests.post(f"{API}/orders", json=plan, headers=HEAD)
order = r.json()["order"]
print(order["id"], order["status"])
# 3) Get a username for Japanese IPs
u = requests.get(f"{API}/proxy-user", headers=HEAD,
params={"product": "residential", "country": "jp"}).json()
proxies = {"http": u["http"], "https": u["http"]}
print(requests.get("https://ipinfo.io/json", proxies=proxies, timeout=30).json())const API = "https://royalproxy.online/api/v1";
const HEAD = { Authorization: "Bearer rpk_your_api_key", "Content-Type": "application/json" };
// Check the balance
const acc = await fetch(`${API}/account`, { headers: HEAD }).then((r) => r.json());
console.log(acc.balance_usd);
// Order 7 days of unlimited
const res = await fetch(`${API}/orders`, {
method: "POST",
headers: HEAD,
body: JSON.stringify({ product: "unlimited", quantity: 7, concurrency: 500, bandwidth: 100 }),
});
if (res.status === 402) console.log("Top up first");
else console.log((await res.json()).order.id);Les commandes passées via l'API sont identiques à celles du tableau de bord et apparaissent dans Historique. Remplacez rpk_your_api_key par votre propre clé.