When something fails in Hightouch, the platform assigns an error code that identifies the cause. This page is a complete reference of all Hightouch error codes, organized by where they originate.
Some error codes include troubleshooting links directly in the Hightouch UI. If you don't see a link for your error, use this page to find the code and follow the resolution steps.
Don't see your error code? This page covers Hightouch platform error codes only. Hightouch passes error messages from third-party APIs directly, so if you see a vendor error (like a 400 or 409), check the destination's docs page under Tips and troubleshooting or use the live debugger to inspect the full response.
If your error still isn't covered anywhere, use the Send feedback button on this page to let us know and we'll add it.
Sync request errors
These errors occur during sync planning, before Hightouch sends any data to the destination. They typically indicate a problem with your model, primary key, or warehouse configuration.
| Error code | What it means | How to resolve |
|---|---|---|
DUPLICATE_COLUMNS_DETECTED | Your model query returns duplicate column names. | Alias columns in your model SQL so every selected field has a unique name. |
NON_UNIQUE_PRIMARY_KEY | The selected primary key contains duplicate values. | Update your model so each row has a unique identifier. If you're using a SQL model, add a DISTINCT clause or GROUP BY on the key column. |
UNSUPPORTED_PRIMARY_KEY_TYPE | The primary key's data type isn't supported for this sync path. | Cast the primary key to a supported type (typically VARCHAR or INTEGER) in your model SQL. |
QUERY_COLUMN_MISSING | A column referenced in your sync configuration no longer exists in the model query results. | Refresh the model schema in Hightouch and update your field mappings to use valid columns. |
WAREHOUSE_TABLE_MISSING | A warehouse table required for sync planning doesn't exist. | Confirm the table still exists in your warehouse and that the model points to the correct schema and table name. |
PREVIOUS_SYNC_RUN_OBJECT_MISSING | Stored objects from the previous sync run are missing, usually because cached plan data expired. | Retry the sync. If it persists, trigger a full resync to rebuild sync state. |
REMOVE_PLAN_INCOMPLETE | Backfill or removal planning couldn't complete during a planner transition. | Retry the sync after a few minutes. If it continues, . |
REMOVE_RETRY_CHANGED_COLUMN_TYPES | Rejected-row removal retries are unsafe because model column types changed between runs. | Refresh your model schema and trigger a full resync from a consistent state. |
SORT_RAN_OUT_OF_DISK_SPACE | Sorting rows exhausted available disk space. | Narrow the model to reduce row volume, or for infrastructure help. |
UNSPECIFIED | Hightouch couldn't classify the failure into a more specific code. | Use the live debugger and warehouse sync logs to identify the root cause. |
Destination errors
Generic destination errors
These errors can occur with any destination. They indicate a problem with authentication, rate limits, or the destination's availability.
| Error code | What it means | How to resolve |
|---|---|---|
DESTINATION_INVALID_GRANT | The destination's authorization grant expired or was revoked. | Reconnect the destination in Hightouch to refresh authorization. |
DESTINATION_INVALID_CREDENTIALS | The destination credentials are invalid. | Verify the username, password, token, or secret configured for the destination. Reconnect if needed. |
DESTINATION_INVALID_API_KEY | The API key is invalid or expired. | Replace it with a current key that has the required permissions. |
DESTINATION_DEFINITION_NOT_FOUND | Hightouch couldn't load the destination type definition. | Confirm you're using a supported destination type. If the connector appears broken, . |
DESTINATION_INTERNAL_ERROR | The destination returned a generic internal failure or timed out. | Retry the sync. If it continues, check the destination's status page for outages, or . |
DESTINATION_RATE_LIMIT | The destination rate-limited the sync. | Wait for the rate limit window to reset, then retry. To prevent recurrence, reduce sync frequency or batch volume. |
DESTINATION_MISSING_AD_ACCOUNT | A required ad account is missing from the destination configuration or inaccessible. | Re-check the destination setup and confirm your account has access to the selected ad account. |
DESTINATION_PAYLOAD_TOO_LARGE | The destination rejected the payload as too large. | Reduce batch size in your sync configuration, or trim the number of mapped fields. |
Salesforce
For additional Salesforce-specific errors returned by the Salesforce API, see Salesforce: Tips and troubleshooting.
| Error code | What it means | How to resolve |
|---|---|---|
SALESFORCE_INACTIVE_USER | The Salesforce integration user is inactive. | Reconnect the destination with an active Salesforce user. |
SALESFORCE_EXPIRED_TOKEN | The Salesforce access token expired. | Reauthorize the destination in Hightouch. |
SALESFORCE_INACTIVE_ORG | The Salesforce org is inactive or inaccessible. | Confirm the org is active and the integration user can log in. |
SALESFORCE_RESOURCE_DOES_NOT_EXIST | A referenced Salesforce object, field, or record doesn't exist. | Check the object name, field name, or record ID in your sync configuration. |
SALESFORCE_AUTH_FAILURE | Salesforce authentication failed. | Re-check credentials, connected app settings, and any IP or login restrictions in Salesforce. |
SALESFORCE_REQUESTS_LIMIT_EXCEEDED | Salesforce API limits were exceeded. | Wait for the limit to reset, or reduce sync frequency and concurrency. See Salesforce API limits. |
SALESFORCE_NETWORK_DIFFICULTY | A network or transport failure prevented the Salesforce request from completing. | Retry the sync and check for temporary Salesforce outages on Salesforce Status. |
SALESFORCE_MAX_CALL_STACK | Salesforce hit a recursion or call-stack limit during processing. | Review Apex triggers, flows, and automation rules that may be recursively updating records during the sync. See Salesforce: UNABLE_TO_LOCK_ROW for related guidance. |
SALESFORCE_UNABLE_TO_LOCK_ROW | Salesforce row locking prevented the write because another process is modifying the same record. | Retry later, reduce concurrent updates, or lower your parallelization setting. See Salesforce: UNABLE_TO_LOCK_ROW for detailed steps. |
Salesforce Marketing Cloud (SFMC)
For additional SFMC-specific errors, see SFMC: Tips and troubleshooting.
| Error code | What it means | How to resolve |
|---|---|---|
SFMC_DATA_EXTENSION_ADD_UPDATE_ONLY | This SFMC sync path only supports add and update operations. | Change the sync mode or target a Data Extension that supports the requested operation. |
SFMC_IMPORT_FAILED_NO_RECORDS | The SFMC import failed because no records were present in the batch. | Confirm that the source model returned rows for this sync run. |
HubSpot
For additional HubSpot-specific errors, see HubSpot: Tips and troubleshooting.
| Error code | What it means | How to resolve |
|---|---|---|
HUBSPOT_RATE_LIMIT_DAILY | HubSpot's daily API limit was reached. | Wait for the daily limit to reset (typically midnight ET). To prevent recurrence, reduce sync frequency or volume. See HubSpot API usage guidelines. |
HUBSPOT_RATE_LIMIT_TEN_SECONDLY | HubSpot's rolling 10-second rate limit was reached. | Hightouch automatically retries these. If the error persists across runs, reduce concurrent syncs to HubSpot. |
HUBSPOT_RATE_LIMIT_SECONDLY | HubSpot's per-second rate limit was reached. | Hightouch automatically retries these. Reduce burst volume if the error recurs. |
HUBSPOT_INVALID_REFRESH_TOKEN | The HubSpot OAuth refresh token is invalid or expired. | Reconnect the HubSpot destination in Hightouch to generate a new token. |
HUBSPOT_SYNC_ERROR | HubSpot returned a generic sync error. | Retry the sync. If it continues, check HubSpot-side logs and object validation rules. |
HUBSPOT_CONNECTION_ERROR | A connection failure prevented the HubSpot request from completing. | Retry and check for temporary HubSpot outages on HubSpot Status. |
HUBSPOT_CONTACT_ALREADY_EXISTS | A contact with this email already exists in HubSpot. | Review your record matching configuration. HubSpot uses email as the primary unique identifier. See HubSpot: 409 - Contact already exists for detailed steps. |
HUBSPOT_CLOUDFLARE_BLOCKED_IP | HubSpot's Cloudflare proxy blocked the request IP. | If you use Hightouch's static IPs, confirm they aren't blocked by your HubSpot account's network settings. Contact HubSpot support if needed. |
Google Ads
For additional Google Ads-specific errors, see Google Ads: Tips and troubleshooting.
| Error code | What it means | How to resolve |
|---|---|---|
GOOGLE_ADS_INTERNAL_SERVER_ERROR | Google Ads returned an internal server error. | Retry the sync after a short delay. Check Google Ads Status for outages. |
GOOGLE_ADS_USER_LIST_NOT_FOUND | The target Google Ads audience doesn't exist. | Confirm the audience still exists in Google Ads and the connected account has access. |
GOOGLE_ADS_UNAUTHORIZED | Google Ads rejected the request due to missing permissions or invalid authorization. | Reauthorize the destination and confirm the connected account has the required access level. |
GOOGLE_ADS_USER_LIST_NAME_ALREADY_IN_USE | An audience with this name already exists in Google Ads. | Use a unique audience name, or connect the sync to the existing audience. |
GOOGLE_ADS_CONCURRENT_MODIFICATION | Google Ads rejected the update because another change is still processing. | Wait a few minutes and retry. Avoid running multiple syncs to the same audience simultaneously. |
GOOGLE_ADS_STORE_SALES_DIRECT_DATA_NOT_ALLOWED | Store sales direct data isn't enabled for this Google Ads account. | Confirm account eligibility and enable the feature in Google Ads. See Google Ads Store Sales requirements. |
GOOGLE_ADS_GENERIC_INVALID_ARGUMENT | Google Ads rejected the request as invalid. | Review required fields, identifiers, and mapped values. Use the live debugger to inspect the rejected payload. |
Braze
For additional Braze-specific errors, see Braze: Tips and troubleshooting.
| Error code | What it means | How to resolve |
|---|---|---|
BRAZE_SERVICE_UNAVAILABLE | Braze is temporarily unavailable. | Retry the sync after a short delay. Check Braze Status for outages. |
BRAZE_ACCESS_DENIED | Braze denied access to the API. | Confirm the API key has the required permissions in your Braze dashboard. |
BRAZE_INVALID_REQUEST | Braze rejected the request content or structure. | Check required fields and value formats. Use the live debugger to inspect the rejected payload. |
TikTok
For additional TikTok-specific errors, see TikTok: Tips and troubleshooting.
| Error code | What it means | How to resolve |
|---|---|---|
TIKTOK_GATEWAY_TIMEOUT | TikTok timed out while processing the request. | Retry the sync after a short delay. |
TIKTOK_REJECTED_REPLACE_OP | TikTok rejected a replace operation because another audience job is still processing. | Wait for the existing job to complete before retrying. |
TIKTOK_AUDIENCE_ERROR | The TikTok audience is invalid or not editable. | Confirm the audience exists in TikTok Ads Manager and supports the requested operation. |
TIKTOK_PERMISSION_DENIED | The connected TikTok account lacks the required permissions. | Reauthorize with a TikTok account that can manage the target advertiser and audience. |
TIKTOK_INVALID_ENCRYPTION_VALUE | TikTok rejected the configured encryption or hashing value. | Verify the expected hashing format in your TikTok sync configuration. |
Google Sheets
For additional Google Sheets-specific errors, see Google Sheets: Tips and troubleshooting.
| Error code | What it means | How to resolve |
|---|---|---|
GOOGLE_SHEETS_INVALID_GRANT | The Google Sheets authorization grant is invalid. | Reauthorize the destination in Hightouch. |
GOOGLE_SHEETS_INVALID_DATA_TYPE | The sync tried to write an unsupported value type to a cell. | Cast complex values (arrays, objects) to plain text or supported scalar types in your model. |
GOOGLE_SHEETS_INVALID_RANGE | The configured write range is invalid. | Check the tab name, cell range, and sheet structure in the destination configuration. |
GOOGLE_SHEETS_EXCEEDS_GRID_LIMITS | The write would exceed the spreadsheet's grid limits (10 million cells). | Reduce the number of rows or columns, or write to a new sheet. |
GOOGLE_SHEETS_MISSING_SHEET_ID | The spreadsheet or sheet identifier is missing from the configuration. | Reopen the destination setup and confirm the selected sheet. |
GOOGLE_SHEETS_QUOTA_EXCEEDED | The Google Sheets API quota was exceeded. | Retry later, or reduce sync frequency. See Google Sheets API limits. |
GOOGLE_SHEETS_ENTITY_NOT_FOUND | The target spreadsheet or sheet no longer exists. | Confirm the spreadsheet exists and is shared with the connected Google account. |
Slack
For additional Slack-specific errors, see Slack: Tips and troubleshooting.
| Error code | What it means | How to resolve |
|---|---|---|
SLACK_NOT_IN_CHANNEL | The Hightouch Slack app isn't a member of the target channel. | Invite the Hightouch app to the channel, or select a different channel. |
SLACK_IS_ARCHIVED | The target Slack channel is archived. | Unarchive the channel or choose a different destination channel. |
SLACK_INVALID_BLOCKS | Slack rejected the block payload as invalid. | Validate the Block Kit JSON structure and required fields. |
SLACK_NO_TEXT | The Slack message is missing required text content. | Add message text to your sync configuration, even if blocks are also present. |
SLACK_NON_CALLABLE_ITERATOR | An unexpected payload construction failure occurred. | Retry once. If it persists, . |
SLACK_UNEXPECTED_TOKEN | Slack rejected the payload due to invalid syntax. | Review templated message content and JSON formatting for syntax errors. |
Other destinations
| Error code | What it means | How to resolve |
|---|---|---|
AMPLITUDE_INVALID_JSON_REQUEST | Amplitude rejected the request payload format. | Review field mappings and ensure the JSON structure matches Amplitude's API requirements. |
CITRUS_AD_INVALID_BASE_URL | The configured CitrusAd base URL is invalid. | Update the destination with the correct API endpoint. |
ITERABLE_INVALID_LIST_ID | The Iterable list ID is invalid. | Confirm the list still exists in Iterable and the configured ID is correct. |
ANAPLAN_BAD_MAPPINGS | The Anaplan field mappings are invalid. | Re-check dimension, line-item, and field mapping setup. See Anaplan: Tips and troubleshooting. |
ANAPLAN_NULL_POINTER | The Anaplan request failed with a null-pointer error. | Retry first. If it persists, check mapped objects and source values for missing required fields. |
TABOOLA_MISSING_NUMERIC_ACCOUNT_ID | The Taboola account ID is missing or not numeric. | Update the destination configuration with the correct numeric account ID. |
ELASTICSEARCH_INVALID_METADATA_TYPE | The Elasticsearch metadata type is invalid. | Check mapping configuration and ensure metadata fields use supported types. |
FRESHDESK_CLOUDFLARE_IP_BLOCKED | Freshdesk's Cloudflare proxy blocked the request IP. | Confirm Hightouch's static IPs are allowlisted, or contact Freshdesk support. |
Rejected-row errors
Rejected-row errors apply to individual records, not the entire sync run. You can inspect rejected rows in the live debugger or warehouse sync logs.
| Error code | What it means | How to resolve |
|---|---|---|
NULL_EXTERNAL_ID | A required external ID is null for one or more rows. | Ensure the mapped identifier column is populated for every record. Update your model to filter out rows with null identifiers. |
DUPLICATE_PRIMARY_KEY | Multiple source rows share the same primary key value. | Deduplicate your model so each primary key appears only once per sync run. |
For additional LinkedIn-specific errors, see LinkedIn: Tips and troubleshooting.
| Error code | What it means | How to resolve |
|---|---|---|
LINKEDIN_INVALID_CONVERSION | LinkedIn rejected the conversion payload. | Check that all required conversion fields are present and correctly formatted. |
LINKEDIN_EVENT_TOO_OLD | The event timestamp is outside LinkedIn's allowed time window. | Send more recent events. LinkedIn typically requires events within the last 90 days. |
LINKEDIN_MISSING_USER_IDS | Required LinkedIn user identifiers are missing. | Map at least one accepted identifier (email, Google Advertising ID, or Apple IDFA) for each row. |
LINKEDIN_MISSING_INVALID_USER_INFO | LinkedIn user information is missing or invalid. | Review identifier formatting and required match fields. |
LINKEDIN_MISSING_IDENTIFIER_OR_NAME | A required identifier or name value is missing from the row. | Populate the required matching fields before syncing. |
LINKEDIN_INVALID_SEGMENT_VALUE | A segment value (often email) failed LinkedIn's validation. | Check email formatting and ensure values meet LinkedIn's requirements. |
LINKEDIN_PERMISSION_DENIED | The connected LinkedIn account lacks the required permissions. | Reauthorize with a LinkedIn account that can manage the target audience or conversion action. |
LINKEDIN_API_ERROR | LinkedIn returned a generic row-level API failure. | Retry if the issue appears transient. Use the live debugger to inspect LinkedIn's response for the affected rows. |
Predictive traits errors
These errors occur when training or running predictive trait models. They indicate a problem with training data, event configuration, or warehouse access.
| Error code | What it means | How to resolve |
|---|---|---|
NO_USERS_IN_INPUT_FILE | The training audience returned no users. | Check that the parent audience or model query returns rows before training starts. |
NO_USER_ROWS_AFTER_FILTERS | Users were present initially, but predictive filters removed all of them. | Loosen the filters or verify that event and property conditions match real data. |
NO_TRAINING_DATA_FILES | Hightouch couldn't generate the training dataset. | Confirm that the configured events return data and the event model is queryable. |
LABEL_FREQUENCY_TOO_LOW | There aren't enough examples of the target outcome to train the model reliably. | Increase the lookback window, reduce filters, or choose a higher-volume outcome event. |
NO_POSITIVE_EXAMPLES | The training data contains zero positive examples of the target event. | Check that the outcome event is occurring for users in scope. |
TRAINING_MATRIX_DOWNLOAD_FAILED | An internal failure occurred while retrieving the training artifact. | Retry the run. If it persists, — this is typically not customer-fixable. |
NO_KEY_EVENTS | No feature-generation events are configured. | Add at least one event input in the predictive trait configuration before retraining. |
EVENT_MODEL_MISCONFIGURED | The event model configuration is invalid. | Confirm the event model exists, has a valid primary key, and includes all referenced columns. |
EVENT_QUERY_FAILED | Hightouch couldn't query event data from the warehouse. | Check warehouse permissions, model SQL, and whether the referenced tables still exist. |
SOURCE_ACCOUNT_LOCKED | The warehouse user account is locked. | Wait for the lockout to clear, or have your warehouse admin re-enable the account. |
UNKNOWN_EVENT_IN_FILTER | A predictive filter references an event Hightouch can't resolve. | Check for renamed, deleted, or misconfigured events in the predictive trait setup. |
INVALID_EVENT_PROPERTY_CONDITION | An event-property filter is malformed. | Verify the filter syntax and confirm you're using valid string property names. |
NO_EVENT_DATA_FILES | No event data was produced for training or inference. | Confirm the configured events have recent data and event pulls are succeeding. |
TRAINING_ERROR | An internal training failure occurred. | Retry once. If it repeats, . |
CACHED_EVENT_PULL_DISABLED | A required event pull is disabled. | Re-enable the event pull in your schema configuration and rerun the predictor. |
MALFORMED_EVENT_DATA | Numeric event fields contain invalid values. | Clean the source data so numeric columns contain only valid numbers (no strings, nulls in numeric-only fields, etc.). |
MODEL_QUERY_FAILED | Hightouch couldn't query the parent model data needed for the run. | Check that the parent model still exists and all referenced columns are present. |