Endpoint
[email protected]), this endpoint lets you explicitly specify who the ticket is from.
Authentication
Requires your publishable widget key in theAuthorization header:
org_id is derived from the widget key.
Use your widget key from Setup > Install. It is publishable (safe in browser code). Enable Identity Verification when scoping requests by
user_id.Request Body
User Identification
At least one ofuser_id or email is required. If the user doesn’t exist yet, they are created automatically.
Your system’s unique identifier for this user. If provided, Halo looks up the user by
external_id first.The user’s email address. Used as a fallback lookup if
user_id doesn’t match, or as the primary identifier if user_id is omitted. Also used for email notifications and AI agent replies.The user’s display name. Used when creating a new user record, or to enrich context if the user already exists.
Ticket Content
The ticket subject line. This appears as the ticket title in your inbox. Max 1,000 characters.
The full ticket body / description. If omitted, the
subject is used as the initial message. Max 50,000 characters.Arbitrary key-value data attached to the ticket. Visible to your team in the dashboard and accessible to the AI agent. Max 50,000 bytes. Use this for structured form data, severity levels, categories, etc.
Options
A label identifying where the ticket came from (e.g.,
"contact_form", "bug_report", "webhook"). Max 50 characters.Set to
"priority" to mark the ticket as high priority. Otherwise defaults to "normal" (open status).When
true, the AI agent is triggered to respond to this ticket automatically (using your configured email AI agent). Requires AI email auto-reply to be enabled in your settings. The AI will reply to the user’s email if one is provided.Example
User Resolution Logic
The endpoint resolves users in this order:- By
user_id— looks upend_users.external_idmatching youruser_id - By
email— falls back toend_users.emaillookup - Auto-create — if no match is found, creates a new end user with the provided
email,name, anduser_id
What Happens After Creation
- The ticket appears in your Halo inbox immediately
- Your team is notified via Slack and email (if configured)
- If
ai_enabledistrueand your AI email agent is configured, the AI processes the ticket and sends a reply to the user’s email - The user record is created or linked, so the AI has full context for future interactions
When to Use This vs Email
| Scenario | Use Tickets API | Use Email |
|---|---|---|
| Form builder (Typeform, OrbitForms, etc.) | Yes — preserves user identity | Notification emails lose the sender |
| CRM webhook (HubSpot, Salesforce) | Yes — structured data | Email loses structure |
| Bug report tool | Yes — include metadata | Subject line only |
| Customer emails you directly | No | Yes — native email threading |
| Internal forwarding from Gmail/Outlook | No | Yes — use email forwarding |
Error Responses
| Status | Error | Cause |
|---|---|---|
400 | subject is required | Missing or empty subject field |
400 | At least one of user_id or email is required | No user identification provided |
401 | Missing API key | No Authorization header |
401 | Invalid or revoked API key | Bad or revoked API key |
500 | Failed to create ticket | Server error during creation |