-
-
Notifications
You must be signed in to change notification settings - Fork 29
Ticket Categories
A ticket type says what kind of thing this is β an incident, a service request. A category says what it is about: printing, user onboarding, access requests. This page covers the category list and the two fields that sit beside it.
Shipped as #1540β#1548 in 1.5.0. Asked for by a prospective user by email:
In our current ticketing platform, we can create and add a category to each ticket. For example, for a 'service request' could have a category such as 'user onboarding' or for 'incident' a category such as 'printing issues'.
The developer guide is Ticket categories β Developer Guide.
Everything here lives under Tickets β Settings β Categories.
| Field | Asks | When |
|---|---|---|
| Category | What was this reported as? | When the ticket is raised |
| Category at close | What did it turn out to be? | When the ticket finishes |
| Resolution code | How did it end? | When the ticket finishes |
The first two share the same list. Most of the time an analyst simply confirms what is already there β the second field earns its place on the ones where the first guess was wrong.
A worked example. A user raises "my printer keeps going offline."
- Category at open: Hardware β Printer
- The analyst finds the office Wi-Fi access point is dropping
- Category at close: Network β Wi-Fi
At the end of the quarter you can now say "37 tickets were reported as printer problems; 12 of them were actually the network." That is the buy-a-new-access-point conversation, and without the second field the printer number is simply wrong and nothing tells you.
A resolution code is a different question again β not what it was about, but how it ended. Ten are there from the start:
Fixed remotely Β· Fixed on site Β· Hardware replaced Β· Configuration change Β· Training given Β· Access granted Β· No fault found Β· Duplicate Β· Withdrawn Β· Referred to supplier
That is the field that most quickly changes what you do. A fifth of your tickets coming back as Training given is a documentation problem, not an IT one.
Nothing appears on your ticket screen until you turn it on. Build the list first, then switch on the fields you want.
Each field has its own switch, and each can be set differently per company on a multi-company install. They are independent on purpose β category off, category at close on is a real service desk. Don't make the person raising the ticket guess; let the analyst classify once they actually know.
Turning a switch off never deletes anything. A ticket that already has a category keeps it, and it comes back untouched when you switch the field on again.
Add a category, then add sub-categories underneath it if you want them β up to three levels, and no level is compulsory. A flat list of ten is a perfectly good answer.
Hardware
β Printer
β Toner
Access requests
β New starter
Network
Tying a category to a ticket type. A category can be tied to one type, so User onboarding is only ever offered on a service request. Leave the type as Any type and it appears on everything.
β οΈ The tie belongs to the top-level category, and its sub-categories follow it. A sub-category cannot claim a different type from its parent β otherwise "Hardware β Printer" could be an incident while "Hardware" was a service request, and neither answer would be wrong.
If you change a ticket's type, a category that belonged to the old type is cleared, and the screen says so. A category not tied to any type survives the change. The clear is recorded in the ticket's history with the full category path, so it is never a silent loss.
Each category carries a Customers can pick this tick. Requesters get a short list in plain English on the portal's What is this about? field while analysts see the whole tree.
The picker is optional and only appears if you have switched the category field on and have at least one portal-visible category. Not sure is a perfectly good answer β the analyst confirms the real category at the end, which is exactly what Category at close is for.
Categories tied to a ticket type are never offered on the portal, because the portal form has no ticket type field to give them any context.
Switch a category off to retire it. It stays on the tickets that already carry it and stops being offered on new ones β which is almost always what you want.
Deleting is refused while anything still points at it, and the message says which:
- "This category has 2 sub-categories underneath it. Move or delete those first."
- "Tickets still use this category (14 as their category, 3 as their category at close). Switch it off instead."
That second one checks both columns, because a category only ever picked at close would otherwise sail past a check that looked at the opening one alone.
A ticket carries exactly one category. That is deliberate, and it is about reporting.
Every count in FreeITSM is one ticket, one slice. Let a ticket hold three categories and it gets counted three times: your pie chart totals more than 100%, and every "X% of tickets were printing" on the page becomes wrong. It isn't a chart bug you can patch β the question "what share of tickets were printing?" stops having an answer.
If you want cross-cutting labels, that is what tags are for. The hard rule: tags filter and search; tags never appear in a count-by chart.
On the dashboard, all three fields can be charted. The two category charts roll up to the top level β a leaf-level chart of a three-deep tree is a hundred slices nobody can read β and tickets with nothing set are counted as Not categorised rather than quietly dropped.
If you are not sure, don't build a taxonomy on day one. FreeITSM deliberately ships no categories at all, because a category tree is the one thing every organisation has to own and a pre-seeded one is just somebody else's wrong answer that has to be deleted first.
A reasonable order:
- Turn on Resolution code alone and leave it a month. It is already populated and it will tell you something.
- Add five or six top-level categories from what you actually saw.
- Add sub-categories only where one category is drowning everything else.
- Turn on Category at close once people are used to the list.
- Ticket categories β Developer Guide
- Tickets
- One board across every company β how categories behave when a board holds several companies at once
FreeITSM β an open-source IT Service Management platform Β· github.com/edmozley/freeitsm Β· MIT licence
- Installation
- β° Scheduled tasks (cron jobs)
- Architecture
- π§ͺ Developer tests
- AI Providers
- Internationalisation (i18n)
- Timezones & Time Handling
- π Date & Time Formats
- Theming & Dark Mode
- ποΈ Recent β getting back to what you were doing
- β¨οΈ Command palette (βK)
- π Searching inside tickets
- π Attached documents
-
MobileβFriendly
- β³ π« Mobile: Tickets
- β³ π» Mobile: Assets
- β³ π Mobile: Calendar
- β³ π Mobile: Knowledge
- β³ π¦ Mobile: Service Status
- β³ πΌ Mobile: Watchtower
- β³ π§© Mobile: Problem Management
- β³ π Mobile: Change Management
- β³ πΏ Mobile: Software
- β³ β Mobile: Tasks
- β³ π Mobile: Forms
- β³ π Mobile: Contracts
- β³ π Mobile: Domains
- β³ π Mobile: People
- β³ π Mobile: LMS
- β³ πΊοΈ Mobile: CMDB
- β³ πΊοΈ Mobile: Network Mapper
- β³ π§ Mobile: Process Mapper
- β³ βοΈ Mobile: Workflow
- β³ π₯οΈ Mobile: System
- β³ π Mobile: Reporting
- β³ π Mobile: System Wiki
- β³ π Mobile: Self-Service Portal
- β³ π§° Mobile: Techniques & Tricks
-
Security
- Layer 1 β which modules you can enter
- β³ π§© Module Access Control
- β³ π οΈ Module Access β Developer Guide
- Layer 2 β what you can administer
- β³ π Roles & Permissions
- β³ π οΈ Roles β Developer Guide
- β³ π€ Why capabilities are constants
- Layer 3 β the System module
- β³ π Admin Access Control
- Hardening
- β³ π Security review response 2026-08
- β³ π‘οΈ Security hardening 2026-08
- β³ π οΈ Security hardening 2026-08 β Developer Guide
- β³ π‘οΈ Round three β plain English
- β³ π οΈ Round three β Developer Guide
- β³ π‘οΈ CSRF protection (S4) β Developer Guide
- Single Sign-On (SSO)
- ποΈ LDAP & Active Directory
- π CardDAV contact sync
- Browser Extension
- API Reference
-
π REST API β how it works
- β³ π« REST API: Tickets
- β³ π» REST API: Assets
- β³ π΄ REST API: Problems
- β³ π REST API: Changes
- β³ π REST API: Knowledge
- β³ β REST API: Tasks
- β³ ποΈ REST API: CMDB
- β³ π REST API: Contracts
- β³ ποΈ REST API: Calendar
- β³ πΏ REST API: Software
- β³ π REST API: Domains
- β³ π¦ REST API: Service Status
- β³ βοΈ REST API: Morning Checks
- β³ π REST API: Forms
- β³ βοΈ REST API: Workflow
- β³ π·οΈ REST API: Cost centres
- β³ πΊοΈ REST API: Network Mapper
- β³ π§ Using the API docs page
- β³ π OpenAPI specification
- β³ β OpenAPI: kept correct
- β³ π οΈ Maintaining the catalogue
- Watchtower
-
Tickets
- β³ π Rota copy and paste β Developer Deep Dive
- β³ β Checklists & SOPs
- β³ βοΈ Mandatory fields
- β³ π·οΈ Ticket categories
- β³ π₯ Assigning tickets to a team, and escalation
- β³ π’ One board across every company
- β³ Mailbox Authentication
- β³ π€ Email send log
- β³ Basic IMAP mailboxes
- β³ Email rendering & images
- β³ SLA Management
- β³ WhatsApp channel
-
β³
βοΈ Telegram channel - β³ β CSAT company scope and filters β Developer Guide
- β³ π₯ Microsoft Teams channel
- β³ π¨οΈ Mattermost channel
- β³ π¬ Web chat channel
- β³ π£ Slack channel
- β³ π Linking tickets
- β³ β Record previews
- β³ π Ticket notes: internal or shared
- β³ ποΈ Canned responses
- β³ βοΈ Limiting replies to particular senders
- β³ π¨ Telling the analyst a ticket is theirs
- β³ βοΈ Email signatures
- β³ π The public web address
- β³ π’ Ticket numbering
- β³ π Raising a ticket for someone else
- β³ π Merging tickets
- β³ π Confidential tickets
- β³ π₯ Portal managers
- β³ π Who has seen a ticket
- β³ π Reading long tickets
- β³ β Splitting tickets
- β³ β Selecting several tickets
- β³ ποΈ The folder pane
- β³ π½ Just my tickets, or no closed ones
- β³ π οΈ Snoozing tickets β Developer Guide
- β³ π₯ Collision detection
- β³ β±οΈ Time tracking
- β³ π Scheduled work in your own calendar
- Problem Management
- Tasks
-
Assets
- β³ π’ Moving an asset between companies
- β³ π Shared asset locations
- β³ π§βπΌ Assigning assets to analysts
- β³ π Warranty and lease alerts
- β³ π Saved table views
- β³ π¨οΈ Recording anything, and importing it
- β³ π·οΈ QR asset labels
- β³ π Who holds what, and handover documents
- β³ π₯οΈ The inventory agent (PowerShell)
- β³ ποΈ Proxmox VE servers
- β³ βοΈ VMware Cloud Director servers
- β³ π Linking equipment to tickets
- β³ βοΈ Follow-up tasks on a ticket
- Knowledge
- Change Management
- Calendar
- Morning Checks
- Reporting
- Software
-
Forms
- β³ π¨ The form designer β Developer Guide
- β³ π Layout & the grid β Developer Guide
- β³ ποΈ Collections β grouping submissions
- β³ π Submissions as PDFs
- β³ β‘ What happens next β a form's own actions
- β³ π οΈ Sections & conditional logic β Developer Guide
- β³ π οΈ Lookup fields β Developer Guide
- β³ π‘οΈ Catalogue request approvals
- People
- Domains
- Contracts
- Service Status
- π Notifications
- π¨ War Room
- Self-Service Portal
- LMS
- Process Mapper
- CMDB
- Network Mapper
- Workflows
- Issue trackers (Jira, Azure DevOps)
- System
-
Overview
- β³ π Progress tracker
- β³ Concepts & vocabulary
- β³ Email routing & mailboxes
- β³ Settings: global vs per-company
- β³ Users & self-service
- β³ Staff cross-company access
- β³ π’ One board across every company
- β³ Worked examples
- β³ Pitfalls & gotchas
- β³ Scope: what it's for
- β³ π οΈ Developer Guide (make a module multi-company)
- β³ ποΈ Case study: CMDB (a linked graph)
- β³ π§ͺ Test harness (prove it's isolated)
- What this is
-
π Bugs resolved
- β³ πΌοΈ Logo and courses broke on Apache with PHP-FPM
- β³ π’ Chat tickets ignored your ticket numbering
- β³ π Dates shown as a dash, or in server time
- β³ π Assets β Users showed people from other companies
- β³ π Restricted analysts could read other modules' data
- β³ πΌοΈ Replies with a picture in the thread failed to send
- β³ π Reply attachments never reached the customer
- β³ π οΈ Outbound email attachments β Developer Guide
- β³ π A global SSO provider was missing from the portal
- β³ π Behind a proxy, the SSO redirect said http
- β³ βοΈ The portal tagline moved when you saved it
- β³ π¨ The portal settings screen forgot what you saved
- β³ π‘οΈ The approvals inbox said "Error" and nothing else
- β³ π A table's answers were missing from the PDF
- β³ β A single-select column let you tick every option
- β³ π The portal ignored a form's field widths
- β³ π The tasks board stopped taking clicks
- β³ ποΈ #121 The index list is out of date after upgrading
- β³ π #133 The calendar subscription was empty
- β³ π #131 Tasks always reopened on the board
- β³ π₯ #129 Every page returned HTTP 500 after upgrading
- β³ π³ #127 A PHP warning above the System page
- β³ π #126 Notes stamped with the server's clock
- β³ π Storing every date in UTC
- β³ πͺ The portal was down for everyone signed in
- β³ βοΈ #120 Workflow notes could never be written
- β³ βοΈ #123 Three errors when running Database Verification
- β³ π #122 The description box was a stub in the corner
- β³ π£ Demo data deleted real accounts
- β³ π #117 Sign-in redirected to the wrong address
- β³ π¨ #108 The priority dot was invisible
- β³ β±οΈ #116 Time logged from the right-click menu
- β³ π #114 API keys refused by our own guard
- β³ ποΈ #110 Assigning a task told nobody
- β³ πͺ #107 Signed out while still working
- β³ π #103 "Share with Requester" reached nobody
- β³ π #102 Search found nothing for hyphens
- β³ πͺ #101 Source code editor opened behind
- β³ βοΈ #88 Subtasks could not be ticked off
- β³ π» #84 Asset deep link selected nothing
- β³ π« #79 A new ticket arrived with no status
- β³ π§ #79 A ticket from email did not say so
- β³ π #78 Bell opened to nothing
- β³ π¬ #77 Mail only collected from Inbox
- β³ π #74 The default password could not be changed
- β³ π¦ #70 Renaming an impact level
- β³ π€ #67 App-only mailboxes could not send
- β³ π #45 Verify only ever worked for Microsoft
- β³ π #45 IMAP reported as not authenticated
- β³ βοΈ An email template stopped escaping itself
- β³ π The portal dashboard showed the wrong time
- β³ π’ The folder said 99 and the list showed 96