Skip to content

Web Search Router

Beta

The Web Search Router puts one host and one key in front of multiple web search providers. Point a request at Elo instead of the provider, and Elo adds the provider key and the limits. If you already call one of these providers, moving over means changing the URL and the key - nothing else about your request changes.

  1. No influence on results. Elo never reorders, filters, or reranks what the provider returns.
  2. Low added latency. Elo adds 150ms on average across all providers, measured from multiple geographies.
  3. Unmodified payload. The request body you send and the response body you get back are the same ones the provider sends and receives, byte for byte.
https://api.withgrowl.com/v1

POST /search/{provider}

Replace the provider’s URL with the Elo path for it, send your Elo key instead of the provider’s, and leave the body as it is. The provider’s status code and body come back unchanged.

Terminal window
curl -X POST "https://api.withgrowl.com/v1/search/serper" \
-H "Authorization: Bearer elo_pub_..." \
-H "Content-Type: application/json" \
-d '{ "q": "travel to vietnam", "num": 5, "gl": "us" }'

Create your publisher API key on the Integration page of the Elo dashboard. Rotating it there revokes the previous key immediately. Send it in Authorization: Bearer or in X-API-Key, whichever your code already sets. Elo never sends it on; the provider gets Elo’s own key.

Each provider has a request example, common fields, the response shape, and what to know when calling it through Elo. Its linked provider reference is the complete, current request and response schema.

ProviderElo pathForwarded to
TavilyPOST /search/tavilyPOST https://api.tavily.com/search
SerperPOST /search/serperPOST https://google.serper.dev/search
Serper ShoppingPOST /search/serper/shoppingPOST https://google.serper.dev/shopping
ExaPOST /search/exaPOST https://api.exa.ai/search
ParallelPOST /search/parallelPOST https://api.parallel.ai/v1/search
TinyFishGET /search/tinyfishGET https://api.search.tinyfish.ai
SearchAPI (Google)GET /search/searchapiGET https://www.searchapi.io/api/v1/search

Don’t see your provider? Email us at support@elo.ad.

The response carries the provider’s status, body and Content-Type, plus Retry-After when the provider sent one. Elo adds two headers: Elo-Provider, the provider that answered, and X-Request-ID, which identifies the call in Elo’s logs. Quote it when reporting a problem.

Any status not listed here is the provider’s own answer, returned unchanged. Elo’s 502, 503 and 504 have an empty body; the others carry a short JSON body saying what was wrong.

StatusMeaning
401The publisher API key is missing or not valid.
404No provider by that name. The body lists the providers.
405The provider takes the other method. Allow names it.
413The body is over 64 KiB.
502The provider could not be reached, or its answer was over 4 MiB.
503The provider is not enabled on Elo yet, refused Elo’s key, or the gateway is busy. Retry later.
504The provider did not answer within 30 seconds.