Create an intent
A curated request type — a menu name/description plus its intake: the free-text ask_for script, a typed fields form schema, or both. A non-empty fields makes the intent structured, so a chat surface renders it as a form (dropdowns, dates, toggles) instead of asking in prose; ask_for remains the intake everywhere a form cannot render, notably the TRIGGERED (ticket/email) surface. surfaces (END_USER_CHAT | MSP_CHAT | TRIGGERED, at least one) declares which agent kinds it runs on; every assigned agent_id must be valid for one of them (an end-user chat agent for END_USER_CHAT, an internal/MSP chat agent for MSP_CHAT, a ticket-triggered agent for TRIGGERED). Empty agent_ids applies it to all agents of the surface — except a Neo-managed agent, which applies only when named — and empty end_company_ids to all companies. MSP_CHAT sessions carry no end-company, so that surface offers only intents with an empty end_company_ids; a company-scoped intent still runs on its other surfaces. An enabled intent is capped at 15 per applicable agent.
Authorizations
Authorization: Bearer <token> where <token> is either a neo_sk_<env>_<secret> API key (service account) or a Microsoft Entra ID access token (dashboard user).
Body
Create/replace payload. A PUT replaces every editable field, so name is required and the
rest default. agent_ids/end_company_ids empty = applies to all agents of the matching
surface / all companies. surfaces declares which agent kinds the intent applies to (at least
one; validated in the service). An enabled intent is capped at 15 per applicable agent.
fields is the typed form schema: non-empty makes the intent structured, so the
end-user chat renders it as a form instead of asking in prose. Empty (the default) keeps the
intent on ask_for, exactly as before — and because a PUT replaces everything, omitting fields
on an update of a structured intent clears its form.
Which kind of agent an intent applies to: END_USER_CHAT (a branded end-user chat bot), MSP_CHAT (an internal chat agent, used by the MSP's own people) or TRIGGERED (a ticket-triggered agent).
END_USER_CHAT, TRIGGERED, MSP_CHAT 