API de Protection DDoS
Référence complète de l'API REST de Protection DDoS de Fusiora — authentification, IP protégées, profils de filtrage, listes d'IP et historique des attaques.
API de protection DDoS — Présentation et authentification
L'API Fusiora DDoS Protection est un wrapper autour de l'Avoro DDoS Manager. Avec elle, vous pouvez inspecter les adresses IP protégées, consulter l'historique des attaques, attacher des profils de filtrage aux IP, gérer des listes d'IP réutilisables et configurer la protection par IP.
Avec elle, vous pouvez :
- Inspecter les adresses IP protégées de votre compte.
- Consulter l'historique des attaques qui ont frappé vos IP.
- Attacher des profils de filtrage (presets + plages de protocole/port) aux IP.
- Gérer des listes d'IP réutilisables avec des entrées WHITELIST / BLACKLIST / TRUST.
- Configurer les paramètres de protection par IP : action par défaut, mode symétrique, ASN blocklist, country blocklist.
URL de base
Tous les endpoints sont sous :
https://dpm.fusiora.comEnvoyez chaque requête vers un chemin sous cette base, par ex. https://dpm.fusiora.com/api/attacks.
Groupes d'endpoints
L'API est organisée autour des ressources que vous gérez :
- Protected IPs —
/api/ips/{ip},/api/ip/{ip}/…— Lire & configurer la protection d'une seule IP. - Filter Profiles —
/api/filters,/api/ip/{ip}/profiles— Parcourir les presets, les attacher/détacher par plage de protocole+port. - IP Lists —
/api/iplists,/api/iplists/{id}/entries— Listes CIDR réutilisables référencées par les profils. - Attacks —
/api/attacks,/api/attacks/{id}/stats— Lire l'historique des attaques et les statistiques temporelles.
Conventions
- Les corps de requête sont en JSON. Envoyez toujours
Content-Type: application/jsonpour les requêtesPOST,PUTetPATCH. - Les réponses réussies renvoient du JSON, sauf
204 No Contentpour les mises à jour et suppressions sans rien à renvoyer. - Les erreurs renvoient du JSON avec un champ
errordécrivant le problème. Voir la Référence pour les codes de statut. - Les endpoints
PATCHsous/api/ip/{ip}/...sont limités à un champ : ils lisent la config IP actuelle, ne modifient que le champ demandé et le réécrivent. Tous les autres paramètres sont préservés.
Authentification
Chaque requête doit inclure votre clé API personnelle dans l'en-tête HTTP x-api-key. Les requêtes sans clé valide sont rejetées avec 401 Unauthorized.
x-api-key: YOUR_API_KEYC'est tout — pas de préfixe Bearer, pas de signature, pas de paramètre d'expiration.
Test rapide
Un appel réussi à /api/attacks confirme que votre clé est valide :
curl -X GET "https://dpm.fusiora.com/api/attacks" \
-H "x-api-key: YOUR_API_KEY"Si la clé est incorrecte ou manquante, vous obtiendrez 401 :
{ "error": "Missing or invalid API key" }Utiliser la clé
Envoyez le même en-tête sur chaque endpoint :
# GET
curl -X GET "https://dpm.fusiora.com/api/ips/85.239.155.11" \
-H "x-api-key: YOUR_API_KEY"
# POST with body
curl -X POST "https://dpm.fusiora.com/api/iplists" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "officevpn"}'
# PATCH with body
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/default-action" \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"defaultAction": "FILTER"}'Garder la clé secrète
- Ne la committez jamais dans un dépôt public. Traitez-la comme un mot de passe.
- Ne l'utilisez pas depuis du JavaScript côté client s'exécutant dans un navigateur — faites plutôt transiter les appels par votre propre backend.
- Faites-la tourner si vous suspectez une fuite.
- Utilisez une clé par environnement (production / staging) quand c'est possible.
Ce que la clé peut faire
La clé est liée à un compte utilisateur et à une liste fixe d'IP côté Avoro. Elle peut faire tout ce que ce compte est autorisé à faire — il n'y a pas de scopes par clé aujourd'hui.
Permissions et propriété
L'API est multi-tenant. Chaque IP et chaque liste d'IP appartient à exactement un compte, et l'API ne vous laisse jamais franchir cette frontière.
Quand vous appelez un endpoint, l'API vérifie :
- La clé est-elle valide ? (Non →
401) - Si l'URL contient une IP — cette IP est-elle sur votre compte ? (Non →
403) - Si l'URL contient un ID de liste — cette liste a-t-elle été créée par votre compte ? (Non →
404)
Pourquoi 403 pour les IP mais 404 pour les listes ?
C'est délibéré.
- Les IP ont une forme connue (
a.b.c.d). Renvoyer403confirme que l'IP existe quelque part, juste pas sur votre compte. C'est acceptable — les IP sont des informations publiques. - Les ID de listes d'IP sont des identifiants numériques internes. Renvoyer
403pour la liste de quelqu'un d'autre permettrait aux attaquants d'énumérer les listes d'autres utilisateurs en essayant des ID en séquence. L'API renvoie donc404 Not Found— indiscernable d'une liste qui n'a jamais existé.
Même logique pour les entrées de liste : supprimer une entrée appartenant à la liste d'un autre utilisateur renvoie 404.
Ce que vous pouvez et ne pouvez pas faire
Vous pouvez :
- Lire n'importe quelle IP de votre compte :
GET /api/ips/{ip}. - Lister, créer, mettre à jour, supprimer vos propres listes d'IP :
/api/iplists/.... - Ajouter / retirer des entrées dans vos propres listes :
/api/iplists/{id}/entries. - Lire les attaques contre vos IP :
GET /api/attacks(les résultats sont filtrés automatiquement sur vos IP). - Référencer une autre de vos propres listes comme entrée imbriquée.
Vous ne pouvez pas :
- Toucher une IP qui n'est pas sur votre compte →
403. - Lire, modifier ou supprimer une liste que vous n'avez pas créée →
404. - Imbriquer une liste appartenant à quelqu'un d'autre dans la vôtre →
400("nested list not found"). - Supprimer une entrée via une URL de liste qui ne possède pas cette entrée →
404.
Portée de l'historique des attaques
L'endpoint /api/attacks est spécial : au lieu d'échouer avec 403, il filtre silencieusement toute attaque dont l'IP de destination n'est pas sur votre compte. Un tableau vide est une réponse valide — cela rend la pagination + le filtrage sûrs à appeler depuis des tâches en arrière-plan sans vérification de propriété par attaque.
Pièges courants
- Mauvaise clé pour le mauvais environnement. Les IP de production et de staging vivent sur des comptes différents. Mélanger les clés produit des
403déroutants. - ID de listes copiés depuis le compte d'un collègue. Utilisez les vôtres.
- Listes imbriquées auto-référentielles. Ajouter la liste
730comme entrée dans la liste730renvoie400.
Étapes suivantes
- Protected IPs — configurer la protection d'une seule IP.
- Filter Profiles — attacher des presets à des plages de protocole + port.
- IP Lists — gérer des listes CIDR réutilisables.
- Attack History — lire les enregistrements et statistiques d'attaques.
- Reference — codes de statut, notation CIDR, types d'action.
Avec l'URL de base, l'authentification x-api-key et le modèle de propriété clairs, vous êtes prêt à explorer le reste de la documentation et à commencer à configurer la protection de vos IP.
IPs protégées
Endpoints pour inspecter et configurer la protection DDoS d'une seule IP attribuée à votre compte.
Tous les endpoints PATCH ci-dessous sont à portée de champ : ils lisent la configuration actuelle de l'IP, modifient uniquement le champ demandé et la réécrivent. Les seuils, les profils de filtre attachés et les autres réglages sont conservés.
Obtenir les détails de l'IP
Renvoie la configuration complète de l'une de vos IPs protégées.
GET /api/ips/{ip}Paramètre de chemin
ip(obligatoire) — Adresse IPv4 que vous possédez (p. ex.85.239.155.11).
Exemple
curl -X GET "https://dpm.fusiora.com/api/ips/85.239.155.11" \
-H "x-api-key: YOUR_API_KEY"Réponse (200 OK)
{
"ID": 1234,
"Ipv4": "85.239.155.11",
"Description": "Game server #1",
"Enabled": true,
"DefaultAction": "FILTER",
"SymmetricMode": "FULL",
"CountryBlockMode": 0,
"CountryBlockList": [],
"AsnBlockMode": 0,
"AsnBlockList": [],
"SynThreshold": 50000,
"UdpThreshold": 50000
}Des seuils de protection supplémentaires peuvent apparaître dans la réponse — ils sont en lecture seule ici. Utilisez les endpoints PATCH dédiés ci-dessous pour modifier les réglages individuels.
Erreurs : 401 clé non valide · 403 IP absente de votre compte · 500 échec en amont.
Action par défaut
L'action par défaut décide de ce qui arrive au trafic sur les ports qui n'ont pas de profil de filtre spécifique. C'est de fait la règle générale d'une IP.
PATCH /api/ip/{ip}/default-actionCorps
{ "defaultAction": "FILTER" }Valeurs
ACCEPT— Protection DDoS désactivée. Seuls les ports avec un profil de filtre sont protégés. À utiliser si vous gérez vous-même la protection — rare.FILTER— Protection standard sur chaque port. Valeur par défaut recommandée. Réglage normal pour les serveurs de production.DROP— Rejette tout le trafic. Seuls les ports avec un filtre attaché laissent passer le trafic. Coupe-circuit : réponse aux incidents, maintenance, configurations à liste d'autorisation stricte.
Exemples
# Standard protection (recommended)
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/default-action" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"defaultAction": "FILTER"}'
# Killswitch
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/default-action" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"defaultAction": "DROP"}'
# Disable protection (accept all)
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/default-action" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"defaultAction": "ACCEPT"}'Réponse (200 OK)
{ "success": true, "message": "Default action set to FILTER", "data": {} }Erreurs : 400 valeur non valide · 401 clé non valide · 403 l'IP n'est pas la vôtre · 500 échec en amont.
Protection symétrique
Filtre à état qui exige que chaque connexion se comporte de manière cohérente dans les deux sens. Efficace contre le trafic usurpé, car les paquets usurpés ne reçoivent jamais de trafic de réponse correspondant.
PATCH /api/ip/{ip}/symmetricCorps
{ "symmetricMode": "FULL" }Valeurs
FULL— Impose l'inspection symétrique. Les flux asymétriques sont défiés ou rejetés. Recommandé.DISABLED— N'impose pas le routage symétrique. À utiliser uniquement si votre réseau est intentionnellement asymétrique.
Exemples
# Enable (recommended)
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/symmetric" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"symmetricMode": "FULL"}'
# Disable
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/symmetric" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"symmetricMode": "DISABLED"}'Réponse (200 OK)
{ "success": true, "message": "Symmetric mode set to FULL", "data": {} }Erreurs : 400 valeur non valide · 401 clé non valide · 403 l'IP n'est pas la vôtre · 500 échec en amont.
Liste de blocage ASN
Filtre le trafic par ASN source (Autonomous System Number). Utile pour bloquer des réseaux abusifs ou verrouiller une IP sur l'ASN d'un fournisseur cloud précis.
La liste est plafonnée à 20 ASN par IP et fonctionne en liste noire ou liste blanche.
PATCH /api/ip/{ip}/asn-blocklistCorps
{
"asnBlockMode": 1,
"asnBlockList": [12345, 67890]
}Modes
0— Disabled — Le filtrage par ASN est désactivé.asnBlockListest ignoré.1— Blacklist — Le trafic des ASN listés est bloqué. Tout le reste est autorisé.2— Whitelist — Seul le trafic des ASN listés est autorisé. Tout le reste est bloqué.
Envoyez les deux champs ensemble. Les numéros d'ASN sont des entiers entre 1 et 4,294,967,295. Pas de préfixe AS — envoyez 13335, pas "AS13335". Les doublons sont dédupliqués côté serveur.
Exemples
# Block two networks
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/asn-blocklist" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"asnBlockMode": 1, "asnBlockList": [12345, 67890]}'
# Whitelist only Cloudflare (AS13335)
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/asn-blocklist" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"asnBlockMode": 2, "asnBlockList": [13335]}'
# Disable
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/asn-blocklist" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"asnBlockMode": 0, "asnBlockList": []}'Réponse (200 OK)
{ "success": true, "message": "ASN blocklist updated", "data": {} }Erreurs : 400 mode non valide / liste non-tableau / >20 entrées / ASN non valide · 401 clé non valide · 403 l'IP n'est pas la vôtre · 500 échec en amont.
Liste de blocage par pays
Filtre le trafic par pays source (GeoIP). La liste est plafonnée à 20 pays par IP et utilise les codes ISO 3166-1 alpha-2.
PATCH /api/ip/{ip}/country-blocklistCorps
{
"countryBlockMode": 1,
"countryBlockList": ["CN", "RU", "KP"]
}Modes
0— Disabled — Le filtrage par pays est désactivé.countryBlockListest ignoré.1— Blacklist — Le trafic des pays listés est bloqué. Tout le reste est autorisé.2— Whitelist — Seul le trafic des pays listés est autorisé. Tout le reste est bloqué.
Les codes ne sont pas sensibles à la casse en entrée et sont stockés en majuscules ("cz" devient "CZ"). Les doublons sont dédupliqués côté serveur.
Exemples
# Block three countries
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/country-blocklist" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"countryBlockMode": 1, "countryBlockList": ["CN", "RU", "KP"]}'
# Whitelist Czechia and Slovakia only
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/country-blocklist" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"countryBlockMode": 2, "countryBlockList": ["CZ", "SK"]}'
# Disable
curl -X PATCH "https://dpm.fusiora.com/api/ip/85.239.155.11/country-blocklist" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"countryBlockMode": 0, "countryBlockList": []}'Réponse (200 OK)
{ "success": true, "message": "Country blocklist updated", "data": {} }Codes pays courants
Codes ISO 3166-1 alpha-2 fréquemment utilisés :
- CZ — Tchéquie
- RU — Russie
- SK — Slovaquie
- CN — Chine
- DE — Allemagne
- UA — Ukraine
- US — États-Unis
- IN — Inde
- GB — Royaume-Uni
- BR — Brésil
- FR — France
- JP — Japon
- PL — Pologne
- KR — Corée du Sud
- NL — Pays-Bas
- AU — Australie
Erreurs : 400 mode non valide / liste non-tableau / >20 entrées / code non valide · 401 clé non valide · 403 l'IP n'est pas la vôtre · 500 échec en amont.
Combinez ces endpoints pour ajuster la protection par IP — définissez une action par défaut judicieuse, imposez l'inspection symétrique et resserrez l'accès avec des listes d'ASN et de pays selon les besoins de votre trafic.
Profils de Filtrage
Un preset de filtrage est un jeu de règles nommé préparé par Fusiora (optimisé pour FiveM, le trafic web, le DNS, etc.). Pour l'utiliser, vous l'associez à une IP en tant que profil de filtrage lié à un protocole et une plage de ports spécifiques.
Un profil est la combinaison de :
- Un preset (le jeu de règles).
- Un protocole (
UDP,TCP,ICMP). - Une plage de ports de destination (
minDstPort–maxDstPort, les deux inclus).
Vous pouvez associer plusieurs profils à une même IP — un par service.
Lister les presets disponibles
GET /api/filtersAucun paramètre de chemin ni de requête.
Exemple
curl -X GET "https://dpm.fusiora.com/api/filters" \
-H "x-api-key: YOUR_API_KEY"Réponse (200 OK)
[
{ "id": 42, "name": "GameUDP", "protocol": "UDP" },
{ "id": 43, "name": "WebTCP", "protocol": "TCP" },
{ "id": 44, "name": "DNS", "protocol": "UDP" }
]Chaque entrée expose exactement ce dont vous avez besoin pour associer un profil :
id— à utiliser commepresetIdlors de l'association.name— nom d'affichage, utile pour les journaux et les tableaux de bord.protocol— protocole pour lequel ce preset est conçu. Doit correspondre auprotocolque vous envoyez.
Erreurs : 401 clé invalide · 500 échec en amont.
Lister les profils associés à une IP
GET /api/ip/{ip}/profilesExemple
curl -X GET "https://dpm.fusiora.com/api/ip/85.239.155.11/profiles" \
-H "x-api-key: YOUR_API_KEY"Réponse (200 OK)
[
{
"ID": 5511,
"PresetID": 42,
"PresetName": "GameUDP",
"Protocol": "UDP",
"MinDstPort": 30120,
"MaxDstPort": 30130,
"Notes": "FiveM"
}
]Erreurs : 401 clé invalide · 403 IP non vôtre · 500 échec en amont.
Associer un profil
POST /api/ip/{ip}/profilesCorps
{
"presetId": 42,
"protocol": "UDP",
"minDstPort": 30120,
"maxDstPort": 30130,
"notes": "FiveM server"
}presetId(obligatoire) — ID issu deGET /api/filters.protocol(obligatoire) — nom du protocole, généralementUDP,TCPouICMP. Doit correspondre au protocole du preset.minDstPort(obligatoire) — borne inférieure des ports de destination, incluse (0–65535).maxDstPort(obligatoire) — borne supérieure, incluse (0–65535). Doit être>= minDstPort.notes(facultatif) — note libre (chaîne, peut être vide).
Exemple — serveur de jeu FiveM
curl -X POST "https://dpm.fusiora.com/api/ip/85.239.155.11/profiles" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{
"presetId": 42,
"protocol": "UDP",
"minDstPort": 30120,
"maxDstPort": 30130,
"notes": "FiveM"
}'Réponse (200 OK)
{
"ID": 5512,
"PresetID": 42,
"Protocol": "UDP",
"MinDstPort": 30120,
"MaxDstPort": 30130,
"Notes": "FiveM server"
}Conservez l'ID — vous en aurez besoin pour supprimer le profil ultérieurement.
Erreurs : 401 clé invalide · 403 IP non vôtre · 500 rejet en amont — preset invalide, profil chevauchant, protocole non concordant. Le message d'erreur inclut la raison en amont.
Supprimer un profil
DELETE /api/ip/{ip}/profiles/{profileId}Le profil doit appartenir à l'IP indiquée dans l'URL — les profils associés à une autre IP ne peuvent pas être supprimés via ce chemin.
Exemple
curl -X DELETE "https://dpm.fusiora.com/api/ip/85.239.155.11/profiles/5512" \
-H "x-api-key: YOUR_API_KEY"Réponse (200 OK)
{
"success": true,
"message": "Profile 5512 deleted from IP 85.239.155.11",
"data": {}
}Erreurs : 401 clé invalide · 403 IP non vôtre · 404 le profil n'appartient pas à cette IP · 500 échec en amont.
Les profils de filtrage sont le moyen d'appliquer les règles de protection de Fusiora exactement là où vous en avez besoin, service par service, sur chacune de vos IP.
Listes d'IP
Les listes d'IP sont des collections nommées et réutilisables d'adresses CIDR que vous pouvez référencer depuis les profils de protection DDoS. Au lieu de dupliquer le même ensemble d'IP dans de nombreux filtres, vous maintenez une seule liste et la mettez à jour à un seul endroit.
Pourquoi les utiliser
- DRY. Une seule modification met à jour tous les filtres qui référencent la liste.
- Composables. Les listes peuvent inclure d'autres listes comme entrées — construisez une hiérarchie (p. ex.
partners→acme-corp+globex). - Expiration par entrée. Les entrées d'adresse peuvent se supprimer automatiquement après
Nsecondes — parfait pour des bannissements à durée limitée.
Types d'action
Chaque entrée a une ipListAction. Elle décide de ce que fait la couche de protection lorsque le trafic correspond.
- WHITELIST — Le trafic est toujours autorisé à passer, même quand d'autres règles le bloqueraient. À utiliser pour des partenaires de confiance ou des services de surveillance. Valeur par défaut si vous n'en définissez aucune.
- BLACKLIST — Le trafic est toujours rejeté. À utiliser pour des attaquants connus ou des blocages fins où le filtrage par pays/ASN est trop large.
- TRUST — Le trafic contourne entièrement tout le filtrage DDoS. À utiliser uniquement pour l'infrastructure interne ou les réseaux dont vous avez le contrôle total.
Soyez prudent avec TRUST. C'est un contournement, pas seulement une règle d'autorisation. À utiliser avec parcimonie.Propriété
- Chaque liste appartient à l'utilisateur qui l'a créée.
- Vous ne pouvez voir, modifier ou supprimer que les listes que vous avez créées.
- Les listes des autres utilisateurs sont signalées comme
404 Not Found— pas403— afin que les ID de liste ne puissent pas être énumérés. - Les références à des listes imbriquées doivent pointer vers une liste que vous possédez également.
Imbrication
Une liste peut contenir une autre liste comme entrée :
{ "listId": 729, "ipListAction": "BLACKLIST" }Deux règles importantes :
- Pas d'auto-référence. Ajouter la liste
730comme entrée de la liste730renvoie400. - Pas de références inter-utilisateurs. La liste imbriquée doit vous appartenir.
Si vous supprimez une liste qu'une autre de vos listes référençait, la référence devient inactive — la liste parente ne génère pas d'erreur, elle ne correspond simplement plus à ce que l'enfant fournissait auparavant.
Limites et quotas
- Max. d'entrées par liste :
1–1,000,000, configurable viamaxEntries. Valeur par défaut :1000. - Format du nom de liste : uniquement
1-64caractères alphanumériques — pas d'espaces, de tirets ni de tirets bas. - Description de liste : jusqu'à
500caractères.
Créer une liste
POST /api/iplistsCorps
{
"name": "officevpn",
"description": "Allowed IPs for office VPN",
"maxEntries": 1000
}- name (obligatoire) —
1-64caractères alphanumériques (a-z, A-Z, 0-9). Pas d'espaces, de tirets ni de tirets bas. - description (facultatif) — Texte libre jusqu'à
500caractères. - maxEntries (facultatif) —
1–1,000,000. Valeur par défaut :1000.
Exemples
# Minimal
curl -X POST "https://dpm.fusiora.com/api/iplists" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"name": "officevpn"}'
# Full
curl -X POST "https://dpm.fusiora.com/api/iplists" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"name": "blockedasns", "description": "Known bad networks", "maxEntries": 5000}'Réponse (201 Created)
{
"ID": 730,
"Name": "officevpn",
"Description": "Allowed IPs for office VPN",
"MaxEntries": 1000,
"EntryCount": 0,
"CreatedAt": "2026-05-13T10:00:00Z"
}Conservez l'ID — vous en aurez besoin pour toute autre opération sur cette liste.
Lister vos listes
GET /api/iplistsParamètres de requête
- includeItems (facultatif) —
"true"pour inclure les entrées en ligne. Omettre ou"false"pour les métadonnées uniquement.
Exemples
# Metadata only
curl -X GET "https://dpm.fusiora.com/api/iplists" \
-H "x-api-key: YOUR_API_KEY"
# With entries
curl -X GET "https://dpm.fusiora.com/api/iplists?includeItems=true" \
-H "x-api-key: YOUR_API_KEY"Réponse (200 OK)
[
{
"ID": 730,
"Name": "officevpn",
"Description": "Allowed IPs for office VPN",
"MaxEntries": 1000,
"EntryCount": 3,
"CreatedAt": "2026-05-13T10:00:00Z",
"UpdatedAt": "2026-05-13T10:05:00Z"
}
]Les listes appartenant à d'autres utilisateurs ne sont jamais renvoyées.
Obtenir une liste
GET /api/iplists/{id}Renvoie les détails complets et les entrées d'une seule liste que vous possédez.
curl -X GET "https://dpm.fusiora.com/api/iplists/730" \
-H "x-api-key: YOUR_API_KEY"Renvoie 404 si la liste n'existe pas ou si vous ne la possédez pas.
Mettre à jour une liste
PUT /api/iplists/{id}Met à jour le name, la description ou le maxEntries de la liste. Pour modifier les entrées elles-mêmes, utilisez les endpoints d'entrées ci-dessous.
Corps
{
"name": "officevpn",
"description": "Updated description",
"maxEntries": 2000
}Exemples
# Rename
curl -X PUT "https://dpm.fusiora.com/api/iplists/730" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"name": "officevpnv2"}'
# Increase capacity
curl -X PUT "https://dpm.fusiora.com/api/iplists/730" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"name": "officevpn", "maxEntries": 5000}'Réponse : 204 No Content. Le corps est vide en cas de succès.
Supprimer une liste
DELETE /api/iplists/{id}Supprime définitivement la liste et toutes ses entrées. Toute référence de profil ou de liste imbriquée devient inactive, alors vérifiez d'abord l'utilisation.
curl -X DELETE "https://dpm.fusiora.com/api/iplists/730" \
-H "x-api-key: YOUR_API_KEY"Réponse : 204 No Content.
Lister les entrées
GET /api/iplists/{id}/entriescurl -X GET "https://dpm.fusiora.com/api/iplists/730/entries" \
-H "x-api-key: YOUR_API_KEY"Réponse (200 OK)
[
{
"ID": 4501,
"address": "203.0.113.5/32",
"ipListAction": "WHITELIST",
"expireAfterSec": 0,
"ipListID": 730
},
{
"ID": 4502,
"address": "198.51.100.0/24",
"ipListAction": "BLACKLIST",
"ipListID": 730
}
]Ajouter une entrée
POST /api/iplists/{id}/entriesUne entrée est soit une adresse (CIDR), soit une liste imbriquée (listId). Fournissez exactement un de ces champs par entrée — jamais les deux, jamais aucun.
Corps — entrée IP/CIDR
{
"address": "203.0.113.5/32",
"ipListAction": "WHITELIST",
"expireAfterSec": 3600
}Corps — référence de liste imbriquée
{
"listId": 729,
"ipListAction": "BLACKLIST"
}- address (l'un de
address/listId) — Un CIDR valide. Les IP uniques doivent être/32(IPv4) ou/128(IPv6). Les zéros en tête sont rejetés (01.2.3.4/32est invalide). - listId (l'un de
address/listId) — ID d'une autre liste d'IP que vous possédez. Ne peut pas être égal à la liste parente. Ne peut pas référencer une liste que vous ne possédez pas. - ipListAction (facultatif) —
WHITELIST,BLACKLISTouTRUST. Valeur par défaut :WHITELIST. - expireAfterSec (facultatif, adresse uniquement) — Supprime l'entrée automatiquement après N secondes. Entier non négatif. Ignoré pour les entrées de liste imbriquée.
Exemples
# Allow a single IP forever
curl -X POST "https://dpm.fusiora.com/api/iplists/730/entries" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"address": "203.0.113.5/32", "ipListAction": "WHITELIST"}'
# Block a /24 subnet
curl -X POST "https://dpm.fusiora.com/api/iplists/730/entries" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"address": "198.51.100.0/24", "ipListAction": "BLACKLIST"}'
# Temporary block — auto-expires in 1 hour
curl -X POST "https://dpm.fusiora.com/api/iplists/730/entries" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"address": "192.0.2.10/32", "ipListAction": "BLACKLIST", "expireAfterSec": 3600}'
# Include another of your lists (nested)
curl -X POST "https://dpm.fusiora.com/api/iplists/730/entries" \
-H "x-api-key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"listId": 729, "ipListAction": "BLACKLIST"}'Réponse (201 Created)
{
"ID": 4503,
"address": "203.0.113.5/32",
"ipListAction": "WHITELIST",
"expireAfterSec": 3600,
"ipListID": 730
}Supprimer une entrée
DELETE /api/iplists/{id}/entries/{entryId}L'entrée doit appartenir à la liste nommée dans l'URL — même si vous connaissez un ID d'entrée d'une autre liste (la vôtre ou celle de quelqu'un d'autre), elle ne peut pas être supprimée via le mauvais parent.
curl -X DELETE "https://dpm.fusiora.com/api/iplists/730/entries/4503" \
-H "x-api-key: YOUR_API_KEY"Réponse : 204 No Content.
Erreurs courantes
- 400 — ID de liste, format de nom, longueur de description ou plage de
maxEntriesinvalides. - 400 —
addressetlistIdenvoyés tous les deux — ou aucun. Envoyez exactement un. - 400 —
addressn'est pas un CIDR valide — vérifiez les zéros en tête. - 400 —
ipListActionn'est pasWHITELIST/BLACKLIST/TRUST. - 400 —
expireAfterSecest négatif ou n'est pas un entier. - 400 —
listIdest égal à l'ID de la liste parente — auto-référence. - 400 — La liste imbriquée référencée n'existe pas ou ne vous appartient pas.
- 401 — Clé API manquante ou invalide.
- 404 — La liste n'existe pas ou ne vous appartient pas — même réponse à dessein, voir Premiers pas.
Avec les listes d'IP, vous centralisez la gestion des adresses de confiance et bloquées en un seul endroit réutilisable, gardant vos profils de protection propres et cohérents.
Historique des attaques
Consultez l'historique des attaques contre vos IP protégées et récupérez les statistiques de séries temporelles de n'importe quelle attaque spécifique.
Les résultats sont automatiquement limités aux IP attribuées à votre compte — vous pouvez appeler ces endpoints librement sans craindre de divulguer les données d'autres locataires.
Obtenir l'historique des attaques
Renvoie la liste des attaques qui ont touché vos IP protégées.
GET /api/attacksParamètres de requête
page(non) — Numéro de page pour la pagination.query(non) — Filtre en texte libre transmis à Avoro (par ex. type d'attaque ou IP).
Exemples
# Latest attacks (page 1)
curl -X GET "https://dpm.fusiora.com/api/attacks" \
-H "x-api-key: YOUR_API_KEY"
# Paginated
curl -X GET "https://dpm.fusiora.com/api/attacks?page=2" \
-H "x-api-key: YOUR_API_KEY"
# Filtered (e.g. only UDP floods)
curl -X GET "https://dpm.fusiora.com/api/attacks?query=UDP" \
-H "x-api-key: YOUR_API_KEY"Réponse (200 OK)
[
{
"ID": 88123,
"DstAddressString": "85.239.155.11",
"Type": "UDP_FLOOD",
"Bps": 12500000000,
"Pps": 8500000,
"StartedAt": "2026-05-13T09:14:22Z",
"EndedAt": "2026-05-13T09:18:55Z"
}
]Chaque élément est un événement d'attaque distinct :
ID— Utilisez-le pour récupérer les statistiques (section suivante).DstAddressString— L'IP ciblée. Toujours l'une des vôtres.Type— Classification de l'attaque (par ex.UDP_FLOOD,SYN_FLOOD, …).Bps— Bande passante de pointe en bits par seconde.Pps— Débit de paquets de pointe en paquets par seconde.StartedAt— Horodatage ISO 8601 du début de l'attaque.EndedAt— Horodatage ISO 8601 de la fin de l'attaque.
Un tableau vide est une réponse parfaitement valide — cela signifie simplement qu'aucune attaque ne correspondait.
Erreurs : 401 clé non valide · 500 échec en amont (le corps inclut un debugId — citez-le dans les tickets de support).
Obtenir les statistiques d'une attaque
Renvoie des statistiques de séries temporelles — échantillons de bande passante et de débit de paquets — pour un événement d'attaque spécifique. Utilisez-les pour tracer la montée en puissance et le déclin d'une attaque.
GET /api/attacks/{id}/statsid(oui) — ID numérique de l'attaque issu deGET /api/attacks.
Exemple
curl -X GET "https://dpm.fusiora.com/api/attacks/88123/stats" \
-H "x-api-key: YOUR_API_KEY"Réponse (200 OK)
{
"AttackID": 88123,
"Samples": [
{ "T": "2026-05-13T09:14:22Z", "Bps": 8000000000, "Pps": 6500000 },
{ "T": "2026-05-13T09:14:32Z", "Bps": 12500000000, "Pps": 8500000 }
]
}Chaque échantillon est une observation unique :
T— Horodatage ISO 8601 de l'échantillon.Bps— Bande passante à ce moment-là, en bits par seconde.Pps— Débit de paquets à ce moment-là, en paquets par seconde.
La cadence entre les échantillons dépend de la durée de l'attaque et de l'échantillonnage en amont — ne supposez pas d'intervalles fixes lors du tracé.
Erreurs : 401 clé non valide · 500 échec en amont.
Avec ces deux endpoints, vous pouvez reconstituer à la fois la vue d'ensemble des attaques récentes et le détail minute par minute de chacune d'elles.
Référence de l'API
Documentation de référence qui complète le reste de la documentation de l'API : les codes de statut HTTP renvoyés par l'API et la notation CIDR utilisée dans chaque entrée IP.
Codes de statut HTTP
L'API Fusiora utilise des codes de statut HTTP standard. Ci-dessous : chaque code renvoyé par l'API, quand vous le verrez et quoi faire.
Succès
200OK — Requête réussie. Le corps de la réponse contient le résultat.201Created — Une nouvelle ressource a été créée. Renvoyé parPOST /api/iplistsetPOST /api/iplists/{id}/entries.204No Content — Mise à jour ou suppression réussie. Le corps de la réponse est vide — n'essayez pas de l'analyser comme du JSON.
Erreurs client
400Bad Request — Le corps ou la requête est mal formé. Le champerrordécrit le problème. Corrigez la charge utile. Vérifiez les enums, les tailles de tableau et les formats de valeur (CIDR, codes pays ISO).401Unauthorized — L'en-têtex-api-keyest absent ou inconnu. Ajoutez l'en-tête. Vérifiez que la clé n'a pas d'espaces de fin ni de mauvais environnement.403Forbidden — La clé est valide, mais l'IP dans l'URL n'est pas attribuée à votre compte. N'utilisez que les IP attribuées à votre compte.404Not Found — La ressource n'existe pas — ou ne vous appartient pas. Les erreurs de propriété sur les listes d'IP sont signalées comme 404 par conception pour empêcher l'énumération des ID. Vérifiez que la ressource existe et que vous l'avez créée.
Erreurs serveur
500Internal Server Error — L'API Avoro en amont a échoué. Le champerrorinclut des détails. Les erreurs de l'historique des attaques incluent undebugId. Réessayez avec un backoff exponentiel. Si cela persiste, contactez le support avec ledebugId.502Bad Gateway — Avoro en amont a renvoyé une réponse inattendue. Réessayez. Si cela persiste, contactez le support.
Arbre de décision rapide
Lorsque vous recevez une réponse autre qu'un succès :
400? Lisez le champerror— il indique l'échec de validation exact. Ne réessayez pas sans corriger la charge utile.401? Ne réessayez pas — corrigez votre en-tête.403? L'IP ne vous appartient pas. Vérifiez l'URL.404? La ressource est absente ou ne vous appartient pas. Revérifiez l'ID.500/502? Réessayez avec un backoff exponentiel. Contactez le support si cela persiste.
Forme de la réponse d'erreur
Toutes les erreurs partagent la même forme JSON :
{ "error": "Description of what went wrong" }Certaines réponses 500 incluent des champs supplémentaires :
{
"error": "Upstream API failed",
"debugId": "abc123-xyz"
}Citez le debugId lorsque vous contactez le support — c'est le moyen le plus rapide pour nous de retrouver votre erreur spécifique.
Notation CIDR
Chaque entrée IP dans l'API Fusiora est donnée en notation CIDR (Classless Inter-Domain Routing) : address/prefix. Le préfixe est le nombre de bits de tête que l'adresse partage.
Une seule IP est /32 pour IPv4 ou /128 pour IPv6. Il n'existe pas de format "IP nue" ; incluez toujours le préfixe.
Référence rapide IPv4
1.2.3.4/32—1.2.3.4uniquement — 1 adresse.192.168.1.0/24—192.168.1.0–192.168.1.255— 256 adresses.10.0.0.0/16—10.0.0.0–10.0.255.255— 65 536 adresses.10.0.0.0/8—10.0.0.0–10.255.255.255— ~16,7 M d'adresses.0.0.0.0/0— Tout l'IPv4 — extrême prudence.
Référence rapide IPv6
2001:db8::1/128— Une seule adresse IPv6.2001:db8::/32— Une allocation FAI typique — des millions de /48.2001:db8::/48— Un seul site / client.
Règles appliquées par l'API
- Incluez toujours le préfixe. Même les IP individuelles ont besoin de
/32ou/128.1.2.3.4seul est rejeté. - Pas de zéros en tête dans les octets.
01.2.3.4/32est invalide. Utilisez1.2.3.4/32. - IPv6 doit être de forme RFC 4291 valide. La forme abrégée compacte
::est acceptée ; les chiffres hexadécimaux en majuscules ou minuscules sont tous deux acceptés.
Modèles courants
- Autoriser l'IP statique de votre bureau —
203.0.113.5/32 - Bloquer un /24 abusif entier —
198.51.100.0/24 - Autoriser toute votre plage VPC AWS —
10.0.0.0/16 - Hôte IPv6 unique —
2001:db8::1/128
Où apparaît CIDR dans l'API
Les chaînes CIDR apparaissent dans le champ address des entrées de listes d'IP — voir Listes d'IP.
Le filtrage par pays et ASN utilise à la place des codes pays et des numéros ASN — ils n'acceptent pas le CIDR. Voir IP protégées pour cela.
Astuce mnémotechnique
Plus le numéro de préfixe est petit, plus la plage est grande :
/32= 1 adresse (la plus petite possible)./24= 256 adresses (un sous-réseau "Classe C" typique)./16= 65 536 adresses./8= ~16,7 millions d'adresses./0= tout l'internet.
En cas de doute, utilisez une calculatrice CIDR en ligne pour vérifier votre plage.
Cet article vous a-t-il été utile ?
Soyez le premier à le noter