Skip to main content

Base URL

All API requests use the following base URL:
https://api.okra.app

Authentication

Include your API key in every request:
# Bearer token (recommended)
Authorization: Bearer okra_YOUR_KEY

# Header
x-api-key: okra_YOUR_KEY
Get your API key at app.okrapdf.com/settings/api-keys.

Quick example

# 1. Upload a PDF
curl -X POST https://api.okra.app/v1/documents \
  -H "Authorization: Bearer okra_YOUR_KEY" \
  -F file=@report.pdf

# Response: {"id": "doc-abc123", "status": "queued"}

# 2. Check status
curl https://api.okra.app/v1/documents/doc-abc123 \
  -H "Authorization: Bearer okra_YOUR_KEY"

# 3. Get full markdown
curl https://api.okra.app/v1/documents/doc-abc123/full.md

# 4. Chat with the document
curl -X POST https://api.okra.app/v1/documents/doc-abc123/chat/completions \
  -H "Authorization: Bearer okra_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"messages": [{"role": "user", "content": "Summarize this document"}]}'

Core endpoints

MethodPathDescription
POST/v1/documentsUpload a document (multipart)
POST/v1/documents/{id}/upload-urlUpload from a URL
GET/v1/documents/{id}Get document status
GET/v1/documents/{id}/full.mdFull document as markdown
GET/v1/documents/{id}/full.jsonFull document as JSON
GET/v1/documents/{id}/pages/{n}Get page content
GET/v1/documents/{id}/pages/{n}/image.pngGet page image
GET/v1/documents/{id}/entities/tablesList extracted tables
POST/v1/documents/{id}/structured-outputExtract structured data
POST/v1/documents/{id}/chat/completionsChat with a document
DELETE/v1/documents/{id}Delete a document
GET/v1/documents/{id}/original.pdfDownload original PDF
GET/exports/{id}/{format}Export as markdown/xlsx/docx

Collections

MethodPathDescription
GET/v1/collectionsList collections
POST/v1/collectionsCreate a collection
POST/v1/collections/{id}/queryQuery across documents
GET/v1/collections/{id}/exportExport collection

Data API (public, no auth)

MethodPathDescription
GET/v1/filingsList public filings
GET/v1/filings/{exchange}/{ticker}/{slug}Get a specific filing
GET/v1/companiesList companies
GET/v1/companies/{exchange}/{ticker}Get company details

Response format

All responses return JSON with consistent error formatting:
// Success
{
  "id": "doc-abc123",
  "status": "completed",
  ...
}

// Error
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "Human-readable description of the problem"
  }
}