---
title: "Approve a pending research submission"
method: POST
path: "/api/research/submissions/{id}/approve"
tags: ["research", "browser-session"]
---

# Approve a pending research submission

`POST /api/research/submissions/{id}/approve`

## Request

- Base URL: `https://www.immersivecommons.com`
- URL: `https://www.immersivecommons.com/api/research/submissions/{id}/approve`
- Auth: API key in cookie `__session`

Clerk operator session only. Moves the submission into the approved bucket with `approved_at` + `approved_by`, deletes the pending key, and drops the id from the queue index. The sc2-side ingest worker scans that bucket and pulls the URL in to embed, so approving is what actually feeds the corpus.

## Path parameters

- `id` string, required

## Response `200`

Approved.

- ResearchSubmissionDecisionResponse
  - `ok` boolean, required
  - `id` string, required: The submission that was decided.
  - `status` 'approved' | 'denied', required

## Other responses

- `400`: Missing id.
- `401`: Not signed in.
- `403`: Not operator-tier.
- `404`: No such pending submission.
- `500`: KV read or write failed.

---

[API](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api.md) · [All operations](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/immersivecommons/apis/immersive-commons-agent-rest-api/revisions/be67c1f67c27?raw)
