Quickstart
Create a project, crawl it, query the API, and embed search.
Browse docs
This guide uses the Next.js App Router docs opens in a new tab as the example site. The same steps work for any public docs, changelog, blog, pricing, or product pages.
1. Create a project
Create a Search project and give it a name. In Setup, add the source URL, path rules, crawl frequency, and page limit. Save the source to start its first crawl.
For the Next.js App Router docs, use:
Project name: Next.js App RouterWebsite URL: https://nextjs.orgInclude path rule: Starts with /docs/appExclude paths: noneCrawl frequency: DailyMax pages: 1,000When the crawl finishes, the source should show indexed pages. Check for the installation guide opens in a new tab , JSON-LD guide opens in a new tab , and useParams reference opens in a new tab .
2. Query the API
Create a Browser/public key for a website search box. Restrict it to the website origins where it may run, then call /v1/search directly from the browser. The browser supplies the Origin header automatically.
const response = await fetch("https://api.ceisium.com/v1/search", { method: "POST", headers: { Authorization: `Bearer ${CEISIUM_PUBLIC_SEARCH_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ project_id: CEISIUM_PROJECT_ID, query: "How do I add typed JSON-LD to a page component?", top_k: 8, path_prefix: "https://nextjs.org/docs/app", }),});const { results } = await response.json();If you configured allowed result URL prefixes on the key, send a matching path_prefix with every request.
3. Embed search
Use a UI component when visitors should search inside your product site.
Start with one of these patterns:
- Command palette for keyboard-first docs search.
- Inline search for a visible search field on docs pages.
- Search bar when the whole bar should open a modal.
- Search modal for an overlay with a search input and results.
Use CEISIUM_PUBLIC_SEARCH_KEY only for a Browser/public key with its website and result restrictions configured. If you prefer to proxy searches through your backend, create a Server key, store it as CEISIUM_SEARCH_KEY, and never expose that key in browser code.