API REST · v1

Intégrez Fiabli à votre stack en 5 minutes

L'API REST de Fiabli vous permet d'analyser n'importe quel email et d'obtenir un verdict safe / suspect / phishing avec score, indicateurs et recommandation. Idéale pour ESP, CRM, helpdesk, gateway mail.

~200ms
Temps de réponse moyen
99,9%
SLA disponibilité
🇫🇷 RGPD
Hébergé en France

Présentation

L'API Fiabli est une API REST JSON sur HTTPS. Toutes les requêtes/réponses sont en application/json (UTF-8). Les dates sont au format ISO 8601.

Base URL

https://fiabli.io/api/v1

Conventions

  • Toutes les réponses suivent le format { success: bool, data?: object, error?: object }
  • Les erreurs incluent un code machine et un message humain
  • Pagination via ?limit (max 200) et ?offset
  • Headers de quota retournés à chaque appel : X-Quota-Used, X-Quota-Limit, X-Quota-Remaining

Authentification

L'API utilise des clés Bearer au format fb_live_* (production) ou fb_test_* (sandbox). Créez une clé depuis votre tableau de bord — chaque clé peut avoir des scopes restrictifs (read, write, admin).

Authorization: Bearer fb_live_a8f3k2x9...
Sécurité : ne jamais commiter une clé API dans le code source. Utilisez des variables d'environnement (.env, secret manager, AWS Secrets, Vault).

Quickstart — 1 requête, 1 verdict

Choisissez votre langage et copiez l'exemple ci-dessous. Remplacez fb_live_xxx par votre vraie clé.

# Analyse d'un mail suspect
curl -X POST https://fiabli.io/api/v1/analyze \
  -H "Authorization: Bearer fb_live_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "URGENT - Mise à jour carte vitale",
    "from": "noreply@am3li-secure.com",
    "to": "compta@example.fr",
    "body_text": "Cher assuré, votre carte vitale expire. Cliquez ici : https://am3li-renew.com/login",
    "urls": ["https://am3li-renew.com/login"]
  }'
import requests

response = requests.post(
    "https://fiabli.io/api/v1/analyze",
    headers={"Authorization": "Bearer fb_live_xxxxxxxxxxxx"},
    json={
        "subject": mail.subject,
        "from": mail.from_email,
        "to": mail.to_email,
        "body_text": mail.body,
    }
)
result = response.json()
if result["data"]["verdict"] == "phishing":
    quarantine(mail)
const r = await fetch("https://fiabli.io/api/v1/analyze", {
  method: "POST",
  headers: {
    "Authorization": "Bearer fb_live_xxxxxxxxxxxx",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    subject: mail.subject,
    from: mail.from,
    body_text: mail.bodyText
  })
});
const { data } = await r.json();
if (data.verdict === "phishing") quarantine(mail);
$ch = curl_init("https://fiabli.io/api/v1/analyze");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer fb_live_xxxxxxxxxxxx",
        "Content-Type: application/json"
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "subject" => $mail->subject,
        "from" => $mail->from,
        "body_text" => $mail->body
    ])
]);
$result = json_decode(curl_exec($ch), true);

Réponse

{
  "success": true,
  "data": {
    "analysis_id": "fa_a8f3k2x9",
    "verdict": "phishing",
    "score": 0.92,
    "confidence": 0.88,
    "model": "fiabli-detect-v1",
    "reasons": [
      "Domaine expéditeur typosquatté de ameli.fr (am3li-secure.com)",
      "URL suspecte avec demande de credentials (am3li-renew.com)",
      "Urgence artificielle classique du phishing"
    ],
    "indicators": {
      "impersonation": true,
      "urgency_pressure": true,
      "suspicious_links": true,
      "credential_request": true,
      "brand_spoofing": "Ameli"
    },
    "cost_eur": 0.0021
  },
  "quota": { "used": 47, "limit": 1000, "remaining": 953 }
}

Endpoints

POST/v1/analyze

Analyse un email et retourne un verdict safe, suspicious ou phishing avec score, indicateurs et recommandation.

Corps de la requête

ChampTypeDescription
subjectrequisstringSujet du mail
fromrequisstringEmail de l'expéditeur
tooptstringEmail du destinataire (utile pour règles tenant)
body_textrequisstringCorps texte (max 4000 chars analysés par le LLM)
body_htmloptstringCorps HTML (extraction URLs renforcée)
urlsoptarray<string>URLs présentes dans le mail
headersoptobjectHeaders SMTP (SPF, DKIM, DMARC, Reply-To)
raw_emailoptstring (base64)EML brut (alternative aux champs ci-dessus)
GET/v1/analyses/:id

Récupère une analyse précédente par son ID (cache 30 jours).

curl https://fiabli.io/api/v1/analyses/fa_a8f3k2x9 \
  -H "Authorization: Bearer fb_live_xxxxxxxxxxxx"
GET/v1/analyses

Liste paginée des analyses du tenant.

Paramètres query

ParamTypeDescription
fromdateDébut période (YYYY-MM-DD)
todateFin période
verdictenumsafe / suspicious / phishing
limitintDéfaut 50, max 200
offsetintDéfaut 0
curl "https://fiabli.io/api/v1/analyses?verdict=phishing&from=2026-01-01&limit=100" \
  -H "Authorization: Bearer fb_live_xxxxxxxxxxxx"
POST/v1/whitelist DELETE/v1/whitelist/:id

Gère la liste blanche tenant (expéditeurs/domaines toujours considérés comme sûrs).

curl -X POST https://fiabli.io/api/v1/whitelist \
  -H "Authorization: Bearer fb_live_xxxxxxxxxxxx" \
  -d '{"type":"domain","value":"facturation.fournisseur.fr","note":"Fournisseur principal"}'
POST/v1/blocklist DELETE/v1/blocklist/:id

Gère la liste noire tenant (toujours marqué phishing avec score 0.95).

GET/v1/usage

Quota et consommation API du tenant courant.

{
  "success": true,
  "data": {
    "plan_code": "api_growth",
    "plan_name": "API Growth",
    "used": 1542,
    "limit": 5000,
    "percent": 31,
    "last_24h_count": 87,
    "last_24h_cost_eur": 0.182
  }
}

Codes d'erreur

Code HTTPCode machineDescription
200Requête réussie
400bad_requestParamètres invalides ou manquants
401missing_authorization · invalid_api_keyClé absente ou non reconnue
403scope_requiredLa clé n'a pas le scope requis (ex: write)
404not_foundRessource introuvable
429quota_exceeded · rate_limitedQuota mensuel atteint ou rate limit
500internal_errorErreur serveur (réessayer avec backoff exponentiel)

Quotas et tarification

Tous les plans incluent les fonctionnalités API. Le quota est mensuel et se recharge le 1er du mois.

PlanTarifQuota inclusSurplus
DiscoveryGratuit100 analyses / mois
Starter9€/mois1 000 analyses / mois0,01€/analyse
Growth29€/mois5 000 analyses / mois0,008€/analyse
Scale99€/mois25 000 analyses / mois0,005€/analyse
EnterpriseSur devisillimité (réservé)négocié

Rate limits

  • 10 requêtes/seconde par clé (burst toléré jusqu'à 30 sur 5s)
  • Header Retry-After retourné en cas de 429
  • Conseil : implémenter un backoff exponentiel en cas de 429 ou 5xx

Webhooks (asynchrone)

Pour les volumes importants, vous pouvez recevoir le verdict en push HTTP POST plutôt qu'en réponse synchrone.

Configurer un webhook

curl -X POST https://fiabli.io/api/v1/webhooks \
  -H "Authorization: Bearer fb_live_xxxxxxxxxxxx" \
  -d '{
    "url": "https://votre-app.com/fiabli/callback",
    "events": ["analysis.completed", "analysis.phishing_detected"],
    "secret": "whsec_a8f3k2x9..."
  }'
Chaque payload est signé HMAC-SHA256 avec votre secret. Vérifiez la signature via le header X-Fiabli-Signature.

SDK officiels

Bibliothèques tierces communautaires (le SDK officiel sort en Q3 2026) :

Postman collection disponible : télécharger fiabli-postman.json

Prêt à intégrer Fiabli ?

Créez votre première clé API gratuitement. 100 analyses offertes / mois, aucune carte bancaire requise.

Créer ma clé API gratuite →