Skip to content

Exa

POST /search/exa, forwarded to POST https://api.exa.ai/search.

Terminal window
curl -X POST "https://api.withgrowl.com/v1/search/exa" \
-H "Authorization: Bearer elo_pub_..." \
-H "Content-Type: application/json" \
-d '{
"query": "travel to vietnam",
"numResults": 5,
"includeDomains": ["vietnam.travel"],
"startPublishedDate": "2026-02-01T00:00:00Z",
"contents": { "highlights": true }
}'

Common fields are below. The body goes to Exa as sent, so everything in Exa’s reference works; that reference is the complete, current schema.

FieldDescription
queryThe search query.
numResultsNumber of results.
typeSearch mode: auto, neural, keyword or fast. See the reference for the current list.
includeDomainsOnly these hostnames.
excludeDomainsNever these hostnames.
startPublishedDateISO 8601. Only pages published after it.
userLocationCountry code, upper case, for example US.
contentsWhat to return per result: { "highlights": true } for short excerpts, { "text": true } for the page text.

Results are under results. Each has title, url and publishedDate, plus highlights (a list of excerpts) or text, depending on what contents asked for.

{
"results": [
{
"title": "Visit Vietnam: The Official Tourism Website of Vietnam",
"url": "https://vietnam.travel/",
"publishedDate": "2026-02-18T00:00:00.000Z",
"highlights": [
"Discover the highlights of Vietnam through the country's official tourism website."
]
}
]
}
  • Exa takes its key in x-api-key. Keep that header and put your Elo key in it, or use Authorization: Bearer; Elo sets Exa’s key itself.
  • Page text is the expensive option: a single text field can run to thousands of characters, and Exa prices contents separately from search. Ask for highlights unless you need the full page.