Endpunkte auf dieser Seite
GET /v1/residential/subscriptions: Datenabos auflisten (Residential und rotierendes Mobile pro GB)GET /v1/residential/subscriptions/{subscriptionId}: Residential-Abo abrufenPATCH /v1/residential/subscriptions/{subscriptionId}: Umbenennen oder automatische Verlängerung umschaltenPOST /v1/residential/subscriptions/{subscriptionId}/reset-password: Neues Proxy-Passwort für den Hauptbenutzer erzeugenGET /v1/residential/subscriptions/{subscriptionId}/usage: Täglicher DatenverbrauchGET /v1/residential/subscriptions/{subscriptionId}/sub-users: Unterbenutzer auflisten (eigene Proxy-Zugangsdaten und eigenes Datenlimit)POST /v1/residential/subscriptions/{subscriptionId}/sub-users: Unterbenutzer erstellenPATCH /v1/residential/subscriptions/{subscriptionId}/sub-users/{subUserId}: Unterbenutzer aktualisieren (Bezeichnung, Limit, aktivieren/deaktivieren, neues Passwort)DELETE /v1/residential/subscriptions/{subscriptionId}/sub-users/{subUserId}: Unterbenutzer löschenGET /v1/catalog/countries: Länder, in denen ein Produkt verfügbar istGET /v1/catalog/countries/{countryCode}/cities: Auswählbare Städte in einem LandGET /v1/catalog/countries/{countryCode}/asns: Auswählbare Internetanbieter (ASN) in einem Land — nur Residential
Basis-URL https://africaproxies.com/api/v1. Authentifizierung, Fehler und Limits: siehe API-Übersicht.
Sticky Sessions
Ergänze den Proxy-Benutzernamen um -session-{id}-ttl-{minutes}, um dieselbe IP zu behalten: {id} besteht aus 1–32 frei gewählten Buchstaben oder Ziffern, ttl beträgt 1–30 Minuten. Die IP kann sich früher ändern, etwa wenn das Gerät dahinter offline geht.
Datenabos auflisten (Residential und rotierendes Mobile pro GB)
GET/v1/residential/subscriptions
Authentifizierung: API Schlüssel im Authorization: Bearer API_KEY Header.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
productId | query | residential · mobile-gb | Nein | Nur dieses Produkt (nicht angegeben: beide). |
Antwort 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"
}
]
}Code-Beispiele
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());Residential-Abo abrufen
GET/v1/residential/subscriptions/{subscriptionId}
Authentifizierung: API Schlüssel im Authorization: Bearer API_KEY Header.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
subscriptionId | path | string | Ja | — |
Antwort 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"
}Code-Beispiele
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());Umbenennen oder automatische Verlängerung umschalten
PATCH/v1/residential/subscriptions/{subscriptionId}
Authentifizierung: API Schlüssel im Authorization: Bearer API_KEY Header.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
subscriptionId | path | string | Ja | — |
Anfragekörper
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
label | string | Nein | max. 60 Zeichen |
autoRenew | boolean | Nein | — |
{
"label": "Price monitoring",
"autoRenew": true
}Antwort 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"
}Code-Beispiele
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());Neues Proxy-Passwort für den Hauptbenutzer erzeugen
POST/v1/residential/subscriptions/{subscriptionId}/reset-password
Das alte Passwort funktioniert nach spätestens 60 Sekunden nicht mehr am Gateway.
Authentifizierung: API Schlüssel im Authorization: Bearer API_KEY Header.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
subscriptionId | path | string | Ja | — |
Antwort 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"
}Code-Beispiele
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());Täglicher Datenverbrauch
GET/v1/residential/subscriptions/{subscriptionId}/usage
Authentifizierung: API Schlüssel im Authorization: Bearer API_KEY Header.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
subscriptionId | path | string | Ja | — |
from | query | string (date) | Nein | Erster Tag (UTC), einschließlich. Standard = 29 Tage vor to. |
to | query | string (date) | Nein | Letzter Tag (UTC), einschließlich. Standard = heute. Höchstens 366 Tage. |
subUserId | query | string | Nein | Auf einen Unterbenutzer begrenzen. |
Antwort 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
}
]
}Code-Beispiele
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());Unterbenutzer auflisten (eigene Proxy-Zugangsdaten und eigenes Datenlimit)
GET/v1/residential/subscriptions/{subscriptionId}/sub-users
Authentifizierung: API Schlüssel im Authorization: Bearer API_KEY Header.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
subscriptionId | path | string | Ja | — |
Antwort 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
}Code-Beispiele
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());Unterbenutzer erstellen
POST/v1/residential/subscriptions/{subscriptionId}/sub-users
Authentifizierung: API Schlüssel im Authorization: Bearer API_KEY Header.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
subscriptionId | path | string | Ja | — |
Anfragekörper
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
label | string | Ja | max. 60 Zeichen |
password | string | Nein | Wird erzeugt, wenn nicht angegeben. — max. 64 Zeichen |
trafficLimitBytes | integer (int64), nullable | Nein | ≥ 0 |
{
"label": "Scraper EU",
"trafficLimitBytes": 5000000000
}Antwort 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"
}Code-Beispiele
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());Unterbenutzer aktualisieren (Bezeichnung, Limit, aktivieren/deaktivieren, neues Passwort)
PATCH/v1/residential/subscriptions/{subscriptionId}/sub-users/{subUserId}
Authentifizierung: API Schlüssel im Authorization: Bearer API_KEY Header.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
subscriptionId | path | string | Ja | — |
subUserId | path | string | Ja | — |
Anfragekörper
| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
label | string | Nein | max. 60 Zeichen |
trafficLimitBytes | integer (int64), nullable | Nein | ≥ 0 |
enabled | boolean | Nein | — |
regeneratePassword | boolean | Nein | — |
{
"enabled": false
}Antwort 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"
}Code-Beispiele
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());Unterbenutzer löschen
DELETE/v1/residential/subscriptions/{subscriptionId}/sub-users/{subUserId}
Authentifizierung: API Schlüssel im Authorization: Bearer API_KEY Header.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
subscriptionId | path | string | Ja | — |
subUserId | path | string | Ja | — |
Antwort 204 No Content
Kein Body: Der Statuscode ist die Antwort.
Code-Beispiele
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: doneLänder, in denen ein Produkt verfügbar ist
GET/v1/catalog/countries
Öffentlich: kein API-Schlüssel erforderlich.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
product | query | string | Nein | Auf Standorte begrenzen, an denen dieses Produkt verfügbar ist (residential, mobile, mobile-gb). |
Antwort 200 OK
{
"data": [
{
"code": "AE",
"name": "United Arab Emirates",
"region": "Asia",
"products": [
"residential",
"mobile",
"mobile-gb"
],
"cities": 6,
"asns": 2,
"carriers": 2
}
]
}Code-Beispiele
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());Auswählbare Städte in einem Land
GET/v1/catalog/countries/{countryCode}/cities
Mit product=mobile oder product=mobile-gb nur Städte, in denen 4G/5G-Modems vorhanden sind.
Öffentlich: kein API-Schlüssel erforderlich.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
countryCode | path | string | Ja | ISO 3166-1 alpha-2, Großbuchstaben. |
product | query | string | Nein | Auf Standorte begrenzen, an denen dieses Produkt verfügbar ist (residential, mobile, mobile-gb). |
Antwort 200 OK
{
"data": [
{
"id": "dubai",
"name": "Dubai",
"state": null
}
]
}Code-Beispiele
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());Auswählbare Internetanbieter (ASN) in einem Land — nur Residential
GET/v1/catalog/countries/{countryCode}/asns
Öffentlich: kein API-Schlüssel erforderlich.
Parameter
| Name | In | Typ | Erforderlich | Beschreibung |
|---|---|---|---|---|
countryCode | path | string | Ja | ISO 3166-1 alpha-2, Großbuchstaben. |
Antwort 200 OK
{
"data": [
{
"asn": 7922,
"name": "Comcast Cable"
}
]
}Code-Beispiele
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());