---
name: freshdesk-sla-breaches
description: "Every business hour: Freshdesk tickets past or within an hour of their first response or resolution due time, and who picks each one up. Use when the user asks for this, or when it runs on a schedule."
---

# Freshdesk SLA breaches

Every business hour: Freshdesk tickets past or within an hour of their first response or resolution due time, and who picks each one up.

Freshdesk sets a first response and a resolution due time on every ticket, and the overdue view fills up quietly while agents work their own queues. Support leads usually learn about a missed SLA from the report, or from the customer.

Every hour the agent finds open tickets that are past either due time or will reach it within the hour, checks whether a first response already went out, and lists them by urgency with the assigned agent. Tickets with nobody on them get the question on the card.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- A Freshdesk agent API key used as the basic auth user (`FRESHDESK_API_KEY`) for `https://<yourcompany>.freshdesk.com`, with access to the groups you watch.
- SLA policies in Freshdesk, and any custom statuses whose SLA timer keeps running.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Filter tickets due by tomorrow** (Freshdesk): Call `GET /api/v2/search/tickets?query="status:2 AND (fr_due_by:<'2026-10-18' OR due_by:<'2026-10-18')"` with tomorrow's date. The filter takes dates without times, in UTC, returns 30 tickets per page and stops at 10 pages.
2. **Check the exact times** (Freshdesk): Read `fr_due_by`, `due_by`, `fr_escalated`, `is_escalated`, `responder_id` and `group_id`. For tickets near their first response time, call `GET /api/v2/tickets/{id}?include=stats`; if `stats.first_responded_at` is set, only the resolution time still counts.
3. **Sort by urgency**: Past due first, then due within 60 minutes, each with which time it is (first response or resolution) and how far past or ahead. Name agents and groups from `GET /api/v2/agents` and `GET /api/v2/groups`.
4. **Ask, then assign** (Freshdesk): Post the list as an ask when any ticket is past due or has no agent. On an answer, call `PUT /api/v2/tickets/{id}` with `responder_id` (and `group_id` if it moves group). Post an all-clear when nothing is late.

## Route B: the browser

### What you need

- Signed in to Freshdesk as an agent with access to the groups you watch; assigning tickets needs the Agent or Supervisor role on those groups.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://freshdesk.com/login. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Open your helpdesk**: Enter your helpdesk address (`<yourcompany>.freshdesk.com`) on the login page; sign-in is already done. Click **Tickets** in the left bar.
2. **Open the Overdue view**: In the views dropdown at the top of the ticket list pick **Overdue**. Read each ticket's number, subject, agent and group, and the due text on the card (**Overdue by** with the time, or **First response overdue**).
3. **Open the Due today view**: Switch to **Due today**, sort by **Due by** ascending, and keep the tickets whose due text is within 60 minutes, noting whether it is the first response or the resolution time.
4. **Check the first response**: For a ticket near its first response time, open it and look at the conversation: if an agent reply already went out, only the resolution time still counts.
5. **Assign after the answer**: Report past due first, then due within the hour, with subject, which due time, how far past or ahead, agent and group, and ask who picks up the tickets with no agent. After the answer, open the ticket and set **Agent** (and **Group**) in the properties panel, then **Update**.

Note: The Overdue and Due today views include only statuses whose SLA timer is running, so pending tickets are left out, as in the API route. Each view shows 30 tickets per page; page through when the list is long.

## The report

- **Past due**: tickets past their first response or resolution time.
- **Due within the hour**, with time left.
- **Each ticket**: subject, which due time, how far past or ahead, agent and group.
- The ask: who picks up the ones with no agent.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "freshdesk-sla-breaches/<date of this run, e.g. 2026-10-16>",
  "item_key": "freshdesk-sla-breaches",
  "project": "Acme Support",
  "source": "Freshdesk SLA breaches skill",
  "kind": "action",
  "title": "4 tickets past due, 3 more within the hour",
  "summary": "**4 tickets** are past their due time and **3** will reach it within the hour. Two of the overdue tickets have no agent.",
  "action": {
    "request": "Who picks up the 2 tickets with no agent?",
    "options": [
      "Billing group lead",
      "Assign to me",
      "Round-robin in Tier 1",
      "Leave as is"
    ]
  },
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Ticket",
          "Subject",
          "Due time",
          "When",
          "Agent"
        ],
        "align": [
          "left",
          "left",
          "left",
          "left",
          "left"
        ],
        "rows": [
          [
            "#9182",
            "Refund not received",
            "First response",
            "1 h 20 min ago",
            "No agent"
          ],
          [
            "#9175",
            "Cannot add a teammate",
            "Resolution",
            "45 min ago",
            "Ana"
          ],
          [
            "#9190",
            "Invoice address is wrong",
            "First response",
            "30 min ago",
            "No agent"
          ],
          [
            "#9168",
            "CSV export fails",
            "Resolution",
            "10 min ago",
            "Ben"
          ],
          [
            "#9194",
            "Password reset email missing",
            "First response",
            "In 15 min",
            "Chris"
          ],
          [
            "#9171",
            "Plan downgrade question",
            "Resolution",
            "In 35 min",
            "Ana"
          ],
          [
            "#9196",
            "App crashes on login",
            "First response",
            "In 50 min",
            "Ben"
          ]
        ]
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "Both unassigned tickets are billing questions that landed in the general queue.",
        "tone": "info"
      }
    }
  ]
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

## Run it on a schedule

Suggested: Weekdays, hourly 9:30 to 17:30 (`30 9-17 * * 1-5`). From cron, with the agent signed in on that machine:

```bash
30 9-17 * * 1-5 claude -p "Run the freshdesk-sla-breaches skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/freshdesk-sla-breaches#schedule

Source: https://briefkin.dev/skills/freshdesk-sla-breaches
