---
title: "Queue an on-demand refresh of a ticket's AI summary. Publishes a `TicketSummaryRequestEvent` to `ticket.summary-requests` for the AI summary-service, throttled by a per-ticket 30s Redis SETNX cooldown so agents (across pods) cannot flood the AI side. Returns the raw response object — NOT wrapped in `ApiResponse` — to mirror the other ticket AI endpoints: `{queued:true}` or `{queued:false, cooldownSeconds:N}`."
method: POST
path: "/v1/tickets/{id}/summary/refresh"
tags: ["Ticket"]
---

# Queue an on-demand refresh of a ticket's AI summary. Publishes a \`TicketSummaryRequestEvent\` to \`ticket.summary-requests\` for the AI summary-service, throttled by a per-ticket 30s Redis SETNX cooldown so agents (across pods) cannot flood the AI side. Returns the raw response object — NOT wrapped in \`ApiResponse\` — to mirror the other ticket AI endpoints: \`{queued:true}\` or \`{queued:false, cooldownSeconds:N}\`.

`POST /v1/tickets/{id}/summary/refresh`

## Path parameters

- `id` integer, required

## Response `200`

OK

- TicketSummaryRefreshResponse — Response of `POST /v1/tickets/{id}/summary/refresh`. Frozen wire contract: `{ queued: true }` when the request was enqueued, or `{ queued: false, cooldownSeconds: N }` while the per-ticket 30s cooldown holds — Infoset.Service.Hubs.Ticket.Service.TicketSummaryRefreshResponse.CooldownSeconds is therefore null-suppressed on the queued path.
  - `queued` boolean
  - `cooldownSeconds` integer, nullable

---

[API](https://skmtc.dev/infoset/apis/infoset-rest-api.md) · [All operations](https://skmtc.dev/infoset/apis/infoset-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/infoset/infoset-rest-api/revisions/f5bc39a1ac15/schema)
