Skip to main content

Python
from exa_py import Exa

# instantiate the Exa client
exa = Exa("YOUR API KEY")

# basic search (returns contents by default)
results = exa.search("This is an Exa query:")

# search with highlights (recommended for agentic workflows)
results = exa.search("This is an Exa query:", highlights={"max_characters": 4000})

# search with date filters
results = exa.search("This is an Exa query:", start_published_date="2019-01-01", end_published_date="2019-01-31")

# search with domain filters
results = exa.search("This is an Exa query:", include_domains=["www.cnn.com", "www.nytimes.com"])

# search with custom contents options
results = exa.search("This is an Exa query:",
                    text={"include_html_tags": True, "max_characters": 1000},
                    highlights={"max_characters": 4000, "query": "This is the highlight query:"})


# find similar documents
results = exa.find_similar("https://example.com")

# find similar excluding source domain
results = exa.find_similar("https://example.com", exclude_source_domain=True)

# find similar with contents
results = exa.find_similar("https://example.com", text=True, highlights={"max_characters": 4000})


# get text contents
results = exa.get_contents(["ids"])

# get highlights
results = exa.get_contents(["ids"], highlights={"max_characters": 4000})

# get contents with contents options
results = exa.get_contents(["ids"],
                         text={"include_html_tags": True, "max_characters": 1000},
                         highlights={"max_characters": 4000, "query": "This is the highlight query:"})

# basic answer
response = exa.answer("This is a query to answer a question")

# answer with full text
response = exa.answer("This is a query to answer a question", text=True)

# answer with streaming
response = exa.stream_answer("This is a query to answer:")

# Print each chunk as it arrives when using the stream_answer method
for chunk in response:
print(chunk, end='', flush=True)