curl --request POST \
--url https://api.seltz.ai/v1/search \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"query": "How much is the fish?"
}
'import requests
url = "https://api.seltz.ai/v1/search"
payload = { "query": "How much is the fish?" }
headers = {
"x-api-key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({query: 'How much is the fish?'})
};
fetch('https://api.seltz.ai/v1/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.seltz.ai/v1/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'How much is the fish?'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.seltz.ai/v1/search"
payload := strings.NewReader("{\n \"query\": \"How much is the fish?\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.seltz.ai/v1/search")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"How much is the fish?\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.seltz.ai/v1/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"How much is the fish?\"\n}"
response = http.request(request)
puts response.read_body{
"documents": [],
"request_id": ""
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}Search
curl --request POST \
--url https://api.seltz.ai/v1/search \
--header 'Content-Type: application/json' \
--header 'x-api-key: <x-api-key>' \
--data '
{
"query": "How much is the fish?"
}
'import requests
url = "https://api.seltz.ai/v1/search"
payload = { "query": "How much is the fish?" }
headers = {
"x-api-key": "<x-api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({query: 'How much is the fish?'})
};
fetch('https://api.seltz.ai/v1/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.seltz.ai/v1/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'query' => 'How much is the fish?'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <x-api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.seltz.ai/v1/search"
payload := strings.NewReader("{\n \"query\": \"How much is the fish?\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<x-api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.seltz.ai/v1/search")
.header("x-api-key", "<x-api-key>")
.header("Content-Type", "application/json")
.body("{\n \"query\": \"How much is the fish?\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.seltz.ai/v1/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<x-api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"query\": \"How much is the fish?\"\n}"
response = http.request(request)
puts response.read_body{
"documents": [],
"request_id": ""
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>"
},
"request_id": "<string>"
}Headers
Seltz API key: https://console.seltz.ai/api-keys
Body
API key. On the HTTP surface, either this or the x-api-key header must
be supplied; the header takes precedence.
Exclude results from these domains
Which selectable members of Document to populate.
If absent, defaults to {content: true}, which returns content under the
default ceiling stated on ContentOptions.
Show child attributes
Show child attributes
Only include results published on or after this point. UTC throughout.
A date "2025-10-28", a datetime "2025-10-28T23:00:00" or "2025-10-28T23:00:00Z", or an offset from "now", which is the time the request is served: "now" itself, or "now-" and one duration such as "now-7d" for the past week. A datetime written without a zone is read as UTC, and a date written without a time is the start of that day.
Offset units are s = second, m = minute, h = hour, d = 24 h, w = 7 d, M = one calendar month and y = one calendar year. A unit and a count are both required, and the case carries meaning.
A month and a year step the calendar rather than a fixed number of seconds, and the day of the month is clamped to the length of the target month. So "now-1M" from the 31st of March lands on the 28th or 29th of February.
An offset is a filter, not a freshness guarantee: the corpus refreshes on its own cadence, so a window of an hour or two can return nothing.
Only a single offset before "now" is accepted. Rounding, several terms in one value, a "+" offset, and any anchor other than "now" are rejected.
Include only results from these domains (e.g., ["google.com", "example.com"])
Maximum number of results to return. Defaults to 10. A larger value is served as 1000.
x >= 0The search query.
Restricts the results to one vertical or data set.
Currently available: "web" (beta), "news", "wikipedia", "people", "companies", "financial-reports".
When omitted, the default scope is searched. A scope that does not exist, or that this key cannot reach, returns 404.
How much work goes into ordering the results. It does not change which
corpus is searched -- that is scope -- so any scope can be requested in
either tier.
"base" returns first-stage ranking. "pro" adds a ranking stage for
higher precision at the top of the list.
Unset resolves to "pro", so "base" is opt-out. A scope with no Pro
configuration serves "pro" exactly as "base" rather than failing, so a
caller may always ask for "pro".
The name is matched without regard to case, and surrounding whitespace is ignored, so "pro", "PRO" and " Pro " are one tier. A name that is neither is rejected rather than defaulted, because the value selects a price.
Only include results published on or before this point. UTC throughout.
A date, a datetime, or an offset from "now", in the same spellings from_date takes. A date written without a time covers the whole of that day, ending at 23:59:59.999; an offset is an instant.
Response
Search completed. Returns matched documents.