DevelopersAPI v1EmbedTeams
Build with Keplar.
One request sends a question to several models, compares them, and returns one answer with a plain record of where they disagreed. Call it from your server with an API key, or put the same Ask on your own site with one script tag.
Tiers and limits
Every answer through the API or a widget is metered exactly like an answer in the app: same credits, rolling windows and spend caps. The per-key and per-widget limits below only ever make things stricter.
Free free
- Active keys
- 1
- Requests / min / key
- 2
- Requests / day / key
- 30
- Embed widgets
- 1
OpenRouter :free models only. Good for prototypes and a small site widget.
Create a free keyPro lite · plus · pro
- Active keys
- 2–10
- Requests / min / key
- 6–30
- Requests / day / key
- 100–1,500
- Embed widgets
- 2–10
Premium models and Keplar consensus, metered from your plan's credits exactly like the app.
See plansEnterprise business
- Active keys
- 25
- Requests / min / key
- 60
- Requests / day / key
- 5,000
- Embed widgets
- 25
Highest limits, Team workspaces with roles, and a contract-set credit pool.
Talk to us| Plan | Models | Keys | Per min | Per day |
|---|---|---|---|---|
| free | :free | 1 | 2 | 30 |
| lite | plan roster | 2 | 6 | 100 |
| plus | plan roster | 5 | 15 | 400 |
| pro | plan roster | 10 | 30 | 1,500 |
| business | plan roster | 25 | 60 | 5,000 |
Quickstart
- Create a key
Sign in, open Account → Developer API, name the key and pick an expiry. It is shown once; we keep only a hash.
- Keep it on a server
Store it as
KEPLAR_API_KEY. Never ship it in a web page or a repository. For a public page, use a widget instead. - Ask
Send
Authorization: Bearer kpl_…with a JSON body. Requests are stateless, so pass earlier turns inhistory.
curl https://keplar.one/api/v1/ask \
-H "Authorization: Bearer $KEPLAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"question": "Should a two-person startup rewrite its Node.js backend in Rust?"}'Scopes: ask Ask questions: POST /api/v1/ask (including streaming). Spends your plan's credits. usage Read usage: GET /api/v1/usage (plan, credits left, this key's counters). Spends nothing.
POST /api/v1/ask
| Field | Type | Notes |
|---|---|---|
| question | string | Required. Up to 8,000 characters. |
| history | array | Optional. Up to 10 turns of {role, content}, each up to 4,000 characters. |
| routing.strategy | enum | auto, fast, balanced or deep. |
| stream | boolean | Server-Sent Events instead of one JSON body. |
| tools | array | Optional built-in tools: reason, debate, web_search, deep_research, {type: "read_url", urls} (up to 3 public links) and {type: "x_search", query?}. Web search and deep research run only where retrieval is switched on; search on X only where it is connected. The answer's tools list says what each one did: used, requested, unavailable or failed. |
{
"object": "answer",
"id": "ans_...",
"answer": "Probably not yet. ...",
"agreement": { "level": "split", "agree": 3, "disagree": 1, "responded": 4, "consulted": 4, "summary": "3 of 4 models agreed ..." },
"disagreement": {
"headline": "The models split on timing",
"topic": "...",
"tie": false,
"positions": [ { "stance": "...", "summary": "...", "models": ["..."], "count": 3, "of": 4 } ],
"agreed": ["..."], "differ": ["..."],
"why": { "recorded": true, "text": "..." }
},
"models": [ { "name": "...", "provider": "...", "status": "responded" } ],
"sources": [ { "kind": "...", "title": "...", "url": null } ],
"source_check": null,
"usage": { "credits": 12 },
"created": "2026-10-04T12:00:00.000Z"
}Read sources carefully. They are what the models cited. Keplar has not checked them unless source_check is present, and agreement between models is not proof.
Streaming
Set "stream": true or send Accept: text/event-stream. Events arrive as progress, delta (a live preview), answer (the result), then done or error. Refusals such as limits come back as a normal HTTP status before any event.
curl -N https://keplar.one/api/v1/ask \
-H "Authorization: Bearer $KEPLAR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"question": "Is it safe to store JWTs in localStorage?", "stream": true}'event: progress
data: {"stage":"choosing_models"}
event: progress
data: {"stage":"comparing"}
event: delta
data: {"text":"Short answer: ..."}
event: answer
data: { ...the same object as the JSON response... }
event: done
data: {}Embeddable Ask widget
Create a widget in Account → Embed Ask. You get a public id (emb_…) and a snippet. Paste it where the box should appear. Questions are answered by Keplar and spend the publisher's credits. Free publishers always run on OpenRouter :free models, and paid publishers choose free models or their plan's models for each widget.
<script src="https://keplar.one/embed.js"
data-keplar-embed="emb_YOUR_WIDGET_ID"
data-theme="dark"
data-size="standard"
data-accent="graphite"
async></script>- Allowlist. Add up to 10 origins such as
https://docs.example.com. Other sites get a refusal from the server, not only a hidden box. - Rate limits. Each widget has its own per-minute and per-day limit by plan, plus a per-visitor limit.
- Revoke any time. A revoked widget stops answering on the next question.
- The id is public by design. It can only ask through that widget's limits. Never put an API key in a page.
Keplar for Teams
A team is its own workspace. Projects, chats and sites created while you work in it belong to the team, not to anyone personally. Switch between personal and team workspaces from the account menu in the app. Up to 10 members, with one shared pool of 13,500 credits a month. Business plan.
| Role | Can |
|---|---|
| Owner | Everything, including promoting admins, exporting and deleting the team. |
| Admin | Creates, edits, deletes and publishes; invites and removes members and viewers; reads the audit log. |
| Editor | creates and edits shared projects, chats and sites, and asks in the team. Cannot delete or publish. |
| Viewer | Reads shared projects, chats and sites. Cannot change anything or ask. |
Invites are drafts until you send them, by email or as a one-time link that expires in 7 days and works only for the invited address. The server checks every action against your role on every request. Open Team workspace.
Referrals
Your link looks like keplar.one/?ref=yourcode. When a friend opens it, creates a new account and verifies their email, you get 500 and they get 500 usage credits. Credits only, never cash. Up to 5 rewarded friends a month and 20 in total. Self-referrals and throwaway addresses earn nothing.
Errors
Every error has the shape {"error": {"code", "message", "retry_after"?}}. Widget errors use the same shape.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Bad JSON or a field out of range. The message says which. |
| 401 | invalid_api_key | Missing, malformed, revoked or expired key. Repeated bad keys from one address are throttled. |
| 402 | limit_reached | Your plan's credits, a rolling limit or the daily safety cap is used up. The message says when it resets. |
| 403 | insufficient_scope / plan_required | The key lacks the scope, or the account's plan no longer includes the API. |
| 413 | too_large | The request body is too large. |
| 429 | key_rate_limited / rate_limited | Over the per-key or per-address limit. Wait for the Retry-After header. |
| 502 | no_response | No model answered. Nothing is charged. |
| 503 | unavailable | Keplar is temporarily unavailable. Retry later. |
Security and privacy
- Keys are stored only as SHA-256 hashes and shown once. Revoking a key takes effect on the next request.
- The API reads the
Authorizationheader only. Browser cookies are never accepted, so a key can't use a session and a session can't call v1. - API and widget calls are stateless. They don't read or write memory, save chats, or train on your questions. We keep per-key and per-widget counters so you can see usage.
- Exporting your account includes your keys and widgets, but never a secret. Deleting your account removes them. See the privacy policy.
Not available yet
- Team-level API keys, per-key credit caps, webhooks and an official SDK.
- Separate usage-based billing for API and widget traffic. Today it draws on your plan's credits.
- Tool use, file or image input, and Create through the API. No stated uptime figure during the beta.
Need one of these? Tell us. The machine-readable spec is at /api/v1/openapi.json (OpenAPI 3.1).
Keplar is built by Hassen, Hussain, and the Keplar Team.