> ## Documentation Index
> Fetch the complete documentation index at: https://docs.okrapdf.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Upload and query your first PDF with REST.

## Prerequisites

* An okraPDF account: [sign up](https://app.okrapdf.com/sign-up)
* An API key: [create one](https://app.okrapdf.com/settings?tab=api-keys)

```bash theme={null}
export OKRA_API_KEY=okra_sk_YOUR_KEY
```

## 1. Upload a document

```bash theme={null}
curl -X POST https://api.okrapdf.com/v1/documents \
  -H "Authorization: Bearer $OKRA_API_KEY" \
  -F "file=@invoice.pdf"
```

Response:

```json theme={null}
{
  "id": "doc-abc123",
  "status": "queued"
}
```

## 2. Poll status

```bash theme={null}
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`.

```json theme={null}
{
  "id": "doc-abc123",
  "phase": "complete",
  "fileName": "invoice.pdf",
  "pagesTotal": 3,
  "pagesCompleted": 3
}
```

## 3. Read results

```bash theme={null}
# 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

```bash theme={null}
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

```bash theme={null}
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

```ts theme={null}
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);
```
