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
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"
  }'
Python
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"])
JavaScript
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: webpagedata.webpages[]
  • scope: scholardata.scholars[]
  • scope: podcastdata.podcasts[] (with duration)
  • scope: videodata.videos[] (with duration, coverImage)
  • scope: imagedata.images[] (with imageUrl, imageWidth/Height)
  • scope: documentdata.documents[]
04

What's next