brave-search
Web search using the Brave Search API.
Prerequisites
BRAVE_API_KEYenvironment variable with a valid Brave Search API key
Check before use:
[ -z "$BRAVE_API_KEY" ] && echo "Error: BRAVE_API_KEY not set" || echo "OK: BRAVE_API_KEY is set"
Note: Never hardcode BRAVE_API_KEY. Always use the environment variable.
API Endpoint
GET https://api.search.brave.com/res/v1/web/search
Web Search
Perform a web search query.
Request:
curl -s "https://api.search.brave.com/res/v1/web/search?q=your+query" \
-H "X-Subscription-Token: $BRAVE_API_KEY" \
-H "Accept: application/json"
Response:
{
"query": {
"original": "your query",
"more_results_available": true
},
"web": {
"results": [
{
"title": "Result Title",
"url": "https://example.com/page",
"description": "Snippet describing the page content...",
"extra_snippets": ["Additional excerpt 1", "Additional excerpt 2"],
"page_age": "2025-01-15",
"profile": {
"name": "Site Name",
"img": "https://example.com/favicon.ico"
}
}
]
}
}
Example Usage
# Basic search
curl -s "https://api.search.brave.com/res/v1/web/search?q=rust+web+frameworks" \
-H "X-Subscription-Token: $BRAVE_API_KEY" | jq .
# Search with freshness filter (pd=day, pw=week, pm=month, py=year)
curl -s "https://api.search.brave.com/res/v1/web/search?q=ai+news&freshness=pw" \
-H "X-Subscription-Token: $BRAVE_API_KEY" | jq .
# Search with country and language targeting
curl -s "https://api.search.brave.com/res/v1/web/search?q=nachhaltige+energie&country=DE&search_lang=de" \
-H "X-Subscription-Token: $BRAVE_API_KEY" | jq .
# Extract just URLs and titles
curl -s "https://api.search.brave.com/res/v1/web/search?q=python+tutorials" \
-H "X-Subscription-Token: $BRAVE_API_KEY" | \
jq -r '.web.results[] | "\(.title): \(.url)"'
Query Parameters
| Parameter | Type | Description |
|---|---|---|
q |
string | Required. Search query (URL-encoded). |
count |
integer | Results per page (max 20, default 20). |
offset |
integer | Pagination offset (0-9, default 0). |
freshness |
string | Time filter: pd (24h), pw (week), pm (month), py (year), or date range YYYY-MM-DDtoYYYY-MM-DD. |
country |
string | 2-letter country code (e.g., US, DE, JP). |
search_lang |
string | Content language (ISO 639-1, e.g., en, de). |
ui_lang |
string | UI language (e.g., en-US). |
safesearch |
string | Filter level: off, moderate (default), strict. |
extra_snippets |
boolean | Include additional excerpts per result. |
enable_rich_callback |
integer | Set to 1 for rich results (weather, stocks, etc.). |
Search Operators
Include operators directly in the q parameter:
| Operator | Example | Description |
|---|---|---|
"" |
"climate change" |
Exact phrase match |
- |
javascript -jquery |
Exclude term |
site: |
site:github.com rust |
Search specific site |
filetype: |
filetype:pdf machine learning |
Filter by file type |
Response Fields
| Field | Type | Description |
|---|---|---|
query.original |
string | The search query |
query.more_results_available |
boolean | Whether more results exist |
web.results[] |
array | Search results |
web.results[].title |
string | Page title |
web.results[].url |
string | Page URL |
web.results[].description |
string | Main snippet |
web.results[].extra_snippets[] |
array | Additional excerpts (if requested) |
web.results[].page_age |
string | Page publication date |
web.results[].profile.name |
string | Site name |
Pagination
Check query.more_results_available before requesting the next page:
# Page 1 (offset=0, default)
curl -s "https://api.search.brave.com/res/v1/web/search?q=open+source&count=20" \
-H "X-Subscription-Token: $BRAVE_API_KEY" | jq '.query.more_results_available'
# Page 2 (offset=1)
curl -s "https://api.search.brave.com/res/v1/web/search?q=open+source&count=20&offset=1" \
-H "X-Subscription-Token: $BRAVE_API_KEY" | jq .
Error Handling
| Status | Meaning |
|---|---|
200 |
Success |
401 |
Invalid or missing API key |
429 |
Rate limit exceeded |
500 |
Server error |
Additional Search Endpoints
News Search
curl -s "https://api.search.brave.com/res/v1/news/search?q=breaking+news" \
-H "X-Subscription-Token: $BRAVE_API_KEY"
Image Search
curl -s "https://api.search.brave.com/res/v1/images/search?q=nature+landscape" \
-H "X-Subscription-Token: $BRAVE_API_KEY"
Video Search
curl -s "https://api.search.brave.com/res/v1/videos/search?q=tutorials" \
-H "X-Subscription-Token: $BRAVE_API_KEY"
More from sirn/dotfiles
code-explain
Explain code, triage changes, or map project structure. Use when user asks to explain, understand, triage, or explore project structure.
19code-plan
Generate comprehensive implementation plan based on analysis. Use when user asks to plan this, create a plan, how should I implement, or wants implementation guidance.
19code-commit
Commit current changes using jj. Analyzes changes, suggests commit messages following repository conventions, proposes splits if needed, and creates commits. Use ONLY when user explicitly asks to commit changes or create commits.
18gemini-reference
Reference for calling the Gemini CLI agent from other agents. ALWAYS read BEFORE invoking Gemini to ensure correct JSON protocol, session management, and subtask delegation patterns.
18code-quality
Run comprehensive quality checks by orchestrating review, verification, testing, and linting. Use when user asks to check code quality, run full checks, or verify code health.
18context7
Retrieve up-to-date documentation context for libraries using the Context7 API. Use when needing current library documentation (React, Python stdlib, Rust, etc.) BEFORE implementing or writing code.
17