Aller à la documentation
DocumentationExport du journal

Export du journal

Téléchargez le journal signé en JSON Lines ou recevez les événements choisis au fil de l’eau.

Sur cette page

Chaque appel, décision et changement arrive dans votre journal. Prenez-en une copie complète quand vous voulez, pour votre SIEM ou vos archives.

Le télécharger depuis la console

Ouvrez Activité et appuyez sur « Télécharger le journal ». Le fichier contient toute la chaîne de votre organisation. Les propriétaires peuvent le télécharger, ainsi que les administrateurs et auditeurs de toute l’organisation qui n’ont de rôle plus restreint dans aucun espace de travail. Un administrateur ou un auditeur d’un seul espace de travail ne le peut pas, pas plus qu’un administrateur de l’organisation qui n’est que membre ou invité dans l’espace d’un client. Pour le lire à l’écran, ouvrez l’onglet « Journal » à côté : chaque entrée, qui l’a faite et ce qu’elle concerne. Chacun voit les entrées des espaces où il est propriétaire, administrateur ou auditeur, et celles de l’organisation elle-même.

Le télécharger depuis un script

Un script s’authentifie avec une clé API de la console. Un propriétaire la crée dans Clés API avec « Nouvelle clé API », et elle ne s’affiche qu’une fois. Gardez-la dans SALLYPORT_CONSOLE_KEY :

Collez la clé à l’invite ; le terminal ne l’affiche pas
read -rs SALLYPORT_CONSOLE_KEY && export SALLYPORT_CONSOLE_KEY
Toute la chaîne en un fichier
curl --fail --silent --show-error -H "Authorization: Bearer $SALLYPORT_CONSOLE_KEY" "https://mcp.sallyport.cloud/v1/audit/export" -o sallyport-audit.jsonl

Ajoutez from_seq et to_seq pour prendre une plage. Ce sont des nombres entiers à partir de zéro, et les deux bornes sont incluses. Sans to_seq, le fichier va jusqu’au bout de la chaîne.

Tout à partir de l’entrée 1001
curl --fail --silent --show-error -H "Authorization: Bearer $SALLYPORT_CONSOLE_KEY" "https://mcp.sallyport.cloud/v1/audit/export?from_seq=1001" -o sallyport-audit-1001.jsonl

Pour ne prendre que le nouveau, lisez to_seq sur la première ligne du dernier fichier et commencez le téléchargement suivant une entrée plus loin. Si events vaut 0, rien n’est nouveau : redemandez plus tard avec le même from_seq.

Par défaut, Sallyport garde 180 jours de journal : téléchargez-le au moins à ce rythme. « Journal et historique des appels (jours) » dans Paramètres, « Organisation », le modifie. La session de la console utilise la même route à l’adresse https://my.sallyport.cloud/api/v1/audit/export.

Ce que contient le fichier

En-tête de réponseValeur
Content-Typeapplication/x-ndjson; charset=utf-8
Content-Dispositionattachment; filename="sallyport-audit-{UUID de l’organisation}.jsonl"
Cache-Controlno-store
X-Content-Type-Optionsnosniff

La première ligne décrit le fichier : schema (spc-chain/2), tenant_id, from_seq, to_seq et events. Chaque ligne suivante est une entrée, dans l’ordre : seq, occurred_at, kind, payload, prev_hash, this_hash, sig et signer_kid.

Chaque entrée porte le hash de la précédente, donc une ligne manquante ou modifiée casse la chaîne. Chaque entrée est signée en Ed25519, et les clés publiques sont à l’adresse https://mcp.sallyport.cloud/.well-known/sallyport-audit-keys.json, sans compte.

Comparez le nombre de lignes à events pour repérer un téléchargement interrompu. Le fichier ne contient ni valeurs de clés, ni corps de requêtes, ni listes complètes d’arguments.

Recevoir les événements au fil de l’eau

Un webhook envoie à votre point d’accès HTTPS chaque nouvelle entrée du journal des types choisis, en une minute environ. Un propriétaire ou un administrateur l’ajoute dans Webhooks, « Paramètres » : appuyez sur « Ajouter un webhook », saisissez l’adresse et cochez les événements. Un script passe par l’API :

Créer un webhook pour les appels et les décisions
curl --fail --silent --show-error -X POST -H "Authorization: Bearer $SALLYPORT_CONSOLE_KEY" -H "Content-Type: application/json" -d '{"url": "https://siem.example.com/sallyport", "events": ["call.intent", "call.result", "approval.decided"]}' "https://mcp.sallyport.cloud/v1/webhooks"

Le secret de signature n’est affiché qu’une fois : dans la console après « Ajouter un webhook », et comme secret dans la réponse de l’API. Chaque livraison est un POST avec X-Sallyport-Event, X-Sallyport-Delivery et X-Sallyport-Signature: t=<unix seconds>,v1=<hex>.

Vérifiez v1 comme HMAC-SHA256 de <t>.<body>, avec le secret entier pour clé. Le corps contient delivery_id, tenant_id, kind, occurred_at, seq, this_hash et payload.

  • Répondez avec un statut 2xx. Une livraison échouée est retentée avec des pauses qui doublent à partir de 5 secondes, 8 tentatives en tout. Au bout d’environ 15 minutes, elle est marquée en échec.
  • Les nouvelles tentatives gardent le même X-Sallyport-Delivery : écartez les doublons grâce à lui.
  • Un webhook livre ce que la personne qui l’a créé peut lire du journal : les entrées des espaces où elle est propriétaire, administrateur ou auditeur, et celles de l’organisation elle-même. Tant qu’elle ne peut rien en lire, il ne livre rien, et ces entrées ne sont pas envoyées plus tard. Un webhook créé avec une clé d’API livre tout le journal.
  • Un webhook commence au moment de sa création. Pour les entrées plus anciennes, utilisez l’export ; seq et this_hash correspondent à ses lignes.
  • Les noms d’événement sont les valeurs kind du journal, comme call.intent, call.result, approval.requested, approval.decided, grant.created et access_request.created. Tout kind présent dans l’export convient. Un nom inconnu est refusé à la création du webhook, et l’erreur le cite.
  • « Livraisons », sur la ligne du webhook, liste ce qui a été envoyé, et « Renvoyer » renvoie une livraison en échec. Dans l’API : GET /v1/webhooks/{id}/deliveries et POST /v1/webhooks/{id}/deliveries/{delivery_id}/retry.
  • La liste de Webhooks signale le webhook qui échoue. Son interrupteur coupe les livraisons sans le supprimer.