> SpecStream is the live web data engine for teams and agents. This is the Markdown copy of https://specstream.ai/docs/integrations/verity. Every page, with what SpecStream does and costs: https://specstream.ai/llms.txt

# Verity

Set `SEARXNG_BASE_URL` in Verity's `.env` to the SpecStream address, and Verity's searches run on SpecStream's Search API, in the SearXNG JSON its code already reads. There is no SearXNG instance to install, and the model and page reading stay on your machine.

[SpecStream for VerityAI assistants](https://specstream.ai/integrations/verity.md)

## What you need

-   Verity, installed with `install.bat`, by hand from the README, or with Docker.
-   A SpecStream key. [Get your key](https://specstream.ai/workspace/search?route=searxng&utm_source=verity&utm_medium=howto) on the Search API screen of your SpecStream workspace. New accounts start with $10 of credit, no card.

1.  1

    ## 1. Set SEARXNG\_BASE\_URL in .env

    Verity reads its settings from `.env` in the Verity folder. If you have none yet, copy `.env.sample` to `.env`. Replace the SearXNG line with the SpecStream address, with your key in place of `YOUR_SPECSTREAM_KEY`.

    Give the address without `/search`: Verity adds `/search` itself. The address holds your key, so keep `.env` out of git and out of anything you share.

    .env

    ```bash
    SEARXNG_BASE_URL=https://api.specstream.ai/searxng/YOUR_SPECSTREAM_KEY
    ```

2.  2

    ## 2. With Docker, set it in .env\_docker

    The Docker backend reads `.env_docker`, not `.env`. Its sample line is `SEARXNG_BASE_URL=http://host.docker.internal:8080`, which points at a SearXNG on your own machine. Replace it with the same SpecStream line, without quotes, and rebuild:

    In the Verity folder

    ```bash
    docker compose up --build
    ```

3.  3

    ## 3. Restart Verity

    Verity reads the address only when it starts. Stop what you run and start it again: `start.bat` for the CLI app, `start-webserver.bat` for the web server behind the WebUI, `start-mcpserver.bat` for the MCP server, or `python src/api_server.py` in a manual install. Each of them reads the same `SEARXNG_BASE_URL`.

4.  4

    ## 4. Ask a question that needs the web

    Ask in the WebUI, or call the API server directly. The stream sends a `search` event, then `read` while Verity reads the pages it found, then `think`, and the answer as `token` events:

    Terminal

    ```bash
    curl -N "http://localhost:8000/ask?question=What%20changed%20in%20the%20latest%20PostgreSQL%20release"
    ```

## What changes and what stays

Verity's search code, `src/backend/search/searxng.py`, is unchanged. It posts each query to `SEARXNG_BASE_URL` plus `/search` with `format=json`, `language=en` and `categories=general`. SpecStream answers in SearXNG's JSON shape: `results[]` with `title`, `url`, `content` and a `score` on each result. Verity ranks results by that `score`, so it works with no change.

Verity still reads the pages itself with Crawl4AI, and your local model still writes the answer. Only the search leaves your machine: each question and the queries Verity's model writes from it go to SpecStream.

The `-site:spotify.com` Verity adds to every query holds on every result: SpecStream applies `site:` and `-site:` to each result it returns.

## Why not run SearXNG yourself

Verity's README starts with installing SearXNG. That means a Docker container on port 8080, a `settings.yml` with `json` added under `search: formats:`, and a secret key. SearXNG's own [search API docs (opens in a new tab)](https://docs.searxng.org/dev/search_api.html) say that requesting a format the instance has not turned on returns 403 Forbidden, and many public instances have JSON turned off.

A SearXNG instance also passes every query on to public engines from your own address, and those engines can answer it with CAPTCHAs, as AgenticSeek users report in [issue #410 (opens in a new tab)](https://github.com/Fosowl/agenticSeek/issues/410). With SpecStream the search runs on SpecStream's servers, so there is nothing to host, patch or unblock.

## What each question costs

Verity's model rewrites each question into two more search queries, and Verity searches all three. Each search is one Search API call of up to 10 results.

The SearXNG address runs the Search API's fast tier, at $1 per 1,000 searches of up to 10 results. A Verity question with its three searches costs about $0.003. Searches come out of your balance with no quote and no approval, and every call, charged or not, is in your account's request log. The [pricing page](https://specstream.ai/pricing.md) has the details.

## Keep searches in the EU

Verity is built for privacy. To keep its searches inside the EU, turn on `eu_egress_only` for the key you put in the address, when you create the key or later through the API ([reference](https://specstream.ai/agents.md)). Each search then reaches the engines only from SpecStream's server in Madrid.

## Limits and errors

-   Verity waits 10 seconds for a search. If it gives up, it says `SearXNG request timed out,please ensure it is running`. Ask again.
-   If Verity says `Unexpected error in search` with a client error, check the key in the address.
-   If Verity says `Could not connect to SearXNG,please ensure it is running`, it still uses `http://localhost:8080`. Verity's `src/config.py` reads `SEARXNG_BASE_URL` when it is first imported, before Verity's own `load_dotenv()`. When the virtual environment sits inside the Verity folder, as `install.bat` makes it, the line in `.env` is loaded in time. Otherwise set the variable in the shell that starts Verity: `set SEARXNG_BASE_URL=https://api.specstream.ai/searxng/YOUR_SPECSTREAM_KEY` on Windows, or `export` with the same value on macOS and Linux.

## Go back to a local SearXNG

Set `SEARXNG_BASE_URL` back to `http://localhost:8080` in `.env`, or `http://host.docker.internal:8080` in `.env_docker`, and restart Verity. Questions: [support@specstream.ai](mailto:support@specstream.ai).

## More

[SpecStream for Verity](https://specstream.ai/integrations/verity.md) covers what it does in Verity on one page. Every other tool has its guide in [Connect your tools](https://specstream.ai/docs/integrations.md). You see the most a request can cost before it starts, and the matches are paid from your balance. [Billing](https://specstream.ai/docs/billing.md) has the details. For help, email [support@specstream.ai](mailto:support@specstream.ai).
