Prerequisites
- An okraPDF account: sign up
- An API key: create one
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"
{
"id": "doc-abc123",
"status": "queued"
}
2. Poll status
curl https://api.okrapdf.com/v1/documents/doc-abc123 \
-H "Authorization: Bearer $OKRA_API_KEY"
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);