Quickstart
Get started with the API
Copy-paste recipes for the `/api/v1` base path in TypeScript (klaaro SDK), Python (klaaro SDK), and Bash (curl). Set `KLAARO_API_KEY` and `KLAARO_DATASET_ID` once, then run any recipe. For the full endpoint and schema reference, see the API reference or download the OpenAPI spec.
Environment variables
Set once per session. Python: `pip install klaaro`. TypeScript: `npm install klaaro`, then run with `npx tsx script.ts` (Node 20+).
import { KlaaroClient } from "klaaro"const klaaro = new KlaaroClient({ apiKey: process.env.KLAARO_API_KEY!,})const KLAARO_DATASET_ID = process.env.KLAARO_DATASET_ID!// const KLAARO_DOCUMENT_ID = process.env.KLAARO_DOCUMENT_IDList datasets
Returns your team's datasets. Response includes meta.nextCursor and meta.hasMore for cursor-based pagination.
import { KlaaroClient } from "klaaro"const klaaro = new KlaaroClient({ apiKey: process.env.KLAARO_API_KEY!,})const { data, meta } = await klaaro.listDatasets()for (const ds of data) { console.log(ds.id, ds.name)}console.log("hasMore:", meta.hasMore, "nextCursor:", meta.nextCursor)Upload document from URL
Creates a document and starts the pipeline. Response uses camelCase (id, currentStep, etc.). Use the ingest + poll recipe to wait for extraction.
import { KlaaroClient } from "klaaro"const klaaro = new KlaaroClient({ apiKey: process.env.KLAARO_API_KEY!,})const doc = await klaaro.uploadDocument({ datasetId: process.env.KLAARO_DATASET_ID!, url: "https://example.com/sample.pdf",})console.log("id:", doc.id, "status:", doc.status, "step:", doc.currentStep)Upload, wait for completion, fetch extracted data
Bash requires curl and jq. Python and TypeScript use the official klaaro SDK (`pip install klaaro` / `npm install klaaro`).
import { writeFileSync } from "node:fs"import { KlaaroClient } from "klaaro"const klaaro = new KlaaroClient({ apiKey: process.env.KLAARO_API_KEY!,})const doc = await klaaro.uploadDocument({ datasetId: process.env.KLAARO_DATASET_ID!, url: "https://example.com/sample.pdf",})const docId = doc.idconsole.log("Document id:", docId)let wrote = falsefor (let i = 1; i <= 60; i++) { const meta = await klaaro.getDocument(docId) console.log(`[${i}] status=${meta.status} step=${meta.currentStep}`) if (meta.status === "completed") { const { records } = await klaaro.getDocumentRecords(docId) writeFileSync(`extracted-${docId}.json`, JSON.stringify(records, null, 2)) console.log(`Wrote extracted-${docId}.json`) wrote = true break } if (meta.status === "failed") throw new Error(JSON.stringify(meta, null, 2)) await new Promise((r) => setTimeout(r, 5000))}if (!wrote) throw new Error("Timed out")Export dataset as JSON
Downloads the full dataset export in JSON format (cURL). SDK tabs paginate all records and write JSON — add class filter via list_dataset_records / listDatasetRecords params.
import { writeFileSync } from "node:fs"import { KlaaroClient } from "klaaro"const klaaro = new KlaaroClient({ apiKey: process.env.KLAARO_API_KEY!,})const datasetId = process.env.KLAARO_DATASET_ID!const records: unknown[] = []let cursor: string | undefineddo { const page = await klaaro.listDatasetRecords(datasetId, { cursor, limit: 200 }) records.push(...page.data) cursor = page.meta.hasMore ? (page.meta.nextCursor ?? undefined) : undefined} while (cursor)writeFileSync("dataset-export.json", JSON.stringify(records, null, 2))console.log("Wrote dataset-export.json")Tips: API keys live under Team → API keys. Dataset and document IDs appear in the dashboard URLs and in API responses. Install SDKs with `pip install klaaro` or `npm install klaaro`. Bash polling uses `jq`. Run TypeScript snippets with `npx tsx your-script.ts` (Node 20+) after `export KLAARO_API_KEY=…` in the same shell.