Shipeasy
APIOperations

Update an investigation record

Update one existing investigation record in place — the write-back seam for the working run record you were handed when a run was launched. Fill in the…

Update one existing investigation record in place — the write-back seam for the working run record you were handed when a run was launched. Fill in the summary/findings, attach the fixing PR, record your confidence and the sources you inspected, or flip its kind off working once the investigation is done. A partial patch: send only the fields you want to change. Safe for restricted ops keys (it never reads or deletes).

Use case

A run started with an empty working record; as you work, PATCH it with your findings so the cockpit's detail panel fills in live — no need to append a second record.

PATCH
/api/admin/ops/{handle}/investigation/{investigationId}

Authorization

bearerSdkKey
AuthorizationBearer <token>

Pass an admin SDK key as Authorization: Bearer sdk_admin_…. Mint via POST /api/admin/keys with type: "admin".

In: header

Path Parameters

handle*string

Per-project item number (e.g. 7) or the full ops item id.

Length1 <= length <= 128
investigationId*string

The investigation record id (from POST/GET .../investigation or the runId an ack/launch returned).

Length1 <= length <= 128

Header Parameters

X-Project-Id?string

Project the request operates on. Optional — defaults to the project the SDK key belongs to; pass it only to scope a multi-project key (the generated client sets it once from its configuration, so per-call callers never thread it).

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://shipeasy.ai/api/admin/ops/string/investigation/string" \  -H "Content-Type: application/json" \  -d '{    "kind": "investigated",    "summary": "Root cause is a stale KV read on the checkout flag.",    "findings": "The `checkout.cta` gate is rebuilt without a CDN purge, so…",    "confidence": "high",    "prNumber": 4821,    "prUrl": "https://github.com/acme/web/pull/4821"  }'
{
  "id": "string",
  "feedbackId": "string",
  "kind": "investigated",
  "summary": "string",
  "findings": "string",
  "question": "string",
  "qaNotes": "string",
  "agent": "jarvis",
  "model": "string",
  "connectorId": "string",
  "prNumber": 0,
  "prUrl": "string",
  "sources": [
    {
      "path": "string",
      "url": "string",
      "label": "string"
    }
  ],
  "confidence": "low",
  "tokensUsed": 0,
  "durationMs": 0,
  "visibility": "draft",
  "startedAt": "string",
  "completedAt": "string",
  "sessionId": "string",
  "sessionUrl": "string",
  "ackedBy": "string",
  "completedAction": "link_pr",
  "createdAt": "string",
  "updatedAt": "string"
}
{
  "error": "Malformed request (bad JSON, missing project scope).",
  "code": "BAD_REQUEST"
}
{
  "error": "Missing or invalid admin SDK key.",
  "code": "UNAUTHORIZED"
}

{
  "error": "Key is valid but not allowed to act on this project.",
  "code": "FORBIDDEN"
}

{
  "error": "The resource does not exist or is not visible to the caller.",
  "code": "NOT_FOUND"
}

{
  "error": "The request body failed structural (schema) validation.",
  "code": "VALIDATION"
}

Was this page helpful?
Updated August 8, 2026