Built-in helpdesk

A helpdesk that lives next to your CRM data

Support tickets that already know who the customer is, what they bought, and which deals they're in. SLA timers with business-hours awareness. Approvals before close. A solutions library that builds itself from real resolutions.

SLA aware
Business-hours calendar, auto-escalation
Approvals
Two-eyes close where it matters
Solutions library
Resolve once, answer forever

How it works

From inbox to insight.

A ticket's job isn't just to get closed. It's to leave the team smarter than it started.

Receive

A ticket lands (email, form, API, or the support widget) linked to the right account and contact

  • Email → ticket gateway
  • Web form embed
  • API endpoint
  • Manual creation

Triage

Assign owner, set priority and severity, configure SLA timer

  • Round-robin assignment
  • Priority + severity
  • SLA timer auto-derived
  • Tag for category

Resolve

Work the issue inside the ticket, internal notes, customer replies, attachments, all on one timeline

  • Internal vs customer-facing notes
  • Attachments
  • Approvals before close
  • Full audit trail

Capture

Save the resolution to the solutions library: future tickets surface it inline as you type

  • Promote ticket → solution
  • Inline match-on-type
  • Versioned articles
  • Per-org library

Capabilities

A grown-up helpdesk, included.

Status workflow with rules

new → assigned → pending → closed. Transitions are validated server-side: a ticket can't jump straight from new to closed, and re-opening an old closed ticket needs admin role.

  • Enforced state machine
  • Role-gated transitions
  • Re-open guards
  • Per-status default views

SLA & escalation

Priority + severity derive an SLA target. A timer ticks down on every ticket; escalation rules fire when it's about to expire.

  • Auto-derived SLA
  • Priority × severity matrix
  • Auto-escalation on breach
  • SLA hit-rate analytics

Approval workflows

Some orgs need a second pair of eyes before close. /tickets/approvals queues tickets awaiting sign-off; one click records the decision with timestamp and rationale.

  • Per-org approval policy
  • Approver assignment
  • Rationale capture
  • Audit-friendly log

Solutions library

A write-once knowledge base built from real ticket resolutions. /solutions is searchable; new tickets surface matching articles automatically as the subject is typed.

  • Promote ticket → solution
  • Markdown body
  • Versioned with history
  • Cross-tenant isolation

Analytics dashboard

First-response time, resolution time, SLA hit rate per assignee, volume by tag, backlog age distribution. /tickets/analytics is the on-call manager's morning page.

  • First-response & resolution times
  • Per-assignee SLA hit rate
  • Volume by tag, source, severity
  • Backlog age histogram

Custom fields per org

Add the columns your team needs (environment, product version, customer plan, escalation level) without code. Filterable in list view, available in API and mobile.

  • Text / number / dropdown / date / checkbox
  • Filterable
  • Per-org schema
  • Soft-delete preserves history

Connected to your stack.

Tickets share the same data plane as leads, deals, and invoices, and the same API for everything outside it.

Mobile app
Tickets are first-class in Flutter
Webhooks
case.created, .escalated, .closed
Tags
Cross-cut by topic, product, region
Teams
Assign to a group, not just a person
Attachments
Logs, screenshots, repro files
Paging
Bridge to PagerDuty / Opsgenie via webhook

Questions, answered.

How does the SLA timer handle business hours?

SLA timers respect an org-level business-hours calendar. Time spent outside business hours doesn't count toward the SLA, and the calendar can include public holidays. The settings live under /settings/support.

Can customers see their own tickets?

Yes, a customer portal exposes tickets owned by the requesting contact via a tokenised public URL. Customers can read updates, post replies, and attach files; staff-only notes are filtered server-side.

How do auto-escalations work?

A Celery beat task scans open tickets every minute. When a ticket's SLA is within an org-configured warning threshold, it fires the case.escalated webhook and (optionally) re-assigns to a senior responder per the escalation policy.

Is the solutions library full-text searchable?

Yes. Solutions are indexed on title, body, and tags. The inline-match feature on ticket creation hits the same index. PostgreSQL's full-text search powers it; no external Elasticsearch needed for typical loads.

Stop paying $15/agent/month.

Self-hosted, open source, and right next to your CRM data. Spin it up in five minutes with Docker.