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 :
read -rs SALLYPORT_CONSOLE_KEY && export SALLYPORT_CONSOLE_KEYcurl --fail --silent --show-error -H "Authorization: Bearer $SALLYPORT_CONSOLE_KEY" "https://mcp.sallyport.cloud/v1/audit/export" -o sallyport-audit.jsonlAjoutez 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.
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.jsonlPour 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éponse | Valeur |
|---|---|
| Content-Type | application/x-ndjson; charset=utf-8 |
| Content-Disposition | attachment; filename="sallyport-audit-{UUID de l’organisation}.jsonl" |
| Cache-Control | no-store |
| X-Content-Type-Options | nosniff |
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 :
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 ;
seqetthis_hashcorrespondent à ses lignes. - Les noms d’événement sont les valeurs
kinddu journal, commecall.intent,call.result,approval.requested,approval.decided,grant.createdetaccess_request.created. Toutkindpré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}/deliveriesetPOST /v1/webhooks/{id}/deliveries/{delivery_id}/retry. - La liste de Webhooks signale le webhook qui échoue. Son interrupteur coupe les livraisons sans le supprimer.