Triggering
entity_type and trigger_type can’t be changed after creation. Both controls are disabled in the builder once the workflow or agent exists, and an API update that sends a different value is rejected with a 400 naming the field. To process a different entity — or to switch between scheduled and triggered — create a new agent with the setting you want; the filters, conditions, and downstream actions are all shaped by these two fields, so there is no in-place conversion.
Before 2026-07-31, the “What to process” dropdown in the agent builder looked editable on an existing agent (the workflow builder always locked it). Changing it appeared to save but reverted on reload, and a later unrelated save could silently switch the agent back to processing tickets. If a customer reports an agent that “keeps resetting to Ticket”, that was this bug — it is fixed, and the three affected agents were corrected.
Scheduling (SCHEDULED workflows)
schedule object on the workflow.
Common gotcha — business-hours triggering:
schedule.daily_execution_windows only constrains when the workflow itself runs. For TRIGGERED workflows (event-driven, not scheduled), the trigger fires whenever the PSA event matches — there is no “only trigger during business hours” knob today. If you need that, gate it with a filter on the ticket’s received_at or a deterministic business-hours filter.
Filters
The trigger filter lives on the first action,FIND_ENTITIES, at input_as_dict.ticket_conditions.conditions (for entity_type=ticket) or input_as_dict.time_entry_conditions.conditions (for entity_type=time_entry). conditions is a rule tree: a group with a combinator and a list of rules, where each rule is either a leaf (a single condition) or a nested group.
Two optional sibling blocks sit next to
conditions under ticket_conditions:
Where a rule sits changes the logic. A company exclusion (
companyID notIn […]) placed inside an or group only excludes when the other branches also miss — to exclude unconditionally it must be a top-level rule under the root and.
AI filters. Alongside the deterministic rules above, a filter can include natural-language (“AI”) conditions — e.g. “ticket content is related to a printer issue” — and Neo can generate the deterministic rules for you from a description. These are configured in the filter builder; see Filter tickets. AI conditions are slower and consume credits per evaluation, so lead with deterministic rules and use them only for fuzzy matches.
Common gotcha — NULL handling in ConnectWise filters: ConnectWise’s API uses SQL three-valued logic. A filter like Owner != "Alice" AND Owner != "Bob" silently drops tickets where Owner IS NULL, because NULL != "Alice" evaluates to NULL (not TRUE). To include unassigned tickets, use Owner IS NULL OR (Owner NOT IN ["Alice", "Bob"]) instead.
Test mode & re-running
Technician-in-the-Loop (TIL)
Custom instructions
Notify-action delays
Notify actions support a configurable random delay so messages don’t all leave at the same second.
If
include_random_delay=true but min and max are both 0/null, the delay is skipped (not an error).
Sub-entity callbacks
Inbox notifications
Credits
Versioning & sharing
See also
- Filter tickets — how to combine deterministic and AI filters.
- Triggers & Schedules — choosing between
SCHEDULEDandTRIGGERED. - Workflows vs Agents — when to pick
CHAINED_ACTIONSvsAGENTIC. - Actions — what each action does and which credit it costs.
