Hightouch API

The full Hightouch public REST API — sources, models, destinations, syncs and runs, campaigns, AI Decisioning flows and messages, event contracts and domains, and identity resolution. 43 operations, harvested verbatim from the specification the provider's own API reference loads.

OpenAPI Specification

hightouch-api-openapi.json Raw ↑
{
	"components": {
		"examples": {},
		"headers": {},
		"parameters": {},
		"requestBodies": {},
		"responses": {},
		"schemas": {
			"CampaignSendResult": {
				"description": "Per-recipient result returned synchronously after the trigger request.\nAccepted recipients are queued for delivery; check the send status endpoint\nfor delivery confirmation.",
				"properties": {
					"handle": {
						"type": "string",
						"description": "Delivery address of the recipient, present for inline (`handle`) recipients."
					},
					"id": {
						"type": "string",
						"description": "Primary key of the recipient as configured on the Personalization API sync,\npresent for profile (`id`) recipients."
					},
					"status": {
						"type": "string",
						"enum": [
							"accepted",
							"rejected"
						],
						"description": "Whether this recipient was accepted for delivery or rejected at validation time."
					},
					"sendId": {
						"type": "string",
						"description": "Unique identifier for this send, present when `status` is `\"accepted\"`.\nUse with `GET /campaigns/{id}/sends/{sendId}` to poll for delivery status."
					},
					"reason": {
						"type": "string",
						"enum": [
							"invalid_handle",
							"missing_variables",
							"invalid_id",
							"missing_handle_or_id"
						],
						"description": "Reason for rejection, present when `status` is `\"rejected\"`.\n- `invalid_handle` — the delivery address is not a valid email or phone number\n- `missing_variables` — one or more required template variables are absent\n- `invalid_id` — the profile ID is empty or missing\n- `missing_handle_or_id` — the recipient has neither `handle` nor `id`"
					},
					"missingVariables": {
						"items": {
							"type": "string"
						},
						"type": "array",
						"description": "Names of the required template variables absent from the recipient's data,\npresent when `reason` is `\"missing_variables\"`."
					}
				},
				"required": [
					"status"
				],
				"type": "object",
				"additionalProperties": false
			},
			"StartCampaignResponse": {
				"description": "Response body for a campaign trigger request. Results are returned in the\nsame order as the input `recipients` array.",
				"properties": {
					"results": {
						"items": {
							"$ref": "#/components/schemas/CampaignSendResult"
						},
						"type": "array",
						"description": "Per-recipient outcomes. Accepted recipients are queued for delivery;\nrejected recipients were not sent."
					}
				},
				"required": [
					"results"
				],
				"type": "object",
				"additionalProperties": false
			},
			"TriggerErrorResponse": {
				"description": "Body returned on a request-level failure (400/404/409/429) so the caller\nknows why the request was rejected.",
				"properties": {
					"error": {
						"type": "string",
						"description": "Human-readable description of why the request failed."
					}
				},
				"required": [
					"error"
				],
				"type": "object",
				"additionalProperties": false
			},
			"ValidateErrorJSON": {
				"properties": {
					"message": {
						"type": "string",
						"enum": [
							"Validation failed"
						],
						"nullable": false
					},
					"details": {
						"properties": {},
						"additionalProperties": {},
						"type": "object"
					}
				},
				"required": [
					"message",
					"details"
				],
				"type": "object",
				"additionalProperties": false
			},
			"InternalServerError": {
				"type": "string",
				"enum": [
					"Internal Server Error"
				],
				"nullable": false
			},
			"HandleCampaignRecipient": {
				"description": "A recipient identified by their delivery address (email or phone number).\nPersonalization data is provided inline in the request.",
				"properties": {
					"handle": {
						"type": "string",
						"description": "Delivery address for this recipient. Must be a valid email address for\nemail campaigns, or an E.164-formatted phone number for SMS campaigns."
					},
					"properties": {
						"properties": {},
						"additionalProperties": {},
						"type": "object",
						"description": "Per-recipient personalization properties. Keys must match the variable\nnames shown in the message editor. These are merged with the top-level\n`properties` and take precedence when a key appears in both."
					}
				},
				"type": "object",
				"additionalProperties": false
			},
			"ProfileCampaignRecipient": {
				"description": "A recipient identified by their Personalization API Cached profile ID.",
				"properties": {
					"id": {
						"type": "string",
						"description": "Primary key of the recipient as configured on the Personalization API sync.\nThe delivery address is resolved from the cache at send time."
					},
					"properties": {
						"properties": {},
						"additionalProperties": {},
						"type": "object",
						"description": "Per-recipient personalization overrides. Merged with the top-level\n`properties` and the cached profile; these values take precedence when a\nkey appears in multiple sources."
					}
				},
				"type": "object",
				"additionalProperties": false
			},
			"CampaignRecipient": {
				"anyOf": [
					{
						"$ref": "#/components/schemas/HandleCampaignRecipient"
					},
					{
						"$ref": "#/components/schemas/ProfileCampaignRecipient"
					}
				],
				"description": "A single send target. Provide either `handle` (inline delivery address) or\n`id` (Personalization API profile ID), but not both."
			},
			"StartCampaignRequest": {
				"description": "Request body for triggering an API campaign send.",
				"properties": {
					"properties": {
						"properties": {},
						"additionalProperties": {},
						"type": "object",
						"description": "Shared personalization properties applied to all recipients. Keys must\nmatch the variable names shown in the message editor. Per-recipient\n`properties` take precedence when a key appears in both."
					},
					"draft": {
						"type": "boolean",
						"description": "When `true`, sends the campaign even if it has not been activated.\nIntended for test sends against draft campaigns only.",
						"default": "false"
					},
					"recipients": {
						"items": {
							"$ref": "#/components/schemas/CampaignRecipient"
						},
						"type": "array",
						"description": "List of recipients to send to. Each entry must include either a `handle`\n(delivery address) or an `id` (Personalization API based profile ID).",
						"minItems": 1,
						"maxItems": 100
					}
				},
				"required": [
					"recipients"
				],
				"type": "object",
				"additionalProperties": false
			},
			"SendStatusResponse": {
				"description": "Delivery status for a single send, returned by the send status endpoint.",
				"properties": {
					"status": {
						"type": "string",
						"description": "Current delivery status.\n- `sent` — accepted by the provider; no delivery receipt yet\n- `delivered` — confirmed delivered by the provider\n- `bounced` — delivery failed with a bounce\n- `failed` — delivery failed\n- `dropped` — dropped before delivery (e.g. unsubscribed, suppressed, or enrichment failure); see `reason`"
					},
					"reason": {
						"type": "string",
						"description": "Additional explanation for why this send was dropped.\nOnly present when `status` is `\"dropped\"`."
					}
				},
				"required": [
					"status"
				],
				"type": "object",
				"additionalProperties": false
			},
			"DecisionEngineFlow": {
				"description": "Decision Engine Flow (Public API)",
				"properties": {
					"id": {
						"type": "string"
					},
					"name": {
						"type": "string"
					},
					"workspaceId": {
						"type": "number",
						"format": "double"
					},
					"decisionEngineId": {
						"type": "string"
					},
					"audienceId": {
						"type": "number",
						"format": "double"
					},
					"status": {
						"type": "string"
					},
					"config": {
						"properties": {},
						"additionalProperties": {},
						"type": "object"
					},
					"createdAt": {
						"type": "string",
						"format": "date-time"
					},
					"updatedAt": {
						"type": "string",
						"format": "date-time"
					}
				},
				"required": [
					"id",
					"name",
					"workspaceId",
					"decisionEngineId",
					"audienceId",
					"status"
				],
				"type": "object",
				"additionalProperties": false
			},
			"DecisionEngineMessageGuardrails": {
				"description": "Guardrail fields on a message (max sends, eligibility dates, etc.)",
				"properties": {
					"maxSendsPerUser": {
						"type": "number",
						"format": "double"
					},
					"maxSendsPerUserWindowDays": {
						"type": "number",
						"format": "double"
					},
					"minOtherMessagesInBetween": {
						"type": "number",
						"format": "double"
					},
					"firstEligibleSendDate": {
						"type": "string"
					},
					"lastEligibleSendDate": {
						"type": "string"
					}
				},
				"type": "object",
				"additionalProperties": false
			},
			"DecisionEngineVariableVariant": {
				"description": "Variant within a message variable (Public API)",
				"properties": {
					"value": {
						"type": "string",
						"description": "The default (non-localized) value for this variant"
					},
					"tags": {
						"properties": {},
						"additionalProperties": {
							"type": "string"
						},
						"type": "object",
						"description": "Key-value tags for categorizing this variant"
					},
					"firstEligibleSendDate": {
						"type": "string",
						"description": "Earliest date this variant is eligible to be sent (ISO 8601)"
					},
					"lastEligibleSendDate": {
						"type": "string",
						"description": "Latest date this variant is eligible to be sent (ISO 8601)"
					},
					"userAudienceFilter": {},
					"localeValues": {
						"properties": {},
						"additionalProperties": {
							"type": "string"
						},
						"type": "object",
						"description": "Localized values for this variant, keyed by locale code (e.g. \"en-US\", \"de-DE\").\nThese are only used at runtime when `localizationEnabled` is true on the parent variable.\nYou can stage translations by providing localeValues while leaving localizationEnabled unset or false."
					}
				},
				"required": [
					"value"
				],
				"type": "object",
				"additionalProperties": false
			},
			"DecisionEngineVariable": {
				"description": "Message variable (Public API)",
				"properties": {
					"name": {
						"type": "string",
						"description": "The variable name (must be unique within a message)"
					},
					"config": {
						"properties": {
							"localizationEnabled": {
								"type": "boolean",
								"description": "When true, the Decision Engine uses each variant's localeValues to select\nlocale-appropriate content at runtime. When false or omitted, only the\ndefault variant value is used, even if localeValues are present."
							},
							"maxSendsPerUserWindowDays": {
								"type": "number",
								"format": "double",
								"description": "Rolling window in days for the maxSendsPerUser limit"
							},
							"maxSendsPerUser": {
								"type": "number",
								"format": "double",
								"description": "Maximum number of times this variable's variants can be sent to a single user"
							}
						},
						"type": "object"
					},
					"variants": {
						"items": {
							"$ref": "#/components/schemas/DecisionEngineVariableVariant"
						},
						"type": "array"
					}
				},
				"required": [
					"name",
					"variants"
				],
				"type": "object",
				"additionalProperties": false
			},
			"DecisionEngineMessage": {
				"description": "Decision Engine Message (Public API)",
				"properties": {
					"id": {
						"type": "string"
					},
					"name": {
						"type": "string"
					},
					"channelId": {
						"type": "string"
					},
					"config": {
						"properties": {},
						"additionalProperties": {},
						"type": "object"
					},
					"tags": {
						"properties": {},
						"additionalProperties": {},
						"type": "object"
					},
					"guardrails": {
						"$ref": "#/components/schemas/DecisionEngineMessageGuardrails"
					},
					"variables": {
						"items": {
							"$ref": "#/components/schemas/DecisionEngineVariable"
						},
						"type": "array"
					},
					"createdAt": {
						"type": "string",
						"format": "date-time"
					},
					"updatedAt": {
						"type": "string",
						"format": "date-time"
					}
				},
				"required": [
					"id",
					"name",
					"channelId",
					"config"
				],
				"type": "object",
				"additionalProperties": false
			},
			"DecisionEngineMessageCreate": {
				"description": "Request body for creating a Decision Engine message",
				"properties": {
					"name": {
						"type": "string"
					},
					"channelId": {
						"type": "string"
					},
					"config": {
						"properties": {},
						"additionalProperties": {},
						"type": "object"
					},
					"tags": {
						"properties": {},
						"additionalProperties": {},
						"type": "object"
					},
					"guardrails": {
						"$ref": "#/components/schemas/DecisionEngineMessageGuardrails"
					},
					"variables": {
						"items": {
							"$ref": "#/components/schemas/DecisionEngineVariable"
						},
						"type": "array"
					}
				},
				"required": [
					"name",
					"channelId",
					"config"
				],
				"type": "object",
				"additionalProperties": false
			},
			"DecisionEngineMessageUpdate": {
				"description": "Request body for updating a Decision Engine message",
				"properties": {
					"name": {
						"type": "string"
					},
					"config": {
						"properties": {},
						"additionalProperties": {},
						"type": "object"
					},
					"tags": {
						"properties": {},
						"additionalProperties": {},
						"type": "object"
					},
					"guardrails": {
						"$ref": "#/components/schemas/DecisionEngineMessageGuardrails"
					},
					"variables": {
						"items": {
							"$ref": "#/components/schemas/DecisionEngineVariable"
						},
						"type": "array"
					}
				},
				"type": "object",
				"additionalProperties": false
			},
			"DecisionEngineRunResponse": {
				"properties": {
					"flowsEnqueued": {
						"type": "number",
						"format": "double",
						"description": "Number of flows that were enqueued for execution"
					}
				},
				"required": [
					"flowsEnqueued"
				],
				"type": "object",
				"additionalProperties": false
			},
			"Destination": {
				"description": "The service receiving your data (e.g. Salesforce, Hubspot, Customer.io, or a\nSFTP server)",
				"properties": {
					"id": {
						"type": "number",
						"format": "double",
						"description": "The destination's id"
					},
					"name": {
						"type": "string",
						"description": "The destination's name"
					},
					"slug": {
						"type": "string",
						"description": "The destination's slug"
					},
					"workspaceId": {
						"type": "number",
						"format": "double",
						"description": "The id of the workspace that the destination belongs to"
					},
					"createdAt": {
						"type": "string",
						"format": "date-time",
						"description": "The timestamp when the destination was created"
					},
					"updatedAt": {
						"type": "string",
						"format": "date-time",
						"description": "The timestamp when the destination was last updated"
					},
					"type": {
						"type": "string",
						"description": "The destination's type (e.g. salesforce or hubspot)."
					},
					"configuration": {
						"properties": {},
						"additionalProperties": {},
						"type": "object",
						"description": "The destination's configuration. This specifies general metadata about destination, like hostname and username.\nHightouch will be using this configuration to connect to destination.\n\nThe schema depends on the destination type.\n\nConsumers should NOT make assumptions on the contents of the\nconfiguration. It may change as Hightouch updates its internal code."
					},
					"syncs": {
						"items": {
							"type": "number",
							"format": "double"
						},
						"type": "array",
						"description": "A list of syncs that sync to this destination."
					}
				},
				"required": [
					"id",
					"name",
					"slug",
					"workspaceId",
					"createdAt",
					"updatedAt",
					"type",
					"configuration",
					"syncs"
				],
				"type": "object",
				"additionalProperties": false
			},
			"DestinationCreate": {
				"description": "The input for creating a Destination",
				"properties": {
					"name": {
						"type": "string",
						"description": "The destination's name"
					},
					"slug": {
						"type": "string",
						"description": "The destination's slug"
					},
					"type": {
						"type": "string",
						"description": "The destination's type (e.g. salesforce or hubspot)."
					},
					"configuration": {
						"properties": {},
						"additionalProperties": {},
						"type": "object",
						"description": "The destination's configuration. This specifies general metadata about destination, like hostname and username.\nHightouch will be using this configuration to connect to destination.\n\nThe schema depends on the destination type.\n\nConsumers should NOT make assumptions on the contents of the\nconfiguration. It may change as Hightouch updates its internal code."
					}
				},
				"required": [
					"name",
					"slug",
					"type",
					"configuration"
				],
				"type": "object",
				"additionalProperties": false
			},
			"DestinationUpdate": {
				"description": "The input for updating a Destination",
				"properties": {
					"name": {
						"type": "string",
						"description": "The destination's name"
					},
					"configuration": {
						"properties": {},
						"additionalProperties": {},
						"type": "object",
						"description": "The destination's configuration. This specifies general metadata about destination, like hostname and username.\nHightouch will be using this configuration to connect to destination.\n\nThe schema depends on the destination type.\n\nConsumers should NOT make assumptions on the contents of the\nconfiguration. It may change as Hightouch updates its internal code."
					}
				},
				"type": "object",
				"additionalProperties": false
			},
			"EventContract": {
				"description": "A collection of schemas that are used for validating your events.",
				"properties": {
					"id": {
						"type": "string",
						"description": "The contract's id"
					},
					"name": {
						"type": "string",
						"description": "The contract's name"
					},
					"slug": {
						"type": "string",
						"description": "The contract's slug. If not specified, one will be generated."
					},
					"description": {
						"type": "string",
						"description": "The contract's description"
					},
					"onUndeclaredSchema": {
						"type": "string",
						"enum": [
							"ALLOW_EVENT",
							"BLOCK_EVENT"
						],
						"description": "What happens to events that aren't defined in the contract.\nOne of ALLOW_EVENT or BLOCK_EVENT. Optional, defaults to ALLOW_EVENT."
					},
					"events": {
						"items": {
							"properties": {
								"schema": {
									"properties": {},
									"additionalProperties": {},
									"type": "object",
									"description": "The JSON schema that validates the event. Required."
								},
								"onUndeclaredFields": {
									"type": "string",
									"enum": [
										"ALLOW_EVENT",
										"BLOCK_EVENT",
										"OMIT_FIELDS"
									],
									"description": "What happens to events that contain fields not in the schema.\nOne of ALLOW_EVENT, BLOCK_EVENT, or OMIT_FIELDS. Optional, defaults to OMIT_FIELDS."
								},
								"onSchemaViolation": {
									"type": "string",
									"enum": [
										"ALLOW_EVENT",
										"BLOCK_EVENT"
									],
									"description": "What happens to events that violate the schema.\nOne of ALLOW_EVENT or BLOCK_EVENT. Optional, defaults to BLOCK_EVENT."
								},
								"version": {
									"type": "string",
									"description": "The event version. Defaults to \"default\", optional. You probably don't need to set this."
								},
								"slug": {
									"type": "string",
									"description": "The event's slug. If not specified, one will be generated."
								},
								"name": {
									"type": "string",
									"description": "The event's name. Required for track events."
								},
								"type": {
									"type": "string",
									"enum": [
										"track",
										"identify",
										"page",
										"screen",
										"group"
									],
									"description": "The event's type. One of track, identify, page, screen, or group. Required."
								}
							},
							"required": [
								"schema",
								"type"
							],
							"type": "object"
						},
						"type": "array",
						"description": "The definitions for the events in the contract."
					},
					"workspaceId": {
						"type": "number",
						"format": "double",
						"description": "The id of the workspace that the contract belongs to"
					},
					"createdAt": {
						"type": "string",
						"format": "date-time",
						"description": "The timestamp when the contract was created"
					},
					"updatedAt": {
						"type": "string",
						"format": "date-time",
						"description": "The timestamp when the contract was last updated"
					},
					"eventSources": {
						"items": {
							"properties": {
								"name": {
									"type": "string"
								},
								"id": {
									"type": "string"
								}
							},
							"required": [
								"name",
								"id"
							],
							"type": "object"
						},
						"type": "array",
						"description": "The Event Sources linked to the Contract."
					}
				},
				"required": [
					"id",
					"name",
					"workspaceId",
					"createdAt",
					"updatedAt",
					"eventSources"
				],
				"type": "object",
				"additionalProperties": false
			},
			"EventContractCreate": {
				"description": "The input for creating a Contract",
				"properties": {
					"name": {
						"type": "string",
						"description": "The contract's name"
					},
					"slug": {
						"type": "string",
						"description": "The contract's slug. If not specified, one will be generated."
					},
					"description": {
						"type": "string",
						"description": "The contract's description"
					},
					"onUndeclaredSchema": {
						"type": "string",
						"enum": [
							"ALLOW_EVENT",
							"BLOCK_EVENT"
						],
						"description": "What happens to events that aren't defined in the contract.\nOne of ALLOW_EVENT or BLOCK_EVENT. Optional, defaults to ALLOW_EVENT."
					},
					"events": {
						"items": {
							"properties": {
								"schema": {
									"properties": {},
									"additionalProperties": {},
									"type": "object",
									"description": "The JSON schema that validates the event. Required."
								},
								"onUndeclaredFields": {
									"type": "string",
									"enum": [
										"ALLOW_EVENT",
										"BLOCK_EVENT",
										"OMIT_FIELDS"
									],
									"description": "What happens to events that contain fields not in the schema.\nOne of ALLOW_EVENT, BLOCK_EVENT, or OMIT_FIELDS. Optional, defaults to OMIT_FIELDS."
								},
								"onSchemaViolation": {
									"type": "string",
									"enum": [
										"ALLOW_EVENT",
										"BLOCK_EVENT"
									],
									"description": "What happens to events that violate the schema.\nOne of ALLOW_EVENT or BLOCK_EVENT. Optional, defaults to BLOCK_EVENT."
								},
								"version": {
									"type": "string",
									"description": "The event version. Defaults to \"default\", optional. You probably don't need to set this."
								},
								"slug": {
									"type": "string",
									"description": "The event's slug. If not specified, one will be generated."
								},
								"name": {
									"type": "string",
									"description": "The event's name. Required for track events."
								},
								"type": {
									"type": "string",
									"enum": [
										"track",
										"identify",
										"page",
										"screen",
										"group"
									],
									"description": "The event's type. One of track, identify, page, screen, or group. Required."
								}
							},
							"required": [
								"schema",
								"type"
							],
							"type": "object"
						},
						"type": "array",
						"description": "The definitions for the events in the contract."
					}
				},
				"required": [
					"name"
				],
				"type": "object",
				"additionalProperties": false
			},
			"EventContractUpdate": {
				"description": "The input for updating a Contract",
				"properties": {
					"name": {
						"type": "string",
						"description": "The contract's name"
					},
					"slug": {
						"type": "string",
						"description": "The contract's slug. If not specified, one will be generated."
					},
					"description": {
						"type": "string",
						"description": "The contract's description"
					},
					"onUndeclaredSchema": {
						"type": "string",
						"enum": [
							"ALLOW_EVENT",
							"BLOCK_EVENT"
						],
						"description": "What happens to events that aren't defined in the contract.\nOne of ALLOW_EVENT or BLOCK_EVENT. Optional, defaults to ALLOW_EVENT."
					},
					"events": {
						"items": {
							"properties": {
								"schema": {
									"properties": {},
									"additionalProperties": {},
									"type": "object",
									"description": "The JSON schema that validates the event. Required."
								},
								"onUndeclaredFields": {
									"type": "string",
									"enum": [
										"ALLOW_EVENT",
										"BLOCK_EVENT",
										"OMIT_FIELDS"
									],
									"description": "What happens to events that contain fields not in the schema.\nOne of ALLOW_EVENT, BLOCK_EVENT, or OMIT_FIELDS. Optional, defaults to OMIT_FIELDS."
								},
								"onSchemaViolation": {
									"type": "string",
									"enum": [
										"ALLOW_EVENT",
										"BLOCK_EVENT"
									],
									"description": "What happens to events that violate the schema.\nOne of ALLOW_EVENT or BLOCK_EVENT. Optional, defaults to BLOCK_EVENT."
								},
								"version": {
									"type": "string",
									"description": "The event version. Defaults to \"default\", optional. You probably don't need to set this."
								},
								"slug": {
									"type": "string",
									"description": "The event's slug. If not specified, one will be generated."
								},
								"name": {
									"type": "string",
									"description": "The event's name. Required for track events."
								},
								"type": {
									"type": "string",
									"enum": [
										"track",
										"identify",
										"page",
										"screen",
										"group"
									],
									"description": "The event's type. One of track, identify, page, screen, or group. Required."
								}
							},
							"required": [
								"schema",
								"type"
							],
							"type": "object"
						},
						"type": "array",
						"description": "The definitions for the events in the contract."
					}
				},
				"type": "object",
				"additionalProperties": false
			},
			"EventDomainComponent": {
				"description": "Reusable schema fragments that can be imported by event schemas.",
				"properties": {
					"id": {
						"type": "string",
						"description": "The component's id. Omit when creating. On update, a component matches an existing one by id when supplied, otherwise by (name, version); include the id to rename a component in place."
					},
					"slug": {
						"type": "string",
						"description": "The component's slug. Optional when creating; generated from the name if omitted. Immutable after creation; an update that sends a different slug for an existing component is rejected."
					},
					"name": {
						"type": "string",
						"description": "The component's name. Required."
					},
					"version": {
						"type": "string",
						"description": "The component's version. Defaults to \"default\", optional. On update, an omitted version keeps the stored value when the component is matched by id; without an id, an omitted version only matches the stored \"default\" version, and the request is rejected if the name exists only under other versions."
					},
					"description": {
						"type": "string",
						"description": "The component's description. On update, an omitted description keeps the stored value; send an empty string to clear it."
					},
					"schema": {
						"properties": {},
						"additionalProperties": {},
						"type": "object",
						"description": "The JSON schema fragment the component contributes. Required."
					},
					"imports": {
						"items": {
							"type": "string"
						},
						"type": "array",
						"description": "Read-only: the slugs of the components this component imports (derived from its `$ref`s)."
					}
				},
				"required": [
					"name",
					"schema"
				],
				"type": "object",
				"additionalProperties": false
			},
			"EventDomain": {
				"description": "A collection of event and component schemas used for validating events.",
				"properties": {
					"id": {
						"type": "string",
						"description": "The domain's id"
					},
					"name": {
						"type": "string",
						"description": "The domain's name"
					},
					"slug": {
						"type": "string",
						"description": "The domain's slug. If not specified, one will be generated."
					},
					"description": {
						"type": "string",
						"description": "The domain's description"
					},
					"onUndeclaredSchema": {
						"type": "string",
						"enum": [
							"ALLOW_EVENT",
							"BLOCK_EVENT"
						],
						"description": "What happens to events that aren't defined in the domain.\nOne of ALLOW_EVENT or BLOCK_EVENT. Optional, defaults to ALLOW_EVENT."
					},
					"events": {
						"items": {
							"properties": {
								"schema": {
									"properties": {},
									"additionalProperties": {},
									"type": "object",
									"description": "The JSON schema that validates the event. Required. May contain component `$ref`s."
								},
								"onUndeclaredFields": {
									"type": "string",
									"enum": [
										"ALLOW_EVENT",
										"BLOCK_EVENT",
										"OMIT_FIELDS"
									],
									"description": "What happens to events that contain fields not in the schema.\nOne of ALLOW_EVENT, BLOCK_EVENT, or OMIT_FIELDS. Optional, defaults to OMIT_FIELDS."
								},
								"onSchemaViolation": {
									"type": "string",
									"enum": [
										"ALLOW_EVENT",
										"BLOCK_EVENT"
									],
									"description": "What happens to events that violate the schema.\nOne of ALLOW_EVENT or BLOCK_EVENT. Optional, defaults to BLOCK_EVENT."
								},
								"version": {
									"type": "string",
									"description": "The event version. Defaults to \"default\", optional. You probably don't need to set this."
								},
								"slug": {
									"type": "string",
									"description": "The event's slug. If not specified, one will be generated."
								},
								"name": {
									"type": "string",
									"description": "The event's name. Required for track events."
								},
								"type": {
									"type": "string",
									"enum": [
										"track",
										"identify",
										"page",
										"screen",
										"group"
									],
									"description": "The event's type. One of track, identify, page, screen, or group. Required."
								}
							},
							"required": [
								"schema",
								"type"
							],
							"type": "object"
						},
						"type": "array",
						"description": "The definitions for the events in the domain."
					},
					"components": {
						"items": {
							"$ref": "#/components/schemas/EventDomainComponent"
						},
						"type": "array",
						"description": "The reusable components defined in the domain."
					},
					"workspaceId": {
						"type": "number",
						"format": "double",
						"description": "The id of the workspace that the domain belongs to"
					},
					"createdAt": {
						"type": "string",
						"format": "date-time",
						"description": "The timestamp when the domain was created"
					},
					"updatedAt": {
						"type": "string",
						"format": "date-time",
						"description": "The timestamp when the domain was last updated"
					},
					"eventSources": {
						"items": {
							"properties": {
								"name": {
									"type": "string"
								},
								"id": {
									"type": "string"
								}
							},
							"required": [
								"name",
								"id"
							],
							"type": "object"
						},
						"type": "array",
						"description": "The Event Sources linked to the Domain."
					}
				},
				"required": [
					"id",
					"name",
					"workspaceId",
					"createdAt",
		

# --- truncated at 32 KB (173 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/hightouch/refs/heads/main/openapi/_original/hightouch-api-openapi.json