Contacts
Create or update contacts
POST /contacts/ pushes contact data to Hive. Contacts are matched by email or phone_number, so the same endpoint handles both creates and updates. Every contact pushed through the API is added to the brand’s Hive API segment, so API-sourced contacts can be filtered and targeted in the dashboard.
Required scope: contacts:write
Fields
contacts takes an array of 1–50 contacts. Each contact needs at least one of email or phone_number.
Text fields are trimmed and must be non-blank. Unknown fields are ignored.
Timestamps must be ISO 8601 strings; numeric Unix timestamps are rejected. A timestamp without a UTC offset is interpreted in the Hive site timezone (America/Toronto), so always include an offset (for example, Z or -05:00).
If any contact fails validation, the whole batch is rejected with 422 Unprocessable Entity and nothing is saved. See Errors & Status Codes.
Use E.164 format (for example, +15195551234), and make sure the country code and area code are
valid.
The consent time for opt-in and opt-out decisions is set to the updated_at value you send.
Custom properties
custom_properties is an optional JSON object of metadata for the contact, where keys are strings and values are strings or numbers. Numbers are stored as strings.
- Maximum 50 custom properties per contact.
- Keys can be up to 255 characters.
- Values can be up to 1,000 characters.
- Keys and values are trimmed and must be non-empty.
- Duplicate keys aren’t allowed.
Contacts can’t be deleted through the API. This is intentional, to preserve historical ticketing and engagement data.
Delete custom properties from contacts
POST /contacts/custom-properties/delete/ removes specific custom property keys from one or more contacts.
Required scope: contacts:write
Both contact endpoints are asynchronous and return 202 Accepted. See How It Works. The delete endpoint first checks that every identifier matches an existing contact: if any don’t, Hive rejects the request with 422 Unprocessable Entity and nothing is deleted.