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" } ]}هل كانت هذه الصفحة مفيدة؟