API reference / Analytics
post
/v2/trackIngest analytics events
- Operation
trackEvents- Authentication
- API key
Batched, because East African mobile connections make a request per event wasteful and the client buffers offline anyway. Two rules are enforced here rather than trusted to the client: event names come from the closed enum in @haavisa/analytics and an unknown name is rejected rather than stored, and known PII keys are refused — this endpoint is the boundary between our data and a third-party analytics provider, and the last place a passport number can be stopped from leaving.
Request
Body
eventsAnalyticsEvent[]requiredResponses
202Stored, not yet forwarded. A partially rejected batch is not worth retrying the good half for.
acceptedintegerrequiredrejectedintegerrequiredrejectionsobject[]400The request body or query failed validation.
errorobjectrequired401No key, an unknown key, a revoked key, or a key whose tenant is not active. All four return an identical body on purpose: distinguishing them would let a caller discover which partners we have.
errorobjectrequired403The key is valid but does not hold the scope this route requires.
errorobjectrequired404Not found, or not yours. A resource belonging to another tenant answers 404 rather than 403, because 403 would confirm the record exists.
errorobjectrequiredExample
curl -X POST https://api.haavisa.com/v2/track \
-H "Authorization: Bearer $HAAVISA_API_KEY"Something unclear? The eligibility guide explains the model behind the answers; the errors guide covers the envelope.