---
title: "Unstick Job"
method: POST
path: "/api/v1/unstick/{check_result_id}"
tags: ["grep-public-api"]
---

# Unstick Job

`POST /api/v1/unstick/{check_result_id}`

## Request

- Base URL: `https://api.grep.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.grep.ai/api/v1/unstick/{check_result_id}`
- Auth: none declared

Command-id-agnostic resume for stuck brain-managed subjobs.

Accepts Descope JWT (`/grep/unstick`) or API keys (`/api/v1/unstick`).

## Path parameters

- `check_result_id` string, required

## Request body

- UnstickJobRequest: Request body for unstick endpoint.
  - `expected_lifecycle_generation` integer, nullable
  - `restart_run_store` boolean: Start the job's check result over under a new AgentRun run store instead of resuming the refused one. Use it when the unstick is refused because the harness will not open the run's store (binding mismatch, outdated schema, or run id mismatch): the refused store is moved aside to `<key>.refused-<utc timestamp>` beside where it was, where it stays readable, and the successor runs on a fresh sandbox with the same owner, expert and inputs. AgentRun runs only.
  - `steering_message` string, nullable: Optional override guidance injected into Claude's prompt on the resumed turn. Mirrors the `guidance` arg of `brain_job_manager.continue_managed_run`. Omit to resume without any extra instruction — the agent continues from its existing claude_session_id as if nothing happened.

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/grep/apis/grep-api.md) - [All operations](https://skmtc.dev/grep/apis/grep-api/llms.txt) - [OpenAPI document](https://skmtc.dev/grep/apis/grep-api/revisions/3719dd7f43ec?raw)
