Search
Sent only to Synoppy over HTTPS · never stored by this page. No key? Get one free →
POST/api/search queries the live web and returns ranked results — each with a title, url, and snippet. It's the discovery layer that pairs with Read: find the right pages, then pull their full content. Set markdown to also read each result into clean Markdown in the same call. Requires an API key. This endpoint is live.
Request body
5.markdown field. Defaults to false (titles, urls, and snippets only).false.Example request
curl -X POST https://synoppy.com/api/search \
-H "Authorization: Bearer $SYNOPPY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"query": "best open-weight LLMs 2026",
"maxResults": 5,
"markdown": true
}'Response
Results come back ranked, each with a clean source url. The markdown field is only present when you asked for it.
{
"success": true,
"query": "best open-weight LLMs 2026",
"count": 5,
"results": [
{
"title": "The best open-weight models, ranked",
"url": "https://example.com/open-weights-2026",
"snippet": "A side-by-side look at the leading open-weight releases...",
"markdown": "# The best open-weight models, ranked\n\n..."
}
],
"latencyMs": 1342,
"creditsUsed": 4,
"creditsRemaining": 4996
}Response fields
title, url (a clean source link), and snippet. markdown is included only when markdown: true was set.Billing
There's no flat fee. A Search is metered by the real cost of the underlying web search, plus any per-result reads when you pass markdown: true — so a plain query is cheap, and reading every result costs more. Every response returns the exact creditsUsed.
In code
import { Synoppy } from "@synoppy/sdk";
const synoppy = new Synoppy({ apiKey: process.env.SYNOPPY_API_KEY });
const res = await synoppy.search("best open-weight LLMs 2026", {
maxResults: 5,
markdown: true,
});
for (const r of res.results) console.log(r.title, r.url);