Skip to the page

Perplexideez

Set SEARXNG_URL to SpecStream's SearXNG address with your key in it, and perplexideez searches the web through SpecStream's Search API. There is no SearXNG container to run, no Valkey beside it, and no settings.yml to edit for JSON output.

SpecStream for PerplexideezAI assistants

What you need

  • A perplexideez server you run with Docker Compose, Kubernetes or bare metal, with the Ollama or OpenAI compatible endpoint its README asks for.
  • A SpecStream key. Get your key on the Search API screen of your SpecStream workspace. New accounts start with $10 of credit, no card.
  1. 1. Put your key in the address

    perplexideez builds every search as SEARXNG_URL followed by /search?format=json, and sends no key or header of its own. So the key goes in the path, as the address's last part. Put your key in place of YOUR_SPECSTREAM_KEY, and end the address with no slash:

    SEARXNG_URL
    https://api.specstream.ai/searxng/YOUR_SPECSTREAM_KEY
  2. 2. Set SEARXNG_URL in .env

    In the .env you made from deploy/docker/.env.example, replace the SearXNG block. REDIS_URL is used only by the example SearXNG stack, so it can go too. On bare metal, set the same line in the .env the app starts with.

    .env
    ###############
    ### SEARXNG ###
    ###############
    SEARXNG_URL="https://api.specstream.ai/searxng/YOUR_SPECSTREAM_KEY"
  3. 3. Take SearXNG out of the Compose stack

    The example compose.yml includes ./searxng.yml, which starts SearXNG and Valkey, and the perplexideez service waits until searxng is healthy. Remove the include line and the searxng entry under depends_on. Keep the rest of the service as it is:

    deploy/docker/compose.yml
    include:
    - ./db.yml
    - ./ollama.yml
    services:
    perplexideez:
    # image, env_file, healthcheck and ports stay as they are
    depends_on:
    postgres:
    condition: service_healthy
    ollama:
    condition: service_healthy
  4. 4. Restart and ask

    Run this in deploy/docker. It recreates perplexideez with the new address and removes the SearXNG and Valkey containers:

    Then ask about something from this week. The Sources list under the answer shows the pages SpecStream returned.

    Terminal
    docker compose up -d --remove-orphans

What perplexideez sends, and what comes back

perplexideez sendsSpecStream
GET {SEARXNG_URL}/search?format=json&q=...https://api.specstream.ai/searxng/<key>/search, with the key read from the path
format=jsonAlways answered in SearXNG's JSON shape. There is no format to turn on
language=en, on every web searchPassed on as the search language
Reads results[].title, url and content, and gives each content to the model as the text to answer fromSearXNG's JSON: results[] with title, url and content. publishedDate is null on most results

Why a self-hosted SearXNG gets in the way

The perplexideez README warns that all requests to SearXNG fail unless JSON output is enabled, and that perplexideez is very likely to trigger SearXNG's limiter, so it advises turning the limiter off. SearXNG's own search API docs say a format that is not enabled answers 403, and that many public instances turn these formats off. A limiter that is off then sends every query from your server's address to public engines.

SpecStream answers every request in SearXNG's JSON shape, and the search runs on SpecStream's servers. There is no format to enable, no limiter to tune and no engine list to keep unblocked.

perplexideez asks for images and videos by engine name (bing images, google images and youtube) and keeps only results that carry an image address or a video embed. SpecStream's SearXNG address answers an image search when the request carries categories=images, which perplexideez does not send, so these two panels stay hidden. The answer and its sources do not change.

What each message costs

Each search through the SearXNG address is one Search API call on the fast tier: $1 per 1,000 searches of up to 10 results, a fifth of the default search's $5. perplexideez sends no result count, so each search gets one page of 10 results, and a search that returns nothing costs nothing.

A message can send up to three searches: one for the answer, and one each for related images and related videos. perplexideez repeats the image and video searches on each new message of a chat while that chat holds none, so a message costs at most $0.003. A question that holds links is answered from those links and sends no web search for the answer.

Searches come out of your balance with no quote and no approval. New accounts start with $10 of credit, no card. Questions go to [email protected].

If answers fail

  • perplexideez reads the reply as JSON with no status check, so a key SpecStream does not accept shows up as a failed answer. SpecStream answers 401 for that key. Check that the whole key is the address's last part, with no slash after it, and that the key can search: keys made on the Search API screen can.
  • When search is busy, SpecStream answers 429 with a Retry-After header and charges nothing. perplexideez does not retry, so send the question again.
  • The address holds your key. Keep .env out of git and out of shared Compose files, and in Kubernetes set SEARXNG_URL from a Secret. To end a key's access, revoke it under API keys in Agents & API in your workspace and make a new one.

Read pages and get rows too

The same key reads pages with the Extract API at $0.80 per 1,000 pages, and a page with no text is not charged. For a dataset, add SpecStream's MCP server at https://api.specstream.ai/mcp and ask for the records in plain words. Deep Search returns every match as structured rows at 5¢, 15¢ or $1 a row, under a maximum you approve. See MCP.

More

SpecStream for Perplexideez covers what it does in Perplexideez on one page. Every other tool has its guide in Connect your tools. You see the most a request can cost before it starts, and the matches are paid from your balance. Billing has the details. For help, email [email protected].