L'API athorion est une API REST JSON, exploitée depuis l'Allemagne avec des scans issus de notre propre réseau à Darmstadt (AS62023). Elle fait trois choses : rechercher dans l'index Internet non intrusif, lancer un scan de sécurité à la demande complet de n'importe quelle cible publique avec un PDF en retour, et poser des questions factuelles à notre IA de défense (Manta pour le tri rapide, Nautilus pour le raisonnement approfondi). Toutes les requêtes passent en HTTPS par l'URL de base ci-dessous.
BASEhttps://app.athorion.io/v1
Authentification et périmètres
Envoyez votre clé comme jeton bearer dans l'en-tête Authorization. Les clés commencent par ath_ et ne sont affichées qu'une seule fois, à leur création. Les clients créent leurs clés dans la console, sous API ; les clés partenaires sont émises par l'opérateur de la plateforme.
Chaque clé porte un périmètre (scope) qui limite les endpoints qu'elle peut appeler. Une requête hors de ce périmètre renvoie 403.
PérimètreAccès à
scanUniquement le flux de scan à la demande : /v1/scans et ses sous-chemins.
llmUniquement l'IA de défense (Manta et Nautilus) : /v1/models, /v1/ask, /v1/ask/stream.
mcpLes outils du Model Context Protocol : recherche, scans à la demande, aperçu d'exposition et IA de défense. Utilisée par le serveur MCP hébergé ; offres payantes uniquement.
fullTout /v1, recherche comprise. Valeur par défaut des clés console et clients.
Limites de débit et quota
Chaque clé dispose d'un quota journalier optionnel (total des requêtes par jour calendaire, UTC) et d'une limite de débit horaire optionnelle (requêtes sur une fenêtre glissante de 60 minutes). Les deux sont définis par clé par l'opérateur ; non définis, ils sont illimités. Le dépassement de l'un ou de l'autre renvoie 429 avec une errorquota_exceeded ou rate_limited.
HTTP/1.1 429 Too Many Requests
{
"detail": {
"error": "rate_limited",
"message": "hourly rate limit reached (60/hour)"
}
}
Les scans à la demande sont en outre soumis à un plafond par tenant à l'échelle de la plateforme et à la liste de blocage globale (les plages privées et réservées ne sont jamais scannées).
Erreurs et codes de statut
Les erreurs renvoient un corps JSON avec un champ detail : une chaîne, ou un objet avec un code error stable et un message lisible.
HTTPerrorSignification
400invalid_targetLa cible n'est ni un domaine ni une IP publique, ou ne se résout pas.
401-Clé API manquante ou invalide.
403-Le périmètre de la clé n'autorise pas cet endpoint.
404-ID de scan introuvable pour cette clé.
429quota_exceeded · rate_limitedQuota journalier ou limite de débit horaire atteint.
503llm_unavailableL'IA de défense (backend LLM) n'est pas configurée sur cette instance.
Serveur MCP
Pilotez toute la plateforme depuis un agent IA via le Model Context Protocol. Le serveur hébergé mcp.athorion.io expose la recherche dans l'index, les scans à la demande, les contrôles d'exposition et l'IA de défense (Manta et Nautilus) sous forme d'outils MCP. Authentifiez-vous avec une clé de périmètre mcp (à créer dans la console ; offre Cyber Intelligence ou Ecosystem). Chaque appel s'exécute avec votre clé, votre quota et votre budget de modèle ; les scans restent non intrusifs et contrôlés par l'Authorization Plane.
search
Requête dans l'index Internet.
scan · scan_result
Scan non intrusif à la demande.
exposure_preview
Contrôle passif de la posture du domaine.
ask · list_models
IA de défense factuelle (Manta, Nautilus).
Connectez un client stdio (Claude Desktop, agents d'IDE) avec le shim npx :
Les clients compatibles avec le mode distant peuvent se connecter directement à https://mcp.athorion.io/mcp avec un en-tête Authorization: Bearer.
GET/v1/searchscope: full
Rechercher dans l'index
Recherche dans l'index Tier-1 non intrusif. Les filtres de q sont port:product:cve:vuln:category:net:has_vuln:sev: plus du texte libre. Tri par nombre de vulnérabilités, puis par dernière observation.
PARAMÈTRES
q
string
Requête, p. ex. port:3389 category:rdp has_vuln:true.
port
int
Filtre raccourci pour un seul port.
ip
string
Filtre raccourci pour un réseau/une IP (net:).
scan
bool
true lance un contrôle approfondi en direct d'un hôte unique absent ou ancien dans l'index.
Met en file d'attente un scan Tier-2 complet et non intrusif de n'importe quel domaine ou IP publics (ports, TLS, bannières HTTP, CVE selon la version). Aucune preuve de propriété requise. Renvoie un id de job à interroger. Une webhook_url optionnelle reçoit un POST à la fin du scan.
PARAMÈTRES
target
body · obligatoire
Domaine ou IPv4 publique.
webhook_url
body
URL http(s) publique appelée à la fin du scan (remplace la valeur par défaut de la clé).
À interroger après le lancement d'un scan. Pendant l'exécution, status vaut queued ou running. À l'état done, findings (sévérité, CVE, KEV, catégorie) et une pdf_url sont renseignés. refused/error portent un refusal_reason.
Le PDF aux couleurs de la marque d'un scan terminé (identique à pdf_url). Content-Type application/pdf. Disponible dès que status vaut done ; 404 avant.
Le catalogue du routeur de l'IA de défense : manta (tri rapide, par défaut) et nautilus (raisonnement approfondi). Choisissez-en un avec ?model= sur /v1/ask (inconnu ou vide : retour au modèle par défaut). available:false signifie que cet alias n'est pas configuré sur cette instance.
Questions-réponses factuelles. Le modèle lance un contrôle approfondi en direct et non intrusif de chaque hôte cité dans la question et ne répond qu'à partir de ces preuves (il n'invente jamais de résultats). Renvoie la réponse, le modèle qui l'a produite et les hôtes vérifiés.
PARAMÈTRES
q
body · obligatoire
La question. Chaque domaine/IP qu'elle contient est vérifié en direct.
model
body
manta (rapide) ou nautilus (approfondi). Par défaut manta.
history
body
Tableau JSON optionnel des échanges {q, a} précédents, pour le contexte.
{
"model": "nautilus",
"model_label": "Nautilus",
"answer": "mail.example.de exposes SMTP on 25 and\n587 with STARTTLS; SPF and DMARC are present,\nDKIM is missing. No critical CVE on the banner.",
"grounded_on": ["mail.example.de"]
}
GET/v1/ask/streamscope: llm
Diffuser une réponse (SSE)
Variante Server-Sent-Events de /v1/ask : des deltas think (le raisonnement du modèle), puis des deltas answer (le contenu), puis un événement done. Même ancrage factuel, mêmes modèles.
event: think
data: Running a live deep check of
example.de (DNS, mail, TLS, ports, CVEs) ...
event: answer
data: example.de has no critical exposure.
event: done
data: {}
POST/v1/chat/completionsscope: llm
Chat compatible OpenAI
Remplacement direct pour le SDK OpenAI et les clients agents comme Crush, Cursor ou Continue : URL de base https://app.athorion.io/v1, votre clé comme clé API. Prend en charge stream, tools (les appels reviennent en vrais tool_calls) et le mode JSON. Contrairement à /v1/ask, pas de scan en direct - vous fournissez le contexte.
PARAMÈTRES
model
body · obligatoire
nautilus (réfléchit d'abord) ou manta (répond directement) ; full / flash fonctionnent aussi, un nom inconnu renvoie 400.
messages
body · obligatoire
Messages de chat OpenAI.
stream
body
true pour des Server-Sent Events au format de chunks OpenAI.
tools
body
Outils de fonction ; les appels du modèle reviennent en tool_calls.
curl -X POST "https://app.athorion.io/v1/chat/completions" \
-H "Authorization: Bearer $ATHORION_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"nautilus","messages":[{"role":"user","content":"Explain the risk of RDP without NLA."}]}'
Un client en ligne de commande léger au-dessus de cette API : lancez un scan, récupérez le PDF et dialoguez avec l'IA de défense directement depuis votre terminal. Il lit votre clé dans ATHORION_KEY et choisit un modèle avec --model, avec les mêmes alias recon / deep que /v1/ask.
pip install athorion
export ATHORION_KEY=ath_••••••••
# full non-intrusive scan of a target, wait, save the PDF
athorion scan example.de --pdf report.pdf
# ask the defence AI, grounded on a live check
athorion ask "is mail.example.de exposed?" --model deep
# pipe context in, like any unix tool
cat targets.txt | athorion scan --stdin --json