Install
openclaw skills install deepread-byokBring Your Own Key to DeepRead. Connect your OpenAI, Google, or OpenRouter API key — all document processing routes through YOUR account at zero DeepRead LLM cost. Page quota skipped entirely. Same API, same endpoints, one toggle.
openclaw skills install deepread-byokUse your own OpenAI, Google, or OpenRouter API key for all DeepRead document processing. Your key, your billing, zero DeepRead LLM costs.
Without BYOK: You → DeepRead API → DeepRead pays OpenRouter → You pay DeepRead
With BYOK: You → DeepRead API → YOUR key pays provider → DeepRead cost = $0
Page quota is skipped entirely for BYOK users. Process unlimited pages on any plan.
What this skill does and what it touches: This skill helps agents guide users through BYOK setup. The agent opens the DeepRead dashboard (
https://www.deepread.tech/dashboard/byok) in the user's browser so the user can paste their provider key directly into DeepRead's UI. It does not collect, store, or transmit provider keys itself. TheDEEPREAD_API_KEYis read from the user's environment — this skill does not modify any system files, shell profiles, or.envfiles.
sk-or-...) — Easiest setup. Same models DeepRead uses, just swaps billing to your account.sk-proj-...) — Direct to api.openai.com. Best for enterprise agreements and negotiated rates.AI...) — Direct to Google AI API. Best for Google Cloud credits and existing billing.You need a DeepRead account first. Sign up at https://www.deepread.tech/dashboard/?utm_source=clawhub (free, no credit card, 2,000 pages/month).
For automated agent setup with OAuth device flow, install the dedicated skill:
clawhub install uday390/deepread-agent-setup
That skill handles authentication securely. Once you have your DeepRead API key, set it as an environment variable in your shell or a secrets manager:
export DEEPREAD_API_KEY="sk_live_your_key_here"
BYOK keys are managed through the DeepRead dashboard:
open "https://www.deepread.tech/dashboard/byok?utm_source=clawhub"
In the dashboard:
That's it. All subsequent API calls automatically route through your key.
Nothing changes in your code. Same endpoints, same X-API-Key header:
DR_API_KEY=$(grep ^DEEPREAD_API_KEY .env | cut -d= -f2)
curl -X POST https://api.deepread.tech/v1/process \
-H "X-API-Key: $DR_API_KEY" \
-F "file=@document.pdf"
Under the hood, LLM calls now route through YOUR provider key. Page quota is NOT counted.
All key management is done in the dashboard at https://www.deepread.tech/dashboard/byok
When you provide an OpenAI or Google key, DeepRead automatically swaps all pipeline models to equivalents from your provider at the same quality tier:
Top tier — GPT-5 (OpenAI) or Gemini 2.5 Flash (Google)
High tier — GPT-5 Mini (OpenAI) or Gemini 2.5 Flash (Google)
Mid tier — GPT-5 Nano (OpenAI) or Gemini 3 Flash (Google)
Lite tier — GPT-5 Nano (OpenAI) or Gemini 2.5 Flash Lite (Google)
OpenRouter users: No swapping needed — same models, your billing account.
import requests
import time
# Once BYOK is enabled in the dashboard, your existing code just works.
# LLM costs go to YOUR provider account. Page quota is not counted.
API_KEY = "sk_live_YOUR_KEY"
BASE = "https://api.deepread.tech"
headers = {"X-API-Key": API_KEY}
# Submit document — same API call as always
with open("invoice.pdf", "rb") as f:
job = requests.post(
f"{BASE}/v1/process",
headers=headers,
files={"file": f},
data={"schema": '{"type":"object","properties":{"vendor":{"type":"string"},"total":{"type":"number"}}}'}
).json()
job_id = job["id"]
print(f"Job {job_id} — LLM costs go to your provider account")
# Poll for results
delay = 3
while True:
time.sleep(delay)
result = requests.get(f"{BASE}/v1/jobs/{job_id}", headers=headers).json()
if result["status"] == "completed":
print(f"Extracted: {result['structured_data']}")
break
elif result["status"] == "failed":
print(f"Failed: {result['error']}")
break
delay = min(delay * 1.5, 15)
// Once BYOK is enabled in the dashboard, your existing code just works.
const API_KEY = "sk_live_YOUR_KEY";
const BASE = "https://api.deepread.tech";
const form = new FormData();
form.append("file", fs.createReadStream("invoice.pdf"));
const { id: jobId } = await fetch(`${BASE}/v1/process`, {
method: "POST",
headers: { "X-API-Key": API_KEY },
body: form,
}).then(r => r.json());
console.log(`Job ${jobId} — LLM costs go to your provider account`);
let delay = 3000;
let result;
do {
await new Promise(r => setTimeout(r, delay));
result = await fetch(`${BASE}/v1/jobs/${jobId}`, {
headers: { "X-API-Key": API_KEY },
}).then(r => r.json());
delay = Math.min(delay * 1.5, 15000);
} while (!["completed", "failed"].includes(result.status));
DeepRead validates provider keys against the provider's API before encrypting and storing them. Keys are encrypted at rest and never logged.
Use BYOK if:
Don't use BYOK if:
BYOK applies to every DeepRead API call — OCR, form fill, and PII redaction:
clawhub install uday390/deepread-ocrclawhub install uday390/deepread-form-fillclawhub install uday390/deepread-piiclawhub install uday390/deepread-agent-setupclawhub install uday390/deepread-byokReady? Add your provider key at https://www.deepread.tech/dashboard/byok