Answer every customer question in one place, in every channel.
A service desk that works with all of your operational data inside Calisto Pro. It opens on what needs a reply now, so nobody has to decide where to start. See the same queue as a list, a board or a calendar.
The Service Desk App for Customer Requests
Tickets, queues, SLAs, a knowledge base, approvals, and CSAT. Every request caught, given to somebody, and answered in the time you promised.
Briefing
What needs you today, before you open anything.
Lenses
Change how you look at the queue, not what is in it.
Tickets
The request itself, and everything that happened to it.
SLAs
The time you promised, and what happens as it runs out.
Requests
Where a request arrives from, on every channel you run.
Knowledge
The answer written once, for the question asked repeatedly.
Claims & CSAT
What the customer said about how it went.
Approvals
What needs a second person before it can be done.
Settings
What you control, and where each control lives.
Every business has customers who need help. Questions, complaints, broken things, refund requests. Without a system those requests scatter across phone calls, messages, emails and conversations at a counter, and nobody knows who asked, when, or whether anyone replied. A service desk is the system that catches every request, gives it to somebody, tracks whether it was handled in the time you promised, and measures how well your team did. It is how a business gets from “I think someone is looking into it” to “resolved in four hours, and the customer rated it five out of five”.
Desk opens on what needs a reply right now.
The home screen is not a metrics wall. It is three de-duplicated buckets over the live ticket feed, in priority order.
Active tickets already breached or at risk, capped at twelve. This bucket has first claim on a ticket.
One bucket per ticket
De-duplicated in priority order: a breaching unassigned ticket appears once, at the top, rather than twice in two lists. Every row opens the ticket.
It arrives on its own
A ticket that crosses its due time appears here on the next refresh. Nothing to sweep and nothing to run.
List, board, calendar. Same tickets, same filters.
Tickets, my tickets and unassigned open the same workspace with a different preset. One top bar owns the search, the facets and the sort.
List
The default, for working down the queue. Each row carries an SLA dot, the subject, the requester and type, priority and status, when resolution is due and who owns it.
Board
Four columns for moving work along: open, in progress, waiting and resolved. Drag a card to another column and the status changes immediately, then reconciles against the server.
Calendar
A month grid placing each ticket on the day its resolution is due, with up to three chips a day and an overflow line.
One dataset, one filter set. Status, priority, type and SLA face the whole queue, and a filter set in the list survives a switch to the board or the calendar.
Everything about the case on one screen.
Every ticket opens into a tabbed workspace: conversation, activity, and a claim tab when the ticket is a claim. Each SLA chip colours from its own clock rather than a stored summary, so a visibly overdue response reads as breached even when the other clock is fine.
Conversation, Activity, and a Claim tab that appears only on a claim.
The conversation carries the customer exchange; activity lists the recorded events. Internal notes sit in their own tinted card and are never mixed into the thread.
The shared thread every Calisto communication tool writes into: somebody who telephones, then emails, then raises a portal ticket has one conversation, not four.
Date grouped, channel badged, locale aware, and it updates while you are reading it.
One composer with a toggle. Private note mode is visibly tinted and labelled as team-only.
A reply that fails to send says so and keeps your draft exactly as typed rather than clearing it.
Suggest article offers matches for this ticket, and the knowledge search finds one by name as you type.
Either inserts a public article link on a new line, appended to what you have already written and never replacing it.
A sidebar panel assembling the requester contact, active bookings, recent orders, membership, access record and verification level, with empty sections omitted.
None of it is synced into Desk or waiting on an integration. It is the same database the rest of your operation writes to, so it is already there when the ticket opens.
Status, priority and type each change from the sidebar, with assign-to-me on an unassigned ticket.
A delete names the ticket and its subject before it will run.
Configurable per priority. Clock respects business hours.
Each priority carries its own first-response and resolution targets and its own escalation percentage, all set by you. Three states show on every ticket: on track, at risk, breached.
The clock starts when the ticket does.
Maximum time from ticket creation to first agent reply, set per priority. The countdown shows on the ticket, and reads as met once the reply lands.
Its own clock. Its own colour.
Maximum time from creation to resolved, set per priority. Its chip colours from its own clock, so a breached resolution reads as breached while first response is comfortably met.
It pauses when you close.
Round-the-clock, or a weekly window with per-day start and end times, and the clock pauses outside them. These are the one shared business hours, so your SLA clock, your booking availability and your auto-replies read the same schedule rather than a Desk-only copy.
Never a stale SLA.
SLA state is recalculated on every read rather than stored, so a ticket crossing its due time is visibly overdue on the next poll. At risk means past three quarters of the window.
Intake first. Convert what needs a case.
Not every inbound message is a ticket. Requests are a cross-vertical intake queue in their own right: search them, move them across a three-column board, then convert one into a ticket or resolve it where it stands. Every ticket records the channel it came in on, whether that was email, chat, phone, the portal, the counter, social or SMS.
The Service Dashboard
Seven measures over five charts and an agent leaderboard. Compliance counts every concluded resolution clock, including tickets still open but already past due, so an active breach pulls the number down the moment it happens rather than at resolution.
The Intake Queue
Requests counted as total, pending, in progress and completed, in a list or on a three-column board. Search title, requester or category; filter by status or priority.
Convert To A Ticket
One action opens the new ticket. Once converted, that action becomes a link to the ticket it became, so the trail survives.
Or Resolve It Here
Not everything needs to become a ticket. A request can be resolved in place from the same row, and reads as completed after.
Member Self Service
Somebody raises a maintenance or support request with photos through Navigator and tracks it themselves, seeing only their own tickets and needing no agent seat.
Write once. Publish. Send it from a reply.
Articles written in Markdown with a category, tags and three statuses. Publishing one gives it a real public page that opens with no session at all, and that is the link an agent inserts from the reply composer.
Title and a Markdown body in the main column, with publishing status, category and tags in the sidebar.
Categories with an optional parent, children shown indented under them.
Add one at the top level or under a parent from the manager card beneath the article list.
Every published article has an account-addressed public URL that opens signed out, in a private window, or from another account.
A draft, archived or unknown article returns a genuine not-found, so a dead help link can never be indexed as a live article.
A slug and meta description for search, and a checkbox list linking related articles.
Reverse-chronological version snapshots. Reverting loads a snapshot into the editor and waits for you to save it.
A view count and a helpfulness percentage on every article, visible in the list, so you can see which answer is doing the work.
A copyable embed snippet that puts the same articles on an outside site, serving published ones only.
Damage claims with photos. Satisfaction on resolution.
A claim is a ticket typed as a claim, so it keeps the whole workspace, the same thread, SLA and history, and gains four fields of its own. When any ticket resolves, the satisfaction survey fires.
The item, the damage description, a cost estimate and a liability assignment, held as columns on the ticket rather than as loose attachments.
Its own workspace
The same list and board lenses as tickets, with open claims, estimated exposure and resolved counted above them.
Search finds the damage
Subject, item, requester and damage description are all searched, so a term that appears only in what went wrong still finds the claim.
Amounts in your currency
Exposure and every claim amount format in the currency the active business unit carries. Never a hardcoded symbol and never an assumed default.
Refund or comp from the claim
Requested with the amount already filled in. Under the account threshold it applies at once; above it, it waits for a manager.
Small amounts apply. Large ones wait for a signature.
When an agent requests a refund, a comp or an escalation from a ticket, the account's auto-approve amounts decide what happens next. Under the line it applies immediately and records itself through Payments and Ledger. Over it, it waits in the approvals queue for a manager.
Money back against a transaction. Carries an amount and an optional transaction reference.
A goodwill credit. Carries an amount and an optional transaction reference.
A request for a manager decision with no money attached, so no amount is asked for.
Each account sets a refund amount and a comp amount that apply without sign-off. A request under that line is issued on the spot and recorded.
Anything above the line goes to the approvals queue. Set a threshold to zero and every request of that type is held, and the tab says so.
Each pending item shows its type, subject, requester, amount and a link to its ticket. Approving executes the refund and records it; rejecting closes the request without action.
A refund with no resolvable currency is refused outright rather than applied against an assumed one. Never a hardcoded symbol and never a default.
Five tabs. Business hours that belong to the whole account.
Above the tabs sit the shared business identity, support contact and operating currency, edited once here and read by every Calisto app. Then the active unit, with its customer terminology and service catalog editable in place.
SLA Policies
3 featuresTargets per priority
A first-response target, a resolution target and an escalation percentage for each of the four priorities.
Operating hours
Edited here, writing the one shared business schedule rather than a Desk-only copy.
Locked upstream
A schedule locked above you renders read-only with the source named, rather than saving into nothing.
Ticket Types
3 featuresName, icon, colour
Plus a default priority and a default group, so a new ticket of that type starts where it belongs.
Auto-link
A type can attach itself to a reservation, order, member, contact or asset on creation.
Custom fields
Text, number, dropdown, date, file, contact or asset, each optionally required.
Canned Responses
3 featuresPersonal or shared
Reusable replies grouped by category, kept to yourself or given to the team.
Variable substitution
The requester name, the ticket reference and the agent name fill in as the reply is inserted.
Macros
A response can set a status, set a priority, assign the ticket to you and add tags as it goes in.
CSAT
3 featuresWhen it sends
Immediately on resolution, after an hour, after a day, or after a delay you set.
What it asks
Your own prompt, and the reason codes a customer can pick from.
What it skips
Ticket types can be excluded, drawn from the types you have actually configured.
Approvals Policy
2 featuresTwo thresholds
The refund amount and the comp amount that apply without sign-off.
Zero holds everything
Set either to zero and every request of that type waits for a manager, and the tab says so.
Every list narrows to the unit you are in.
Tickets, claims, approvals, articles and every count scope to the business unit you have selected, so a total never disagrees with the list beneath it. Data rules can filter by location and redact individual fields.
Where Desk touches everything else.
5 of these 8 connections are in your plan today. The rest stay visible so you know the instrument is there before you need it.
Today
The Today help desk, requests, damage claims and service hub routes open in Desk, and the Today cockpit carries a Desk service summary tile.
Orderflow
The customer context panel resolves the requester recent orders from Orderflow.
Bookings
The customer context panel resolves the requester active bookings from Bookings, and a ticket linked to a reservation opens it there.
Payments
An approved refund executes through Payments, and a refund with no resolvable currency is refused rather than applied.
Ledger
An approved refund or comp is recorded in Ledger.
Identity
The customer context header shows the requester Calisto Identity verification level and its panel can change that level.
Access
The customer context panel resolves the requester access record from Access.
Agenda
Requester contact records resolve through Agenda and the View In Contacts link opens the contact there.
No setup cost. Pay when you start using.
Helpdesk for customer-facing teams.
Recommended for you
Works well together.
Calisto Today
Calisto Orderflow
Calisto Bookings
Included with Commerce or Ops
Reservations, inventory, contacts, tickets, and scheduling
Learn more →Calisto Payments
Calisto Commerce
Catalog, pricing, payments, proposals, contracts, and CRM
Learn more →Calisto Ledger
Calisto Identity
Calisto Access
Calisto Agenda
Included with your Account
Tasks, calendar, and contacts in one workspace.
Learn more →Everything included in Calisto Desk.
- Three-bucket briefing: breaching SLA, unassigned, open queue (de-duplicated, priority ordered)
- Refreshed every 20 seconds, SLA state recomputed on every read
- Counts for breaching, unassigned, open, and resolved today
- A loading state on first load rather than a zeroed band
- Three lenses over one dataset: list, board, calendar
- Search, facets, and sort shared across all lenses
- Drag on the board to change status, with a failed write returning the card
- Calendar places each ticket on its resolution due day, locale-aware week
- Five pre-built saved views plus your own, each narrowing the filter bar and the fetch
- Ticket composer with custom fields per type, validated on submit and re-checked by the server
- A ticket with no SLA shows a neutral dot rather than a gap
- Three tabs: conversation, activity, claim (when applicable)
- Shared conversation thread with internal notes visibly tinted and separated
- Thread date-grouped, channel-badged, and locale-aware; polls every 10 seconds while the ticket refreshes every 15
- An older ticket with no projected thread falls back to a flat view rather than showing nothing
- A failed status, priority, or type change raises an alert above the tab body
- A failed reply keeps your draft exactly as typed
- Reply composer with article insertion (suggest or search)
- Customer context sidebar: active bookings, recent orders, membership, access record
- Identity verification level in header, changeable in place
- Status, priority, type, and assignment changeable from sidebar
- Related tickets
- Seven channel labels recorded per ticket: email, chat, phone, portal, walk-in, social, SMS
- Portal self-service: a customer raises a request with photos and tracks its status without emailing anyone
- Seven configurable ticket types with icon, colour, default priority, and default group
- Five statuses and four priorities
- Auto-link to reservation, order, member, contact, or asset per type
- Custom fields per type: text, number, dropdown, date, file, contact, asset
- Retired types stay selectable on existing tickets
- A ticket cannot be saved without a type, and never renders a blank type badge
- First-response and resolution targets per priority (urgent, high, medium, low)
- Escalation percentage per priority
- Business-hours measurement (clock pauses when closed)
- SLA state recomputed on every ticket read (never stored stale)
- Three states: on track, at risk (past 75% of window), breached
- Each chip colours from its own clock rather than a stored summary
- Filter bar widened to at-risk-or-breached in one selection
- Cross-vertical intake queue (list and board)
- Convert a request into a ticket (keeps the link)
- Resolve a request in place without creating a ticket
- Member self-service: submit and track own tickets through Navigator
- Service dashboard: 7 KPIs, 5 charts, agent leaderboard, refreshed every 30 seconds
- Active breaches pull compliance down immediately (not at resolution)
- A duration of zero renders as a dash, never as zero minutes
- Markdown articles with three statuses (draft, published, archived)
- Two-level category hierarchy
- Real public page per published article (opens signed out)
- A draft, archived, or unknown article returns a genuine not-found
- Slug and meta description for search
- Related article links
- Version history with revert
- View count and helpfulness percentage per article, incrementing on each successful public read
- Embeddable widget with copyable snippet, serving published articles only
- Article insertion from reply composer (suggest or search), appended to your draft rather than replacing it
- A failed save reports the actual reason rather than a generic message
- A claim is a ticket typed as a claim (keeps full workspace)
- Extra fields: item, damage description, cost estimate, liability
- Own list and board with exposure total in the active unit’s currency, falling back to a plain localized number when none is set
- Photo evidence
- Search covers subject, item, requester, and damage description
- Refund or comp request from the claim tab
- Three approval types: refund, comp, escalation
- Auto-approve threshold per type (under = applied, over = held for manager)
- Zero threshold = every request held
- No resolvable currency = refund refused outright
- CSAT survey on resolution: rating out of 5, configurable reason codes, free-text comment
- Configurable delay: immediately, 1 hour, 1 day, or custom
- Ticket types can be excluded from the survey
- Reusable replies grouped by category (personal or shared)
- Variable substitution: requester name, ticket reference, agent name
- Macros: set status, set priority, assign to me, add tags on insert
- Reports on CSAT, SLA compliance, and volume by type and channel
- Fourteen-day trend and by-agent throughput, with CSV export
- Every list and rollup narrows to the active business unit, so a total never disagrees with the list under it
- Records predating the scoping stay visible rather than vanishing
- Member data rules can filter by location and redact individual fields
- A broken rule leaves rows untouched rather than failing the screen
- A rule that hides everything returns an empty queue rather than an error
- Five configuration tabs over the shared business identity, contact, and currency
- Today (help desk, requests, claims, and service hub open in Desk)
- Ledger (approved refunds and comps recorded)
- Payments (refunds execute through Payments)
- Bookings (customer context: active bookings, ticket linked to reservation)
- Orderflow (customer context: recent orders)
- Access (customer context: access record)
- Registry (customer context: membership status)
- Identity (customer context: verification level)
- Navigator (member self-service submission and tracking)
- Purview (business unit scope, currency, terminology)
- Automations (ticket created, assigned, resolved, SLA breached events)
- Depot (ticket attachment storage)
Frequently asked questions
From the apps that already hold it. Active bookings come from Bookings, recent orders from Orderflow, membership from Registry, the access record from Access, and the verification level from Identity. Nothing is copied into Desk and nothing needs an integration, because it is one database.
A service-level agreement is a target your team sets for how quickly tickets are handled. Desk lets you set two per priority level: how quickly an agent must first respond, and how quickly the ticket must be fully resolved. The clock tracks both, pauses outside your business hours if you configure them, and shows at a glance which tickets are on track, at risk, or overdue.
No. Desk reads the same database as every other Calisto app. If a customer has a booking in Bookings, an order in Orderflow, a membership in Registry, or an access record in Access, that information is already in the ticket sidebar. There is nothing to connect and nothing to sync.
Yes. Navigator composes the member-facing surface: somebody submits a maintenance or support request with photos, then watches its status change without an agent seat and without emailing anyone. The endpoint behind it lists only the tickets belonging to the person asking.
Only if you tell it to. Set operating hours as round-the-clock or as a weekly window with per-day start and end times, and the clock pauses outside them. Those hours are the one shared business schedule every Calisto product reads, not a Desk-only copy.
By an amount you set per type. Under your refund or comp threshold the request applies on the spot and records itself through Payments and Ledger; above it, the request is held in the approvals queue for a manager with the ticket one click away. Set a threshold to zero and every request of that type is held.
Not yet. Seven channels are recorded as a label on the ticket so your reporting splits by them, and two of them are live intake today: the customer portal, where somebody raises a request with photos and tracks it, and an agent creating the ticket. Everything else is recorded, not parsed.