curl --request POST \
--url https://api.neoagent.io/public-api/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"agent_settings": {
"custom_instructions": "Review long-running tickets and escalate only those with no future-dated open service call."
},
"autonomy_type": "AGENTIC",
"name": "Nightly escalation review",
"schedule": {
"start_datetimes": [
"2026-05-14T02:00:00+00:00"
],
"time_period": {
"interval": 1,
"unit": "HOUR"
},
"timezone": "UTC"
},
"toolbox": {
"tool_settings_by_type": {}
},
"trigger_type": "SCHEDULED"
}
'{
"data": {
"access": "ALL_USERS",
"audience": "MSP",
"autonomy_type": "CHAINED_ACTIONS",
"created_at": "2023-11-07T05:31:56Z",
"created_via": "EDITOR",
"entity_type": "ticket",
"group_name": "<string>",
"group_order": 123,
"id": "<string>",
"name": "<string>",
"source_template_id": 123,
"state": "ENABLED",
"trigger_type": "SCHEDULED",
"updated_at": "2023-11-07T05:31:56Z"
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timings_ms": {},
"pagination": {
"has_more": true,
"next_cursor": "<string>"
},
"warnings": [
"<string>"
]
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}Create an agent
Creates an agent/workflow for the caller’s tenant. The body is a discriminated union on autonomy_type (CHAINED_ACTIONS / AGENTIC / CONVERSATIONAL). The contract is intent-shaped: callers describe entity_type + ticket_conditions / time_entry_conditions, and the server constructs the canonical actions array (prepending FIND_ENTITIES for CHAINED_ACTIONS / AGENTIC; the trailing AGENTIC action for AGENTIC; an empty list for CONVERSATIONAL). For CHAINED_ACTIONS, actions is the pipeline AFTER the auto-prepended FIND_ENTITIES — including FIND_ENTITIES yourself returns 400. AGENTIC agents may be entity-triggered (trigger_type=TRIGGERED + callback_settings, running against the entity FIND_ENTITIES resolves) or scheduled (trigger_type=SCHEDULED + schedule), which is ticketless — no FIND_ENTITIES and no ticket_conditions/time_entry_conditions. CONVERSATIONAL agents accept audience (MSP | END_USER, default MSP) — set END_USER to provision a user-facing chat agent that can bind an END_USER channel; it must then hold only END_USER tools. Audience is set at create and is immutable. They also accept access (ALL_USERS | ADMINS_ONLY | SPECIFIC_USERS, default ALL_USERS), controlling which of the MSP’s own users may message the agent (set in the dashboard thereafter). created_by_user is derived from the authenticated identity — not accepted in the body. Toolboxes that supply external-API credentials are rejected (400 validation_error); configure those in the dashboard. Discover the shapes via the /schemas/* endpoints.
curl --request POST \
--url https://api.neoagent.io/public-api/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"agent_settings": {
"custom_instructions": "Review long-running tickets and escalate only those with no future-dated open service call."
},
"autonomy_type": "AGENTIC",
"name": "Nightly escalation review",
"schedule": {
"start_datetimes": [
"2026-05-14T02:00:00+00:00"
],
"time_period": {
"interval": 1,
"unit": "HOUR"
},
"timezone": "UTC"
},
"toolbox": {
"tool_settings_by_type": {}
},
"trigger_type": "SCHEDULED"
}
'{
"data": {
"access": "ALL_USERS",
"audience": "MSP",
"autonomy_type": "CHAINED_ACTIONS",
"created_at": "2023-11-07T05:31:56Z",
"created_via": "EDITOR",
"entity_type": "ticket",
"group_name": "<string>",
"group_order": 123,
"id": "<string>",
"name": "<string>",
"source_template_id": 123,
"state": "ENABLED",
"trigger_type": "SCHEDULED",
"updated_at": "2023-11-07T05:31:56Z"
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"timings_ms": {},
"pagination": {
"has_more": true,
"next_cursor": "<string>"
},
"warnings": [
"<string>"
]
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": {}
},
"meta": {
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}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
- CreateChainedActionsAgent
- CreateAgenticAgent
- CreateConversationalAgent
A fixed-pipeline workflow — the server runs FIND_ENTITIES (built from entity_type
and the conditions below) followed by actions in order. Triggered by a PSA event
(trigger_type=TRIGGERED + callback_settings) or on a schedule (trigger_type=SCHEDULED
schedule).
SCHEDULED, TRIGGERED, NONE "CHAINED_ACTIONS"Show child attributes
Show child attributes
ticket, project_ticket, task, scheduled_entry, time_entry, project, company, contact, resource, contract, opportunity, none, configuration, note, team, role, audit_trail, appointment, servicecall, contract_service, company_location, product Show child attributes
Show child attributes
ENABLED, DISABLED, DELETED Trigger/entity filter — which tickets this agent fires on. Send it at the top level to set or change the filter; the server (re)builds the FIND_ENTITIES action from it (do not put the filter in actions). A TIME_ENTRY agent carries this field too — there it selects the tickets whose time entries are searched, and time_entry_conditions then selects the time entries on them. Shape: conditions holds a combinator (and/or) and a rules list of leaves (field/operator/value) and/or nested groups (rules + combinator). A rule's position in the tree changes the logic — a company exclusion belongs as a top-level rule under the root and, not nested inside an or, or it only excludes when the other branches also miss. A leaf's value is a single value; only the in and notIn operators take a list. A list under any other operator returns 400.
Show child attributes
Show child attributes
Trigger/entity filter for TIME_ENTRY agents — which time entries this agent fires on, on the tickets ticket_conditions selected. Same shape as ticket_conditions. Ignored for TICKET agents.
Show child attributes
Show child attributes
Response
Success.
Lean summary of a workflow row — the per-item shape GET /public-api/agents
(list) returns. The single-resource GET /public-api/agents/<id> returns the
richer AgentDetail; historical snapshots come back as AgentVersion.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
