API — Réseau
Documentation des endpoints réseau et infrastructure RGZ.
VLAN & Network
GET /api/v1/network/vlans
Liste de tous les VLANs alloués.
bash
curl -H "Authorization: Bearer $JWT" \
https://api-rgz.duckdns.org/api/v1/network/vlansRéponse 200:
json
{
"items": [
{
"vlan_id": 142,
"reseller_id": "uuid",
"reseller_name": "Kossou",
"subnet": "10.142.0.0/24",
"nas_id": "access_kossou",
"ssid": "ACCESS Kossou",
"created_at": "2026-02-01T10:30:00Z"
}
],
"total": 12,
"page": 1,
"pages": 1
}POST /api/v1/network/vlan/allocate
Allouer un VLAN à un nouveau revendeur (admin).
bash
curl -X POST -H "Authorization: Bearer $ADMIN_JWT" \
https://api-rgz.duckdns.org/api/v1/network/vlan/allocate \
-d '{
"reseller_id": "uuid",
"reseller_name": "Kossou",
"site_count": 1
}'Réponse 201:
json
{
"vlan_id": 142,
"subnet": "10.142.0.0/24",
"nas_id": "access_kossou",
"ssid": "ACCESS Kossou"
}Erreurs:
| Code | Description |
|---|---|
ERR_VLAN_POOL_EXHAUSTED | Pas de VLAN disponible (max 400) |
ERR_DUPLICATE_NAS_ID | NAS-ID déjà alloué |
Sites Multi-Site (V2/V3)
POST /api/v1/network/sites
Ajouter un site pour revendeur multi-site.
bash
curl -X POST -H "Authorization: Bearer $JWT" \
https://api-rgz.duckdns.org/api/v1/network/sites \
-d '{
"reseller_id": "uuid",
"site_number": 2,
"city": "Parakou",
"latitude": 9.3417,
"longitude": 2.6167
}'Réponse 201:
json
{
"site_id": "uuid",
"reseller_id": "uuid",
"nas_id": "access_[slug]_s2",
"ssid": "ACCESS [Nom] Parakou",
"ap_ip": "10.[vlan].0.2"
}GET /api/v1/network/sites/
Lister tous les sites d'un revendeur.
bash
curl -H "Authorization: Bearer $JWT" \
https://api-rgz.duckdns.org/api/v1/network/sites/{reseller_id}Branding
GET /api/v1/branding/
Récupérer la config branding d'un hotspot (public).
bash
curl https://api-rgz.duckdns.org/api/v1/branding/access_kossouRéponse 200:
json
{
"nas_id": "access_kossou",
"reseller_name": "Kossou",
"logo_url": "https://cdn.rgz.local/logos/kossou.png",
"primary_color": "#f5c445",
"secondary_color": "#3f68ae",
"banner_rotation_seconds": 8,
"custom_css": "..."
}PUT /api/v1/branding/
Mettre à jour le branding (revendeur).
bash
curl -X PUT -H "Authorization: Bearer $JWT" \
https://api-rgz.duckdns.org/api/v1/branding/access_kossou \
-d '{
"primary_color": "#da3747",
"logo_url": "https://..."
}'DNS & Sinkhole
GET /api/v1/network/dns/status
État du système DNS avec sinkhole.
bash
curl -H "Authorization: Bearer $JWT" \
https://api-rgz.duckdns.org/api/v1/network/dns/statusRéponse 200:
json
{
"unbound_healthy": true,
"blocklist_count": 125000,
"sinkhole_ip": "10.0.0.1",
"last_update": "2026-02-21T05:00:00Z"
}Gateway Rules (nftables)
GET /api/v1/network/gateway/rules
Lister les règles nftables actives (admin).
bash
curl -H "Authorization: Bearer $JWT" \
https://api-rgz.duckdns.org/api/v1/network/gateway/rules?vlan=142Réponse 200:
json
{
"items": [
{
"id": "uuid",
"vlan": 142,
"rule_type": "DENY_DEFAULT",
"description": "Deny all by default",
"active": true
}
]
}Dernière mise à jour: 2026-02-21