Documentation API
L’API REST PanneCI expose l’état de vos services, vos incidents et les signalements reçus. Toutes les réponses sont en JSON, encodées en UTF-8.
Authentification
Chaque requête porte votre clé API dans l’en-tête X-API-Key.
La clé est générée depuis votre espace entreprise, onglet
Clés API. Elle identifie votre entreprise et porte ses propres
permissions.
curl https://api.panneci.com/v1/services \
-H "X-API-Key: VOTRE_CLE_API"
Entreprises
Fiche publique d’une entreprise et état courant de ses services.
{
"slug": "orange-cote-divoire",
"nom": "Orange Côte d’Ivoire",
"secteur": "Télécoms & Internet",
"statut": "panne",
"signalements_24h": 2847,
"note_moyenne": 2.8,
"services": [
{ "id": 1, "nom": "Réseau mobile", "statut": "panne" },
{ "id": 2, "nom": "Internet fixe", "statut": "perturbe" }
]
}
Services
Liste de vos services et de leur état courant.
Met à jour l’état d’un service. Valeurs acceptées :
operationnel, perturbe, panne,
maintenance. Nécessite la permission ecriture.
curl -X PUT https://api.panneci.com/v1/services/1/statut \
-H "X-API-Key: VOTRE_CLE_API" \
-H "Content-Type: application/json" \
-d '{"statut": "maintenance"}'
Incidents
Déclare un incident. Il apparaît immédiatement sur votre page d’état publique.
{
"service_id": 1,
"titre": "Coupure du réseau mobile — district d’Abidjan",
"description": "Rupture de fibre sur la liaison Abidjan–Yamoussoukro.",
"gravite": "critique",
"etat": "ouvert"
}
Publie une mise à jour sur un incident en cours. Chaque message est horodaté et affiché dans le fil public de l’incident.
Signalements
Signalements reçus sur un service, agrégés par tranche de 15 minutes. Les données individuelles ne sont jamais exposées : ni identité, ni adresse IP, seulement le volume et la commune.
{
"service_id": 1,
"total": 2847,
"seuil_alerte": 68,
"points": [
{ "debut": "2026-09-21T14:00:00Z", "nombre": 412 },
{ "debut": "2026-09-21T14:15:00Z", "nombre": 587 }
],
"par_commune": [
{ "commune": "Yopougon", "nombre": 2140 }
]
}
Webhooks
Déclarez une URL en https:// depuis l’onglet Alertes.
Nous y envoyons une requête POST dès qu’un seuil est franchi.
Chaque envoi porte un en-tête X-PanneCI-Signature :
un HMAC SHA-256 du corps, calculé avec votre secret de webhook.
Vérifiez-le avant de traiter la requête.
{
"evenement": "seuil_depasse",
"service_id": 1,
"service": "Réseau mobile",
"signalements_15min": 587,
"seuil": 68,
"horodatage": "2026-09-21T14:15:00Z"
}
Codes d’erreur
| Code | Signification | Que faire |
|---|---|---|
| 401 | Clé absente ou invalide | Vérifiez l’en-tête X-API-Key. |
| 403 | Permission manquante | La clé n’a pas le droit demandé. Ajoutez-le depuis votre espace. |
| 404 | Ressource introuvable | Vérifiez l’identifiant ou le slug. |
| 422 | Données invalides | La réponse liste les champs fautifs dans champs. |
| 429 | Quota dépassé | Attendez la réinitialisation indiquée par Retry-After. |
| 500 | Erreur interne | Réessayez ; si le problème persiste, contactez le support. |
Une erreur 422 renvoie le détail par champ, dans le même vocabulaire que les formulaires du site :
{
"erreur": "Données invalides.",
"champs": {
"gravite": "Niveau de gravité inconnu.",
"description": "La description doit contenir au moins 10 caractères."
}
}
Limites d’usage
| Formule | Appels par mois | Débit |
|---|---|---|
| Gratuit | 5 000 | 10 requêtes / minute |
| Pro | 100 000 | 60 requêtes / minute |
| Entreprise | Illimité | 600 requêtes / minute |
Chaque réponse porte les en-têtes X-RateLimit-Limit,
X-RateLimit-Remaining et X-RateLimit-Reset.