> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.cloudraker.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.cloudraker.com/_mcp/server.

# Developer guide

CloudRaker exposes its whole platform through a single REST API served by a thin gateway at **`https://api.cloudraker.com`**. The gateway authenticates your request, resolves your tenant, and authorizes the action. It then dispatches to the domain services behind it. You get one base URL, one auth header, and JSON everywhere.

**One key, one org.** A CloudRaker **organization API key** is a machine credential scoped to a single organization (tenant). Create one under **Admin → API keys**. Send it as a bearer token. Every call then runs against that org's data. See [Authentication](/paperwork/developers/authentication).

## What you can build

#### [Extract structured data](/capabilities/extract)

Send a document and a JSON Schema. Get data shaped like your schema, with a page-and-region citation behind every field.

#### [Parse any document](/capabilities/parse)

Get clean markdown and structured JSON out of PDFs, scans, office files, and audio. No schema is required.

#### [Redact, fill, and sign](/capabilities/redact)

Remove personal information from a document or a recording. Fill a form from your sources. Collect e-signatures with a sealed audit trail.

#### [Compose documents](/capabilities/compose)

Render a saved template with your own JSON data and get a PDF back. One call produces one document or a batch.

#### [Pipelines](/capabilities/pipeline)

Run several capabilities over one file set in a single call. Every file parses once. You get one run id and one result to poll.

#### [Agent runs](/developers/agent-runs)

Start a multi-step [agent](/paperwork/capabilities/agents) on a set of files. Then answer its sign-offs and human steps over the API.

#### [Files](/developers/files)

Register a document by URL or presigned upload. Then reuse it across runs: parse once, run many.

#### [Signed webhooks](/developers/webhooks)

React to run events as they happen. Every delivery is a public-key-signed JWT you verify against a published JWKS. No shared secret is stored.

#### [Runs](/developers/runs)

One lifecycle for every capability: statuses, outputs, TTL, and `keep`, the bridge from a headless result into the product.

#### [SDKs](/developers/sdks)

Typed clients for TypeScript and Python. They wire up the base URL and bearer token for you.

#### [Process API](/developers/process-api)

The earlier multipart pipeline, frozen and still supported. New integrations must use [pipelines](/paperwork/capabilities/pipeline).

#### [MCP server](/developers/mcp)

Point Claude and other MCP clients at the CloudRaker MCP server. Drive the whole API through Code Mode.

#### [Agent quickstart](/developers/agent-quickstart)

Write the integration with a coding agent. Give it one URL — `docs.cloudraker.com/developers/agents.md` — and it has the whole contract.

#### [Rate limits](/developers/rate-limits)

At least 67 requests per minute per organization across all of `/v1`, the `429` envelope, and how to back off.

#### [API reference](/api/overview)

Every endpoint: spaces, files, actions, runs, playbooks, objects, ontology, search, and more.

## Base URL

Every call goes to one base URL:

```
https://api.cloudraker.com
```

That is the gateway. It is the only base URL to build against. CloudRaker runs internal environments for its own development. They are not available to API users. Production is your environment.

## How the gateway works

* **Authentication** — every request carries `Authorization: Bearer <token>`. The gateway accepts an organization API key (the developer path) or a session JWT. See [Authentication](/paperwork/developers/authentication).
* **Tenant scoping** — your token's organization is your tenant. You never pass a tenant id. The gateway resolves it and scopes every call automatically.
* **Authorization** — the gateway decides what a caller may do before it dispatches. Org keys satisfy admin and org-level gates. Only a human's session token satisfies some per-user resource permissions.
* **Errors** — failures come back as JSON `{ "error": "<snake_case_code>" }` with a matching HTTP status. The [capability endpoints](/paperwork/capabilities/extract) use a richer `{ code, message, retryable, requestId, docUrl }` envelope. See [Errors](/paperwork/developers/errors).
* **Rate limits** — the `/v1` API guarantees at least 67 requests per minute per organization, shared across every endpoint. Above that, you get `429` with a `Retry-After` header. See [Rate limits](/paperwork/developers/rate-limits).

## Start here

#### [Quickstart](/developers/quickstart)

Create a key, make your first authenticated call with curl, and run the same call through an SDK in a few minutes.