Exa Contents
https://api.sandbase.ai/v1/api/exa/contentsExtract clean page contents for a list of URLs: full text, highlights, AI summaries and metadata, from cache or with a live crawl.
- Price
- Free
- Method
- POST
- Response
- JSON
- Parameters
- 1 required · 5 optional
Try the model
Playground
{
"costDollars": {
"contents": {
"text": 0.001
},
"total": 0.001
},
"requestId": "ec080d1037c5ec88affbcae836c0df5d",
"results": [
{
"author": null,
"favicon": "https://adk.dev/assets/agent-development-kit.png",
"id": "https://adk.dev/",
"image": "https://adk.dev/assets/adk-social-card.png",
"text": "Agent Development Kit (ADK) - Agent Development Kit (ADK) Agent Development Kit (ADK)\n\n# Build production agents, not prototypes.\n\nADK is the open-source agent development framework that lets you build, debug, and deploy reliable AI agents at enterprise scale. Available in Python, TypeScript, Go, Java, and Kotlin.\n\nPython\n\nTypeScript\n\nGo\n\nJava\n\nKotlin\n\n```\nfrom google.adk import Agent\nfrom google.adk.tools import google_search\n\nagent = Agent(\n name=\"researcher\",\n model=\"gemini-flash-latest\",\n instruction=\"You help users research topics thoroughly.\",\n tools=[google_search],\n)\n```\n\n```\nimport { LlmAgent, GOOGLE_SEARCH } from '@google/adk';\n\nconst agent = new LlmAgent({\n name: 'researcher',\n model: 'gemini-flash-latest',\n instruction: 'You help users research topics thoroughly.',\n tools: [GOOGLE_SEARCH],\n});\n\n```\n\n```\nimport \"google.golang.org/adk/v2/agent/llmagent\"\n\nmodel, _ := gemini.NewModel(context.Background(), \"gemini-flash-latest\", nil)\na, _ := llmagent.New(llmagent.Config{\n Name: \"researcher\",\n Model: model,\n Instruction: \"You help users research topics thoroughly.\",\n Tools: []tool.Tool{geminitool.GoogleSearch{}},\n})\n```\n\n```\nimport com.google.adk.agents.LlmAgent;\nimport com.google.adk.tools.GoogleSearchTool;\n\nLlmAgent agent = LlmAgent.builder()\n .name(\"researcher\")\n .model(\"gemini-flash-latest\")\n .instruction(\"You help users research topics thoroughly.\")\n .tools(new GoogleSearchTool())\n .build();\n```\n\n```\nimport com.google.adk.kt.agents.LlmAgent\nimport com.google.adk.kt.tools.GoogleSearchTool\n\nval agent = LlmAgent(\n name = \"researcher\",\n model = Gemini(name = \"gemini-flash-latest\"),\n instruction = Instruction(\"You help users research topics thoroughly.\"),\n tools = listOf(GoogleSearchTool()),\n)\n```\n\n`pip install google-adk`📋\n\n`npm install @google/adk`📋\n\n`go get google.golang.org/adk/v2`📋\n\n`com.google.adk:google-adk`📋\n\n`com.google.adk:google-adk-kotlin-core`📋\n\nAgents CLI\n\n## Build agents with agents.\n\nGo from idea to coded ADK agent in minutes. Use your favorite AI-enabled developer environment to scaffold, build, test, evaluate, and deploy with Agents CLI.\n\nGraph Workflows\n\n## Reliable logic. Intelligent reasoning.\n\nWeave deterministic code with adaptive AI reasoning. Orchestrate complex tasks through structured, graph-based architectures, with explicit execution paths and predictable outcomes. New in ADK 2.0!\n\nFramework\n\n## Powerful simplicity. Built for scale.\n\nStart building ADK agents with prompts and tool calls, then grow to multi-agent orchestration, graph-based workflows, performance evaluation, and deployment to world class enterprise services for scalability, reliability, and throughput.\n\nEcosystem\n\n## Open ecosystem. Connect everything.\n\nADK's open integration partners connect your agents with existing apps, a wide range of AI models, and extend agent capabilities to access data, add resilience, and evaluate performance.\n\n## Ready to build agents?\n\nWe think one of the best ways to learn is by building, so we've created guides that help you get your development environment set up and run an ADK agent in minutes.\n\n## Developer Community\n\nBuild alongside a growing community of developers engineering the next generation of production-ready AI agents. Whether you want to troubleshoot a graph workflow, share a custom Agent Skill, or shape the future of the framework, we want you involved.\n\n### Community call\n\nJoin the ADK core engineering team for live demos, technical deep dives, roadmap updates, and Q&A. Learn more →\n\n### Developer resources\n\nSkip the learning curve with comprehensive training, videos, and deep-dives from community members like you. Learn more →\n\n## Frequently Asked Questions\n\nStill have questions about ADK? Here are some answers:\n\nCan I vibe code agents with ADK?\n\nYes! ADK is designed to be written by both humans and AI. Connect your favorite coding assistant to our ADK developer Skills and AI-aware developer resources, and generate agents in seconds. Find out more about AI-powered coding of agents in our Coding with AI guide.\n\nWhat AI models can I use with ADK?\n\nADK can work with almost any generative AI model. The framework provides easy access to Gemini as well as other leading models, and we provide adapters that let you connect with many other models and model providers, including locally running models. For enterprises, ADK can connect to models on hosted services, including Google Cloud which provides a wide range of models and lets you closely manage performance, reliability, security, access, safety, and costs.\n\nWhat makes ADK different?\n\nWith ADK, we are focused on building an open development framework that lets you build professional, production grade agents, without requiring a pile of code to get started. Our goal is to get you building agents quickly, and let you add functionality and complexity as you need it. ADK provides a basic structure for agents that is easy to build, and that structure is designed with the flexibility to let you extend, expand, and build complex, robust, useful agentic systems. We've put a lot of effort into providing you with development tools for interacting with agents you build, and providing ways to use AI-powered tools for building ADK agents. We are also quite proud of our approach to agent context management and how we manage context to keep it efficient, and also let you tune context management to your needs. We could go on, and if you are interested, you can find more details in our developer docs.\n\nHow does ADK handle context management?\n\nUnlike tools that simply paste strings together until the context window overflows, ADK manages your context. We treat context like source code—sessions, memory, tool outputs, and artifacts are assembled into a structured view where every token earns its place. ADK automatically filters irrelevant events, summarizes older conversational turns, lazy-loads artifacts, and tracks token usage. This approach keeps your agents fast, efficient, and reliable by default, while giving you the controls to fully customize how context is managed for complex tasks.\n\nHow does ADK deploy to production?\n\nADK is built for deploy anywhere flexibility. You can containerize and run ADK on your own infrastructure, or take advantage of our native, one-command deployment to Google Cloud. When deploying to Google Cloud via Agent Runtime (Agent Platform), Cloud Run, or GKE, your agents instantly inherit managed infrastructure, built-in authentication, Cloud Trace observability, and enterprise-grade security—all without requiring you to change a single line of your agent code. Develop locally, scale globally.\n\nWhen should I use an agent framework to work with generative AI?\n\nAI chat conversations can accomplish many tasks, but when you need to accomplish complex, multi-step processes, an agent framework lets you create a managed, repeatable task structure that can run hands-off with minimal human input. Agent frameworks like ADK can automatically initiate tasks, make multiple iterative AI model requests, manage context, handle tool calls, record data, run parallel jobs, handle failures, and resume tasks if they get stopped.",
"title": "Agent Development Kit (ADK) - Agent Development Kit (ADK)",
"url": "https://adk.dev/"
}
],
"searchTime": 8.82960500009358,
"statuses": [
{
"id": "https://adk.dev/",
"source": "cached",
"status": "success"
}
]
}Examples
Select an example to load its inputs and result into the playground.
Model card
Specifications
Pricing
- Base price
- Free
Request & response
- Method
- POST
- Request body
- application/json
- Response
- application/json
- Execution
- sync
Parameters
- ids
- array · required
- text
- boolean · optional
- highlights
- boolean · optional
- summary
- boolean · optional
- subpages
- integer · optional
- livecrawl
- string (always, fallback, never) · optional
Access
- Provider
- Exa
- API
- Platform API
- Base URL
- https://api.sandbase.ai
- Endpoint
- /v1/api/exa/contents
- Authentication
- Bearer API key
API README
Exa Contents API
Pass one or more URLs and get their contents ready for an LLM: page text, highlights or summaries, with live crawling when the cache is stale.
Use cases
- Fetch full text for RAG after a search.
- Summarize a list of web pages.
- Monitor page changes with live crawls.
Request
curl -X POST "https://api.sandbase.ai/v1/api/exa/contents" \
-H "Authorization: Bearer $SANDBASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"ids": ["https://developers.openai.com/codex"], "highlights": true}'
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
ids | array | Yes | The URLs (or Exa result ids) to fetch contents for. |
text | boolean | No | Return the full page text. |
summary | boolean | No | Return an AI-generated summary of the page. |
subpages | integer | No | Number of linked subpages to also fetch. |
livecrawl | string | No | Freshness policy: always live-crawl, fall back to live crawl on cache miss, or never live-crawl. |
highlights | boolean | No | Return highlighted relevant snippets. |
Example response
Real response for the request above, trimmed to the main fields. User names and long IDs are masked.
{
"results": [
{
"id": "https://developers.openai.com/codex",
"url": "https://developers.openai.com/codex",
"title": "ChatGPT | ChatGPT Learn",
"highlights": [
"ChatGPT | ChatGPT Learn ... responses createreasoning_effortrealtimeprompt cach…"
]
}
]
}
Notes
livecrawl: always, fallback (on cache miss) or never.
Start building
Send your first request
Platform API endpoint with unified authentication and usage tracking.
# The quoted heredoc keeps Unicode and shell metacharacters unchanged.
result=$(curl --fail-with-body --silent \
-X POST "https://api.sandbase.ai/v1/api/exa/contents" \
-H "Authorization: Bearer $SANDBASE_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'SANDBASE_JSON'
{
"ids": [
"https://static.sandbase.ai/examples/a0ad9eef-966a-46c6-8f69-4c42f972fe58/input/31c6cd46-ab5b-48a4-97da-a0a5d9b01220.bin"
],
"text": true
}
SANDBASE_JSON
)
printf '%s\n' "$result"Explore more
Related APIs
| API | Price | Response | Released |
|---|---|---|---|
Exa ContentsThis API Exa | Free | JSON | Jan 1, 2024 |
Exa | Free | JSON | Jan 1, 2024 |
Exa | Free | JSON | Jan 1, 2024 |
Questions
FAQ
How do I use the Exa Contents API?
Send a POST request to https://api.sandbase.ai/v1/api/exa/contents with your SandBase API key in the Authorization header (Bearer) and the parameters as a JSON body. You can also try it in the Playground on this page without writing code.
How much does the Exa Contents API cost?
Exa Contents is free to call on SandBase. You only need a SandBase account and API key.
What parameters does the Exa Contents API accept?
Required: ids (array). Optional: text (boolean), highlights (boolean), summary (boolean), subpages (integer) and livecrawl (one of always, fallback, never). The Parameters table and the Playground on this page list every field.
What does the Exa Contents API return?
A JSON response returned in the same HTTP request (synchronous). The README on this page includes a sample response.
Do I need a Exa developer account or API key?
No. Exa Contents runs through SandBase, so one SandBase API key covers this endpoint and every other API and model in the catalog. You do not need to apply for Exa API access separately.
