Brave web API

Web search endpoints

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/brave-web-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

brave-web-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Brave Ads campaigns web API
  description: 'API for managing and reporting on Brave Ads campaigns. Enables advertisers to retrieve campaign details and performance data for privacy-preserving native browser ads and search ads. Supports customizable reporting dimensions and metrics including impressions, clicks, spend, and conversion tracking. Authentication uses API keys generated from the Brave Ads dashboard.

    '
  version: 3.0.0
  contact:
    name: Brave Ads
    url: https://brave.com/brave-ads/
    email: adsales@brave.com
  termsOfService: https://brave.com/terms-of-use/
servers:
- url: https://ads-serve.brave.com
  description: Brave Ads API
security:
- ApiKeyAuth: []
tags:
- name: web
  description: Web search endpoints
paths:
  /web/search:
    get:
      operationId: webSearch
      summary: Web Search
      description: 'Search across billions of indexed web pages with fast, reliable results. Supports search operators, geographic targeting, language filtering, date freshness, safe search controls, and rich data enrichments across 20+ verticals.

        '
      tags:
      - web
      parameters:
      - name: q
        in: query
        required: true
        description: 'Search query string. Supports search operators including exact phrase matching (quotes), term exclusion (minus), site-specific search (site:), and file type filtering (filetype:).

          '
        schema:
          type: string
          example: brave search api
      - name: country
        in: query
        required: false
        description: 2-character country code for geographic targeting (e.g. US, GB, DE).
        schema:
          type: string
          minLength: 2
          maxLength: 2
          example: US
      - name: search_lang
        in: query
        required: false
        description: ISO 639-1 language code for content language preference (e.g. en, es, fr).
        schema:
          type: string
          example: en
      - name: ui_lang
        in: query
        required: false
        description: Language code for response metadata and UI strings.
        schema:
          type: string
          example: en-US
      - name: count
        in: query
        required: false
        description: Number of results per page. Maximum is 20.
        schema:
          type: integer
          minimum: 1
          maximum: 20
          default: 20
      - name: offset
        in: query
        required: false
        description: Pagination offset (0-based). Maximum is 9.
        schema:
          type: integer
          minimum: 0
          maximum: 9
          default: 0
      - name: safesearch
        in: query
        required: false
        description: 'Safe search content filtering level. Options: off, moderate (default), or strict.

          '
        schema:
          type: string
          enum:
          - false
          - moderate
          - strict
          default: moderate
      - name: freshness
        in: query
        required: false
        description: 'Date-based freshness filter. Use pd (past 24 hours), pw (past week), pm (past month), py (past year), or a custom date range in the format YYYY-MM-DDtoYYYY-MM-DD.

          '
        schema:
          type: string
          example: pw
      - name: extra_snippets
        in: query
        required: false
        description: When true, returns up to 5 additional text excerpts per result.
        schema:
          type: boolean
          default: false
      - name: enable_rich_callback
        in: query
        required: false
        description: 'Enable rich data enrichments. Set to 1 to enable rich result callbacks for verticals like weather, stocks, sports, and more.

          '
        schema:
          type: integer
          enum:
          - 0
          - 1
          default: 0
      responses:
        '200':
          description: Successful web search response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebSearchResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /web/rich:
    get:
      operationId: webRich
      summary: Rich Result Data
      description: 'Retrieve rich result data for a specific vertical using a callback key obtained from a web search response. Supports weather, stocks, sports scores, currency, cryptocurrency, and more.

        '
      tags:
      - web
      parameters:
      - name: callback_key
        in: query
        required: true
        description: 'Callback key from the rich field of a web search response.

          '
        schema:
          type: string
      responses:
        '200':
          description: Successful rich result response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RichResultResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    QueryInfo:
      type: object
      description: Information about the search query.
      properties:
        original:
          type: string
          description: The original search query as submitted.
        more_results_available:
          type: boolean
          description: Indicates whether additional result pages are available.
    WebSearchResponse:
      type: object
      description: Response from the web search endpoint.
      properties:
        type:
          type: string
          example: search
        query:
          $ref: '#/components/schemas/QueryInfo'
        web:
          type: object
          properties:
            results:
              type: array
              items:
                $ref: '#/components/schemas/WebResult'
        locations:
          type: object
          properties:
            results:
              type: array
              items:
                $ref: '#/components/schemas/LocationResult'
        rich:
          $ref: '#/components/schemas/RichHint'
    LocationResult:
      type: object
      description: A local place of interest from a web search result.
      properties:
        id:
          type: string
          description: Location identifier for use with local POI and description endpoints.
        title:
          type: string
          description: Name of the location.
    WebResult:
      type: object
      description: A single web search result.
      properties:
        title:
          type: string
          description: Title of the web page.
        url:
          type: string
          format: uri
          description: URL of the web page.
        description:
          type: string
          description: Text snippet describing the web page content.
        extra_snippets:
          type: array
          description: Up to 5 additional text excerpts (when extra_snippets is enabled).
          items:
            type: string
    ErrorResponse:
      type: object
      description: API error response.
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Error code.
            message:
              type: string
              description: Human-readable error message.
    RichResultResponse:
      type: object
      description: 'Rich result data for a specific vertical. The structure varies by vertical type.

        '
      properties:
        type:
          type: string
          description: Rich result type identifier.
          example: rich
        vertical:
          type: string
          description: 'Vertical category such as weather, stock, currency, sports, calculator, definitions, or package_tracker.

            '
        data:
          type: object
          description: 'Vertical-specific data. Schema varies by vertical type.

            '
          additionalProperties: true
    RichHint:
      type: object
      description: Rich result hint object returned with web search responses.
      properties:
        type:
          type: string
          description: Type identifier for the rich result.
        hint:
          type: object
          properties:
            vertical:
              type: string
              description: 'Vertical category such as weather, stock, currency, sports, calculator, definitions, or package_tracker.

                '
              example: weather
            callback_key:
              type: string
              description: Key to use with the /web/rich endpoint to fetch full rich data.
  responses:
    Unauthorized:
      description: Unauthorized — missing or invalid API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    TooManyRequests:
      description: Too Many Requests — rate limit exceeded.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: Bad request — missing or invalid parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: Forbidden — API key does not have access to this endpoint.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: 'API key generated from the Brave Ads dashboard at https://ads.brave.com.

        '
externalDocs:
  description: Brave Ads API Documentation
  url: https://ads-help.brave.com/campaign-performance/API/