Ingérer un lot d'événements analytics
Persiste durablement les événements valides, déduplique par `(project, environment, eventId)`, retourne un accusé partiel. Limites V1 : - max 100 events par lot - max 256 KiB corps sérialisé UTF-8 - max 32 KiB par événement sérialisé Rate limit : compteur Redis partagé multi-instance (repli mémoire si Redis down).
Persiste durablement les événements valides, déduplique par
(project, environment, eventId), retourne un accusé partiel.
Limites V1 :
- max 100 events par lot
- max 256 KiB corps sérialisé UTF-8
- max 32 KiB par événement sérialisé
Rate limit : compteur Redis partagé multi-instance (repli mémoire si Redis down).
X-FlagFix-Sdk-Key*stringClé d'environnement complète {prefix}.{secret}.
Le serveur en dérive projectId, environmentId et keyType.
CLIENT_SDK et SERVER_SDK acceptés selon l'opération.
application/json- body
events*array<>1 <= items <= 100Accusé après commit durable. Tous les eventId du lot devraient
apparaître dans acceptedIds, duplicateIds ou rejected. Un id absent
est traité par le SDK comme non confirmé.
application/json- response
acceptedIds*array<string>Persistés durablement dans ce lot
duplicateIds*array<string>Déjà connus pour ce project/environment — idempotent
rejected*array<>curl -X POST 'http://localhost:18080/api/v1/ingest/events' \ -H 'X-FlagFix-Sdk-Key: ff_development_client-sdk.abc123…' \ -H 'Content-Type: application/json' \ -d '{ "events": [ { "schemaVersion": 1, "eventId": "evt_01JBEXAMPLE000000000000001", "kind": "track", "name": "checkout_started", "occurredAt": "2026-11-02T10:00:00.000Z", "userId": "user_123", "anonymousId": "$device:9f3c2a1b-4d5e-6789-abcd-ef0123456789", "sessionId": "ses_01JBEXAMPLE", "properties": { "productId": "product_456", "amount": 12000 }, "context": { "page": { "url": "https://app.example/checkout" }, "library": { "name": "@flagfix/browser", "version": "0.1.0" } }, "sdk": { "name": "@flagfix/browser", "version": "0.1.0" }, "sourceInstanceId": "tab_7c2a", "sequence": 12 }, { "schemaVersion": 1, "eventId": "evt_01JBEXAMPLE000000000000002", "kind": "exposure", "name": "$exposure", "occurredAt": "2026-11-02T10:00:01.000Z", "userId": "user_123", "properties": { "featureKey": "new_checkout", "variant": "on", "configurationVersion": 12 }, "sdk": { "name": "@flagfix/browser", "version": "0.1.0" }, "sourceInstanceId": "tab_7c2a", "sequence": 13 } ]}'{ "acceptedIds": [ "evt_01JBEXAMPLE000000000000001" ], "duplicateIds": [ "evt_01JBEXAMPLE000000000000002" ], "rejected": [ { "eventId": "evt_01JBEXAMPLE000000000000003", "code": "INVALID_PROPERTIES", "retryable": false, "message": "properties must be a JSON object" } ]}Was this page useful?