A stateless document-operation API. Send markup or a file over HTTP, get bytes back. Nothing is stored: work happens in a tmpfs workspace that is unlinked before the response is sent. Paid for with one-time credit packs that never expire — no subscription, and no feature gating between tiers.
| Pack | Price | Credits | Notes |
|---|---|---|---|
| Free | $0 | 25 | one-time grant on signup |
| Starter | $4.99 | 100 | $0.050 per credit |
| Standard | $14.99 | 500 | $0.030 per credit |
| Pro | $39.99 | 2,000 | $0.020 per credit |
| Business | $79.99 | 5,000 | $0.016 per credit |
Credits never expire. There is no subscription.
| Operation | Endpoint | Credits |
|---|---|---|
| Render markup to PDF | POST /api/v1/render | 1 per document, +1 per 10 pages over 10 |
| Render many documents | POST /api/v1/render/batch | 1 per document, failures refunded |
| Render a stored template | POST /api/v1/render/from-template | 1 per document |
| Merge PDFs | POST /api/v1/pdf/merge | 1 per operation |
| Split a PDF | POST /api/v1/pdf/split | 1 per operation, returns a ZIP |
| Compress a PDF | POST /api/v1/pdf/compress | 1 per operation |
| Rotate pages | POST /api/v1/pdf/rotate | 1 per operation |
| Watermark pages | POST /api/v1/pdf/watermark | 1 per operation |
| Reorder pages | POST /api/v1/pdf/reorder | 1 per operation |
| Extract pages | POST /api/v1/pdf/extract-pages | 1 per operation |
| Unlock a PDF | POST /api/v1/pdf/unlock | 1 per operation, password required |
| Strip metadata | POST /api/v1/metadata/strip | 1 per operation |
| Redact text, patterns or regions | POST /api/v1/redact | 2 per operation |
| Inspect metadata | POST /api/v1/metadata/inspect | free, no API key |
| Parse a document to markdown | POST /api/v1/parse | 1 per 10 text pages, 1 per OCR page |
| Parse many documents | POST /api/v1/parse/batch | same rates, failures refunded |
| Convert a document | POST /api/v1/convert | 1 per document |
| Convert one small document | POST /api/v1/convert/free | free, no API key |
| Extract tables from a PDF | POST /api/v1/tables | 3 per table-bearing page |
| Find the tables and the price first | POST /api/v1/tables/detect | free, no API key |
| Capture a URL as evidence | POST /api/v1/capture | 1, or 5 retained with a timestamp and manifest |
| Verify a capture | GET /api/v1/capture/{id}/verify | free, no API key |
| Capture a URL repeatedly | POST /api/v1/capture/schedule | priced per capture |
| Read a web page | POST /api/v1/extract | 1 per page |
| Read one page, truncated | POST /api/v1/extract/preview | free, no API key |
| Clean a spreadsheet | POST /api/v1/spreadsheet/clean | 2 plus 1 per 500 rows |
| Preview what cleaning would change | POST /api/v1/spreadsheet/preview | free, no API key |
| Turn a chat or mail export into an archive | POST /api/v1/archive | 2 per export |
| Get a YouTube transcript | POST /api/v1/youtube | 1 per video |
| Get a transcript, truncated | POST /api/v1/youtube/preview | free, no API key |
| Store, list, update, delete templates | /api/v1/templates | free |
F148. An agent deciding whether to call an endpoint needs the price of that operation before it spends a customer's credits, not a flat list it has to work back from. Same wallet and same key for all of them, except #9, which has no wallet at all.
Markdown, HTML or Typst in, PDF bytes out, with stored templates so a repeated document is an id and a data object.
| Endpoint | Credits |
|---|---|
| POST /api/v1/render | 1 per document, +1 per 10 pages over 10 |
| POST /api/v1/render/batch | 1 per document, failures refunded |
| POST /api/v1/render/from-template | 1 per document |
| /api/v1/templates | free |
Redaction that removes the glyphs and then proves they are gone, and metadata stripping. Nothing is stored.
| Endpoint | Credits |
|---|---|
| POST /api/v1/redact | 2 per operation |
| POST /api/v1/metadata/strip | 1 per operation |
| POST /api/v1/metadata/inspect | free, no API key |
PDFs, Office files and scans to clean markdown with heading-aware chunks. Each page is classified before it is charged, so text pages cost a tenth of a scanned one.
| Endpoint | Credits |
|---|---|
| POST /api/v1/parse | 1 per 10 text pages, 1 per OCR page |
| POST /api/v1/parse/batch | same rates, failures refunded |
A screenshot, PDF, WARC and signed manifest of a page, timestamped with RFC-3161, and a verification URL that needs no account.
| Endpoint | Credits |
|---|---|
| POST /api/v1/capture | 1, or 5 retained with a timestamp and manifest |
| GET /api/v1/capture/{id}/verify | free, no API key |
| POST /api/v1/capture/schedule | priced per capture |
Merge, split, compress, rotate, watermark, reorder, extract pages and unlock, one credit each.
| Endpoint | Credits |
|---|---|
| POST /api/v1/pdf/merge | 1 per operation |
| POST /api/v1/pdf/split | 1 per operation, returns a ZIP |
| POST /api/v1/pdf/compress | 1 per operation |
| POST /api/v1/pdf/rotate | 1 per operation |
| POST /api/v1/pdf/watermark | 1 per operation |
| POST /api/v1/pdf/reorder | 1 per operation |
| POST /api/v1/pdf/extract-pages | 1 per operation |
| POST /api/v1/pdf/unlock | 1 per operation, password required |
One named page, rendered with adverts, cookie walls and trackers blocked, then reduced to its main content. Not a crawler: it follows no links.
| Endpoint | Credits |
|---|---|
| POST /api/v1/extract | 1 per page |
| POST /api/v1/extract/preview | free, no API key |
Conversion between document formats, where every pair offered was measured rather than advertised.
| Endpoint | Credits |
|---|---|
| POST /api/v1/convert | 1 per document |
| POST /api/v1/convert/free | free, no API key |
Tables out of a PDF as CSV, XLSX or JSON, with no template to configure. Charged per table-bearing page, and the detector says which pages those are before anything is billed.
| Endpoint | Credits |
|---|---|
| POST /api/v1/tables | 3 per table-bearing page |
| POST /api/v1/tables/detect | free, no API key |
A WhatsApp, Gmail or Slack export turned into something readable. **No account and no credits**: $6 for the export, one payment, however long it is, and the file is deleted on delivery.
| Endpoint | Credits |
|---|---|
| POST /api/v1/archive | 2 per export |
Charsets, delimiters, header rows and column types repaired, with a free preview of every cell that would change before anything is accepted.
| Endpoint | Credits |
|---|---|
| POST /api/v1/spreadsheet/clean | 2 plus 1 per 500 rows |
| POST /api/v1/spreadsheet/preview | free, no API key |
A video URL in, its transcript out as txt, srt, vtt or json with timings. Captions only: it reads the track YouTube already has and does not transcribe audio, so a video with no captions returns nothing rather than a guess. No video or audio is downloaded on any path.
| Endpoint | Credits |
|---|---|
| POST /api/v1/youtube | 1 per video |
| POST /api/v1/youtube/preview | free, no API key |
These are the limits the API enforces, not aspirations.
| Limit | Value |
|---|---|
| Max upload | 100 MB |
| Max pages per document | 500 |
| Max items per batch | 200 |
| Request timeout | 30 s |
| Rate limit, single requests | 60 per minute per key |
| Rate limit, batch requests | 10 per minute per key |
| Max API keys per account | 3 |
Every error has the same shape: an error object with a stable
code. Branch on the code, never on the HTTP status or the message.
missing_api_key · invalid_api_key · invalid_input · insufficient_credits · unsupported_format · too_large · too_many_pages · render_failed · rate_limited · not_found · internal_error