Introducing RakeSign: Free, Unlimited Document Signing

Introducing the Paperwork API: the whole platform, one surface

Three days of models and products. Today, the API that ties them together. Six capabilities, one call pattern, evidence beside every step, and a repo of runnable examples you can steal from.

Back to journal
Highlights
  • Six capabilities, one surface. Extract, redact, compose, fill, redline, sign. Every one is a POST that takes a file and returns a run. Same auth, same run object, same webhooks.
  • Evidence beside every value. Ask for citations and each extracted field comes back with the page and region it came from, or a timecode for audio, or an explicit not found. Never a guess.
  • Webhooks you can trust. Every delivery is a JWT signed with our private key and verified against a public JWKS. No shared secret to store or rotate.
  • SDKs, CLI, MCP. @cloudraker/api on npm, cloudraker on PyPI, the paperwork CLI, and an MCP server so an agent can use the same six verbs.
  • Six runnable examples. Real apps, not snippets, on GitHub under MIT. Clone, bun install, drop in a key. A video walks through each one below.

This week we shipped the parts. On Monday, rakedoc-nano, the open-weight vision model that reads the page. On Tuesday, RakeSign, free and unlimited e-signature, alongside our SOC 2 Type 2 report. On Wednesday, rakeaudio-asr, because a conversation is a document too.

Today is the whole. The Paperwork API is the surface those parts sit behind, and it is the thing we have been building for two years and never properly advertised. Every business runs on paperwork, and every piece of it boils down to the same repeatable actions. This API does all of them.

Six capabilities

Each one is one POST. Each one takes a file (a URL, or the id of a file you already uploaded) and returns a run. Runs share one status model, one expiry, one webhook contract. Learn one, you know all six.

POST /v1/extractExtract

Pull the facts out of any document or audio file as JSON shaped like your schema. Every value points back to the exact spot it came from.

POST /v1/redactRedact

Remove personal information for good. The text is cut from the PDF stream, audio is beeped and the transcript rewritten. Gone from the file, not hidden under a box.

POST /v1/composeCompose

Generate new documents from your templates, checked against your data, so the letter says what the record says.

POST /v1/fillFill

Complete forms automatically from a source document, the same way every time. Every written value comes back grouped by the box it went into.

redlineRedline

Review becomes collaboration. Edit, suggest, accept, reject, export, with the changes tracked in the document itself.

POST /v1/signSign

Package a document into a signable envelope, email the signers, and get back a sealed, legally binding PDF with its audit trail.

Underneath them sit the primitives: parse turns a PDF, scan, office file, or recording into clean text and structure, classify finds document boundaries inside a packet, and split cuts along them without a model call. Pipelines run several capabilities over one file set in a single call, parsing each file once. And agents chain steps with built-in human sign-off, for the workflows where a person has to look before something goes out.

One call, with evidence

Here is the whole idea in one request. A document goes in with a JSON Schema. Data comes back shaped like the schema, and because citations is on, every field carries the page and the region it was read from.

curl -X POST https://api.cloudraker.com/v1/extract \
  -H "Authorization: Bearer $CLOUDRAKER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "file": { "url": "https://example.com/invoice.pdf", "name": "invoice.pdf" },
    "citations": true,
    "schema": {
      "type": "object",
      "properties": {
        "vendor": { "type": ["string", "null"] },
        "total":  { "type": ["number", "null"] }
      }
    }
  }'
{
  "output": {
    "value": { "vendor": "Northwind Fabrication Ltd", "total": 16796.70 },
    "citations": {
      "total": [
        { "fileId": "fil_…", "page": 0,
          "bbox": { "x": 0.71, "y": 0.62, "width": 0.11, "height": 0.02 },
          "text": "16,796.70", "confidence": 5 }
      ]
    }
  }
}

A recording is cited the same way, with a timecode in seconds instead of a page. A field the document does not contain comes back as null with a notFound citation. With citations on, every filled field is cited or declared absent. There is no third state.

The call holds until the run finishes, up to two minutes. If the document is slow, you get a 202 and a run id instead of a timeout. Point a webhook at the request and the finished run comes to you as a signed event: a JWT you verify against our public JWKS, with a body hash so a valid signature cannot be replayed onto a different payload.

No schema yet? Omit it, send a sentence of hints, and the platform infers one and reports it back on the run so you can save it. Prototype with hints, ship with a schema.

Same six verbs for humans, code, and agents

The API is one of three ways in, and they share everything.

  • Code. npm install @cloudraker/api or pip install cloudraker. client.extract({ file, schema }) is the request above in one line.
  • Terminal. The paperwork CLI runs every capability from a shell script or a cron job.
  • Agents. The MCP server exposes the same verbs to Claude, or any agent, with the same citations coming back. We wrote about giving an agent a paperwork tool last month.

Everything runs on Canadian infrastructure, and the SOC 2 Type 2 report we published this week covers all of it.

Six examples you can run

Snippets lie. They skip the upload, the polling, the webhook server, the part where the result has to be checked. So we published six runnable apps instead, at github.com/CloudRaker/cloudraker-api-examples-typescript. Each one is a small Bun app with a web page, self-contained, MIT. Clone it, bun install, put your key in .env, bun app.ts.

Each example picks a different verb, a different kind of input, and a different way to prove the result. There is a short video for each.

Medical call notes

extract + process · a clinician call becomes a structured, cited note

Upload a recording, get back chief complaint, medications, assessment, plan. The same audio three ways: the process endpoint with a signed webhook for production, an inline schema for control, prose hints for speed. Every field seeks to the moment in the call where the patient said it.

Invoice extraction

extract · fields off any invoice, with the arithmetic checked

PDF, Word, Excel, or a scan. The shape comes from a schema, an installed action, or a sentence of hints. Then the page checks the invoice against itself: do the lines add up to the subtotal, does subtotal plus tax make the total. Basic arithmetic catching extraction errors, and it still works.

Rental lease extraction

extract · unit: across_documents · several files fold into one record

A lease, an abstract, and a fact sheet about the same property, merged into one record. When two documents disagree, deterministic rules pick a winner and the review lists every conflict, what each file said, and which one won. No quiet favourites.

Healthcare redact

redact · personal information removed from a PDF or a recording, for good

Destructive, not cosmetic. Categories say what counts as sensitive, house rules say whose, and a saved action carries the org's policy. The example also documents the webhook signature check best: ES256 JWT, public JWKS, body hash. Copy it into production.

Insurance certificate

fillsign · read a policy, write a certificate, send it for signature

Two calls with a human in between, on purpose. Fill reads the policy and writes the certificate's boxes. A person checks every value. Then sign emails the signers and returns the sealed PDF. That is the shape of most good document automation, in miniature.

Split a packet

classifysplitextract · one scanned PDF becomes one file per document

Classify in page mode finds the boundaries, split cuts along them with no model call, and extract runs per child with hints picked by class. Three calls, one packet, every page accounted for.

Every one of them is small enough to read in a sitting and built to be stolen from.

Getting started

export CLOUDRAKER_API_KEY="sk_…"

git clone https://github.com/CloudRaker/cloudraker-api-examples-typescript
cd cloudraker-api-examples-typescript/medical-call-notes
bun install
echo "RAKERONE_API_KEY=$CLOUDRAKER_API_KEY" > .env
bun app.ts

Full reference for every capability, webhooks, pipelines, and agents: docs.cloudraker.com. Pricing: cloudraker.com/pricing. Grab an API key at signup.cloudraker.com.

Launch week: Day 1, rakedoc-nano · Day 2, RakeSign · SOC 2 Type 2 · Day 3, rakeaudio-asr · Day 4, the Paperwork API.