Widget identify routes
Use these when your product or backend needs to push end-user, contact, or company context into HAL for a visitor session.
The API is the lowest-level integration surface. Use it for project data, workflow updates, and customer records when you are integrating HAL into your own backend.
https://api.chatwithhal.com/apiHAL exposes more than one HTTP surface, so the authentication method depends on which route family you are calling.
/api/widget/* is designed for customer-facing widget flows and uses project identification plus visitor identity input/api/* account routes use bearer-token authentication for signed-in HAL users and first-party backends/api/v1/* public integration routes use X-API-KeyAuthorization: Bearer YOUR_TOKEN
X-API-Key: YOUR_API_KEYUse these when your product or backend needs to push end-user, contact, or company context into HAL for a visitor session.
Use these when a signed-in HAL workspace owner or internal backend is managing records directly.
Use these for external integrations that need conversations and contacts through /api/v1.
Use POST /api/v1/events/track when your backend knows that a customer, user, or company did something important and you do not have a HAL browser visitor_id. Authenticate with the project API key in X-API-Key.
curl -X POST "https://api.chatwithhal.com/api/v1/events/track" \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_API_KEY" \
-d '{
"name": "invoice.paid",
"event_key": "invoice_789_paid",
"value": 123.45,
"entity": "company",
"user_id": "user_123",
"email": "buyer@example.com",
"company_id": "company_456",
"company": {
"name": "Acme Ltd",
"domain": "acme.example"
},
"occurred_at": "2026-06-26T10:00:00.000Z"
}'user_id, email, or company_idcompany_id is your external company identifier unless it already matches a HAL company IDevent_key is optional but recommended for backend jobs and webhooks; re-sending the same key returns the existing event with deduped: true and does not re-run lifecycle campaign triggersvalue is optional and must be a string, number, boolean, or nullLifecycle email campaigns created through MCP can use these event names as triggers. See Lifecycle email campaigns for event trigger, no-event-after, frequency scope, and predicate examples.
Event tracking is built for meaningful product and business milestones, not raw clickstream ingestion. HAL persists the event and resolves identity before returning so your backend knows the signal was accepted. Outgoing webhooks are queued asynchronously and do not block the caller.
For high-volume product activity, aggregate noisy actions in your app and send milestones such as invoice.paid, trial.started, subscription.renewed, or usage.limit_reached rather than every page view or button click.
If your goal is to attach a live browser session to a signed-in customer, use the widget-facing identify flow. If your backend needs to record an event without browser state, use POST /api/v1/events/track.
The widget route family also includes CRM write endpoints such as POST /api/widget/set-stage and POST /api/widget/set-deal, plus tracked events through POST /api/widget/track, which backs window.HalWidget.track(...) in the browser widget.
/api/widget/identify when a product session or signed-in user should be mapped to HAL contacts and companies/api/widget/set-properties for follow-up visitor/contact metadata writes after identify/api/widget/track for browser-side milestone events with a required name and optional scalar value/api/v1/events/track for server-side milestone events keyed by your own user_id, email, or company_id/api/widget/set-stage and /api/widget/set-deal when the widget-side session should push company stage or deal changes/api/contacts and /api/companies routes when an authenticated HAL workspace user or first-party backend manages CRM records directly/api/v1 when an external integration with an API key only needs conversation or contact accessVisitor identity, linked companies, milestone event tracking, stage sync, deal sync, and property updates for customer-facing sessions.
Direct contact and company CRUD for signed-in HAL users and internal backends acting on behalf of a workspace.
Conversations, contacts, webhooks, and server-side event tracking for external integrations using project API keys.
Push or sync data between HAL and the rest of your stack when the built-in UI is not enough.
Wire up internal tools, admin panels, or provisioning systems to the same project data HAL uses.
Use the API when you need system-to-system actions beyond the approval-gated Manager experience.
If you are connecting an external AI client and want tool-style access rather than raw REST integration, use the hosted HTTP MCP endpoint instead of building your own orchestration on top of the REST API.
Use MCP for AI clients, OAuth for delegated access, and the widget for customer-facing entry points.