Three endpoints record what happened, all under /api/v1 and all needing
events.write.
POST /eventsfor anything you want counted.POST /pageviewsfor a view of a page.POST /conversionsfor an outcome with a value.
Identify the visitor
The field that matters is the one identifying the browser or the person. Without it an event is counted and attributed to nobody, which inflates the totals and helps nothing: the funnel narrows on identity, and an event with none cannot join a click to an outcome.
Send it twice
Events are keyed on the identifiers you supply, so replaying a request that timed out is safe and does not double count. This matters more than it sounds: retries are the normal case in any integration that runs unattended.