Skip to content

Captures

POST /api/v1/captures
Content-Type: application/json
{
"title": "Article title",
"url": "https://example.com/article",
"content_type": "article",
"why": "Relevant to current project",
"selected_text": "Key passage from the page",
"raw_content": "<html>...</html>",
"source": "cli"
}

| Field | Type | Required | Description | |-------|------|----------|-------------| | title | string | Yes | Capture title | | url | string | No | Source URL | | content_type | string | Yes | tweet, video, repo, article, pdf, audio, note, image | | why | string | No | Reason for capturing | | selected_text | string | No | Highlighted text from the page | | raw_content | string | No | Raw HTML content | | source | string | Yes | browser-extension, cli, api, or mcp |

Returns 201 with capture ID and status: "pending". The capture is queued for processing.


POST /api/v1/captures/upload
Content-Type: multipart/form-data

| Field | Type | Required | Description | |-------|------|----------|-------------| | file | binary | Yes | The file to upload | | title | string | No | Override title | | why | string | No | Reason for capturing |

Supported types: PDF, PNG, JPEG, GIF, WebP, Word (.doc/.docx), plain text, markdown

Max size: 25 MB

File type is verified using magic bytes, not just the extension.

Returns 201 with capture ID.


GET /api/v1/captures/check?url=https://example.com

Check if a URL has already been captured. Returns 200 if found, 404 if not.


GET /api/v1/captures

| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | page | number | 1 | Page number | | per_page | number | 20 | Results per page (max 100) | | status | string | — | Filter by status |


GET /api/v1/captures/:id

Returns capture details including metadata and processing status.


GET /api/v1/captures/:id/content

| Parameter | Type | Default | Description | |-----------|------|---------|-------------| | format | string | — | markdown for processed content, omit for raw |

Returns the capture content with appropriate Content-Type header.


POST /api/v1/captures/:id/retry

Re-queue a failed capture for processing. Returns 409 if already processing.

POST /api/v1/captures/:id/reingest

Full reprocessing through the entire pipeline.

POST /api/v1/captures/:id/archive
POST /api/v1/captures/:id/unarchive
POST /api/v1/captures/:id/dismiss
DELETE /api/v1/captures/:id

GET /api/v1/captures/:id/activity

Returns the timeline of events for a capture (created, retried, archived, etc.).


GET /api/v1/captures/:id/provenance

Returns the full processing chain with timestamps, AI model used, and outputs at each stage.