# Ports mobiles et rotation IP

> API AfricaProxies : ports 4G/5G, rotation IP immédiate, programmée ou par lien et trafic quotidien. Exemples de code curl, Python et Node.js.

- URL: https://africaproxies.com/fr/docs/api/mobile/
- Dernière mise à jour: 2026-10-15
- Éditeur: AfricaProxies (https://africaproxies.com)

Ports dédiés 4G/5G : changez l’IP immédiatement ou selon un minuteur, utilisez le lien de rotation et consultez le trafic quotidien.

**Points d’accès de cette page**

- `GET /v1/mobile`: Lister les ports mobiles
- `GET /v1/mobile/{portId}`: Consulter un port mobile
- `PATCH /v1/mobile/{portId}`: Renommer, activer ou désactiver le renouvellement, ou configurer la rotation automatique
- `POST /v1/mobile/{portId}/rotate`: Changer l’IP maintenant
- `GET /v1/mobile/{portId}/rotate`: Lien de rotation : GET avec la clé API dans les paramètres de requête
- `POST /v1/mobile/{portId}/reset-password`: Générer un nouveau mot de passe du proxy de ce port
- `GET /v1/mobile/{portId}/usage`: Trafic quotidien du port : données illimitées, sous réserve d’un usage raisonnable
- `GET /v1/catalog/countries/{countryCode}/carriers`: Opérateurs mobiles ayant des ports 4G/5G disponibles dans un pays

URL de base `https://africaproxies.com/api/v1`. Authentification, erreurs et limites : voir la [présentation de l’API](/fr/docs/api/).

## Lister les ports mobiles

`GET /v1/mobile`

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

**Réponse** `200 OK`

```json
{
  "data": [
    {
      "id": "mob_2v8k1q",
      "label": "AE Etisalat #1",
      "status": "active",
      "country": "AE",
      "city": null,
      "carrier": "etisalat",
      "carrierName": "Etisalat",
      "networkType": "4G",
      "currentIp": "203.0.113.201",
      "ipChangedAt": "2026-10-05T14:03:11Z",
      "endpoint": {
        "host": "gw.africaproxies.com",
        "httpPort": 7777,
        "socksPort": 7778
      },
      "username": "USERNAME",
      "password": "PASSWORD",
      "rotation": {
        "mode": "interval",
        "intervalMinutes": 10
      },
      "minRotationIntervalSeconds": 30,
      "rotationLink": "https://africaproxies.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
      "planId": "mob-30d",
      "autoRenew": false,
      "createdAt": "2026-10-05T14:03:11Z",
      "expiresAt": "2026-11-04T14:03:11Z"
    }
  ]
}
```

*curl*

```bash
curl -s "https://africaproxies.com/api/v1/mobile" \
  -H "Authorization: Bearer $API_KEY"
```

*Python*

```python
import os
import requests

API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.get(f"{API}/mobile", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';

const res = await fetch(`${API}/mobile`, {
  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 port mobile

`GET /v1/mobile/{portId}`

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

**Paramètres**

| Nom | Dans | Type | Requis | Description |
| --- | --- | --- | --- | --- |
| `portId` | path | string | Oui | — |

**Réponse** `200 OK`

```json
{
  "id": "mob_2v8k1q",
  "label": "AE Etisalat #1",
  "status": "active",
  "country": "AE",
  "city": null,
  "carrier": "etisalat",
  "carrierName": "Etisalat",
  "networkType": "4G",
  "currentIp": "203.0.113.201",
  "ipChangedAt": "2026-10-05T14:03:11Z",
  "endpoint": {
    "host": "gw.africaproxies.com",
    "httpPort": 7777,
    "socksPort": 7778
  },
  "username": "USERNAME",
  "password": "PASSWORD",
  "rotation": {
    "mode": "interval",
    "intervalMinutes": 10
  },
  "minRotationIntervalSeconds": 30,
  "rotationLink": "https://africaproxies.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
  "planId": "mob-30d",
  "autoRenew": false,
  "createdAt": "2026-10-05T14:03:11Z",
  "expiresAt": "2026-11-04T14:03:11Z"
}
```

*curl*

```bash
curl -s "https://africaproxies.com/api/v1/mobile/mob_2v8k1q" \
  -H "Authorization: Bearer $API_KEY"
```

*Python*

```python
import os
import requests

API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.get(f"{API}/mobile/mob_2v8k1q", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q`, {
  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, activer ou désactiver le renouvellement, ou configurer la rotation automatique

`PATCH /v1/mobile/{portId}`

Renommer le port, activer ou désactiver le renouvellement automatique, ou définir un minuteur de rotation automatique, de toutes les 2 minutes à toutes les 24 heures : `"rotation": { "mode": "interval", "intervalMinutes": 10 }` (2–1440 minutes) ; `"mode": "manual"` le désactive. Sinon, votre port conserve son IP jusqu'à ce que vous le fassiez tourner, bien que l'opérateur puisse le modifier de lui-même de temps en temps.

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

**Paramètres**

| Nom | Dans | Type | Requis | Description |
| --- | --- | --- | --- | --- |
| `portId` | path | string | Oui | — |

**Corps de la requête**

| Champ | Type | Requis | Description |
| --- | --- | --- | --- |
| `label` | string | Non | max. 60 caractères |
| `autoRenew` | boolean | Non | — |
| `rotation` | object | Non | Minuteur de rotation automatique : `{ "mode": "interval", "intervalMinutes": 2–1440 }` pour un intervalle de 2 minutes à 24 heures, ou `{ "mode": "manual", "intervalMinutes": null }` pour une rotation uniquement à la demande. |

*Exemple: Rotation automatique*

```json
{
  "rotation": {
    "mode": "interval",
    "intervalMinutes": 10
  }
}
```

*Exemple: Manuel*

```json
{
  "rotation": {
    "mode": "manual",
    "intervalMinutes": null
  }
}
```

**Réponse** `200 OK`

```json
{
  "id": "mob_2v8k1q",
  "label": "AE Etisalat #1",
  "status": "active",
  "country": "AE",
  "city": null,
  "carrier": "etisalat",
  "carrierName": "Etisalat",
  "networkType": "4G",
  "currentIp": "203.0.113.201",
  "ipChangedAt": "2026-10-05T14:03:11Z",
  "endpoint": {
    "host": "gw.africaproxies.com",
    "httpPort": 7777,
    "socksPort": 7778
  },
  "username": "USERNAME",
  "password": "PASSWORD",
  "rotation": {
    "mode": "interval",
    "intervalMinutes": 10
  },
  "minRotationIntervalSeconds": 30,
  "rotationLink": "https://africaproxies.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
  "planId": "mob-30d",
  "autoRenew": false,
  "createdAt": "2026-10-05T14:03:11Z",
  "expiresAt": "2026-11-04T14:03:11Z"
}
```

*curl*

```bash
curl -s -X PATCH "https://africaproxies.com/api/v1/mobile/mob_2v8k1q" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"rotation":{"mode":"interval","intervalMinutes":10}}'
```

*Python*

```python
import os
import requests

API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.patch(f"{API}/mobile/mob_2v8k1q", headers=HEADERS, json={"rotation": {"mode": "interval", "intervalMinutes": 10}}, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q`, {
  method: 'PATCH',
  headers: { Authorization: `Bearer ${process.env.API_KEY}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ rotation: { mode: 'interval', intervalMinutes: 10 } }),
});
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());
```

## Changer l'IP maintenant

`POST /v1/mobile/{portId}/rotate`

Chaque rotation reconnecte votre port à l'opérateur pour obtenir une nouvelle IP et prend généralement 5–15 secondes ; l'opérateur peut occasionnellement renvoyer la même IP : il suffit de faire tourner à nouveau. Au plus une fois toutes les 30 secondes par port (`minRotationIntervalSeconds`) : une rotation demandée trop tôt renvoie `429 rotation_too_soon` avec `Retry-After` (secondes d'attente).

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

**Paramètres**

| Nom | Dans | Type | Requis | Description |
| --- | --- | --- | --- | --- |
| `portId` | path | string | Oui | — |

**Réponse** `200 OK`

```json
{
  "ip": "203.0.113.201",
  "previousIp": "203.0.113.77",
  "rotatedAt": "2026-10-05T14:03:11Z",
  "nextRotationAvailableAt": "2026-10-05T14:03:41Z"
}
```

*curl*

```bash
curl -s -X POST "https://africaproxies.com/api/v1/mobile/mob_2v8k1q/rotate" \
  -H "Authorization: Bearer $API_KEY"
```

*Python*

```python
import os
import requests

API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.post(f"{API}/mobile/mob_2v8k1q/rotate", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q/rotate`, {
  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());
```

## Lien de rotation (GET avec la clé API dans la chaîne de requête)

`GET /v1/mobile/{portId}/rotate`

Comme `POST`, pour les scripts et favoris : `GET https://africaproxies.com/api/v1/mobile/{portId}/rotate?key=API_KEY`. La clé doit avoir l’autorisation `proxies`. Le paramètre `format=text` renvoie la nouvelle IP en `text/plain`.

Authentification : clé API dans le paramètre de requête `key` (portée `proxies`), le lien fonctionne donc à partir d'un marque-page.

**Paramètres**

| Nom | Dans | Type | Requis | Description |
| --- | --- | --- | --- | --- |
| `key` | query | string | Oui | Votre clé API avec l’autorisation `proxies`. |
| `portId` | path | string | Oui | — |
| `format` | query | `json` · `text` | Non | par défaut `json` |

**Réponse** `200 OK`

```json
{
  "ip": "203.0.113.201",
  "previousIp": "203.0.113.77",
  "rotatedAt": "2026-10-05T14:03:11Z",
  "nextRotationAvailableAt": "2026-10-05T14:03:41Z"
}
```

*curl*

```bash
curl -s "https://africaproxies.com/api/v1/mobile/mob_2v8k1q/rotate?key=$API_KEY&format=text"
```

*Python*

```python
import os
import requests

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

r = requests.get(f"{API}/mobile/mob_2v8k1q/rotate", params={"key": os.environ["API_KEY"], "format": "text"}, timeout=30)
r.raise_for_status()
print(r.text)
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q/rotate?key=${process.env.API_KEY}&format=text`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.text());
```

## Générer un nouveau mot de passe proxy pour le port

`POST /v1/mobile/{portId}/reset-password`

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

**Paramètres**

| Nom | Dans | Type | Requis | Description |
| --- | --- | --- | --- | --- |
| `portId` | path | string | Oui | — |

**Réponse** `200 OK`

```json
{
  "id": "mob_2v8k1q",
  "label": "AE Etisalat #1",
  "status": "active",
  "country": "AE",
  "city": null,
  "carrier": "etisalat",
  "carrierName": "Etisalat",
  "networkType": "4G",
  "currentIp": "203.0.113.201",
  "ipChangedAt": "2026-10-05T14:03:11Z",
  "endpoint": {
    "host": "gw.africaproxies.com",
    "httpPort": 7777,
    "socksPort": 7778
  },
  "username": "USERNAME",
  "password": "PASSWORD",
  "rotation": {
    "mode": "interval",
    "intervalMinutes": 10
  },
  "minRotationIntervalSeconds": 30,
  "rotationLink": "https://africaproxies.com/api/v1/mobile/mob_2v8k1q/rotate?key=API_KEY",
  "planId": "mob-30d",
  "autoRenew": false,
  "createdAt": "2026-10-05T14:03:11Z",
  "expiresAt": "2026-11-04T14:03:11Z"
}
```

*curl*

```bash
curl -s -X POST "https://africaproxies.com/api/v1/mobile/mob_2v8k1q/reset-password" \
  -H "Authorization: Bearer $API_KEY"
```

*Python*

```python
import os
import requests

API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.post(f"{API}/mobile/mob_2v8k1q/reset-password", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q/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());
```

## Trafic quotidien du port : à titre indicatif, données illimitées sous réserve d’un usage raisonnable

`GET /v1/mobile/{portId}/usage`

Pour information uniquement. Données illimitées sur votre port dédié, sous réserve d'une utilisation équitable : l'opérateur peut ralentir ou suspendre une utilisation très intensive.

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

**Paramètres**

| Nom | Dans | Type | Requis | Description |
| --- | --- | --- | --- | --- |
| `portId` | 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. |

**Réponse** `200 OK`

```json
{
  "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
    }
  ]
}
```

*curl*

```bash
curl -s "https://africaproxies.com/api/v1/mobile/mob_2v8k1q/usage" \
  -H "Authorization: Bearer $API_KEY"
```

*Python*

```python
import os
import requests

API = "https://africaproxies.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['API_KEY']}"}

r = requests.get(f"{API}/mobile/mob_2v8k1q/usage", headers=HEADERS, timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';

const res = await fetch(`${API}/mobile/mob_2v8k1q/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());
```

## Opérateurs mobiles avec ports 4G/5G disponibles dans un pays

`GET /v1/catalog/countries/{countryCode}/carriers`

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`

```json
{
  "data": [
    {
      "id": "etisalat",
      "name": "Etisalat",
      "networkTypes": [
        "4G",
        "5G"
      ],
      "available": true,
      "cities": []
    }
  ]
}
```

*curl*

```bash
curl -s "https://africaproxies.com/api/v1/catalog/countries/AE/carriers"
```

*Python*

```python
import os
import requests

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

r = requests.get(f"{API}/catalog/countries/AE/carriers", timeout=30)
r.raise_for_status()
print(r.json())
```

*Node.js*

```javascript
// Node.js 18+ (built-in fetch), ES module
const API = 'https://africaproxies.com/api/v1';

const res = await fetch(`${API}/catalog/countries/AE/carriers`);
if (!res.ok) throw new Error((await res.json()).error?.message ?? `HTTP ${res.status}`);
console.log(await res.json());
```

---

AfricaProxies: AfricaProxies est un fournisseur de proxies résidentiels pour l’Afrique subsaharienne, avec paiement en crypto et sans transmettre de pièce d’identité.
