Quickstart.
Your first SiftQ search in under three minutes. We'll walk you through cURL, Python, and JavaScript.
01
Get an API key
Open the SiftQ API playground — you'll see a working request hitting our server-side proxy. The Free tier gives you 1,000 queries / month with no credit card. Personal keys appear in your dashboard after sign-in.
02
Make a request
One endpoint, three transports — all return identical JSON.
curl --location 'https://api.siftq.com/v1/search' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"q": "post-training papers about RLHF reward hacking",
"scope": "scholar",
"size": "10"
}'import os, requests
response = requests.post(
"https://api.siftq.com/v1/search",
headers={"Authorization": f"Bearer {os.environ['SIFTQ_API_KEY']}"},
json={"q": "RLHF reward hacking", "scope": "scholar", "size": "10"},
timeout=20,
)
for hit in response.json()["scholars"]:
print(hit["title"], "—", hit["link"])const r = await fetch("https://api.siftq.com/v1/search", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SIFTQ_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ q: "RLHF reward hacking", scope: "scholar", size: "10" }),
});
const { scholars } = await r.json();
scholars.forEach(h => console.log(h.title, "—", h.link));03
Parse the response
Different scope values return results under different array keys. This is intentional — image results don't have snippets; podcast results have duration. The schema reflects the data.
scope: webpage→data.webpages[]scope: scholar→data.scholars[]scope: podcast→data.podcasts[](withduration)scope: video→data.videos[](withduration,coverImage)scope: image→data.images[](withimageUrl,imageWidth/Height)scope: document→data.documents[]
04