Pas de KYC — aucune pièce d’identité, aucun selfie, aucun document
Langue: Français
Choisir 1 GB

Référence API

Commandes

Consultez les forfaits et leurs prix, achetez sur le solde (nouveau service, trafic supplémentaire ou prolongation d’un port) et retrouvez vos commandes.

Dernière mise à jour: · 5 min de lecture

Points d’accès de cette page

  • GET /v1/catalog/products: Produits, forfaits et prix
  • POST /v1/orders: Acheter un forfait sur le solde : service, trafic ou prolongation d’un port
  • GET /v1/orders: Lister les commandes
  • GET /v1/orders/{orderId}: Consulter une commande

URL de base https://africaproxies.com/api/v1. Authentification, erreurs et limites : voir la présentation de l’API.

Produits, forfaits et prix

GET/v1/catalog/products

Chaque produit, ses forfaits et ses prix, tels qu’ils sont facturés lors de la commande.

Public : aucune clé API requise.

Réponse 200 OK

{
  "data": [
    {
      "id": "residential",
      "name": "Residential proxies",
      "description": "Residential IPs across 49 African locations for public price research, local SEO and your application tests. Prepaid traffic, billed per GB.",
      "unit": "GB",
      "plans": [
        {
          "id": "res-10",
          "productId": "residential",
          "name": "Team",
          "quantity": 10,
          "unit": "GB",
          "durationDays": null,
          "price": "5.94",
          "pricePerUnit": "0.59",
          "popular": false,
          "features": [
            "Prepaid traffic never expires",
            "Country and city where available",
            "Project credentials and traffic caps"
          ],
          "available": true,
          "countries": null
        }
      ]
    }
  ]
}

Exemples de code

curl
curl -s "https://africaproxies.com/api/v1/catalog/products"
Python
import os
import requests

API = "https://africaproxies.com/api/v1"

r = requests.get(f"{API}/catalog/products", 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/products`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());

Acheter un forfait sur le solde : nouveau service, trafic supplémentaire ou prolongation d’un port

POST/v1/orders

Le paiement utilise toujours le solde prépayé. L’API calcule le prix (tarif du catalogue × quantity), débite le solde, crée ou prolonge le service, puis renvoie la commande completed avec son fulfillment. Les identifiants des proxies sont disponibles immédiatement.

  • Nouveau trafic résidentiel : { "planId": "res-10" }.
  • Nouveau trafic à rotation 4G/5G par GB : { "planId": "mgb-10" }, un abonnement de trafic avec productId: "mobile-gb", livré dans fulfillment.residentialSubscriptionId.
  • Ajouter du trafic à un abonnement existant : { "planId": "res-10", "options": { "subscriptionId": "res_9x2m4k" } }. Le forfait doit correspondre au produit de l’abonnement.
  • Nouveaux ports mobiles : { "planId": "mob-30d", "quantity": 1, "options": { "country": "AE" } }, avec carrier en option. Voir les opérateurs du pays dans Ports mobiles. Les forfaits de zone couvrent uniquement les pays de leur zone, sinon 422 sur options.country.
  • Prolonger un port mobile : { "planId": "mob-7d", "options": { "portId": "mob_2v8k1q" } } ajoute la durée du forfait à expiresAt.

Solde insuffisant → 402 insufficient_balance, avec le montant manquant et un rechargement suggéré dans error.details (missing, suggestedTopUp). Aucune erreur ne provoque de débit. Pour payer la différence, créez un rechargement portant la même demande dans purchase (POST /v1/topups) : le forfait est acheté dès que le rechargement est crédité.

Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.

Paramètres

NomDansTypeRequisDescription
Idempotency-KeyheaderstringNonClé unique, par exemple un UUID, pour renouveler une requête POST sans doublon. Conservée 24 h. — 128 caractères max.

Corps de la requête

ChampTypeRequisDescription
planIdstringOui—
quantityintegerNon1–100, par défaut 1
optionsobjectNon—
Exemple: Résidentiel
{
  "planId": "res-10"
}
Exemple: Ports mobiles
{
  "planId": "mob-30d",
  "quantity": 1,
  "options": {
    "country": "AE",
    "carrier": "etisalat",
    "autoRenew": true
  }
}
Exemple: Prolonger le port
{
  "planId": "mob-7d",
  "options": {
    "portId": "mob_2v8k1q"
  }
}
Exemple: Trafic mobile
{
  "planId": "mgb-10"
}
Exemple: Port de zone
{
  "planId": "mob-30d",
  "options": {
    "country": "AE",
    "carrier": "etisalat"
  }
}

Réponse 201 Created

{
  "id": "ord_4f8k2m9q",
  "status": "completed",
  "productId": "residential",
  "planId": "res-10",
  "planName": "Team",
  "quantity": 1,
  "unitPrice": "5.94",
  "subtotal": "5.94",
  "discount": "0.00",
  "total": "5.94",
  "promoCode": null,
  "currency": "USD",
  "topUpId": null,
  "options": {},
  "fulfillment": {
    "residentialSubscriptionId": "res_9x2m4k",
    "mobilePortIds": []
  },
  "createdAt": "2026-10-05T14:03:11Z",
  "paidAt": "2026-10-05T14:03:11Z"
}

Exemples de code

curl
curl -s -X POST "https://africaproxies.com/api/v1/orders" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"planId":"res-10"}'
Python
import os, uuid
import requests

API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}", "Idempotency-Key": str(uuid.uuid4())}

r = requests.post(f"{API}/orders", headers=HEADERS, json={"planId": "res-10"}, timeout=30)
r.raise_for_status()
print(r.json())
Node.js
// Node.js 18+ (built-in fetch), ES module
import { randomUUID } from 'node:crypto';

const API = 'https://africaproxies.com/api/v1';

const res = await fetch(`${API}/orders`, {
  method: 'POST',
  headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Idempotency-Key': randomUUID(), 'Content-Type': 'application/json' },
  body: JSON.stringify({ planId: 'res-10' }),
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());

Lister les commandes

GET/v1/orders

Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.

Paramètres

NomDansTypeRequisDescription
pagequeryintegerNon≥ 1, par défaut 1
perPagequeryintegerNon1–100, par défaut 20
statusquerycompleted · cancelledNonLes commandes sont créées déjà payées (débitées du solde). completed — payées et livrées (identifiants de connexion disponibles immédiatement).
productIdquerystringNonIdentifiant de produit du catalogue. Valeurs pour AfricaProxies : residential (GB), mobile (ports dédiés 4G/5G) et mobile-gb (trafic mobile à rotation 4G/5G par GB). Les clients doivent accepter la présence de valeurs inconnues.

Réponse 200 OK

{
  "data": [
    {
      "id": "ord_4f8k2m9q",
      "status": "completed",
      "productId": "residential",
      "planId": "res-10",
      "planName": "Team",
      "quantity": 1,
      "unitPrice": "5.94",
      "subtotal": "5.94",
      "discount": "0.00",
      "total": "5.94",
      "promoCode": null,
      "currency": "USD",
      "topUpId": null,
      "options": {},
      "fulfillment": {
        "residentialSubscriptionId": "res_9x2m4k",
        "mobilePortIds": []
      },
      "createdAt": "2026-10-05T14:03:11Z",
      "paidAt": "2026-10-05T14:03:11Z"
    }
  ],
  "pagination": {
    "page": 1,
    "perPage": 20,
    "total": 1,
    "totalPages": 1
  }
}

Exemples de code

curl
curl -s "https://africaproxies.com/api/v1/orders" \
  -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}/orders", 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}/orders`, {
  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 une commande

GET/v1/orders/{orderId}

Authentification : clé API dans l'en-tête Authorization: Bearer API_KEY.

Paramètres

NomDansTypeRequisDescription
orderIdpathstringOui—

Réponse 200 OK

{
  "id": "ord_4f8k2m9q",
  "status": "completed",
  "productId": "residential",
  "planId": "res-10",
  "planName": "Team",
  "quantity": 1,
  "unitPrice": "5.94",
  "subtotal": "5.94",
  "discount": "0.00",
  "total": "5.94",
  "promoCode": null,
  "currency": "USD",
  "topUpId": null,
  "options": {},
  "fulfillment": {
    "residentialSubscriptionId": "res_9x2m4k",
    "mobilePortIds": []
  },
  "createdAt": "2026-10-05T14:03:11Z",
  "paidAt": "2026-10-05T14:03:11Z"
}

Exemples de code

curl
curl -s "https://africaproxies.com/api/v1/orders/ord_4f8k2m9q" \
  -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}/orders/ord_4f8k2m9q", 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}/orders/ord_4f8k2m9q`, {
  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());

1 GB 1,23 $US · Recharge du compte à partir de 25 $US

Choisir 1 GB