API
Knowviq Verified Answers API
Coming soon The API isn't open yet. This page documents it ahead of launch.
Send a question, get back only the sentences Jev verified against sources, each with its citations and how sure Jev is. Anything Jev couldn't verify is removed before the response leaves Knowviq.
US$29/month
- 250 verified answers per billing period.
- Only verified answers count. If nothing could be verified, the call is free.
- Each sentence comes with
verified_pctand its citations (title and URL). - Optional Jev-verified web results with
include_results. - Up to 10 requests a minute per key.
- A separate subscription from Knowviq Pro. Cancel any time in the Stripe billing portal.
Sign-up isn't open yet. This page documents the API ahead of launch.
Quick start
After you subscribe, your key is shown once. It starts with
kvq_live_. Keep it on your server, never in a browser or app.
If it leaks, regenerate it on your API account
page. The old key stops working straight away.
curl
curl https://knowviq.com/api/v1/answer \
-H "Authorization: Bearer $KNOWVIQ_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "how tall is the eiffel tower", "include_results": true}'
JavaScript
const res = await fetch("https://knowviq.com/api/v1/answer", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.KNOWVIQ_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ query: "how tall is the eiffel tower" }),
});
const data = await res.json();
if (!res.ok) throw new Error(data.error.message);
for (const s of data.answer) console.log(s.text, `${s.verified_pct}%`);
Python
import os, requests
res = requests.post(
"https://knowviq.com/api/v1/answer",
headers={"Authorization": f"Bearer {os.environ['KNOWVIQ_API_KEY']}"},
json={"query": "how tall is the eiffel tower", "include_results": True},
timeout=60,
)
data = res.json()
res.raise_for_status()
for s in data["answer"]:
print(s["text"], s["verified_pct"], [c["url"] for c in s["citations"]])
Request
POST https://knowviq.com/api/v1/answer
Authorization: Bearer <key>(required)query(string, required): up to 200 characters.include_results(boolean, optional): also return Jev-verified web results.
Response
{
"id": "req_4f1c…",
"object": "verified_answer",
"query": "how tall is the eiffel tower",
"verified": true,
"answer": [
{
"text": "The Eiffel Tower is 330 metres tall.",
"verified_pct": 97,
"citations": [{ "title": "Eiffel Tower", "url": "https://…" }]
}
],
"how_sure": 97,
"results": [
{ "title": "Eiffel Tower", "url": "https://…", "jev_verified_pct": 93 }
],
"usage": { "used": 12, "limit": 250, "resets_at": "2026-10-27T06:00:00.000Z" }
}
answer: verified sentences only, in order. Each hastext,verified_pct(Jev's P(supported), 0–100) andcitations.how_sure: the lowestverified_pctin the answer, so every sentence is at least this likely to be supported. It'snullwhen nothing is verified.verified: falsewith an emptyanswermeans Jev couldn't verify any sentence. You still get HTTP 200, and the call doesn't count.resultsappears only when you ask for it: web results Jev rated as directly answering the query.usage: verified answers used this billing period, and when the count resets.
Errors and limits
Errors look like {"error": {"code": "…", "message": "…"}, "request_id": "req_…"}.
400 invalid_request/query_too_long: fix the JSON body.401 missing_api_key/invalid_api_key: no key, a wrong key, or a regenerated (revoked) key.402 subscription_inactive: the subscription was canceled or ended. Manage billing to restart it.429 burst_limit: more than 10 requests in a minute on one key. HonourRetry-After.429 quota_exceeded: all 250 verified answers for the period are used. It resets when the next period starts (usage.resets_at).503 upstream_unavailable: a search or verification provider is down. The call isn't counted.
Every response has X-Request-Id. Answers and quota errors
also carry X-RateLimit-Limit, X-RateLimit-Remaining
and X-RateLimit-Reset (Unix time the period resets).
Privacy
API queries are not stored beyond counts. We keep a count of verified answers per billing period and a SHA-256 hash of your key, never the key itself. Answers are generated from third-party web sources, and each sentence cites where it came from.