<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>API on Searpa Docs</title><link>https://docs.searpa.eu/api/</link><description>Recent content in API on Searpa Docs</description><generator>Hugo</generator><language>en</language><atom:link href="https://docs.searpa.eu/api/index.xml" rel="self" type="application/rss+xml"/><item><title>Authentication</title><link>https://docs.searpa.eu/api/authentication/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.searpa.eu/api/authentication/</guid><description>&lt;h1 id="authentication"&gt;Authentication&lt;a class="anchor" href="#authentication"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Every API request must carry a valid &lt;strong&gt;API key&lt;/strong&gt;. Keys are issued per user; a
request without one gets &lt;code&gt;401&lt;/code&gt;, and a request with a bad or revoked one is
rejected.&lt;/p&gt;
&lt;blockquote class='book-hint important'&gt;
&lt;p&gt;The API is a &lt;a href="https://docs.searpa.eu/self-hosting/"&gt;self-hosted&lt;/a&gt; feature, so keys are
issued on &lt;strong&gt;your own instance&lt;/strong&gt;, not on the hosted searpa.eu service.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 id="getting-a-key"&gt;Getting a key&lt;a class="anchor" href="#getting-a-key"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On your instance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;In the web UI:&lt;/strong&gt; &lt;strong&gt;Settings → API keys&lt;/strong&gt;, create a key (optionally name it).
The full key is shown &lt;strong&gt;once&lt;/strong&gt;, copy it immediately.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From the command line&lt;/strong&gt; (admins):
&lt;code&gt;python manage.py create_api_key &amp;lt;username&amp;gt; --name &amp;quot;my script&amp;quot;&lt;/code&gt;, see
&lt;a href="https://docs.searpa.eu/self-hosting/api-keys/"&gt;Issuing API keys&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A key looks like:&lt;/p&gt;</description></item><item><title>Rate limits</title><link>https://docs.searpa.eu/api/rate-limits/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.searpa.eu/api/rate-limits/</guid><description>&lt;h1 id="rate-limits"&gt;Rate limits&lt;a class="anchor" href="#rate-limits"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Each API key has its own budget, enforced by &lt;strong&gt;two limits that apply together&lt;/strong&gt;.
A request must satisfy both:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Limit&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
					&lt;th&gt;Purpose&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Burst&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;60/min&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Short-term cap, protects upstream providers from a runaway client.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Sustained&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;5000/day&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Caps total daily volume.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;On a self-hosted instance these are configurable with &lt;code&gt;API_THROTTLE_BURST&lt;/code&gt; and
&lt;code&gt;API_THROTTLE_SUSTAINED&lt;/code&gt;, see
&lt;a href="https://docs.searpa.eu/self-hosting/configuration/#public-api-rate-limits"&gt;Configuration&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="when-you-exceed-a-limit"&gt;When you exceed a limit&lt;a class="anchor" href="#when-you-exceed-a-limit"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Exceeding either limit returns:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;HTTP 429 Too Many Requests&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;detail&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Request was throttled. Expected available in 12 seconds.&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;DRF includes a &lt;code&gt;Retry-After&lt;/code&gt; hint in the message; back off and retry after the
indicated time. A robust client should handle &lt;code&gt;429&lt;/code&gt; with exponential backoff.&lt;/p&gt;</description></item><item><title>Conventions</title><link>https://docs.searpa.eu/api/conventions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.searpa.eu/api/conventions/</guid><description>&lt;h1 id="conventions"&gt;Conventions&lt;a class="anchor" href="#conventions"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="shared-query-parameters"&gt;Shared query parameters&lt;a class="anchor" href="#shared-query-parameters"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The search endpoints accept a common set of parameters. Each maps to an option
the website keeps in its preferences cookie, here they&amp;rsquo;re explicit in the URL.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Parameter&lt;/th&gt;
					&lt;th&gt;Applies to&lt;/th&gt;
					&lt;th&gt;Values&lt;/th&gt;
					&lt;th&gt;Default&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;all search endpoints&lt;/td&gt;
					&lt;td&gt;The query string (&lt;strong&gt;required&lt;/strong&gt;)&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;engine&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;web, images, news, videos, cards&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;brave&lt;/code&gt;, &lt;code&gt;mojeek&lt;/code&gt;, &lt;code&gt;marginalia&lt;/code&gt;, or &lt;code&gt;all&lt;/code&gt;; comma/space-separate several&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;all&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;safe&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;web, images, news, videos, cards&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;on&lt;/code&gt; / &lt;code&gt;off&lt;/code&gt; (&lt;code&gt;off&lt;/code&gt;, &lt;code&gt;false&lt;/code&gt;, &lt;code&gt;0&lt;/code&gt;, &lt;code&gt;no&lt;/code&gt; all mean off)&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;on&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;lang&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;most endpoints&lt;/td&gt;
					&lt;td&gt;A language code, e.g. &lt;code&gt;en&lt;/code&gt;, &lt;code&gt;fr&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;empty (auto)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;page&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;web, images, news, videos&lt;/td&gt;
					&lt;td&gt;Page number, &lt;code&gt;1&lt;/code&gt;–&lt;code&gt;50&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;date&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;web, news, videos&lt;/td&gt;
					&lt;td&gt;Time range: &lt;code&gt;d&lt;/code&gt; (day), &lt;code&gt;w&lt;/code&gt; (week), &lt;code&gt;m&lt;/code&gt; (month), &lt;code&gt;y&lt;/code&gt; (year)&lt;/td&gt;
					&lt;td&gt;none&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Notes:&lt;/p&gt;</description></item><item><title>Search endpoints</title><link>https://docs.searpa.eu/api/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.searpa.eu/api/search/</guid><description>&lt;h1 id="search-endpoints"&gt;Search endpoints&lt;a class="anchor" href="#search-endpoints"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The bread-and-butter endpoints: web, image, news and video search, plus the
&amp;ldquo;similar images&amp;rdquo; helper. All take the &lt;a href="https://docs.searpa.eu/api/conventions/"&gt;shared parameters&lt;/a&gt;
(&lt;code&gt;q&lt;/code&gt;, &lt;code&gt;engine&lt;/code&gt;, &lt;code&gt;safe&lt;/code&gt;, &lt;code&gt;lang&lt;/code&gt;, &lt;code&gt;page&lt;/code&gt;, &lt;code&gt;date&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id="web-search"&gt;Web search&lt;a class="anchor" href="#web-search"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GET /api/v1/web/?q=...&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -H &lt;span class="s2"&gt;&amp;#34;Authorization: Api-Key searpa_sk_&amp;lt;prefix&amp;gt;.&amp;lt;secret&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;https://search.example.com/api/v1/web/?q=climate&amp;amp;engine=all&amp;amp;lang=en&amp;amp;date=w&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;climate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tab&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;web&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;page&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;engine&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;brave&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mojeek&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;marginalia&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;correction&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;results&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Climate change&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://example.org/climate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;display_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;example.org&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;favicon_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;age&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2 days ago&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;all&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;source_label&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Brave, Mojeek, Marginalia&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;sitelinks&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;source&lt;/code&gt; / &lt;code&gt;source_label&lt;/code&gt; — which engine(s) returned the result. &lt;code&gt;brave&lt;/code&gt; /
&lt;code&gt;mojeek&lt;/code&gt; / &lt;code&gt;marginalia&lt;/code&gt; for a single engine, or &lt;code&gt;both&lt;/code&gt; / &lt;code&gt;all&lt;/code&gt; for cross-engine
agreement (&lt;code&gt;source_label&lt;/code&gt; is the readable form).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;correction&lt;/code&gt; — a suggested spelling correction, or &lt;code&gt;&amp;quot;&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="image-search"&gt;Image search&lt;a class="anchor" href="#image-search"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GET /api/v1/images/?q=...&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;golden retriever&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;tab&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;images&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;page&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;engine&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;brave&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;results&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://example.com/page&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;example.com&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;thumbnail&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://.../thumb.jpg&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="similar-images"&gt;Similar images&lt;a class="anchor" href="#similar-images"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Mirrors the website&amp;rsquo;s lightbox &amp;ldquo;similar images&amp;rdquo; grid, an image search seeded
from an opened image&amp;rsquo;s caption.&lt;/p&gt;</description></item><item><title>Maps</title><link>https://docs.searpa.eu/api/maps/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.searpa.eu/api/maps/</guid><description>&lt;h1 id="maps"&gt;Maps&lt;a class="anchor" href="#maps"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Geocode a place name or reverse-geocode a coordinate pair, using OpenStreetMap&amp;rsquo;s
Nominatim. No provider key is required.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GET /api/v1/maps/&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="geocode-a-place-name"&gt;Geocode a place name&lt;a class="anchor" href="#geocode-a-place-name"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GET /api/v1/maps/?q=&amp;lt;place&amp;gt;&amp;amp;limit=&amp;lt;n&amp;gt;&amp;amp;lang=&amp;lt;code&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;q&lt;/code&gt; — the place or address to look up (&lt;strong&gt;required&lt;/strong&gt; in this mode).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;limit&lt;/code&gt; — max results, &lt;code&gt;1&lt;/code&gt;–&lt;code&gt;50&lt;/code&gt; (default &lt;code&gt;10&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lang&lt;/code&gt; — preferred language for names.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -H &lt;span class="s2"&gt;&amp;#34;Authorization: Api-Key searpa_sk_&amp;lt;prefix&amp;gt;.&amp;lt;secret&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;https://search.example.com/api/v1/maps/?q=Eiffel+Tower&amp;amp;limit=1&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Eiffel Tower&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;places&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Eiffel Tower&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;display_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Eiffel Tower, Paris, France&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;lat&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;48.8584&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;lon&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;2.2945&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;category&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tourism&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;attraction&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;addresstype&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tourism&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;importance&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.82&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;embed_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://www.openstreetmap.org/export/embed.html?...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;mini_embed_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;osm_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://www.openstreetmap.org/...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;directions_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://www.openstreetmap.org/directions?...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;geo_uri&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;geo:48.8584,2.2945&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="reverse-geocode-coordinates"&gt;Reverse geocode coordinates&lt;a class="anchor" href="#reverse-geocode-coordinates"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Pass &lt;code&gt;lat&lt;/code&gt; and &lt;code&gt;lon&lt;/code&gt; instead of &lt;code&gt;q&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>Translate</title><link>https://docs.searpa.eu/api/translate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.searpa.eu/api/translate/</guid><description>&lt;h1 id="translate"&gt;Translate&lt;a class="anchor" href="#translate"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Translate text between languages, powered by the instance&amp;rsquo;s LibreTranslate. This
endpoint accepts &lt;strong&gt;GET or POST&lt;/strong&gt;, use POST to keep long text out of the URL and
logs.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GET /api/v1/translate/
POST /api/v1/translate/&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="translate-text"&gt;Translate text&lt;a class="anchor" href="#translate-text"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Parameter&lt;/th&gt;
					&lt;th&gt;Required&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;q&lt;/code&gt; (or &lt;code&gt;text&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;yes&lt;/td&gt;
					&lt;td&gt;The text to translate&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;target&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;yes&lt;/td&gt;
					&lt;td&gt;Target language code (e.g. &lt;code&gt;fr&lt;/code&gt;)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;source&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;no&lt;/td&gt;
					&lt;td&gt;Source language code; defaults to &lt;code&gt;auto&lt;/code&gt; (detect)&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# GET&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -H &lt;span class="s2"&gt;&amp;#34;Authorization: Api-Key searpa_sk_&amp;lt;prefix&amp;gt;.&amp;lt;secret&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;https://search.example.com/api/v1/translate/?q=hello&amp;amp;target=fr&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# POST (better for long text)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -X POST -H &lt;span class="s2"&gt;&amp;#34;Authorization: Api-Key searpa_sk_&amp;lt;prefix&amp;gt;.&amp;lt;secret&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s2"&gt;&amp;#34;q=hello world&amp;#34;&lt;/span&gt; -d &lt;span class="s2"&gt;&amp;#34;target=fr&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;https://search.example.com/api/v1/translate/&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;auto&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;target&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fr&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;translated_text&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bonjour le monde&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;detected_lang&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;en&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;detected_lang&lt;/code&gt; is filled only when &lt;code&gt;source&lt;/code&gt; was &lt;code&gt;auto&lt;/code&gt; (otherwise empty).&lt;/li&gt;
&lt;li&gt;If translation isn&amp;rsquo;t configured on the instance, the endpoint returns
&lt;strong&gt;&lt;code&gt;503&lt;/code&gt;&lt;/strong&gt; with &lt;code&gt;{&amp;quot;detail&amp;quot;: &amp;quot;Translation is unavailable or not configured on this deployment.&amp;quot;}&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="list-available-languages"&gt;List available languages&lt;a class="anchor" href="#list-available-languages"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GET /api/v1/translate/languages/&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;languages&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;code&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;en&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;English&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;code&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fr&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;French&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The list reflects whatever the connected LibreTranslate instance offers, see
&lt;a href="https://docs.searpa.eu/self-hosting/translation/"&gt;Translation&lt;/a&gt; for the self-hosting
side.&lt;/p&gt;</description></item><item><title>Instant &amp; cards</title><link>https://docs.searpa.eu/api/instant-cards/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.searpa.eu/api/instant-cards/</guid><description>&lt;h1 id="instant-answers--knowledge-cards"&gt;Instant answers &amp;amp; knowledge cards&lt;a class="anchor" href="#instant-answers--knowledge-cards"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;These two endpoints mirror the website&amp;rsquo;s inline answers and side panels. Because
their content varies by answer type and provider, they return &lt;strong&gt;provider-shaped
JSON&lt;/strong&gt; rather than a fixed per-field schema, treat the structures as data and
read the fields you need.&lt;/p&gt;
&lt;h2 id="instant-answers"&gt;Instant answers&lt;a class="anchor" href="#instant-answers"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GET /api/v1/instant/?q=...&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Returns the instant answer for a utility query (maths, unit/base/colour
conversion, weather, currency, world clock, hashes, QR, &amp;ldquo;what&amp;rsquo;s my IP&amp;rdquo;, …), or
&lt;code&gt;null&lt;/code&gt; when the query isn&amp;rsquo;t one Searpa answers inline.&lt;/p&gt;</description></item><item><title>Meta endpoints</title><link>https://docs.searpa.eu/api/meta/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.searpa.eu/api/meta/</guid><description>&lt;h1 id="meta-endpoints"&gt;Meta endpoints&lt;a class="anchor" href="#meta-endpoints"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Helpers for autocomplete, provider health, key introspection and endpoint
discovery. The root, &lt;code&gt;status/&lt;/code&gt; and &lt;code&gt;key/&lt;/code&gt; &lt;strong&gt;don&amp;rsquo;t&lt;/strong&gt; count toward your monthly
search usage (they still count against the raw rate limit).&lt;/p&gt;
&lt;h2 id="suggestions"&gt;Suggestions&lt;a class="anchor" href="#suggestions"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Search-bar autocomplete suggestions for a query. &lt;em&gt;(Counts as a search.)&lt;/em&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GET /api/v1/suggest/?q=...&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -H &lt;span class="s2"&gt;&amp;#34;Authorization: Api-Key searpa_sk_&amp;lt;prefix&amp;gt;.&amp;lt;secret&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;https://search.example.com/api/v1/suggest/?q=clim&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;clim&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;suggestions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;climate&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;climate change&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;climbing&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="provider-status"&gt;Provider status&lt;a class="anchor" href="#provider-status"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Current up/down status of each configured upstream provider, the data behind the
&lt;code&gt;/status&lt;/code&gt; page. &lt;em&gt;(Does not count toward usage.)&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Errors</title><link>https://docs.searpa.eu/api/errors/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://docs.searpa.eu/api/errors/</guid><description>&lt;h1 id="errors"&gt;Errors&lt;a class="anchor" href="#errors"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The API uses standard HTTP status codes and returns a JSON body describing the
problem.&lt;/p&gt;
&lt;h2 id="status-codes"&gt;Status codes&lt;a class="anchor" href="#status-codes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Code&lt;/th&gt;
					&lt;th&gt;Meaning&lt;/th&gt;
					&lt;th&gt;Typical cause&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;200&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;OK&lt;/td&gt;
					&lt;td&gt;Successful request.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;400&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Bad request&lt;/td&gt;
					&lt;td&gt;A bad parameter, e.g. a missing &lt;code&gt;q&lt;/code&gt;, a non-integer &lt;code&gt;page&lt;/code&gt;, or an unknown &lt;code&gt;engine&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;401&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Unauthorized&lt;/td&gt;
					&lt;td&gt;No API key sent (or no recognised auth header).&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;403&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Forbidden&lt;/td&gt;
					&lt;td&gt;Key belongs to a disabled account.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;429&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Too many requests&lt;/td&gt;
					&lt;td&gt;A &lt;a href="https://docs.searpa.eu/api/rate-limits/"&gt;rate limit&lt;/a&gt; was exceeded.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;503&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Service unavailable&lt;/td&gt;
					&lt;td&gt;A dependent service isn&amp;rsquo;t configured, e.g. translation when LibreTranslate is unset.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="error-bodies"&gt;Error bodies&lt;a class="anchor" href="#error-bodies"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="validation-errors-400"&gt;Validation errors (&lt;code&gt;400&lt;/code&gt;)&lt;a class="anchor" href="#validation-errors-400"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Field-keyed messages:&lt;/p&gt;</description></item></channel></rss>