EnjoyHQ
User research repository platform. Sync your warehouse data to import feedback documents and customer profiles into EnjoyHQ via their REST API.
Prerequisites
- An EnjoyHQ account on the Scale subscription plan (API access required)
- An EnjoyHQ API key generated from Manage Integrations > API
- HTTPS connectivity to
api.enjoyhq.com
Authentication
EnjoyHQ uses API Key authentication via a Token authorization header.
- In EnjoyHQ, navigate to Manage Integrations
- Select the API card in the Other section
- Click Add New API Key to generate a new key
- Copy the API key immediately
- Enter the API key in Zeotap when configuring the destination
Important: API access requires a Scale subscription plan. Contact EnjoyHQ support if you do not see the API option in your integrations page.
Configuration
EnjoyHQ does not require additional configuration fields beyond authentication. All API requests are routed to api.enjoyhq.com/v1.
Target Settings
| Field | Type | Required | Description |
|---|---|---|---|
| Object Type | Select | Yes | Type of data to send: Documents (Feedback & Research Data) or Users (Customer Profiles) |
Supported Operations
Sync Modes
| Mode | Supported |
|---|---|
| Upsert | Yes |
| Insert | Yes |
| Update | — |
| Mirror | — |
Upsert behavior:
- Documents: When a
foreign_idis mapped, EnjoyHQ uses it to track updates. Subsequent imports with the sameforeign_idupdate the existing document rather than creating a duplicate. - Users: Users are matched by
email. If a user with the given email exists, their properties and segments are updated.
Audience Sync Modes
EnjoyHQ does not support audience/list membership management. Use standard sync modes to import data.
| Mode | Supported |
|---|---|
| Add | — |
| Remove | — |
| Mirror | — |
| Upsert | — |
Features
- Field Mapping: Yes
- Schema Introspection: No
Required Mapping Fields
| Object Type | Required Fields | Description |
|---|---|---|
| Documents | source, body | The feedback source identifier and the text content of the document. |
| Users | email | Email address of the user. Used for record matching and upserting. |
Default Destination Fields
Documents: source, body, subject, foreign_id, sentiment, created_at, tags, author_email, author_name
Users: email, name, properties, segments
How It Works
Documents
When the Documents object type is selected, Zeotap sends feedback data to the EnjoyHQ /v1/documents/import endpoint. Each row becomes a document in your EnjoyHQ repository.
The following fields are mapped:
source— Identifies the feedback source (e.g., “support”, “survey”, “intercom”). Case-insensitive.body— The text content of the feedback. Maximum 64 KB per content body.subject— Optional title for the document.foreign_id— Optional external identifier for tracking updates across imports.sentiment— NPS score (0-10) or explicit value: “positive”, “negative”, “neutral”. Scores 0-6 map to negative, 7-8 to neutral, 9-10 to positive.created_at— ISO 8601 timestamp for the document.tags— JSON array of categorization strings (max 500 elements).author_emailandauthor_name— Author information attached to the document content.
Users
When the Users object type is selected, Zeotap sends customer profile data to the /v1/users/import endpoint. Users are matched by email address.
email— Required. The user’s email address (max 100 characters).name— Optional display name (max 128 characters).properties— JSON array of key-value pairs for custom user attributes. Each property has akey,value, andfield_type(“string”, “number”, or “date”).segments— JSON array of segment objects with anamefield.
Any additional mapped fields that are not part of the standard set are automatically sent as user properties with a string field type.
Note: User property and segment processing is asynchronous. It may take approximately one minute for imported properties to appear in EnjoyHQ.
Batch Processing
Zeotap sends data in batches of up to 500 items per API request (the EnjoyHQ API maximum for the documents/import array). Individual request payloads must stay under 10 MB. Failed batches are retried automatically with exponential backoff.
If any single document or user in a batch fails validation, the EnjoyHQ API rejects the entire request. Zeotap surfaces the failure against every row in the affected chunk so you can inspect the response and correct the offending row before re-running the sync.
Rate Limits
EnjoyHQ applies rate limits to protect API stability:
- Rate-limited requests receive an HTTP
429response - Zeotap automatically retries with exponential backoff when rate limited
- String fields are limited to 1,024 characters
- Content body fields are limited to 64 KB
- Tag arrays are limited to 500 elements per document
- Maximum request payload size is 10 MB
For high-volume imports, consider scheduling syncs during off-peak hours.
Best Practices
- Use
foreign_idfor document deduplication: Map a unique identifier from your source data toforeign_idto enable upsert behavior and prevent duplicate documents when re-syncing - Set the
sourcefield consistently: EnjoyHQ groups documents by source. Use consistent naming (e.g., “zendesk”, “intercom”, “survey”) so documents are properly organized in the repository - Use NPS scores for sentiment: If you have numeric NPS scores, map them directly to the
sentimentfield. EnjoyHQ automatically converts 0-6 to negative, 7-8 to neutral, and 9-10 to positive - Sync users before documents: If you need to associate documents with user profiles, import user records first so that author email matching works correctly
- Keep property names stable: Changing user property keys between syncs creates new properties rather than updating existing ones
Troubleshooting
Authentication failed: invalid API key
Verify that you copied the complete API key from EnjoyHQ Manage Integrations > API. Ensure your account is on the Scale plan, which is required for API access. Generate a new key if the existing one may have been revoked.
403 Validation errors on import
The API returns 403 with validation details when required fields are missing or values are invalid. Check that source and body are mapped for documents, or email is mapped for users. Verify that field values do not exceed length limits (1,024 characters for strings, 64 KB for content body).
Documents not appearing in EnjoyHQ
Document imports are processed asynchronously. Allow a few minutes for documents to appear in search results. Check that the source field is mapped — documents without a source are rejected. Verify the body field contains non-empty text content.
User properties not updating
User properties are processed asynchronously and may take approximately one minute to appear. Ensure the email field is correctly mapped, as it is the primary key for user matching. Note that sending an empty properties array deletes all previously imported properties.
413 Payload too large
The request payload exceeds the 10 MB limit. This typically happens with very large text content in the body field or too many tags. Reduce the number of rows per batch or trim large text fields before syncing.
429 Too Many Requests
You are exceeding the EnjoyHQ API rate limit. Zeotap retries automatically with backoff, but if errors persist, reduce the sync frequency. Check if other integrations are also importing data concurrently.
Duplicate documents appearing
If documents are being duplicated across syncs, ensure you are mapping the foreign_id field to a unique identifier in your source data. Without foreign_id, each import creates a new document even if the content is identical.
Sentiment values not recognized
The sentiment field accepts NPS scores (0-10) or explicit string values: “positive”, “negative”, “neutral”. Other values are ignored. If using numeric scores, ensure they are integers between 0 and 10.