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.

POSTkeplar.one/api/v1/ask
01

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 key

Pro 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 plans

Enterprise 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
Per-plan API key limits
PlanModelsKeysPer minPer day
free:free1230
liteplan roster26100
plusplan roster515400
proplan roster10301,500
businessplan roster25605,000
02

Quickstart

  1. 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.

  2. 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.

  3. Ask

    Send Authorization: Bearer kpl_… with a JSON body. Requests are stateless, so pass earlier turns in history.

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.

03

POST /api/v1/ask

FieldTypeNotes
questionstringRequired. Up to 8,000 characters.
historyarrayOptional. Up to 10 turns of {role, content}, each up to 4,000 characters.
routing.strategyenumauto, fast, balanced or deep.
streambooleanServer-Sent Events instead of one JSON body.
toolsarrayOptional 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.

04

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: {}
05

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.

Theme
Size
Accent
<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>
dark · standard · graphite. The live widget uses these exact colors
  • 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.
06

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.

RoleCan
OwnerEverything, including promoting admins, exporting and deleting the team.
AdminCreates, edits, deletes and publishes; invites and removes members and viewers; reads the audit log.
Editorcreates and edits shared projects, chats and sites, and asks in the team. Cannot delete or publish.
ViewerReads 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.

07

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.

Copy your link · Referral terms

08

Errors

Every error has the shape {"error": {"code", "message", "retry_after"?}}. Widget errors use the same shape.

StatusCodeMeaning
400invalid_requestBad JSON or a field out of range. The message says which.
401invalid_api_keyMissing, malformed, revoked or expired key. Repeated bad keys from one address are throttled.
402limit_reachedYour plan's credits, a rolling limit or the daily safety cap is used up. The message says when it resets.
403insufficient_scope / plan_requiredThe key lacks the scope, or the account's plan no longer includes the API.
413too_largeThe request body is too large.
429key_rate_limited / rate_limitedOver the per-key or per-address limit. Wait for the Retry-After header.
502no_responseNo model answered. Nothing is charged.
503unavailableKeplar is temporarily unavailable. Retry later.
09

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 Authorization header 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.
10

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.