applications.list_status_history
Read how long an application spent in each column
- Request
- GET
/api/v1/applications/{applicationId}/status-history - Scope required
applications:read- Effect
- Reads only. Safe to retry and safe for an agent to call unprompted.
- Acts on
- Serves an account’s own data and, where shared, an organization’s.
- MCP tool
applications_list_status_history- Environment
- Live and sandbox alike.
- Request body
- JSON.
What it does
Returns every stretch of time the card has spent in a status, newest first. Exactly one span is open at a time — the current one, whose `endedAt` is null — and the spans are contiguous, so the gap between two of them is how long the card sat where it was. This is what the app's time-in-status figures are computed from, so it is the honest answer to "how long have I been waiting". Organization staff reading a shared board may call it for the cards that board holds. A card holds a handful of spans, so the whole history comes back in one page: `hasMore` is always false and `nextCursor` always null. `applications.move` is what closes the open span and opens the next one.
Parameters
| Name | Sent in | Requirement | Accepts |
|---|---|---|---|
| applicationId | path | Required | string |
Response
- data
- array of object, required
- endedAt
- string or null, required
- startedAt
- string, required
- status
- one of: saved, applied, interviewing, offer, rejected, accepted, archived, required
- hasMore
- boolean, required
- nextCursor
- string or null, required
Examples
A card that was saved before it was applied for
curl -s https://www.jobapplicationtracking.com/api/v1/applications/app_123/status-history \
-H "Authorization: Bearer $JAT_KEY"{
"data": [
{
"status": "applied",
"startedAt": "2026-02-11T17:05:00.000Z",
"endedAt": null
},
{
"status": "saved",
"startedAt": "2026-02-01T09:00:00.000Z",
"endedAt": "2026-02-11T17:05:00.000Z"
}
],
"hasMore": false,
"nextCursor": null
}