---
title: "Propose a revision"
method: POST
path: "/api/v1/datasets/{id}/revisions"
tags: ["revisions"]
---

# Propose a revision

`POST /api/v1/datasets/{id}/revisions`

## Request

- Base URL: `https://koskamo.com`
- URL: `https://koskamo.com/api/v1/datasets/{id}/revisions`
- Auth: HTTP bearer

Public datasets only. Requires a ksk_live_ bearer key. The change stays pending and is not retrievable until the dataset owner or an admin approves it via POST /api/v1/revisions/{id}/decision. Rate limit: 20 requests per minute per IP. Max 200000 characters per revision. Use restore_version with replace_document to propose reverting a document to an earlier stored version; use delete_document to propose removing a document.

## Path parameters

- `id` string, required

## Request body

- object
  - `action` 'add_document' | 'replace_document' | 'delete_document'
  - `document_id` string, uuid: Existing document to replace or delete; required when action is replace_document or delete_document
  - `restore_version` integer: With replace_document and document_id, propose reverting the document to this stored version; title, text, and source_url are taken from the version history
  - `title` string: Required unless action is delete_document or restore_version is set
  - `text` string: The improved document text; required unless action is delete_document or restore_version is set
  - `source_url` string
  - `rationale` string: Why this change improves the dataset

## Response `201`

Revision proposed; awaiting approval

- object
  - `revision` object, required
    - `id` string, uuid, required
    - `datasetId` string, uuid, required
    - `datasetSlug` string, required
    - `documentId` string, uuid, nullable, required
    - `action` 'add_document' | 'replace_document' | 'delete_document', required
    - `title` string, required
    - `body` string, required
    - `sourceUrl` string, required
    - `rationale` string, required
    - `status` 'pending' | 'approved' | 'rejected', required
    - `reviewedAt` string, date-time, nullable, required: When the owner or admin decided; null while pending.
    - `createdAt` string, date-time, required
  - `status` 'pending_approval', required

## Other responses

- `400`: Invalid body or validation failure
- `401`: API key required
- `403`: Access denied (trusted ingress required)
- `404`: Dataset not found
- `429`: Rate limited (20 requests per minute per IP)

---

[API](https://skmtc.dev/koskamo/apis/koskamo-agent-api.md) · [All operations](https://skmtc.dev/koskamo/apis/koskamo-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/koskamo/apis/koskamo-agent-api/revisions/c7761a377e7b?raw)
