🔎
Observabilité & erreurs·Intermédiaire·8 min

Filtrer et exporter les logs d'audit par acteur, action et période

Interrogez le journal d'audit de votre workspace avec des filtres précis, pagininez les résultats par curseur et déclenchez un export CSV ou JSON conforme RGPD stocké 24 h sur Scaleway.

Télécharger en PDF

Le journal d'audit de Coffrify enregistre chaque événement significatif au sein de votre workspace : appels API, mutations de ressources, connexions, changements de permissions, etc. Deux endpoints permettent d'en exploiter la valeur : GET /v1/audit pour interroger et filtrer en temps réel, et POST /v1/audit/export pour générer un export de conformité complet (CSV ou JSON) stocké sur Scaleway avec un lien de téléchargement valable 24 heures. La rétention des entrées dépend du plan : Free 30 jours, Pro 1 an, Ultra/Entreprise 7 ans.

GET/v1/auditListe les entrées du journal d'audit du workspace en cours. Supporte les filtres action, actor_id, resource_type, since, until et la pagination par curseur.POST/v1/audit/exportGénère un export CSV ou JSON de l'intégralité du journal d'audit (jusqu'à 50 000 lignes) pour une plage de dates donnée. Retourne une URL de téléchargement presignée valable 24 heures.

Authentification

Les deux endpoints requièrent une clé API valide transmise dans l'en-tête Authorization: Bearer <clé>. Les formats acceptés sont cof_live_… (production), cof_test_… (test) et cof_sandbox_… (sandbox). Le scope requis diffère selon l'endpoint : GET /v1/audit exige le scope audit:read, tandis que POST /v1/audit/export exige le scope audit:export. Ces scopes sont cumulatifs : une clé possédant audit:export n'obtient pas automatiquement audit:read.

Paramètres de requête, GET /v1/audit

La lecture du journal accepte plusieurs filtres (action, acteur, type de ressource, plage de dates) et la pagination par curseur. Le tableau ci-dessous les détaille.

ParamètreTypeRequisDescription
actionstringNonFiltre sur le champ action de l'entrée (ex. api.post.transfers).
actor_idstringNonUUID de l'acteur (utilisateur ou clé API) à isoler.
resource_typestringNonType de ressource concernée (ex. transfer, document, member).
sincestring (ISO 8601)NonBorne inférieure de la période (incluse). Ex. 2026-01-01T00:00:00Z.
untilstring (ISO 8601)NonBorne supérieure de la période (incluse). Ex. 2026-06-01T23:59:59Z.
limitintegerNonNombre d'entrées par page (défaut 100, maximum 500).
cursorstringNonCurseur opaque retourné par next_cursor pour passer à la page suivante.
offsetintegerNonDécalage legacy (ignoré si cursor est présent).

Corps de la requête, POST /v1/audit/export

L'export déclare le format (CSV ou JSON) et la plage de dates à extraire. Le tableau ci-dessous liste les champs acceptés.

ChampTypeRequisDescription
formatstringNonFormat de sortie : csv ou json (défaut json).
sincestring (ISO 8601)NonBorne inférieure de la période à exporter.
untilstring (ISO 8601)NonBorne supérieure de la période à exporter.

Les exemples ci-dessous filtrent le journal, puis lancent un export. Choisissez votre langage.

# Lister les logs d'audit avec filtres
curl -G https://api.coffrify.com/v1/audit \
-H "Authorization: Bearer cof_live_xxxxxxxxxxxxxxxxxxxx" \
--data-urlencode "action=api.post.transfers" \
--data-urlencode "since=2026-05-01T00:00:00Z" \
--data-urlencode "until=2026-05-31T23:59:59Z" \
--data-urlencode "limit=50"
 
# Declencher un export CSV
curl -X POST https://api.coffrify.com/v1/audit/export \
-H "Authorization: Bearer cof_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"format":"csv","since":"2026-05-01T00:00:00Z","until":"2026-05-31T23:59:59Z"}'

Réponse, GET /v1/audit

La réponse liste les entrées (data) et fournit un next_cursor pour la page suivante. Chaque entrée trace l'acteur, l'action et la ressource concernée.

{
"object": "list",
"data": [
{
"id": "aud_01HZ9XQAB3D2M7PFKTVN8CWRES",
"created_at": "2026-05-28T14:23:11.452Z",
"action": "api.post.transfers",
"actor_id": "usr_01HZ3KQAB3D2M7PFKTVN8CWRES",
"actor_type": "api_key",
"actor_label": "req_01HZ9XQAB3D2M7PF",
"resource_type": "transfer",
"resource_id": "trf_01HZ9XQAB3D2M7PFKTVN8CWR42",
"ip_address": "82.64.12.55",
"country_code": "FR",
"status": "success",
"http_method": "POST",
"route": "/api/v1/transfers",
"http_status": 201,
"latency_ms": 143,
"metadata": {}
}
],
"next_cursor": "MjAyNi0wNS0yOFQxNDoyMzoxMS40NTJafGF1ZF8wMUhaOVhRQUIzRDJNN1BGS1RWTjhDV1JFUw",
"has_more": true,
"limit": 100,
"note": "Audit retention follows the workspace plan: Free 30 days, Pro 1 year, Ultra/Entreprise 7 years."
}

Réponse, POST /v1/audit/export

L'export renvoie une URL de téléchargement temporaire, le format et le nombre de lignes (row_count). Récupérez le fichier rapidement : l'URL expire.

{
"object": "audit_export",
"format": "csv",
"row_count": 12847,
"filename": "coffrify-audit-ws_01HZ3KQAB3-2026-05-31.csv",
"download_url": "https://coffrify-transfer.s3.fr-par.scw.cloud/_exports/ws_01HZ3KQAB3/audit/1748700191000-coffrify-audit-ws_01HZ3KQAB3-2026-05-31.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...&X-Amz-Expires=86400&X-Amz-Signature=...",
"expires_at": "2026-06-01T10:23:11.000Z",
"range": {
"since": "2026-05-01T00:00:00Z",
"until": "2026-05-31T23:59:59Z"
},
"note": "Le fichier est conservé 24 h puis automatiquement purgé. Téléchargez-le rapidement."
}

Erreurs

Les erreurs portent sur une plage de dates invalide, un trop grand volume ou un scope manquant. Le tableau ci-dessous indique la résolution.

HTTPCode erreurQuandRésolution
401missing_api_keyAucune clé dans l'en-tête Authorization.Ajoutez Authorization: Bearer cof_live_… à chaque requête.
401invalid_api_keyLa clé n'existe pas ou appartient à un autre workspace.Vérifiez la clé dans votre tableau de bord Coffrify.
401expired_api_keyLa clé a dépassé sa date d'expiration.Renouvelez ou régénérez la clé dans les paramètres workspace.
401revoked_api_keyLa clé a été révoquée manuellement.Créez une nouvelle clé avec les scopes audit:read et/ou audit:export.
403scope_missingLa clé ne possède pas le scope requis (audit:read ou audit:export).Régénérez la clé en cochant le scope manquant.
429rate_limitedLe quota expensive de votre workspace est épuisé (fenêtre 60 s).Attendez le nombre de secondes indiqué dans l'en-tête Retry-After.
500internal_errorErreur inattendue côté serveur (RPC Supabase ou upload Scaleway).Réessayez après quelques secondes ; contactez le support si l'erreur persiste.
502internal_errorL'upload du fichier vers Scaleway a echoué (statut HTTP non-2xx).Erreur transitoire : réessayez. Si elle persiste, vérifiez la page de statut.
503internal_errorLes credentials Scaleway ne sont pas configurés côté serveur.Contactez l'équipe Coffrify : variable d'environnement manquante.

Voir aussi

  • Référence GET /v1/audit
  • Référence POST /v1/audit/export
  • Comprendre la pagination par curseur
  • Gérer les rate limits et les retries
  • Scopes et permissions des clés API
  • Recevoir des événements par Webhook
Continuer

Autres tutoriels à suivre