Documentation
Docs
Everything you need for the first call and the millionth. Full reference, copy-pasteable.
Quickstart
Install a client, set your key, make a call. Three minutes end to end.
install.sh
# Python
pip install krenzo
# Node
npm install @krenzo/sdkfirst-call.ts
import { Krenzo } from "@krenzo/sdk";
const client = new Krenzo({ apiKey: process.env.KRENZO_API_KEY });
const res = await client.search("who acquired Figma competitors in 2026", {
depth: "quick",
maxResults: 5,
});
res.results.forEach((r) => console.log(r.title, "—", r.url));Authentication
Every request carries a bearer token in the Authorization header. Create and rotate keys in the dashboard; a revoked key stops working immediately.
Keep keys server-side. A key in browser JavaScript is a public key. Proxy calls through your own backend.
API reference
Base URL https://krenzo.in/api/v1. All endpoints are POST and take JSON.
search.sh
curl https://krenzo.in/api/v1/search \
-H "Authorization: Bearer $KRENZO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "latest guidance on model evaluation",
"depth": "deep",
"max_results": 8
}'POST /v1/searchRanked results with cleaned passages.POST /v1/extractStructured content for known URLs.POST /v1/answerGrounded synthesis with citations.GET /v1/usageCredits consumed in the current period.Parameters
| Name | Type | Description |
|---|---|---|
| query | string | The search intent. Natural language beats keywords — the reranker uses the full phrasing. |
| depth | "quick" | "deep" | `quick` hits the index and returns. `deep` fans out, fetches more candidates, and reranks. Costs 3 credits. |
| max_results | int (1–20) | How many results to return after ranking. Defaults to 5. |
| time_range | "hour" | "day" | "week" | "month" | "year" | Restrict to content published inside the window. Omit for no constraint. |
| include_domains | string[] | Only return results from these domains. Mutually exclusive with `exclude_domains`. |
| exclude_domains | string[] | Drop results from these domains before ranking. |
| include_answer | bool | Also return a synthesized, cited answer alongside the results. |
| include_raw | bool | Attach the full cleaned page text per result, not just the ranked passages. |
Errors & rate limits
Errors return a consistent envelope with a machine-readable type. Retry on 429 and 503; everything else is a bug in the request.
error.json
{
"error": {
"type": "rate_limit_exceeded",
"message": "Rate limit exceeded. Retry after the window resets.",
"retry_after_ms": 400
}
}400 invalid_requestA parameter is missing or malformed. The message names the field.401 unauthorizedMissing or revoked API key. Keys start with `bv-`.402 insufficient_creditsFree calls are spent and the prepaid balance is too low. Top up to resume.429 rate_limit_exceededToo many requests per second. Back off by `retry_after_ms`.503 upstream_timeoutThe fetch stage blew its latency budget. Safe to retry once.SDKs
Official clients with typed responses and automatic retry on transient failures.
Python
pip install krenzo3.9+
TypeScript
npm i @krenzo/sdkNode 18+, Edge, Deno
Go
go get krenzo.in/go1.21+
REST
Any HTTP clientNo SDK required