Fivexer continuously matches tasks to workers based on tags, skills, priority, and business rules. Unlike queue-based routers, there are no static queues — matching is declarative and reruns every time something changes.
Core entities
- Task — a unit of work (ticket, case, job). It carries
tags, an optionalpriority, geo constraints, and rich data (context, comments, attachments). - Worker — an agent or automaton that can accept tasks. Workers carry
tags, skills with proficiency, availability status, and a tentative queue of matched tasks. - Decision — the platform's explainable match record: who was considered, who won, and why.
Matching lifecycle
- A task is created with
POST /tasks. Its status isqueued. - The matcher evaluates every available worker against the task's tags and constraints.
- The best worker(s) receive the task in their tentative queue (
GET /workers/{id}/queue). - The platform emits a
task.matchedwebhook. - The worker (or an operator) calls
POST /tasks/{id}/acceptto move it toaccepted, orrejectto requeue it. - When done,
POST /tasks/{id}/completefinishes the task.
What decides the winner
- Tag overlap — task tags must be satisfied by the worker's tags/skills.
- Priority — higher-priority tasks are matched first.
- Hard vetoes — rules you define can forbid a match regardless of score (e.g., "agent_1 cannot take billing tasks on Fridays").
- Fairness mode — choose whether to prefer first-come, best-match, balanced load, or spread-work.
- Learning layer — optional feedback-driven weights that retune themselves from real outcomes.
To see the exact reasoning for any task, call GET /decisions?taskId=....