Skip to content

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/vlans

Ré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:

CodeDescription
ERR_VLAN_POOL_EXHAUSTEDPas de VLAN disponible (max 400)
ERR_DUPLICATE_NAS_IDNAS-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_kossou

Ré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/status

Ré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=142

Ré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

PROJET MOSAÏQUE — 81 outils, 22 conteneurs, 500+ revendeurs WiFi Zone