POST /api/v2/buyer/advertisers/{advertiserId}/log-event
Sends up to 10,000 outcome or marketing events in a single call, scoped to an event_source_id previously registered via Sync event sources. Apostra checks the request and forwards it to the tracking service. A call that repeats an event_type + event_id pair is rejected. The tracking service, not Apostra, deduplicates resends across calls by event_id + event_type + event_source_id.
Request
Parameters
Response
match_quality, and partial_failures come from the tracking service. A 200 with partial_failures is normal — bad events are rejected individually while the rest succeed. Each failure carries event_id, code, and message. Treat a failure as something to fix at source, not a transient error.
Errors
-
400 VALIDATION_ERROR— emptyevents, more than 10,000 events, missingcustom_event_nameon acustomevent, anevent_typethe source doesn’t accept, or (when the source has declaredvalueCurrencies) a monetary event with a missing or unlistedcurrency. Also returned when:- a
hashed_emailorhashed_phoneis not a 64-character lowercase hex SHA-256; - a
uids[].valueorclick_idlooks like a plaintext email, or a phone number written with a leading+, spaces, hyphens, or parentheses (for exampleuids[0].value looks like a raw email; send hashed_email instead). A bare digit string is accepted as a numeric ID; - two events in the call share an
event_typeandevent_id.
error.details.issuesnames the event and field. - a
-
404 NOT_FOUND—advertiserIddoes not exist, orevent_source_idis not registered on the advertiser.
Related
Event source tasks
All event source operations
Log Events guide
Event types, identity fields, and best practices
Conversion API
Identity-hashing rules and attribution methods
Sync event sources
Register a source before logging