Lister les événements

GET /v1/events · autorisation events:read

Renvoie les événements de l'environnement, dans l'ordre, du plus ancien au plus récent. Chaque événement est le même document, avec le même id, que celui livré par les webhooks. Les événements sont conservés pendant 30 jours sur toutes les offres.

Utilisez ce point de terminaison lorsque votre système ne peut pas recevoir de webhooks, ou pour combler un manque après une panne : conservez le dernier next_cursor que vous avez traité et poursuivez à partir de celui-ci.

L'environnement provient toujours de la clé d'API ; il n'existe aucun paramètre d'environnement.

Requête

Paramètre Emplacement Obligatoire Description
after query non next_cursor de la réponse précédente, ou latest pour ne recevoir que les événements enregistrés à partir de maintenant. Sans ce paramètre, la liste commence au plus ancien événement conservé.
types query non Types d'événements séparés par des virgules, 20 au maximum, par exemple user.created,user.deleted. Sans ce paramètre, tous les types sont renvoyés.
org_id query non Seulement les événements de cette organisation (org_…).
limit query non Taille de page, de 1 à 100. Par défaut 20.
payload query non thin (par défaut) ou full. full nécessite également l'autorisation users:read. Tant que la charge utile complète n'est pas disponible, full renvoie la charge utile réduite.
purpose query non tail (par défaut) ou webhooks_listen. webhooks_listen n'est accepté que dans les environnements development et staging.

Réponse

200 OK :

Champ Description
data Événements dans l'ordre. Chaque événement possède un seq qui augmente au sein de l'environnement.
next_cursor Toujours présent. Transmettez-le comme after dans la requête suivante, même lorsque data est vide.
has_more true lorsque d'autres événements suivent ; relancez la requête immédiatement. Lorsque la valeur est false, attendez avant d'interroger à nouveau (5 à 60 secondes).

Le curseur ne dépend pas de types ni de org_id : vous pouvez modifier le filtre et poursuivre à partir de la même position. Un curseur ne fonctionne que dans l'environnement qui l'a émis.

{
  "data": [
    {
      "id": "evt_01j9xk3m7q8r2s4t6v8w0y2z4a",
      "type": "connection.deleted",
      "schema_version": 1,
      "environment_id": "env_01j9xk3m7q8r2s4t6v8w0y2z4e",
      "occurred_at": "2026-11-03T08:15:42.120Z",
      "recorded_at": "2026-11-03T08:15:42.140Z",
      "seq": 4182,
      "data": {
        "object": {"id": "conn_01j9xk3m7q8r2s4t6v8w0y2z4f", "status": "deleted"},
        "object_version": 2
      },
      "context": {"actor": {"type": "system"}, "request_id": "0192a6c1-7d3e-7a10-9b2c-3d4e5f607182"}
    }
  ],
  "next_cursor": "eyJ2IjoxfQ.c2lnbmF0dXJl",
  "has_more": false
}

Exemple : interroger les nouveaux événements

cursor=latest
while true; do
  page=$(curl -sS -G https://api.keenauth.com/v1/events \
    -H "Authorization: Bearer $KEENAUTH_API_KEY" \
    --data-urlencode "after=$cursor" --data-urlencode "limit=100")
  echo "$page" | jq -c '.data[]'
  cursor=$(echo "$page" | jq -r '.next_cursor')
  [ "$(echo "$page" | jq -r '.has_more')" = "true" ] || sleep 10
done

La CLI effectue la même opération avec keenauth events tail.

Erreurs

Chaque erreur est un corps application/problem+json accompagné d'un code stable.

HTTP code Quand
400 invalid_cursor Le curseur est mal formé ou a été émis dans un autre environnement.
401 unauthenticated La clé d'API est absente, invalide ou révoquée.
403 insufficient_permissions La clé ne possède pas events:read, ou payload=full est demandé sans users:read.
403 test_feature_not_in_production purpose=webhooks_listen dans un environnement de production.
422 validation_failed Un paramètre est invalide ou répété ; errors[].pointer l'indique.
429 rate_limited La limite de débit a été dépassée ; respectez Retry-After.
503 service_unavailable Une dépendance est temporairement indisponible ; réessayez plus tard.

Données personnelles

Ce point de terminaison traite des données personnelles : les événements. Données personnelles dans les API KeenAuth décrit ce qui est stocké, pendant combien de temps les données sont conservées et comment elles sont supprimées. N'envoyez de catégories particulières de données personnelles (santé, données biométriques, religion, opinions politiques, orientation sexuelle) dans aucun champ.