> ## Documentation Index
> Fetch the complete documentation index at: https://novita.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Exa Answer

This document describes the Exa passthrough endpoints exposed by the platform gateway. It is based on Exa's Search, Get Contents, and Answer APIs, with platform route prefixes applied.

Base URL example: `https://api.novita.ai`

Generate an answer to a question using Exa search results, with optional citations and source text.

## Request Headers

All endpoints require platform API authentication.

<ParamField header="Content-Type" type="string" required={true}>
  Use `application/json`.
</ParamField>

<ParamField header="Authorization" type="string" required={true}>
  Platform API key, formatted as `Bearer <api_key>`.
</ParamField>

## Request Body

<ParamField body="query" type="string" required={true}>
  Natural-language question or instruction. Minimum length is 1.
</ParamField>

<ParamField body="text" type="boolean" required={false}>
  Whether to return source page text. Default is `false`.
</ParamField>

<ParamField body="outputSchema" type="object" required={false}>
  JSON Schema Draft 7 object for structured answer output. See [Answer Output Schema](#answer-output-schema).
</ParamField>

### Answer Output Schema

`outputSchema` accepts a JSON Schema object for structured answer output.

<ParamField body="type" type="string" required={false}>
  JSON Schema root type, commonly `object`.
</ParamField>

<ParamField body="properties" type="object" required={false}>
  Field definitions for the structured answer.
</ParamField>

<ParamField body="required" type="string[]" required={false}>
  Required property names.
</ParamField>

<ParamField body="items" type="object" required={false}>
  Array item schema when a property is an array.
</ParamField>

<ParamField body="additionalProperties" type="boolean | object" required={false}>
  Whether undeclared fields are allowed, or a schema for additional fields.
</ParamField>

## Request Example

```bash theme={"system"}
curl -X POST 'https://api.novita.ai/v3/exa/answer' \
  -H 'Authorization: Bearer <api_key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "What is the latest valuation of SpaceX?",
    "text": true
  }'
```

### Structured Answer Example

```bash theme={"system"}
curl -X POST 'https://api.novita.ai/v3/exa/answer' \
  -H 'Authorization: Bearer <api_key>' \
  -H 'Content-Type: application/json' \
  -d '{
    "query": "Compare three recent AI infrastructure funding rounds.",
    "outputSchema": {
      "type": "object",
      "properties": {
        "companies": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "name": {"type": "string"},
              "round": {"type": "string"},
              "amount": {"type": "string"}
            },
            "required": ["name", "round", "amount"]
          }
        }
      },
      "required": ["companies"]
    }
  }'
```

## Response

<ResponseField name="requestId" type="string" required={false}>
  Unique request identifier.
</ResponseField>

<ResponseField name="answer" type="string | object" required={false}>
  Generated answer. It can be structured according to [Answer Output Schema](#answer-output-schema).
</ResponseField>

<ResponseField name="citations" type="object[]" required={false}>
  Search results used to generate the answer.
</ResponseField>

### Citation Object

<ResponseField name="title" type="string" required={false}>
  Source title.
</ResponseField>

<ResponseField name="url" type="string" required={false}>
  Source URL.
</ResponseField>

<ResponseField name="publishedDate" type="string" required={false}>
  Published date when available.
</ResponseField>

<ResponseField name="author" type="string" required={false}>
  Author when available.
</ResponseField>

<ResponseField name="id" type="string" required={false}>
  Exa document ID.
</ResponseField>

<ResponseField name="image" type="string" required={false}>
  Associated image URL.
</ResponseField>

<ResponseField name="favicon" type="string" required={false}>
  Site favicon URL.
</ResponseField>

<ResponseField name="text" type="string" required={false}>
  Source text when requested.
</ResponseField>

## Errors

The platform may return standard HTTP errors before forwarding the request, and Exa may return upstream errors after forwarding.

<ResponseField name="400" type="status" required={false}>
  Invalid request body or unsupported parameter value.
</ResponseField>

<ResponseField name="401" type="status" required={false}>
  Missing or invalid API key.
</ResponseField>

<ResponseField name="403" type="status" required={false}>
  Access denied by platform or upstream provider.
</ResponseField>

<ResponseField name="404" type="status" required={false}>
  Route or requested resource not found.
</ResponseField>

<ResponseField name="429" type="status" required={false}>
  Rate limit exceeded.
</ResponseField>

<ResponseField name="500" type="status" required={false}>
  Internal server error.
</ResponseField>

<ResponseField name="502" type="status" required={false}>
  Upstream provider error.
</ResponseField>

<ResponseField name="503" type="status" required={false}>
  Service unavailable.
</ResponseField>

## Notes

* All request bodies are JSON.
* Extra Exa parameters not listed here may be passed through.
* Response shapes can vary depending on request options.
* This document intentionally omits billing-related fields.

## References

For more details, see the [Exa Answer API reference](https://exa.ai/docs/reference/answer).
