Brave Web Search API

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.

  1. Get a Brave Search API Key:

  2. Configure API:

    • Go to API Plugin marketplace
    • Select Brave Web Search API
    • Input your API key
    • Create API endpoint

Play

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

  1. Required Parameter:

    • q: Search query (required, max 400 characters and 50 words)
  2. Result Filtering:

    • result_filter: Comma-separated list of result types to include:
      • web: Web search results
      • images: Image search results
      • videos: Video search results
      • news: News search results
      • discussions: Discussion forum results
      • infobox: Information boxes
      • faq: Frequently asked questions
      • summarizer: AI-generated summary
      • locations: Location-based results
  3. 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”)
  4. Pagination:

    • count: Number of results (default: 20, max: 20)
    • offset: Pagination offset (default: 0, max: 9)
  5. Filtering:

    • safesearch: Safety level (“strict”, “moderate”, “off”)
    • freshness: Time filter (“pd”: 24h, “pw”: 7d, “pm”: 31d, “py”: 365d)
  6. Special Features:

    • summary: Enable AI summary generation (boolean)
    • spellcheck: Enable spellchecking (boolean)
    • extra_snippets: Get additional excerpts (boolean)

Example Requests

  1. Basic Web Search:

/v1/{appId}/{token}/search?q=climate+change

  1. Image Search:

/v1/{appId}/{token}/search?q=mountain+landscapes&result_filter=images&count=15

  1. News Search with Time Filter:

/v1/{appId}/{token}/search?q=technology+news&result_filter=news&freshness=pd

  1. Search with AI Summary:

/v1/{appId}/{token}/search?q=benefits+of+renewable+energy&summary=true

  1. Video Search:

/v1/{appId}/{token}/search?q=cooking+tutorials&result_filter=videos

Understanding Parameters

  1. Freshness Values:

    • pd: Past 24 hours
    • pw: 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”)
  2. SafeSearch Levels:

    • strict: Aggressive filtering of adult content
    • moderate: Standard filtering (default)
    • off: No filtering
  3. 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);
    }
};