Skip to navigation

Events

Push events, venues, and ticket tiers, and define custom event properties
View as Markdown

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

{
"events": [
{
"event_id": "evt_45678",
"name": "Summer Music Festival 2026",
"event_url": "https://example.com/events/summer-fest",
"start_at": "2026-07-15T18:00:00Z",
"updated_at": "2026-02-10T12:00:00Z",
"end_at": "2026-07-15T23:00:00Z",
"doors_open_at": "2026-07-15T17:00:00Z",
"presale_start_at": "2026-03-01T10:00:00Z",
"onsale_start_at": "2026-03-15T10:00:00Z",
"description": "The biggest summer music event of the year!",
"primary_performer_names": ["The Headliners"],
"supporting_performer_names": ["Opening Act"],
"thumbnail_url": "https://example.com/images/summer-fest.jpg",
"genres": ["Rock", "Indie"],
"tags": ["outdoor", "festival"],
"has_tickets_available": true,
"total_tickets": 5000,
"timezone": "America/Toronto",
"venue": {
"name": "Central Park Amphitheatre",
"address": "100 Park Ave",
"city": "Toronto",
"state": "Ontario",
"country": "Canada",
"zip": "M5V 2H1"
},
"tiers": [
{ "tier_id": "tier_ga", "name": "General Admission", "price": 45.0 },
{ "tier_id": "tier_vip", "name": "VIP", "price": 150.0 }
]
}
]
}

Fields

FieldRequiredDescription
event_idYesYour event ID
nameYesEvent name
event_urlYesURL of the event page. Must be a valid URL.
start_atYesISO 8601 datetime
updated_atYesISO 8601 datetime
end_at, doors_open_at, presale_start_at, onsale_start_atNoISO 8601 datetimes
descriptionNo
primary_performer_names, supporting_performer_namesNoArrays of non-blank strings
thumbnail_urlNoMust be a valid URL
genres, tagsNoArrays of non-blank strings
has_tickets_available, total_ticketsNoBoolean; integer >= 0
timezoneNoNon-blank string. Use an IANA timezone (for example, America/Toronto).
venueNoObject with name (required), plus optional address, city, state, country, zip. Sub-fields that are present must be non-blank.
tiersNoArray of ticket tiers, each with tier_id, name, and price (all required)
propertiesNoCustom event property values. See Custom event property values.

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_By and presented_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 for text, a number for number.

Property values are checked synchronously. An unknown property name or a type mismatch returns 422 Unprocessable Entity before anything is queued:

{
"events": {
"0": {
"properties": [
"Custom event property 'capacity_tier' expects a number value, got text."
]
}
}
}

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

{
"has_tickets_available": false,
"properties": { "presented_by": "Live Nation" }
}
  • The body accepts the same fields as POST /events/, all optional, but must include at least one.
  • event_id comes from the path, not the body. updated_at is set by Hive when the update is applied.
  • Returns 202 Accepted.

Errors:

  • 404 Not Found: no event with that event_id exists. Create it with POST /events/ first.
  • 409 Conflict: the event can’t be partially updated. Re-send the full event with POST /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

FieldDescription
idHive’s ID for the property (integer). Use it in the single-property endpoints.
nameProperty name. Names are unique per brand, compared case-insensitively.
value_typeOne of text, number
created_atISO 8601 timestamp when the property was created
value_countNumber of events that currently have a value for this property

Error responses for 404 and 409, and for the property limit, have the form {"errors": ["..."]}.

Endpoints

Method and pathScopeDescription
GET /events/custom-properties/events:readList properties (paginated)
POST /events/custom-properties/events:writeCreate a property. Returns 201 Created.
GET /events/custom-properties/{property_id}/events:readGet one property
PUT /events/custom-properties/{property_id}/events:writeRename and/or retype a property. Returns 200 OK with the updated property.
DELETE /events/custom-properties/{property_id}/events:writeDelete a property. Returns 204 No Content.

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.

{
"offset": 0,
"limit": 500,
"total_items": 2,
"items": [
{
"id": 101,
"name": "presented_by",
"value_type": "text",
"created_at": "2026-08-20T14:30:00Z",
"value_count": 12
},
{
"id": 102,
"name": "capacity_tier",
"value_type": "number",
"created_at": "2026-08-21T09:00:00Z",
"value_count": 0
}
]
}

Create a property

{
"name": "presented_by",
"value_type": "text"
}
  • name (required): up to 255 characters, non-empty. Must be unique within the brand, compared case-insensitively.
  • value_type (required): text or number.

Returns 201 Created with the new property object.

Errors:

  • 409 Conflict: a property with this name already exists for the brand.
  • 422 Unprocessable Entity: name or value_type is 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: name or value_type is 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.

DELETE /events/custom-properties/101/?force=true

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.