Base URL and format
- REST:
https://api.captureflow.ai/v1. Requests and responses are JSON (Content-Type: application/json); request bodies are 100 KB at most (body_too_large). - Every object has an
objectfield naming its kind (idea,input,post,proposal…). GET /v1/healthanswers without a key:{ "status": "ok", "version": "v1" }.- The OpenAPI 3.1 description:
https://api.captureflow.ai/v1/openapi.json. - Browsers may call the REST API from any origin with a bearer credential (no cookies).
Lists and pagination
List operations takelimit (1 to 100, default 25) and cursor, and answer:
next_cursor back as cursor for the next page, until has_more is false. Paging stops after 10,000 items; narrow the list with its filters to reach older ones.
Safe retries (Idempotency-Key)
Calls that create or change something accept an Idempotency-Key header (over MCP: the idempotency_key argument). Use a new unique value (a UUID) per action, and the same value when retrying it.
- Kept for 24 hours, 1 to 255 visible ASCII characters.
- A retry with the same key and the same request returns the first answer instead of doing it twice. The replay has
Idempotent-Replayed: trueand carries only the ids and statuses (object,id,status,app_url,approval_url…); read the object for the rest. - The same key with a different request:
idempotency_conflict. The first call still running:idempotency_in_progress. - A failed call frees its key.
POST /inputs/uploads/{id}/urlandPOST /inputs/uploads/{id}/completedon’t take one: they are safe to repeat on their own.
Request ids
Every response has anX-Request-Id header, also in error bodies as request_id (over MCP: _meta.request_id). Quote it when contacting support.
Text you shouldn’t trust
Text that comes from outside (transcripts, imported web pages, documents, drafts the agent wrote from them) is returned wrapped:source says where the text comes from (input.transcript, post.body, agent.linkedin…). Long texts are cut at 4,000 characters (truncated: true); GET /v1/inputs/{id}?full=true returns up to 50,000.
If your app passes it to a language model, treat it as data, never as instructions: it may contain text written to steer an AI (prompt injection).
Pausing changes
During maintenance, changes may be paused while reads keep working: calls that change something answerwrites_unavailable (503), and MCP clients see only the read tools.
