Points d’accès de cette page
GET /v1/residential/subscriptions: Lister les abonnements de trafic résidentiel et mobile à rotation par GBGET /v1/residential/subscriptions/{subscriptionId}: Consulter un abonnement résidentielPATCH /v1/residential/subscriptions/{subscriptionId}: Renommer ou activer et désactiver le renouvellementPOST /v1/residential/subscriptions/{subscriptionId}/reset-password: Générer un nouveau mot de passe du proxy principalGET /v1/residential/subscriptions/{subscriptionId}/usage: Consommation quotidienne de traficGET /v1/residential/subscriptions/{subscriptionId}/sub-users: Lister les sous-utilisateurs, leurs identifiants distincts et leurs plafondsPOST /v1/residential/subscriptions/{subscriptionId}/sub-users: Créer un sous-utilisateurPATCH /v1/residential/subscriptions/{subscriptionId}/sub-users/{subUserId}: Modifier un sous-utilisateur : libellé, plafond, activation et mot de passeDELETE /v1/residential/subscriptions/{subscriptionId}/sub-users/{subUserId}: Supprimer un sous-utilisateurGET /v1/catalog/countries: Pays où un produit est disponibleGET /v1/catalog/countries/{countryCode}/cities: Villes sélectionnables dans un paysGET /v1/catalog/countries/{countryCode}/asns: FAI sélectionnables (ASN) dans un pays, pour le résidentiel uniquement
URL de base https://africaproxies.com/api/v1. Authentification, erreurs et limites : voir la présentation de l’API.
Sessions persistantes
Ajoutez -session-{id}-ttl-{minutes} au nom d'utilisateur du proxy pour conserver la même IP : {id} est composé de 1–32 lettres ou chiffres de votre choix, ttl est de 1–30 minutes. L'IP peut changer plus tôt, par exemple lorsque l'appareil qui la supporte se déconnecte.
Lister les abonnements de trafic résidentiel et mobile à rotation par GB
GET/v1/residential/subscriptions
Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
productId | query | residential · mobile-gb | Non | Seulement ce produit (absent : les deux). |
Réponse 200 OK
{
"data": [
{
"id": "res_9x2m4k",
"productId": "residential",
"label": "Residential #1",
"planId": "res-10",
"status": "active",
"trafficTotalBytes": 10000000000,
"trafficUsedBytes": 2350000000,
"trafficRemainingBytes": 7650000000,
"expiresAt": null,
"autoRenew": false,
"username": "u7k2m9",
"password": "PASSWORD",
"endpoint": {
"host": "gw.africaproxies.com",
"httpPort": 7777,
"socksPort": 7778
},
"subUserCount": 1,
"createdAt": "2026-10-05T14:03:11Z"
}
]
}Exemples de code
curl -s "https://africaproxies.com/api/v1/residential/subscriptions" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.get(f"{API}/residential/subscriptions", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/residential/subscriptions`, {
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Obtenir un abonnement résidentiel
GET/v1/residential/subscriptions/{subscriptionId}
Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
subscriptionId | path | string | Oui | — |
Réponse 200 OK
{
"id": "res_9x2m4k",
"productId": "residential",
"label": "Residential #1",
"planId": "res-10",
"status": "active",
"trafficTotalBytes": 10000000000,
"trafficUsedBytes": 2350000000,
"trafficRemainingBytes": 7650000000,
"expiresAt": null,
"autoRenew": false,
"username": "u7k2m9",
"password": "PASSWORD",
"endpoint": {
"host": "gw.africaproxies.com",
"httpPort": 7777,
"socksPort": 7778
},
"subUserCount": 1,
"createdAt": "2026-10-05T14:03:11Z"
}Exemples de code
curl -s "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.get(f"{API}/residential/subscriptions/res_9x2m4k", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/residential/subscriptions/res_9x2m4k`, {
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Renommer ou activer et désactiver le renouvellement
PATCH/v1/residential/subscriptions/{subscriptionId}
Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
subscriptionId | path | string | Oui | — |
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
label | string | Non | max. 60 caractères |
autoRenew | boolean | Non | — |
{
"label": "Price monitoring",
"autoRenew": true
}Réponse 200 OK
{
"id": "res_9x2m4k",
"productId": "residential",
"label": "Residential #1",
"planId": "res-10",
"status": "active",
"trafficTotalBytes": 10000000000,
"trafficUsedBytes": 2350000000,
"trafficRemainingBytes": 7650000000,
"expiresAt": null,
"autoRenew": false,
"username": "u7k2m9",
"password": "PASSWORD",
"endpoint": {
"host": "gw.africaproxies.com",
"httpPort": 7777,
"socksPort": 7778
},
"subUserCount": 1,
"createdAt": "2026-10-05T14:03:11Z"
}Exemples de code
curl -s -X PATCH "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"label":"Price monitoring","autoRenew":true}'import os
import requests
API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.patch(f"{API}/residential/subscriptions/res_9x2m4k", headers=HEADERS, json={"label": "Price monitoring", "autoRenew": True}, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/residential/subscriptions/res_9x2m4k`, {
method: 'PATCH',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ label: 'Price monitoring', autoRenew: true }),
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Générer un nouveau mot de passe proxy pour l'utilisateur principal
POST/v1/residential/subscriptions/{subscriptionId}/reset-password
L'ancien mot de passe cesse de fonctionner dans un délai de 60 secondes à la passerelle.
Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
subscriptionId | path | string | Oui | — |
Réponse 200 OK
{
"id": "res_9x2m4k",
"productId": "residential",
"label": "Residential #1",
"planId": "res-10",
"status": "active",
"trafficTotalBytes": 10000000000,
"trafficUsedBytes": 2350000000,
"trafficRemainingBytes": 7650000000,
"expiresAt": null,
"autoRenew": false,
"username": "u7k2m9",
"password": "PASSWORD",
"endpoint": {
"host": "gw.africaproxies.com",
"httpPort": 7777,
"socksPort": 7778
},
"subUserCount": 1,
"createdAt": "2026-10-05T14:03:11Z"
}Exemples de code
curl -s -X POST "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k/reset-password" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.post(f"{API}/residential/subscriptions/res_9x2m4k/reset-password", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/residential/subscriptions/res_9x2m4k/reset-password`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Utilisation quotidienne du trafic
GET/v1/residential/subscriptions/{subscriptionId}/usage
Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
subscriptionId | path | string | Oui | — |
from | query | string (date) | Non | Premier jour (UTC), inclus. Par défaut : 29 jours avant to. |
to | query | string (date) | Non | Dernier jour (UTC), inclus. Par défaut : aujourd’hui. Période maximale : 366 jours. |
subUserId | query | string | Non | Limiter à un seul sous-utilisateur. |
Réponse 200 OK
{
"from": "2026-10-04",
"to": "2026-10-05",
"totalBytes": 2350000000,
"totalRequests": 48210,
"points": [
{
"date": "2026-10-04",
"bytes": 1200000000,
"requests": 24800
},
{
"date": "2026-10-05",
"bytes": 1150000000,
"requests": 23410
}
],
"byCountry": [
{
"country": "AE",
"bytes": 2350000000
}
]
}Exemples de code
curl -s "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k/usage" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.get(f"{API}/residential/subscriptions/res_9x2m4k/usage", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/residential/subscriptions/res_9x2m4k/usage`, {
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Lister les sous-utilisateurs (identifiants de proxy séparés avec leur propre limite de trafic)
GET/v1/residential/subscriptions/{subscriptionId}/sub-users
Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
subscriptionId | path | string | Oui | — |
Réponse 200 OK
{
"data": [
{
"id": "sub_3m9qk2",
"label": "Client A",
"username": "u7k2m9_scraper",
"password": "PASSWORD",
"trafficLimitBytes": 5000000000,
"trafficUsedBytes": 1200000000,
"enabled": true,
"createdAt": "2026-10-05T14:03:11Z"
}
],
"limit": 50
}Exemples de code
curl -s "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k/sub-users" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.get(f"{API}/residential/subscriptions/res_9x2m4k/sub-users", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/residential/subscriptions/res_9x2m4k/sub-users`, {
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Créer un sous-utilisateur
POST/v1/residential/subscriptions/{subscriptionId}/sub-users
Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
subscriptionId | path | string | Oui | — |
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
label | string | Oui | max. 60 caractères |
password | string | Non | Généré si le champ est omis. — 64 caractères max. |
trafficLimitBytes | integer (int64), nullable | Non | ≥ 0 |
{
"label": "Scraper EU",
"trafficLimitBytes": 5000000000
}Réponse 201 Created
{
"id": "sub_3m9qk2",
"label": "Client A",
"username": "u7k2m9_scraper",
"password": "PASSWORD",
"trafficLimitBytes": 5000000000,
"trafficUsedBytes": 1200000000,
"enabled": true,
"createdAt": "2026-10-05T14:03:11Z"
}Exemples de code
curl -s -X POST "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k/sub-users" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"label":"Scraper EU","trafficLimitBytes":5000000000}'import os
import requests
API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.post(f"{API}/residential/subscriptions/res_9x2m4k/sub-users", headers=HEADERS, json={"label": "Scraper EU", "trafficLimitBytes": 5000000000}, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/residential/subscriptions/res_9x2m4k/sub-users`, {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ label: 'Scraper EU', trafficLimitBytes: 5000000000 }),
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Mettre à jour un sous-utilisateur : libellé, plafond, activation ou désactivation, nouveau mot de passe
PATCH/v1/residential/subscriptions/{subscriptionId}/sub-users/{subUserId}
Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
subscriptionId | path | string | Oui | — |
subUserId | path | string | Oui | — |
Corps de la requête
| Champ | Type | Requis | Description |
|---|---|---|---|
label | string | Non | max. 60 caractères |
trafficLimitBytes | integer (int64), nullable | Non | ≥ 0 |
enabled | boolean | Non | — |
regeneratePassword | boolean | Non | — |
{
"enabled": false
}Réponse 200 OK
{
"id": "sub_3m9qk2",
"label": "Client A",
"username": "u7k2m9_scraper",
"password": "PASSWORD",
"trafficLimitBytes": 5000000000,
"trafficUsedBytes": 1200000000,
"enabled": true,
"createdAt": "2026-10-05T14:03:11Z"
}Exemples de code
curl -s -X PATCH "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k/sub-users/sub_3m9qk2" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled":false}'import os
import requests
API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.patch(f"{API}/residential/subscriptions/res_9x2m4k/sub-users/sub_3m9qk2", headers=HEADERS, json={"enabled": False}, timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/residential/subscriptions/res_9x2m4k/sub-users/sub_3m9qk2`, {
method: 'PATCH',
headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ enabled: false }),
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Supprimer un sous-utilisateur
DELETE/v1/residential/subscriptions/{subscriptionId}/sub-users/{subUserId}
Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
subscriptionId | path | string | Oui | — |
subUserId | path | string | Oui | — |
Réponse 204 No Content
Pas de corps : le code d'état est la réponse.
Exemples de code
curl -s -X DELETE "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k/sub-users/sub_3m9qk2" \
-H "Authorization: Bearer $API_KEY"import os
import requests
API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}
r = requests.delete(f"{API}/residential/subscriptions/res_9x2m4k/sub-users/sub_3m9qk2", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.status_code) # 204: done// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/residential/subscriptions/res_9x2m4k/sub-users/sub_3m9qk2`, {
method: 'DELETE',
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
console.log(res.status); // 204: donePays où un produit est disponible
GET/v1/catalog/countries
Public : aucune clé API requise.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
product | query | string | Non | Restreindre aux lieux où ce produit est disponible (residential, mobile, mobile-gb). |
Réponse 200 OK
{
"data": [
{
"code": "AE",
"name": "United Arab Emirates",
"region": "Asia",
"products": [
"residential",
"mobile",
"mobile-gb"
],
"cities": 6,
"asns": 2,
"carriers": 2
}
]
}Exemples de code
curl -s "https://africaproxies.com/api/v1/catalog/countries"import os
import requests
API = "https://africaproxies.com/api/v1"
r = requests.get(f"{API}/catalog/countries", timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/catalog/countries`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());Villes ciblables dans un pays
GET/v1/catalog/countries/{countryCode}/cities
Avec product=mobile ou product=mobile-gb, uniquement les villes où existent des modems 4G/5G.
Public : aucune clé API requise.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
countryCode | path | string | Oui | ISO 3166-1 alpha-2, en majuscules. |
product | query | string | Non | Restreindre aux lieux où ce produit est disponible (residential, mobile, mobile-gb). |
Réponse 200 OK
{
"data": [
{
"id": "dubai",
"name": "Dubai",
"state": null
}
]
}Exemples de code
curl -s "https://africaproxies.com/api/v1/catalog/countries/AE/cities"import os
import requests
API = "https://africaproxies.com/api/v1"
r = requests.get(f"{API}/catalog/countries/AE/cities", timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/catalog/countries/AE/cities`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());FAI sélectionnables (ASN) dans un pays, pour le résidentiel uniquement
GET/v1/catalog/countries/{countryCode}/asns
Public : aucune clé API requise.
Paramètres
| Nom | Dans | Type | Requis | Description |
|---|---|---|---|---|
countryCode | path | string | Oui | ISO 3166-1 alpha-2, en majuscules. |
Réponse 200 OK
{
"data": [
{
"asn": 7922,
"name": "Comcast Cable"
}
]
}Exemples de code
curl -s "https://africaproxies.com/api/v1/catalog/countries/AE/asns"import os
import requests
API = "https://africaproxies.com/api/v1"
r = requests.get(f"{API}/catalog/countries/AE/asns", timeout=30)
r.raise_for_status()
print(r.json())// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';
const res = await fetch(`${API}/catalog/countries/AE/asns`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());