NewIntroducing semantic snapshotsPair every capture with structured DOM data →

For teams adding search or answers

Search your docs by meaning without running a vector database

Index pages or text with one call, then ask questions in plain language and get the closest passages back with their sources.

The problem

Someone types "how do I get a refund" and your help centre's keyword search finds nothing, because the article is called "Returns and cancellations". Fixing that usually means choosing an embedding model, running a vector database, writing a chunker and keeping all three in step.

How domscout handles it

POST /index takes a url, text or HTML, splits it into overlapping chunks, embeds them and stores them in an index only your account can query. POST /semantic-search embeds a question and returns the closest chunks with their source URL, title, text and similarity score. Indexing a url fetches it without a browser and keeps everything in the page's main column, so for retrieval you put in front of users, capture the page as Markdown with cleanup first and index that text instead.

Where it shows up

  • Search for a help centre that understands questions, not just keywords.
  • The retrieval step of an assistant that answers from your documentation.
  • Related articles found by meaning across a knowledge base.

The request

POST /semantic-search. Both routes start at Pro. Indexing costs 3 credits a request and each search 2. A search returns at most 20 results. Retrieval quality depends far more on how many pages you index than on chunk settings.

cURL
curl -X POST https://api.domscout.io/semantic-search \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "How do I rotate an API key?", "limit": 5}'
Node.js
const response = await fetch("https://api.domscout.io/semantic-search", {
  method: "POST",
  headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY" },
  body: JSON.stringify({ query: "How do I rotate an API key?", limit: 5 }),
});
const result = await response.json();
console.log(result.results);
Python
import requests

response = requests.post(
    "https://api.domscout.io/semantic-search",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={"query": "How do I rotate an API key?", "limit": 5},
)
print(response.json()["results"])
Go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	body, _ := json.Marshal(map[string]any{"query": "How do I rotate an API key?", "limit": 5})
	req, _ := http.NewRequest("POST", "https://api.domscout.io/semantic-search", bytes.NewReader(body))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("x-api-key", "YOUR_API_KEY")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()

	var result map[string]any
	json.NewDecoder(res.Body).Decode(&result)
	fmt.Println(result["results"])
}
PHP
<?php
$ch = curl_init('https://api.domscout.io/semantic-search');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'x-api-key: YOUR_API_KEY'],
    CURLOPT_POSTFIELDS => json_encode(['query' => 'How do I rotate an API key?', 'limit' => 5]),
]);
$response = curl_exec($ch);
if ($response === false) {
    throw new RuntimeException(curl_error($ch));
}
$result = json_decode($response, true);
print_r($result['results']);
Ruby
require "json"
require "net/http"

response = Net::HTTP.post(
  URI("https://api.domscout.io/semantic-search"),
  { query: "How do I rotate an API key?", limit: 5 }.to_json,
  "Content-Type" => "application/json",
  "x-api-key" => "YOUR_API_KEY"
)
puts JSON.parse(response.body)["results"]
Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Capture {
    public static void main(String[] args) throws Exception {
        String body = """
            {"query": "How do I rotate an API key?", "limit": 5}
            """;
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.domscout.io/semantic-search"))
            .header("Content-Type", "application/json")
            .header("x-api-key", "YOUR_API_KEY")
            .POST(HttpRequest.BodyPublishers.ofString(body))
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
C#
using System.Net.Http.Json;
using System.Text.Json;

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");

var response = await client.PostAsJsonAsync("https://api.domscout.io/semantic-search", new { query = "How do I rotate an API key?", limit = 5 });
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result.GetProperty("results"));

Go further

More in Data extraction and search: Crawling a whole site · Structured data from web pages · AI extraction to a JSON Schema · Content behind clicks · Company research from websites · Evaluation sets from real pages · All use cases

Give your product a browser.

Get clean web content and visual proof into your workflow in minutes.