---
title: "Report external coding-agent progress"
method: POST
path: "/tickets/{ticketId}/agent-progress"
tags: ["Ticket"]
---

# Report external coding-agent progress

`POST /tickets/{ticketId}/agent-progress`

Called by the Gleap MCP `report_progress` tool. Updates the
ticket's handoff state (live activity in the dashboard), appends to the
progress trail, and registers pull-request links for resolve-on-merge.
When the report carries a customerShipMessage, `shipMessage.state` in
the response says what became of it (parked / armed_immediately /
already_armed / already_replied / mode_none / guard_tripped / error /
none_requested) — the MCP tool relays that to the agent so it never
guesses whether an automatic follow-up exists.

## Path parameters

- `ticketId` string, required

## Headers

- `project` string, required

## Request body

- AgentProgressDto — Body of POST /tickets/{ticketId}/agent-progress — the Gleap MCP `report_progress` tool. See services/agents/external.agent.progress.ts.
  - `phase` 'investigating' | 'reproduced' | 'fixing' | 'pr_opened' | 'blocked' | 'done', required
  - `message` string, required — One-line status shown live in the dashboard (aim for ~10 words).
  - `prUrl` string — Pull-request URL; registers the PR for resolve-on-merge.
  - `agentName` string — Reporting agent's product name (e.g. "Claude Code", "Codex").
  - `sessionId` string — Stable id for the agent's session, sent on every call — the upsert key that lets multiple agents work one ticket in parallel. Must match `[A-Za-z0-9._-]{1,100}`; anything else (and omitting it) falls back to agentName as the key.
  - `customerShipMessage` string — Operator-approved customer "ship message" (plain text, max ~2000 chars), drafted while the agent still has full context. Gleap shows it on the ticket as a scheduled reply without a date and sends it automatically after the registered PR merges, per the project's post-merge timing settings; the ticket closes after delivery. Send it with `pr_opened` or `done`; the newest report replaces the draft.

## Response `200`

Ok

- unknown

---

[API](https://skmtc.net/gleap/apis/gleap-server.md) · [All operations](https://skmtc.net/gleap/apis/gleap-server/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/gleap/gleap-server/revisions/fe2dff9fb04b/schema)
