---
title: "Get Research Job"
method: GET
path: "/api/v1/research/{job_id}"
tags: ["grep-public-api"]
---

# Get Research Job

`GET /api/v1/research/{job_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/research/{job_id}`
- Auth: none declared

Get details of a research job by ID or slug.

Accepts either a UUID (e.g., /research/550e8400-...) or a human-readable
slug (e.g., /research/what-is-stripe). Backward-compatible: UUID URLs
keep working with zero DB overhead.

All auth modes supported. Public jobs can be read in capability mode with only the job_id.

## Path parameters

- `job_id` union, required
  - string, uuid
  - string

## Query parameters

- `include_check_results` boolean
- `include_status_messages` boolean
- `include_session` boolean

## Response `200`

Successful Response

- GetResearchJobResponse: Response shape for `GET /research/{job_id}`. Documents the fields that are stable and part of the public contract. Additional fields may be present — we use ``extra="allow"`` so internal enrichment (status_messages, paused_context, clarification, input_payload, etc.) does not break the OpenAPI contract. Customers should only rely on fields declared here; everything else may change without notice.
  - `browser_intervention_kind` 'authentication' | 'user_action' | 'managed_sign_in', nullable: The kind of owner wait behind browser_intervention_state; managed_sign_in asks the owner to sign in.
  - `browser_intervention_state` 'pending' | 'recovery_required', nullable: Whether browser work is waiting for the owner or needs recovery. Does not grant browser access.
  - `budget_exhausted` boolean, nullable: Whether the final logical run ended through the budget wrap-up path.
  - `can_edit` boolean, nullable: Whether the caller can modify this job (owner or admin only).
  - `can_view_activity` boolean, nullable: Whether the caller may read the job's agent activity (status messages): the owner, a Parcha admin, or a reader granted access to the job's expert.
  - `check_results` object[], nullable: Agent output tree, including the final report under ``grep.open_research``. Each item has ``command_id``, ``status``, ``answer`` (rendered report), and ``payload`` (sources, confidence, structured_output when json_schema was supplied).
  - `completed_at` string, nullable: When the job reached a terminal state.
  - `created_at` string, nullable: When the job was created.
  - `error_kind` string, nullable: Machine-readable failure category, when present: a capped run's failure category, or ``agent_not_runnable``, ``needs_connection``, ``needs_reconnect`` or ``connection_revoked`` when the Agent's connections stopped the run before any work ran (``error_message`` says what to do).
  - `error_message` string, nullable: Plain-language reason for a failure, when the platform can name one.
  - `failure_code` string, nullable: Machine-readable reason a job was rejected before execution, when present.
  - `failure_reason` string, nullable: Human-readable explanation of a pre-execution rejection, when present.
  - `is_public` boolean, nullable: Whether this job is publicly viewable without authentication.
  - `job_id` string, required: Job UUID.
  - `max_cost_usd` number, nullable: Caller-supplied provider-spend cap for each logical run.
  - `run_completed_at` string, nullable
  - `run_started_at` string, nullable
  - `session` object, nullable: Claude session handle for continuing the conversation.
  - `slug` string, nullable: Human-readable URL slug.
  - `started_at` string, nullable: When the job began executing.
  - `status` string, required: Lifecycle status: queued, moderation, planning, running, completed, failed, blocked.
  - `status_messages` object[], nullable: Full status message stream emitted by the agent. Large.

## 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)
