Events
Create or update events
POST /events/ pushes event data to Hive. Events are matched by event_id. Send between 1 and 50 events per request.
Required scope: events:write
Fields
Send datetimes as ISO 8601 strings with a UTC offset (for example, 2026-07-15T18:00:00-04:00 or 2026-07-15T18:00:00Z). Datetimes without an offset are read in the America/Toronto timezone.
The endpoint is asynchronous and returns 202 Accepted. See How It Works.
Validation is all-or-nothing. If any event in the batch fails validation, the request returns
422 Unprocessable Entity and none of the events are saved.
Custom event property values
properties sets values for custom event properties on the event. Keys are property names; values are strings or numbers.
- Each name must match an existing property definition. Names are matched case-insensitively, and the same name can’t appear twice (for example,
Presented_Byandpresented_by). - Names are non-empty and up to 255 characters.
- At most 100 properties per event.
- Text values are non-blank strings of up to 1000 characters. Number values must be finite.
- Each value must match the property’s
value_type: a string fortext, a number fornumber.
Property values are checked synchronously. An unknown property name or a type mismatch returns 422 Unprocessable Entity before anything is queued:
Partially update an event
PATCH /events/{event_id}/ updates individual fields on an event that already exists in Hive. Send only the fields that changed.
Required scope: events:write
- The body accepts the same fields as
POST /events/, all optional, but must include at least one. event_idcomes from the path, not the body.updated_atis set by Hive when the update is applied.- Returns
202 Accepted.
Errors:
404 Not Found: no event with thatevent_idexists. Create it withPOST /events/first.409 Conflict: the event can’t be partially updated. Re-send the full event withPOST /events/.422 Unprocessable Entity: the body is empty, a field is invalid, or a property value is invalid.
Custom event properties
Custom event properties let you define your own metadata fields for events. These endpoints manage the property definitions: the named, typed fields available to the authorized brand’s events.
Unlike the push endpoints, custom event property endpoints are synchronous. Changes take
effect immediately and the response body contains the result. There’s no 202 or background
processing step.
The property object
Error responses for 404 and 409, and for the property limit, have the form {"errors": ["..."]}.
Endpoints
List properties
GET /events/custom-properties/ accepts limit (default 500, range 0–500) and offset (default 0). An out-of-range limit returns 422 Unprocessable Entity.
Create a property
name(required): up to 255 characters, non-empty. Must be unique within the brand, compared case-insensitively.value_type(required):textornumber.
Returns 201 Created with the new property object.
Errors:
409 Conflict: a property with this name already exists for the brand.422 Unprocessable Entity:nameorvalue_typeis invalid.422 Unprocessable Entity: the brand has reached the maximum of 100 custom event properties. Delete one before creating another.
Update a property
PUT /events/custom-properties/{property_id}/ is a full replacement: send both name and value_type, even if only one is changing.
Errors:
404 Not Found: no property with that ID exists for the authorized brand.409 Conflict: another property with this name already exists, or the property already has values and its type can’t change.422 Unprocessable Entity:nameorvalue_typeis invalid.
A property’s value_type is locked once any event has a value for it (value_count > 0). Re-sending the current type is always allowed. To change the type of a property that has values, delete it and create it again with the new type.
Delete a property
Deleting a property also deletes all of its values from your events.
If the property has values on one or more events, the request fails with 409 Conflict and the error message says how many events are affected. Re-send with the force=true query parameter to confirm deletion of the property and all of its values.
force is a boolean; an invalid value returns 422 Unprocessable Entity. An unknown property_id returns 404 Not Found. On success the response is 204 No Content.