Skip to main content

Overview

This cookbook follows the minimal SDK surface:
  1. okra.sessions.create(...)
  2. session.wait() (optional if wait: true)
  3. session.publish()
  4. doc(session.id) for URL generation

Minimal example

import { createOkra, doc } from '@okrapdf/runtime';

const okra = createOkra({ apiKey: process.env.OKRA_API_KEY });

const session = await okra.sessions.create('https://example.com/report.pdf', {
  wait: true,
});

await session.publish();

const d = doc(session.id);
console.log(d.thumbnail.url());
console.log(d.pages[0].image.url());
console.log(d.pages[0].markdown.url());
console.log(d.entities.tables[0].url({ format: 'csv' }));

Inputs

sessions.create supports:
  • URL string
  • local file path (Node.js)
  • File / Blob
  • ArrayBuffer / Uint8Array
  • existing document ID (attach mode)
const fromUrl = await okra.sessions.create('https://example.com/report.pdf', { wait: true });
const fromPath = await okra.sessions.create('./reports/Q3-2024.pdf', { wait: true });
const fromId = okra.sessions.from('ocr_existing_doc_id');

Private vs Public

Documents are private by default. To publish, call:
await session.publish();
Or set upload visibility on create:
const session = await okra.sessions.create('./report.pdf', {
  wait: true,
  upload: { visibility: 'public' },
});

Curl equivalent

curl -X POST "https://api.okrapdf.com/document/ocr-demo/upload-url" \
  -H "Authorization: Bearer $OKRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/report.pdf","visibility":"private"}'

curl "https://api.okrapdf.com/document/ocr-demo/status" \
  -H "Authorization: Bearer $OKRA_API_KEY"

curl -X POST "https://api.okrapdf.com/document/ocr-demo/publish" \
  -H "Authorization: Bearer $OKRA_API_KEY"