/api/v1/events/logIngest events
The write path for the whole analytics product — the same endpoint the SDK batches to, open to your backend as well.
Authorization & identity
x-api-key carries your SDK app key. Identity rides in headers: x-device-id and x-account-id — send whichever you have; Fictura stitches them into one user and answers with the resulting master_user_id.
Body
Each: event_name (string, any name), optional status (success | failure | info), optional source (frontend | backend), optional properties (object). webhook as a source is reserved for Fictura's own billing events.
The RevenueCat app user id, for identity stitching with billing webhooks.
Targeting attributes merged onto the user: keys [a-zA-Z0-9_], max 40 chars, max 20 keys; values string (≤200), number, or boolean. $-prefixed keys are rejected — the server stamps $platform, $app_version, $country itself.
First-touch fields: link_slug, utm_*, click_id, install_referrer, growth_click_id. The SDK fills these automatically; server senders rarely need them.
ios | android | web; version ≤40 chars; ISO-3166 alpha-2.
curl -X POST https://api.fictura.co/api/v1/events/log \
-H "x-api-key: gk_..." \
-H "x-account-id: 8f14e45f" \
-H "Content-Type: application/json" \
-d '{"events":[{"event_name":"generation_success","status":"success","source":"backend"}]}'{
"ok": true,
"master_user_id": "0f1e2d3c-4b5a-6978-8695-a4b3c2d1e0f9"
}{
"ok": true,
"dropped": 3
}Events switched off in capture control are dropped at ingestion. The dropped response appears only when the whole batch was disabled; a mixed batch answers normally with just the live events kept. When a batch's attribution resolves an install, the response additionally carries a conversion object the SDK uses for deferred deep links.
Retrieve entitlement
Ask Fictura whether a user is currently entitled, instead of maintaining your own billing table. Derived from Stripe's and the stores' own webhooks; fails closed.
Event config
The kill-switch list, readable by anything that sends events — so disabled events can be skipped at the source instead of discarded on arrival.