Kein KYC — kein Ausweis, kein Selfie, keine Dokumente
Sprache: Deutsch
1 GB wählen

API-Referenz

Residential-Proxys und Zugangsdaten

Datenabos verwalten (Residential sowie rotierendes 4G/5G pro GB): Proxy-Zugangsdaten, Unterbenutzer mit eigenen Zugangsdaten und Datenlimit, Tagesverbrauch sowie Standorte für die Auswahl im Proxy-Benutzernamen.

Zuletzt aktualisiert: · 10 Min. Lesezeit

Endpunkte auf dieser Seite

  • GET /v1/residential/subscriptions: Datenabos auflisten (Residential und rotierendes Mobile pro GB)
  • GET /v1/residential/subscriptions/{subscriptionId}: Residential-Abo abrufen
  • PATCH /v1/residential/subscriptions/{subscriptionId}: Umbenennen oder automatische Verlängerung umschalten
  • POST /v1/residential/subscriptions/{subscriptionId}/reset-password: Neues Proxy-Passwort für den Hauptbenutzer erzeugen
  • GET /v1/residential/subscriptions/{subscriptionId}/usage: Täglicher Datenverbrauch
  • GET /v1/residential/subscriptions/{subscriptionId}/sub-users: Unterbenutzer auflisten (eigene Proxy-Zugangsdaten und eigenes Datenlimit)
  • POST /v1/residential/subscriptions/{subscriptionId}/sub-users: Unterbenutzer erstellen
  • PATCH /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öschen
  • GET /v1/catalog/countries: Länder, in denen ein Produkt verfügbar ist
  • GET /v1/catalog/countries/{countryCode}/cities: Auswählbare Städte in einem Land
  • GET /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

NameInTypErforderlichBeschreibung
productIdqueryresidential · mobile-gbNeinNur 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
curl -s "https://africaproxies.com/api/v1/residential/subscriptions" \
  -H "Authorization: Bearer $API_KEY"
Python
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
// 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

NameInTypErforderlichBeschreibung
subscriptionIdpathstringJa—

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
curl -s "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k" \
  -H "Authorization: Bearer $API_KEY"
Python
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
// 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

NameInTypErforderlichBeschreibung
subscriptionIdpathstringJa—

Anfragekörper

FeldTypErforderlichBeschreibung
labelstringNeinmax. 60 Zeichen
autoRenewbooleanNein—
Beispiel
{
  "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
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}'
Python
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
// 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

NameInTypErforderlichBeschreibung
subscriptionIdpathstringJa—

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
curl -s -X POST "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k/reset-password" \
  -H "Authorization: Bearer $API_KEY"
Python
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
// 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

NameInTypErforderlichBeschreibung
subscriptionIdpathstringJa—
fromquerystring (date)NeinErster Tag (UTC), einschließlich. Standard = 29 Tage vor to.
toquerystring (date)NeinLetzter Tag (UTC), einschließlich. Standard = heute. Höchstens 366 Tage.
subUserIdquerystringNeinAuf 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
curl -s "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k/usage" \
  -H "Authorization: Bearer $API_KEY"
Python
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
// 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

NameInTypErforderlichBeschreibung
subscriptionIdpathstringJa—

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
curl -s "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k/sub-users" \
  -H "Authorization: Bearer $API_KEY"
Python
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
// 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

NameInTypErforderlichBeschreibung
subscriptionIdpathstringJa—

Anfragekörper

FeldTypErforderlichBeschreibung
labelstringJamax. 60 Zeichen
passwordstringNeinWird erzeugt, wenn nicht angegeben. — max. 64 Zeichen
trafficLimitBytesinteger (int64), nullableNein≥ 0
Beispiel
{
  "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
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}'
Python
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
// 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

NameInTypErforderlichBeschreibung
subscriptionIdpathstringJa—
subUserIdpathstringJa—

Anfragekörper

FeldTypErforderlichBeschreibung
labelstringNeinmax. 60 Zeichen
trafficLimitBytesinteger (int64), nullableNein≥ 0
enabledbooleanNein—
regeneratePasswordbooleanNein—
Beispiel
{
  "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
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}'
Python
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
// 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

NameInTypErforderlichBeschreibung
subscriptionIdpathstringJa—
subUserIdpathstringJa—

Antwort 204 No Content

Kein Body: Der Statuscode ist die Antwort.

Code-Beispiele

curl
curl -s -X DELETE "https://africaproxies.com/api/v1/residential/subscriptions/res_9x2m4k/sub-users/sub_3m9qk2" \
  -H "Authorization: Bearer $API_KEY"
Python
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
// 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: done

Länder, in denen ein Produkt verfügbar ist

GET/v1/catalog/countries

Öffentlich: kein API-Schlüssel erforderlich.

Parameter

NameInTypErforderlichBeschreibung
productquerystringNeinAuf 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
curl -s "https://africaproxies.com/api/v1/catalog/countries"
Python
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
// 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

NameInTypErforderlichBeschreibung
countryCodepathstringJaISO 3166-1 alpha-2, Großbuchstaben.
productquerystringNeinAuf 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
curl -s "https://africaproxies.com/api/v1/catalog/countries/AE/cities"
Python
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
// 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

NameInTypErforderlichBeschreibung
countryCodepathstringJaISO 3166-1 alpha-2, Großbuchstaben.

Antwort 200 OK

{
  "data": [
    {
      "asn": 7922,
      "name": "Comcast Cable"
    }
  ]
}

Code-Beispiele

curl
curl -s "https://africaproxies.com/api/v1/catalog/countries/AE/asns"
Python
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
// 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());

1 GB 1,23 $ · Kontoguthabenaufladung ab 25 $

1 GB wählen