SecuAAS Docs
SecuSIEM

Reference API

Reference complete de l'API REST SecuSIEM pour un utilisateur connecte : authentification, recherche de logs, ingestion, alertes, incidents, sources, regles, tableaux de bord, rapports, statut et portail

Reference API SecuSIEM

Cette reference documente l'API REST de SecuSIEM dans le perimetre d'un utilisateur connecte d'une organisation cliente. Toutes les routes decrites sont limitees a votre tenant (votre organisation) et, le cas echeant, a votre espace de travail. Les chemins et parametres correspondent au comportement reel du service.

Pour une prise en main par module (vue portail), voir le Guide utilisateur.

URL de base

SurfaceAdresse
API RESThttps://api.secusiem.secuaas.com
Ingestion OTLP gRPCotlp.secusiem.secuaas.com:4317

Toutes les routes REST sont prefixees par /api/v1 (les routes du portail par /v1/portal). Sauf indication contraire, les requetes et reponses sont au format JSON (Content-Type: application/json).

Authentification

L'API s'authentifie par cle d'API, via l'en-tete HTTP X-API-Key.

En-teteObligatoireDescription
X-API-KeyOuiVotre cle d'API tenant (fournie par votre administrateur) ou votre cle d'ingestion par espace de travail (pour l'envoi de logs uniquement).
X-Workspace-IdNonLimite la requete a un espace de travail precis dont vous etes membre. En son absence, la requete porte sur l'ensemble de votre tenant.

Le filtrage par organisation est toujours applique cote serveur : votre identifiant de tenant est injecte a partir de votre cle, vous n'avez jamais a le transmettre.

Deux types de cles. Une cle d'ingestion par espace de travail est en ecriture seule (logs:write) : elle ne sert qu'aux endpoints d'ingestion et est refusee (403) sur les routes de lecture/gestion. Pour lire des logs, des alertes ou gerer des ressources, utilisez votre cle d'API tenant.

Exemple d'en-tetes :

-H "X-API-Key: <VOTRE_CLE_API>" \
-H "X-Workspace-Id: <UUID_ESPACE_DE_TRAVAIL>"   # optionnel

Codes d'erreur communs

CodeSignification
400 Bad RequestCorps ou parametre invalide (ex. requete LogQL malformee, severite inconnue).
401 UnauthorizedCle d'API absente ou invalide.
403 ForbiddenCle non autorisee pour cette route (ex. cle d'ingestion sur une route de lecture) ou espace de travail dont vous n'etes pas membre.
404 Not FoundRessource introuvable dans votre perimetre.
429 Too Many RequestsQuota d'appels ou d'ingestion depasse.
502 / 503Service de stockage de logs indisponible ou en erreur amont.

Le corps d'erreur a la forme {"error": "...", "detail": "..."} (le champ detail est optionnel).


Recherche de logs

GET /api/v1/logs/query

Interroge le moteur de stockage de logs, strictement limite a votre tenant (et a votre espace de travail si l'en-tete est present).

Parametres (query)

ParametreTypeDefautDescription
querystring(logs recents)Requete LogQL restreinte. Selecteur de flux avec l'operateur d'egalite = uniquement ; labels utilisables : job, source, level, service, host, namespace_name. Ne passez pas tenant_id : il est injecte cote serveur et toute tentative est ignoree.
startstringdependant de sinceBorne de debut, au format RFC3339.
endstringmaintenantBorne de fin, au format RFC3339.
sincestring1hDuree relative (ex. 15m, 1h, 24h) utilisee si start/end sont absents.
limitentier100Nombre maximum de lignes, de 1 a 5000.

Exemple

curl -G "https://api.secusiem.secuaas.com/api/v1/logs/query" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  --data-urlencode 'query={namespace_name="prod", level="error"} |= "timeout"' \
  --data-urlencode "since=1h" \
  --data-urlencode "limit=200"

Reponse 200

{
  "status": "success",
  "count": 2,
  "entries": [
    {
      "timestamp": "1718800000000000000",
      "line": "connection timeout to upstream",
      "labels": { "namespace_name": "prod", "level": "error" }
    },
    {
      "timestamp": "1718800001000000000",
      "line": "request timeout after 30s",
      "labels": { "namespace_name": "prod", "level": "error" }
    }
  ],
  "query": "{namespace_name=\"prod\", level=\"error\"} |= \"timeout\"",
  "start": "2026-06-23T10:00:00Z",
  "end": "2026-06-23T11:00:00Z"
}

Le champ timestamp de chaque entree est exprime en nanosecondes (format Loki).

Erreurs : 400 (requete invalide), 502 (echec de requete), 503 (stockage non configure).

GET /api/v1/logs/labels

Liste les noms de labels disponibles pour votre tenant, pour vous aider a construire vos selecteurs.

curl "https://api.secusiem.secuaas.com/api/v1/logs/labels" \
  -H "X-API-Key: <VOTRE_CLE_API>"

Reponse 200

{ "labels": ["job", "source", "level", "service", "host", "namespace_name"] }

Ingestion de logs

Les endpoints d'ingestion acceptent vos logs (logs:write). Utilisez de preference une cle d'ingestion par espace de travail (voir Portail). Plusieurs protocoles sont exposes simultanement.

POST /api/v1/logs/ingest

Ingestion JSON generique. Maximum 1000 evenements par requete.

Corps

ChampTypeDescription
events[]tableauListe d'evenements (1 a 1000).
events[].sourcestringOrigine du log (ex. api, firewall).
events[].levelstringNiveau (ex. info, warn, error).
events[].messagestringContenu du log.
events[].labelsobjetLabels cle/valeur (optionnel).
events[].metadataobjetMetadonnees libres (optionnel).
curl -X POST "https://api.secusiem.secuaas.com/api/v1/logs/ingest" \
  -H "X-API-Key: <VOTRE_CLE_INGESTION>" \
  -H "Content-Type: application/json" \
  -d '{
    "events": [
      { "source": "api", "level": "error", "message": "auth failed for user admin",
        "labels": { "host": "web-01", "namespace_name": "prod" } }
    ]
  }'

Reponse 200

{ "accepted": 1, "alerts_raised": 0 }

Erreurs : 400 (corps invalide, aucun evenement, ou plus de 1000 evenements), 429 (quota d'ingestion depasse).

POST /api/v1/loki/api/v1/push

Endpoint compatible Loki push (Fluent Bit, Grafana Alloy, Promtail). Le corps suit le format de push Loki standard (streams[].stream + streams[].values).

curl -X POST "https://api.secusiem.secuaas.com/api/v1/loki/api/v1/push" \
  -H "X-API-Key: <VOTRE_CLE_INGESTION>" \
  -H "Content-Type: application/json" \
  -d '{
    "streams": [
      { "stream": { "namespace_name": "prod", "level": "info" },
        "values": [ ["1718800000000000000", "service started"] ] }
    ]
  }'

POST /api/v1/logs/webhook

Reception de charges utiles via webhook (JSON ou texte brut). A utiliser pour des emetteurs qui poussent un payload arbitraire.

curl -X POST "https://api.secusiem.secuaas.com/api/v1/logs/webhook" \
  -H "X-API-Key: <VOTRE_CLE_INGESTION>" \
  -H "Content-Type: application/json" \
  -d '{ "message": "deploy completed", "level": "info" }'

Compatibilite Elasticsearch (bulk)

Endpoints compatibles avec l'API Bulk d'Elasticsearch, pour reutiliser les agents et SDK de l'ecosysteme Elastic.

MethodeCheminDescription
POST/api/v1/_bulkAPI Bulk (corps NDJSON).
POST/api/v1/:index/_bulkAPI Bulk vers un index nomme.
POST/api/v1/:index/_docIndexation d'un document unique.
curl -X POST "https://api.secusiem.secuaas.com/api/v1/_bulk" \
  -H "X-API-Key: <VOTRE_CLE_INGESTION>" \
  -H "Content-Type: application/x-ndjson" \
  --data-binary $'{"index":{}}\n{"message":"login ok","level":"info"}\n'

OpenTelemetry (OTLP)

TransportAdresseDescription
OTLP/HTTPPOST https://api.secusiem.secuaas.com/api/v1/v1/logsExport de logs OTLP en JSON (encodage OTLP/HTTP standard).
OTLP/gRPCotlp.secusiem.secuaas.com:4317Export de logs OTLP haute performance via gRPC.
curl -X POST "https://api.secusiem.secuaas.com/api/v1/v1/logs" \
  -H "X-API-Key: <VOTRE_CLE_INGESTION>" \
  -H "Content-Type: application/json" \
  -d '{
    "resourceLogs": [
      { "resource": { "attributes": [ { "key": "service.name",
            "value": { "stringValue": "checkout" } } ] },
        "scopeLogs": [ { "logRecords": [
          { "timeUnixNano": "1718800000000000000",
            "severityText": "ERROR",
            "body": { "stringValue": "payment declined" } } ] } ] }
    ]
  }'

Pour l'authentification OTLP, transmettez votre cle d'ingestion via l'en-tete X-API-Key (et le metadata equivalent cote gRPC).


Alertes

Base : /api/v1/alerts.

GET /api/v1/alerts

Liste paginee des alertes levees sur vos logs.

Parametres (query)

ParametreTypeDefautDescription
severitystringFiltre par severite (low, medium, high, critical).
statusstringFiltre par statut (ex. ouvert, pris en charge, resolu).
rule_idstringFiltre par regle ayant declenche l'alerte.
namespacestringFiltre par namespace.
sincestringtoday, week, ou un horodatage RFC3339.
pageentier1Numero de page.
page_sizeentier50Taille de page.
curl -G "https://api.secusiem.secuaas.com/api/v1/alerts" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  --data-urlencode "severity=high" \
  --data-urlencode "since=today"

Reponse 200

{
  "alerts": [
    {
      "id": "alrt_01H...",
      "rule_id": "ssh-bruteforce",
      "severity": "high",
      "status": "open",
      "namespace": "prod",
      "created_at": "2026-06-23T10:42:00Z"
    }
  ],
  "total": 1,
  "page": 1
}

GET /api/v1/alerts/:id

Detail d'une alerte. Reponse 200 : l'objet alerte complet. 404 si l'alerte n'existe pas dans votre perimetre.

curl "https://api.secusiem.secuaas.com/api/v1/alerts/alrt_01H..." \
  -H "X-API-Key: <VOTRE_CLE_API>"

GET /api/v1/alerts/:id/threat-matches

Correspondances de renseignement sur les menaces associees a une alerte (correlation avec des indicateurs de compromission connus).

Reponse 200

{ "alert_id": "alrt_01H...", "matches": [], "count": 0 }

503 si le renseignement sur les menaces n'est pas configure.

Cycle de vie d'une alerte

MethodeCheminAction
POST ou PUT/api/v1/alerts/:id/acknowledgePrendre en charge l'alerte.
POST ou PUT/api/v1/alerts/:id/resolveResoudre (cloturer) l'alerte.
PUT/api/v1/alerts/:id/reopenRouvrir une alerte resolue.
curl -X POST "https://api.secusiem.secuaas.com/api/v1/alerts/alrt_01H.../acknowledge" \
  -H "X-API-Key: <VOTRE_CLE_API>"

Reponse 200 : { "message": "alert acknowledged" } (resp. alert resolved, alert reopened).

POST /api/v1/alerts/:id/feedback

Consigne votre verdict d'analyse sur une alerte (disposition, correction de severite, corrections de techniques MITRE, commentaire). Ce retour ajuste la disposition de l'alerte.

curl -X POST "https://api.secusiem.secuaas.com/api/v1/alerts/alrt_01H.../feedback" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  -H "Content-Type: application/json" \
  -d '{ "disposition": "false_positive", "comment": "trafic interne legitime" }'

Incidents (cas)

Base : /api/v1/incidents. Un incident regroupe plusieurs alertes liees a un meme evenement.

GET /api/v1/incidents

Liste des incidents. Filtre optionnel par statut.

Parametres (query)

ParametreTypeDescription
statusstringopen, investigating, contained, resolved, closed.
curl -G "https://api.secusiem.secuaas.com/api/v1/incidents" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  --data-urlencode "status=open"

Reponse 200

{ "incidents": [], "total": 0 }

POST /api/v1/incidents

Cree un incident.

Corps

ChampTypeObligatoireDescription
titlestringOuiTitre de l'incident.
severitystringNonlow, medium, high, critical (medium par defaut).
statusstringNonStatut initial (open par defaut).
assigneestringNonResponsable.
curl -X POST "https://api.secusiem.secuaas.com/api/v1/incidents" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Tentatives de brute force SSH", "severity": "high" }'

Reponse 201

{
  "id": "inc_01H...",
  "tenant_id": "...",
  "title": "Tentatives de brute force SSH",
  "status": "open",
  "severity": "high",
  "kill_chain": [],
  "timeline": []
}

GET /api/v1/incidents/:id

Detail d'un incident (avec sa timeline et son eventuelle kill_chain). 404 si introuvable.

PATCH /api/v1/incidents/:id

Met a jour le titre, le statut, la severite ou le responsable. Chaque champ est optionnel ; tout changement est consigne dans la chronologie.

curl -X PATCH "https://api.secusiem.secuaas.com/api/v1/incidents/inc_01H..." \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  -H "Content-Type: application/json" \
  -d '{ "status": "investigating", "assignee": "alice" }'

POST /api/v1/incidents/:id/notes

Ajoute une note d'analyste a la chronologie.

curl -X POST "https://api.secusiem.secuaas.com/api/v1/incidents/inc_01H.../notes" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  -H "Content-Type: application/json" \
  -d '{ "note": "Source identifiee : 203.0.113.7" }'

POST /api/v1/incidents/:id/alerts

Lie une alerte a l'incident.

curl -X POST "https://api.secusiem.secuaas.com/api/v1/incidents/inc_01H.../alerts" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  -H "Content-Type: application/json" \
  -d '{ "alert_id": "alrt_01H..." }'

Sources de logs

Base : /api/v1/sources. Declarez et gerez les emetteurs de logs de votre organisation.

GET /api/v1/sources

Liste des sources declarees.

Parametres (query)

ParametreTypeDescription
source_typestringFiltre par type (syslog, kubernetes, application, firewall, cloud).
protocolstringFiltre par protocole (api, loki, syslog, s3_poll, otlp, webhook).
enabledboolFiltre par etat actif/inactif.
curl -G "https://api.secusiem.secuaas.com/api/v1/sources" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  --data-urlencode "source_type=firewall"

Reponse 200

{ "sources": [], "count": 0 }

GET /api/v1/sources/discovered

Liste les emetteurs decouverts automatiquement (ex. namespaces Kubernetes qui envoient effectivement des logs), avec leur volume.

Reponse 200 : tableau de sources decouvertes, chacune avec namespace, source_type, protocol, status, log_count.

POST /api/v1/sources

Cree une source.

Corps

ChampTypeObligatoireDescription
namestringOuiNom de la source.
source_typestringNonsyslog, kubernetes, application, firewall, cloud (application par defaut).
protocolstringNonapi, loki, syslog, s3_poll, otlp, webhook (api par defaut).
pipeline_typesstring[]NonPipelines cibles (ops par defaut).
configobjetNonConfiguration specifique.
enabledboolNonEtat actif/inactif.
workspace_idstringNonEspace de travail d'affectation.
curl -X POST "https://api.secusiem.secuaas.com/api/v1/sources" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Pare-feu siege", "source_type": "firewall", "protocol": "syslog",
        "pipeline_types": ["siem"] }'

Reponse 201 : l'objet source cree.

GET /api/v1/sources/:id, PUT /api/v1/sources/:id, DELETE /api/v1/sources/:id

Consultez, modifiez ou supprimez une source par son identifiant.

curl -X DELETE "https://api.secusiem.secuaas.com/api/v1/sources/src_01H..." \
  -H "X-API-Key: <VOTRE_CLE_API>"

Regles de detection

Base : /api/v1/rules. La lecture requiert le scope alerts:read ; la creation et la modification requierent rules:write.

MethodeCheminScopeDescription
GET/api/v1/rulesalerts:readListe vos regles.
GET/api/v1/rules/:idalerts:readDetail d'une regle.
POST/api/v1/rulesrules:writeCree une regle.
PUT/api/v1/rules/:idrules:writeModifie une regle.
DELETE/api/v1/rules/:idrules:writeSupprime une regle.
curl "https://api.secusiem.secuaas.com/api/v1/rules" \
  -H "X-API-Key: <VOTRE_CLE_API>"

GET /api/v1/detection/rules

Catalogue des regles de detection integrees (informations descriptives, sans exposer les patterns).

Reponse 200 : tableau d'objets { rule_id, name, description, severity, mitre_tactic, mitre_technique, mitre_subtechnique, threshold_count }.


Tableau de bord

GET /api/v1/dashboard/stats

Statistiques d'alertes et volumetrie de logs pour votre tenant (ou l'espace de travail selectionne). Les compteurs sont servis depuis un cache.

curl "https://api.secusiem.secuaas.com/api/v1/dashboard/stats" \
  -H "X-API-Key: <VOTRE_CLE_API>"

Reponse 200

{
  "total_alerts": 128,
  "critical_alerts": 3,
  "high_alerts": 12,
  "medium_alerts": 40,
  "low_alerts": 73,
  "open_alerts": 9,
  "alerts_today": 5,
  "alerts_this_week": 31,
  "logs_ingested_mb": 1843.2,
  "events_today": 91240,
  "top_rules": [],
  "severity_breakdown": { "critical": 3, "high": 12, "medium": 40, "low": 73 },
  "recent_alerts": [],
  "log_errors_24h": 214
}

Rapports

GET /api/v1/reports/monthly

Genere le rapport mensuel d'activite de votre organisation, avec synthese redigee par l'IA.

Parametres (query)

ParametreTypeDefautDescription
yearentierannee couranteAnnee du rapport.
monthentiermois courantMois (1 a 12).
formatstringjsonjson (exploitable par programme) ou html (mise en page lisible).
curl -G "https://api.secusiem.secuaas.com/api/v1/reports/monthly" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  --data-urlencode "year=2026" \
  --data-urlencode "month=5" \
  --data-urlencode "format=json"

En format=json, la reponse est l'objet rapport ; en format=html, le corps est la page HTML (text/html).

Erreurs : 400 (annee/mois invalides).


Statut systeme

GET /api/v1/system/status

Etat operationnel de la plateforme pour votre tenant : volumetrie de logs, stockage, infrastructure et retention. Les metriques sont servies depuis un cache.

curl "https://api.secusiem.secuaas.com/api/v1/system/status" \
  -H "X-API-Key: <VOTRE_CLE_API>"

Reponse 200

{
  "logs": {
    "total_ingested_24h": 1284000,
    "total_ingested_bytes_24h": "1.8 GB",
    "rate_per_second": 14.8,
    "by_namespace": [
      { "namespace": "prod", "count": 980000, "bytes": "1.4 GB" }
    ]
  },
  "storage": {
    "hot_bucket": { "name": "hot", "size_gb": 12.4, "objects": 320, "configured": true },
    "warm_bucket": { "name": "warm", "size_gb": 88.1, "objects": 2104, "configured": true },
    "archive_bucket": { "name": "archive", "size_gb": 410.0, "objects": 9870, "configured": true }
  },
  "infrastructure": {
    "loki_status": "ok",
    "grafana_status": "ok",
    "fluent_bit_pods": 8,
    "fluent_bit_healthy": 8,
    "api_uptime_hours": 712.5
  },
  "retention": { "hot_days": 7, "warm_days": 90 },
  "loading": false
}

Le champ loading vaut true tant que le cache n'a pas ete renseigne (premier calcul en cours) ; la page repond neanmoins immediatement.


Diagnostics de sante

GET /api/v1/health/tenant

Execute une serie de verifications sur la configuration de votre tenant et retourne un statut global accompagne du detail de chaque controle.

curl "https://api.secusiem.secuaas.com/api/v1/health/tenant" \
  -H "X-API-Key: <VOTRE_CLE_API>"

Reponse 200

{
  "tenant_id": "...",
  "status": "healthy",
  "checks": [
    { "name": "tenant_active", "status": "ok", "message": "Tenant status: active" }
  ],
  "checked_at": "2026-06-23T11:00:00Z"
}

Le status global vaut healthy, degraded ou critical ; chaque controle a un status ok, warning ou error.


Assistant IA sur les logs

POST /api/v1/ai/chat

Interroge vos logs en langage naturel. L'assistant construit la requete cote serveur, recupere les logs pertinents (limites a votre tenant et a votre espace de travail) et repond avec ses sources.

Corps

ChampTypeObligatoireDescription
questionstringOuiQuestion en langage naturel.
namespacestringNonRestreint a un namespace.
timerangestringNonFenetre temporelle (ex. 15m, 1h, 6h, 24h).
severitystringNonRestreint a une severite.
curl -X POST "https://api.secusiem.secuaas.com/api/v1/ai/chat" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  -H "Content-Type: application/json" \
  -d '{ "question": "Quelles erreurs d'\''authentification dans le namespace prod cette derniere heure ?",
        "namespace": "prod", "timerange": "1h" }'

Reponse 200

{
  "answer": "12 echecs d'authentification, concentres sur l'utilisateur admin depuis 203.0.113.7.",
  "sources": [
    { "timestamp": "2026-06-23T10:42:00Z", "pod": "auth-7c9", "namespace": "prod",
      "message": "auth failed for user admin" }
  ],
  "query_used": "{namespace_name=\"prod\"} |= \"auth failed\"",
  "provider": "secuai-auto",
  "latency_ms": 1820
}

400 si la question est absente ; 502 en cas d'echec de requete des logs ; 503 si le stockage n'est pas configure.


Portail

Surface du portail (prefixe /v1/portal), pour la gestion de votre acces, de vos cles d'ingestion par espace de travail et de vos jetons MCP personnels.

GET /v1/portal/me/access

Retourne votre identite et la liste des espaces de travail dont vous etes membre.

curl "https://api.secusiem.secuaas.com/v1/portal/me/access" \
  -H "X-API-Key: <VOTRE_CLE_API>"

Reponse 200

{
  "tenant_id": "...",
  "tenant_slug": "mon-org",
  "user_sub": "...",
  "email": "alice@mon-org.com",
  "workspaces": [
    { "workspace_id": "...", "slug": "prod", "name": "Production", "role": "admin" }
  ]
}

GET /v1/portal/workspace-ingest-keys

Liste vos espaces de travail avec l'etat de leur cle d'ingestion.

curl "https://api.secusiem.secuaas.com/v1/portal/workspace-ingest-keys" \
  -H "X-API-Key: <VOTRE_CLE_API>"

Reponse 200

{
  "workspaces": [
    { "workspace_id": "...", "name": "Production", "retrievable": true }
  ]
}

POST /v1/portal/workspace-ingest-keys/:workspace_id/rotate

Fait pivoter la cle d'ingestion d'un de vos espaces de travail : l'ancienne est revoquee et une nouvelle est generee. La nouvelle cle n'est affichee qu'une seule fois. Necessite une session utilisateur connectee ; un espace dont vous n'etes pas membre renvoie 404.

curl -X POST "https://api.secusiem.secuaas.com/v1/portal/workspace-ingest-keys/<UUID_ESPACE>/rotate" \
  -H "X-API-Key: <VOTRE_CLE_API>"

Reponse 200

{ "workspace_id": "...", "ingest_key": "<CLE_BRUTE_AFFICHEE_UNE_FOIS>", "retrievable": true }

Jetons MCP personnels

Base : /v1/portal/me/mcp-tokens. Gerez vos propres jetons MCP (connecteur vers un client compatible). Vous ne gerez que vos jetons ; la gestion requiert une session utilisateur connectee.

MethodeCheminDescription
POST/v1/portal/me/mcp-tokensCree un jeton (corps { "name": "..." }). La cle brute est affichee une seule fois.
GET/v1/portal/me/mcp-tokensListe vos jetons (sans re-afficher la cle).
DELETE/v1/portal/me/mcp-tokens/:idRevoque un jeton.
curl -X POST "https://api.secusiem.secuaas.com/v1/portal/me/mcp-tokens" \
  -H "X-API-Key: <VOTRE_CLE_API>" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Mon assistant" }'

Reponse 201 (cle brute revelee une seule fois)

{
  "id": "...",
  "name": "Mon assistant",
  "key_prefix": "mcp_...",
  "kind": "user-mcp",
  "scopes": ["..."],
  "is_active": true,
  "created_at": "2026-06-23T11:00:00Z"
}
# Lister
curl "https://api.secusiem.secuaas.com/v1/portal/me/mcp-tokens" \
  -H "X-API-Key: <VOTRE_CLE_API>"

# Revoquer
curl -X DELETE "https://api.secusiem.secuaas.com/v1/portal/me/mcp-tokens/<ID>" \
  -H "X-API-Key: <VOTRE_CLE_API>"

Reponse 200 a la revocation : { "revoked": "<ID>" }.

On this page