Brave Web Search API
Access comprehensive web search capabilities including web results, images, videos, news, AI summaries, and more through a single unified API.
Overview
API Plugin’s Brave Web Search API provides comprehensive search capabilities powered by Brave’s independent search index. Perfect for applications that need web search functionality, AI-powered summaries, image search, news search, and more, all through a single unified endpoint.
Key benefits include:
- Comprehensive search results (web, images, videos, news)
- AI-powered summarization
- Customizable result filtering
- Global coverage with localization options
- Safe search capabilities
- Privacy-respecting design
- Time-based filtering
- Spellcheck functionality
- Measurement unit preferences
How to Setup
We assume you have signed up on API Plugin and are logged into the dashboard.
-
Get a Brave Search API Key:
- Go to the Brave Search API Developer Hub
- Create an account and subscribe to the API
- Copy your API key
-
Configure API:
- Go to API Plugin marketplace
- Select Brave Web Search API
- Input your API key
- Create API endpoint
Available Endpoint
The Brave Web Search API offers a single powerful endpoint that can be customized with query parameters:
GET /v1/{appId}/{token}/search
Key Parameters
-
Required Parameter:
q
: Search query (required, max 400 characters and 50 words)
-
Result Filtering:
result_filter
: Comma-separated list of result types to include:web
: Web search resultsimages
: Image search resultsvideos
: Video search resultsnews
: News search resultsdiscussions
: Discussion forum resultsinfobox
: Information boxesfaq
: Frequently asked questionssummarizer
: AI-generated summarylocations
: Location-based results
-
Localization:
country
: Country code (default: “US”)search_lang
: Search language (default: “en”)ui_lang
: UI language (default: “en-US”)units
: Measurement units (“metric” or “imperial”)
-
Pagination:
count
: Number of results (default: 20, max: 20)offset
: Pagination offset (default: 0, max: 9)
-
Filtering:
safesearch
: Safety level (“strict”, “moderate”, “off”)freshness
: Time filter (“pd”: 24h, “pw”: 7d, “pm”: 31d, “py”: 365d)
-
Special Features:
summary
: Enable AI summary generation (boolean)spellcheck
: Enable spellchecking (boolean)extra_snippets
: Get additional excerpts (boolean)
Example Requests
- Basic Web Search:
/v1/{appId}/{token}/search?q=climate+change
- Image Search:
/v1/{appId}/{token}/search?q=mountain+landscapes&result_filter=images&count=15
- News Search with Time Filter:
/v1/{appId}/{token}/search?q=technology+news&result_filter=news&freshness=pd
- Search with AI Summary:
/v1/{appId}/{token}/search?q=benefits+of+renewable+energy&summary=true
- Video Search:
/v1/{appId}/{token}/search?q=cooking+tutorials&result_filter=videos
Understanding Parameters
-
Freshness Values:
pd
: Past 24 hourspw
: Past week (7 days)pm
: Past month (31 days)py
: Past year (365 days)- Custom range:
YYYY-MM-DDtoYYYY-MM-DD
(e.g., “2022-04-01to2022-07-30”)
-
SafeSearch Levels:
strict
: Aggressive filtering of adult contentmoderate
: Standard filtering (default)off
: No filtering
-
Country Codes:
- Use ISO 3166-1 alpha-2 codes (e.g., “US”, “GB”, “DE”, “JP”)
Example Code
// Basic web search
const webSearch = async (query) => {
try {
const response = await fetch(`/v1/{appId}/{token}/search?q=${encodeURIComponent(query)}`);
const data = await response.json();
console.log(`Search results for "${query}":`);
if (data.web && data.web.results) {
data.web.results.forEach((result, index) => {
console.log(`${index + 1}. ${result.title}`);
console.log(` ${result.url}`);
console.log(` ${result.description}`);
});
}
return data;
} catch (error) {
console.error('Error performing search:', error);
}
};
// Image search
const imageSearch = async (query) => {
try {
const response = await fetch(`/v1/{appId}/{token}/search?q=${encodeURIComponent(query)}&result_filter=images&count=15`);
const data = await response.json();
console.log(`Image results for "${query}":`);
if (data.images && data.images.results) {
return data.images.results.map((result) => ({
title: result.title,
url: result.image_url,
source: result.source,
width: result.width,
height: result.height,
}));
}
return [];
} catch (error) {
console.error('Error searching images:', error);
}
};
// Get AI summary
const getSummary = async (query) => {
try {
const response = await fetch(`/v1/{appId}/{token}/search?q=${encodeURIComponent(query)}&summary=true`);
const data = await response.json();
if (data.summarizer && data.summarizer.generated_summary) {
console.log('AI-Generated Summary:');
console.log(data.summarizer.generated_summary);
if (data.summarizer.referenced_urls) {
console.log('\nSources:');
data.summarizer.referenced_urls.forEach((url) => console.log(`- ${url.domain}`));
}
return data.summarizer;
} else {
console.log('No summary available for this query.');
return null;
}
} catch (error) {
console.error('Error getting summary:', error);
}
};