Skip to main content

Prerequisites

export OKRA_API_KEY=okra_sk_YOUR_KEY

1. Upload a document

curl -X POST https://api.okrapdf.com/v1/documents \
  -H "Authorization: Bearer $OKRA_API_KEY" \
  -F "file=@invoice.pdf"
Response:
{
  "id": "doc-abc123",
  "status": "queued"
}

2. Poll status

curl https://api.okrapdf.com/v1/documents/doc-abc123 \
  -H "Authorization: Bearer $OKRA_API_KEY"
Wait until the document reports a terminal phase such as complete, awaiting_review, or error.
{
  "id": "doc-abc123",
  "phase": "complete",
  "fileName": "invoice.pdf",
  "pagesTotal": 3,
  "pagesCompleted": 3
}

3. Read results

# Full document markdown
curl https://api.okrapdf.com/v1/documents/doc-abc123/full.md \
  -H "Authorization: Bearer $OKRA_API_KEY"

# Page 1 as markdown
curl https://api.okrapdf.com/v1/documents/doc-abc123/pages/1/markdown \
  -H "Authorization: Bearer $OKRA_API_KEY"

# Extracted tables
curl https://api.okrapdf.com/v1/documents/doc-abc123/entities/tables \
  -H "Authorization: Bearer $OKRA_API_KEY"

4. Ask a cited question

curl -X POST https://api.okrapdf.com/v1/documents/doc-abc123/chat/completions \
  -H "Authorization: Bearer $OKRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      { "role": "user", "content": "What is the total amount due?" }
    ]
  }'

5. Extract structured JSON

curl -X POST https://api.okrapdf.com/v1/documents/doc-abc123/structured-output \
  -H "Authorization: Bearer $OKRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Extract invoice fields.",
    "schema": {
      "type": "object",
      "properties": {
        "vendor": { "type": "string" },
        "total": { "type": "number" },
        "currency": { "type": "string" }
      },
      "required": ["vendor", "total"]
    }
  }'

JavaScript SDK equivalent

import { createOkra } from '@okrapdf/sdk';

const okra = createOkra({ apiKey: process.env.OKRA_API_KEY });
const session = await okra.sessions.create('./invoice.pdf', { wait: true });

const { markdown } = await okra.read(session.id);
const { answer, sources } = await session.prompt('What is the total amount due?');

console.log(markdown);
console.log(answer, sources);