Exa Search
A RocketRide search node that submits a user question to the Exa web search API and returns the raw results as pipeline output.
What it does
Takes a question from the questions lane, sends it as a single query to the Exa REST endpoint (https://api.exa.ai/search), and writes the pretty-printed Exa JSON response to the answers and text lanes.
Uses the requests library directly against the Exa REST API; no Exa SDK is required. Each HTTP request has a 30-second timeout. The node expects exactly one question per invocation: an empty question or a multi-question payload raises an error immediately.
Result URLs are sanitized before leaving the node. Every url, image, and favicon field in the Exa response is validated to be an http/https URL whose host resolves to a public IP address. Results whose primary url resolves to a private, loopback, link-local, reserved, multicast, or unspecified address are dropped entirely; invalid image and favicon fields are removed from the result without dropping the whole result. This guards downstream nodes against SSRF via attacker-influenced search content. Sanitization is skipped when the ROCKETRIDE_MOCK environment variable is set, which is useful for local testing.
Configuration
Lanes
| Lane in | Lane out | Description |
|---|---|---|
questions | answers | Search results as answers (pretty-printed Exa JSON) |
questions | text | Search results as plain text |
questions | questions | Original question passed through unchanged (when a downstream listener is connected) |
Fields
| Field | Type | Description |
|---|---|---|
profile | string | Default "default". |
apikey | string | Default empty. Exa API key |
type | string | Default "auto". |
numResults | integer | Default 5. |
includeHighlights | boolean | Default true. |
highlightChars | integer | Default 600. |
The node ships a single default profile containing the search settings (type, numResults, includeHighlights, highlightChars). The apikey field sits outside the profile and is set once per connection config.
Authentication
The API key is resolved in the following order:
apikeyin the node configapikeyin the connection config- The
ROCKETRIDE_EXA_KEYenvironment variable
If none of these sources provides a non-empty value, the pipeline fails at startup with search_exa: apikey is required. The editor also surfaces a validation warning while you are configuring the node.
Error handling
Exa HTTP errors are mapped to descriptive failures:
- 401:
Exa authentication failed-- bad or missing API key - 429:
Exa rate limit exceeded - Other 4xx/5xx:
Exa request failed (<status>)with the upstream message body - Network timeout:
search_exa: Exa request timed out - Connection failure:
search_exa: Unable to reach Exa
Schema
| Field | Type | Description | Default |
|---|---|---|---|
search_exa.apikey | string | API Key Exa API key | "" |
search_exa.highlightChars | integer | Highlight Chars | 600 |
search_exa.includeHighlights | boolean | Include Highlights | true |
search_exa.numResults | integer | Results | 5 |
search_exa.profile | string | Profile | "default" |
search_exa.type | string | Search Type | "auto" |
Dependencies
requests