Skip to content

Developer documentation

Web search API

Search the public web and get HoloSignal's own ranked copies of each page, with clean text, metadata and an answer that cites results by position.

How a search works

  1. 1

    Discovery

    Official search APIs return candidate URLs only. Their titles, snippets and ranking are discarded.

  2. 2

    Fetch

    HoloSignal fetches each page itself: robots-aware, public pages only.

  3. 3

    Rank

    BM25 relevance with Unicode word segmentation (Thai, Japanese and Chinese work), domain class, freshness and page quality. Near-duplicates are marked with dupOf.

  4. 4

    Answer

    A generated answer when the model layer is available, otherwise an extractive answer built from the best passages. Both cite results by position.

Authentication and idempotency

  • HoloSignal API keys (oxy_live_…, oxy_test_…) as a bearer token, or
  • a Sansa service key (sa_rt_…) through Sansa Auth. Send x-sansa-tenant-id and, for metered actions, x-sansa-billing-profile-id. Actions: oxysignal.search.run, oxysignal.fetch.run, oxysignal.context_packs.query (metered) and oxysignal.runs.read.
  • Every create call needs an Idempotency-Key. Reusing a key with a different body returns 409 IDEMPOTENCY_KEY_REUSED_WITH_DIFFERENT_REQUEST.

Request and synchronous mode

?wait= accepts seconds (10, 10s) or milliseconds (1500ms), capped at 25 seconds. When the run finishes in time the response is 200 with the search result. If it isn't finished in time the response is the usual 202 with run_id, status_url and Retry-After: 2; poll GET /api/v1/runs/{id}, whose output_json.search has the same results and answer. Without ?wait= every new search returns 202.

A search that fails within the wait returns 422 with the same body plus error; when every page was filtered out, error.message is NO_RESULTS_MATCH_FILTERS. Full schemas: SearchRequest, SearchResponse and SearchResult in /openapi.json.

POST /api/v1/search?wait=10
Authorization: Bearer oxy_live_…
Idempotency-Key: 4f1c…
Content-Type: application/json

{
  "query": "JLPT N5 official test format",
  "lang": "en", "country": "JP", "freshness": "1y",
  "includeDomains": ["jlpt.jp"], "domainMode": "boost",
  "domainClasses": ["gov", "edu", "official"],
  "safeSearch": "strict", "maxResults": 10,
  "content": "markdown", "answer": true,
  "budget": { "maxUnits": 20 }
}

Request fields and filters

Hints go to discovery where supported; HoloSignal enforces every filter itself on the fetched pages.

query

string, 3–4,000 characters

Required. The search query.

maxResults

1–50, default 12

Maximum results returned.

lang

BCP 47, e.g. en, nb, zh-Hans, pt-BR

Pages whose declared or detected language differs are dropped. Pages with unknown language are kept.

country

ISO 3166-1 alpha-2

Region boost at discovery only.

freshness / since

7d, 3m, 1y / YYYY-MM-DD

Pages with a known publication date before the bound are dropped; the stricter bound wins. Pages with unknown dates are kept.

includeDomains / excludeDomains

up to 25 each

Exclude always drops. Include with domainMode "filter" keeps only those domains; with "boost" it ranks them higher.

domainMode

boost (default), filter

How includeDomains and domainClasses apply.

domainClasses

gov, edu, official, reference

filter keeps only those classes; boost ranks them higher.

safeSearch

off, moderate (default), strict

Passed to discovery, plus HoloSignal's own explicit-content check.

content

none, snippet (default), text, markdown

text and markdown include page content, up to 20,000 characters per result.

answer

true (default), false

false skips the answer.

budget.maxUnits

1–10,000, default 80

Units reserved for the search. It never charges more.

mode

fast, corroborated (default), deep

Depth of acquisition and review.

qualityThreshold

0.5–1, default 0.8

Minimum evidence quality.

Languages: Wikipedia discovery covers en, nb, sv, da, de, fr, es, ar, zh, hi, ja, pt and th; open-web discovery covers every language, with HoloSignal's own language filter applied. Detection covers Thai, Japanese, Arabic, Hindi, Korean, Chinese and Cyrillic by script, and en, de, fr, es, pt, sv, da and nb by vocabulary.

Response

Schema holosignal.search-results/v1. answer.citations are 0-based positions in results; answer.method is extractive or generated; answer is null when answer: false. usage.units is what the search charged, latencyMs its run time, and statusUrl the durable run resource.

{
  "runId": "run_…", "status": "completed", "schema": "holosignal.search-results/v1",
  "fetch": { "status": "ok" },
  "answer": { "text": "…", "citations": [0, 2], "method": "extractive" },
  "results": [{
    "rank": 1, "url": "…", "canonicalUrl": "…", "title": "…",
    "snippet": "…", "content": "…", "lang": "en",
    "publishedAt": "2025-…", "fetchedAt": "…", "fetched": true,
    "domainClass": "official", "score": 0.83, "relevance": 0.91,
    "dupOf": null, "license": null, "sourceId": "src_…", "snapshotId": "snap_…"
  }],
  "usage": { "units": 18 }, "latencyMs": 7400, "statusUrl": "/api/v1/runs/run_…"
}

Result fields

rank

Position after ranking and deduplication, starting at 1.

url / canonicalUrl

The fetched URL, and the page's declared canonical URL (else the final URL).

title

From the page (Open Graph, <title> or JSON-LD headline); null when the page has none.

snippet

The best-matching passage from HoloSignal's copy of the page. Empty when content is none.

content

Present when content is text or markdown; at most 20,000 characters.

lang

Declared or detected language; null when unknown.

publishedAt

From JSON-LD, Open Graph or <time> tags; null when the page doesn't declare a date.

fetchedAt

When HoloSignal fetched its copy.

fetched

false when page fetching was unavailable and only the discovered URL is returned.

domainClass

gov, edu, official, reference or web.

score / relevance

score (0–1) is the overall rank; relevance (0–1) is query match only.

dupOf

The URL of the original when this result is a duplicate, else null. Originals come first.

license

Licence declared by the page (e.g. CC-BY-SA-4.0) or its licence URL; null when none is declared.

sourceId / snapshotId

Stable IDs for the source and the exact snapshot used.

Metadata is read from each page's HTML: JSON-LD, Open Graph and <time> tags for dates, and rel=license and Creative Commons links for licences. publishedAt and license are null only when the page doesn't declare them.

Fetch status and discovery-only results

fetch.status is ok when HoloSignal fetched pages, or unavailable with a reason when page fetching could not run. The search then degrades instead of failing: results carry the discovered URLs only, with fetched: false, no title, snippet, content or language, and answer: null. Only URL-level filters (includeDomains, excludeDomains, domainMode, domainClasses) apply, because language, date and content checks need the page. Check fetch.status before relying on snippets or answers.

{
  "fetch": { "status": "unavailable", "reason": "Page fetching is disabled on this deployment." },
  "answer": null,
  "results": [{
    "rank": 1, "url": "https://www.jlpt.jp/e/guideline/testsections.html",
    "canonicalUrl": "https://www.jlpt.jp/e/guideline/testsections.html",
    "title": null, "snippet": "", "lang": null, "publishedAt": null, "fetchedAt": null,
    "fetched": false, "domainClass": "official", "score": 1, "relevance": 0,
    "dupOf": null, "license": null, "sourceId": "", "snapshotId": ""
  }]
}

Deduplication and score

  • canonicalUrl: from the page, else the final URL.
  • dupOf: set when the normalized URL matches (tracking parameters, www. and index.html removed) or the text is a near-duplicate (SimHash, 3 bits or fewer different). Originals come first.
  • score (0–1): overall rank. relevance (0–1): query match only.

Units, rate limits and latency

Units

A search reserves budget.maxUnits and never charges more. The charge is 2 + pages fetched + evidence passages used + 2 for an extractive answer (10 for a generated one), capped at maxUnits. Failed searches are not charged. Calls through Sansa Auth are priced by the published Sansa Auth price instead; HoloSignal units are then showback only.

Rate limits

120 new runs per minute per workspace, and 60 fetches per minute per site. A 429 carries Retry-After in seconds.

Latency targets

Targets, not yet measured in production: about 6 s median and 15 s p95 for 10 results with static fetches. Results that need rendering take longer. ?wait= returns 202 rather than timing out.

Caching and display

Proposed — subject to legal review

HoloSignal returns its own extraction and ranking of public pages, not another search engine's results. Proposed terms:

  • Callers may cache results and show titles, snippets and citations to their end users for the life of their retention setting (plan default, e.g. 90 days on Pro).
  • Callers must link each cited url and follow the page's license when one is declared (for example CC BY-SA attribution and share-alike for Wikipedia).
  • content is for grounding and citation, not bulk republication.

This wording is not yet part of the Terms and may change before it is.