Query library documentation via Context7 API
Context7 provides up-to-date library documentation through a simple API. Use it to fetch relevant code examples, API references, and documentation for any library.
Context7 API requires an API key via the x-api-key header (not Bearer token).
Required Environment Variable:
CONTEXT7_API_KEY - Your Context7 API keyNever print or log the API key directly.
Search for libraries by name or technology. Use this first to find the correct library ID.
Endpoint: GET https://context7.com/api/v2/libs/search
query (required) - Search term (e.g., "react", "fastapi", "langchain")Example:
curl -s "https://context7.com/api/v2/libs/search?query=react" \
-H "x-api-key: $CONTEXT7_API_KEY"
Response Fields:
id - Library ID (use this for context queries)title - Library namedescription - Brief descriptiontotalSnippets - Number of documentation snippetstrustScore - Quality score (0-10)benchmarkScore - Performance scoreverified - Official verification statusscore - Relevance score for your queryRetrieve relevant documentation snippets for a specific query.
Endpoint: GET https://context7.com/api/v2/context
Parameters:
libraryId (required) - Library ID from search results (e.g., /websites/react_dev)query (required) - Your question or topic (e.g., "useEffect hook", "authentication")type (optional) - Response format: json (default) or txttokens (optional) - Maximum tokens to return (default: varies)Example (JSON):
curl -s "https://context7.com/api/v2/context?libraryId=/websites/react_dev&query=useEffect" \
-H "x-api-key: $CONTEXT7_API_KEY"
Example (Text):
curl -s "https://context7.com/api/v2/context?libraryId=/websites/react_dev&query=useEffect&type=txt&tokens=500" \
-H "x-api-key: $CONTEXT7_API_KEY"
JSON Response Format:
{
"results": [
{
"title": "useEffect Hook Reference",
"content": "The useEffect Hook allows...",
"source": "https://react.dev/reference/react/useEffect",
"relevance": 0.95
}
]
}
Text Response Format: Plain markdown with relevant documentation sections, code examples, and references.
1. Search for library
↓
curl search endpoint with query
↓
2. Extract library ID from results
↓
Parse JSON response, get "id" field
↓
3. Get documentation context
↓
curl context endpoint with libraryId and query
↓
4. Parse and use documentation
↓
Extract relevant snippets, examples, API docs
#!/bin/bash
# Step 1: Search for library
echo "Searching for React..."
SEARCH_RESULT=$(curl -s "https://context7.com/api/v2/libs/search?query=react" \
-H "x-api-key: $CONTEXT7_API_KEY")
# Step 2: Extract library ID (first result) using jq
LIBRARY_ID=$(echo "$SEARCH_RESULT" | jq -r '.results[0].id // empty')
if [ -z "$LIBRARY_ID" ]; then
echo "No library found"
exit 1
fi
echo "Found library: $LIBRARY_ID"
# Step 3: Get documentation
echo "Fetching useEffect documentation..."
curl -s "https://context7.com/api/v2/context?libraryId=$LIBRARY_ID&query=useEffect&type=txt&tokens=500" \
-H "x-api-key: $CONTEXT7_API_KEY"
# ✅ Good - specific question
curl -s "https://context7.com/api/v2/context?libraryId=/websites/react_dev&query=useEffect cleanup function" \
-H "x-api-key: $CONTEXT7_API_KEY"
# ❌ Less optimal - vague query
curl -s "https://context7.com/api/v2/context?libraryId=/websites/react_dev&query=hooks" \
-H "x-api-key: $CONTEXT7_API_KEY"
When search returns multiple results, consider:
# Parse and select best result using jq
BEST_LIBRARY=$(curl -s "https://context7.com/api/v2/libs/search?query=fastapi" \
-H "x-api-key: $CONTEXT7_API_KEY" | \
jq -r '.results | sort_by(-.trustScore, -.verified) | .[0].id')
The type=txt format is better for:
The type=json format is better for:
Use tokens parameter to limit response length:
# Quick reference - ~500 tokens
curl -s "https://context7.com/api/v2/context?libraryId=/websites/react_dev&query=useState&tokens=500" \
-H "x-api-key: $CONTEXT7_API_KEY"
# Detailed docs - ~2000 tokens
curl -s "https://context7.com/api/v2/context?libraryId=/websites/react_dev&query=useState&tokens=2000" \
-H "x-api-key: $CONTEXT7_API_KEY"
Documentation doesn't change frequently. Cache results to avoid rate limits:
CACHE_DIR="/tmp/context7_cache"
mkdir -p "$CACHE_DIR"
# Create cache key from query
CACHE_KEY=$(echo "$LIBRARY_ID-$QUERY" | md5)
CACHE_FILE="$CACHE_DIR/$CACHE_KEY.txt"
# Check cache first
if [ -f "$CACHE_FILE" ] && [ $(find "$CACHE_FILE" -mmin -1440 2>/dev/null) ]; then
cat "$CACHE_FILE"
else
# Fetch and cache
curl -s "https://context7.com/api/v2/context?libraryId=$LIBRARY_ID&query=$QUERY&type=txt" \
-H "x-api-key: $CONTEXT7_API_KEY" | tee "$CACHE_FILE"
fi
Without API key: Severely limited With API key (free tier): 1000 requests per period
Check response headers:
ratelimit-limit - Total requests allowedratelimit-remaining - Requests remainingratelimit-reset - Unix timestamp of resetHandle rate limits:
response=$(curl -s -w "\n%{http_code}" "https://context7.com/api/v2/libs/search?query=react" \
-H "x-api-key: $CONTEXT7_API_KEY")
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | head -n-1)
if [ "$http_code" = "429" ]; then
echo "Rate limit exceeded. Try again later."
exit 1
fi
echo "$body"
| Code | Error | Meaning | Action |
|---|---|---|---|
| 200 | Success | Request completed | Process response |
| 400 | Bad Request | Invalid parameters | Check query params |
| 401 | Unauthorized | Invalid API key | Verify CONTEXT7_API_KEY |
| 404 | Not Found | Library doesn't exist | Check library ID |
| 429 | Rate Limited | Too many requests | Wait and retry |
| 503 | Service Unavailable | Search failed | Retry later |
{
"error": "no_libraries_found",
"message": "No libraries found for \"xyz\". Try a different search term."
}
fetch_context() {
local library_id="$1"
local query="$2"
local max_retries=3
local retry_count=0
while [ $retry_count -lt $max_retries ]; do
response=$(curl -s -w "\n%{http_code}" \
"https://context7.com/api/v2/context?libraryId=$library_id&query=$query&type=txt" \
-H "x-api-key: $CONTEXT7_API_KEY")
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | head -n-1)
case $http_code in
200)
echo "$body"
return 0
;;
429|503)
retry_count=$((retry_count + 1))
sleep $((2 ** retry_count)) # Exponential backoff
;;
*)
echo "Error: HTTP $http_code" >&2
echo "$body" >&2
return 1
;;
esac
done
echo "Max retries exceeded" >&2
return 1
}
When generating Python code:
# Get FastAPI authentication docs using jq
LIBRARY_ID=$(curl -s "https://context7.com/api/v2/libs/search?query=fastapi" \
-H "x-api-key: $CONTEXT7_API_KEY" | jq -r '.results[0].id')
curl -s "https://context7.com/api/v2/context?libraryId=$LIBRARY_ID&query=oauth2 authentication&type=txt" \
-H "x-api-key: $CONTEXT7_API_KEY"
Get LangGraph documentation for implementation:
# Search for LangGraph
curl -s "https://context7.com/api/v2/libs/search?query=langgraph" \
-H "x-api-key: $CONTEXT7_API_KEY"
# Get specific patterns
curl -s "https://context7.com/api/v2/context?libraryId=/langchain-ai/langgraph&query=StateGraph conditional edges&type=txt" \
-H "x-api-key: $CONTEXT7_API_KEY"
Get containerization best practices:
curl -s "https://context7.com/api/v2/libs/search?query=docker" \
-H "x-api-key: $CONTEXT7_API_KEY"
curl -s "https://context7.com/api/v2/context?libraryId=/docker/docs&query=multi-stage builds&type=txt" \
-H "x-api-key: $CONTEXT7_API_KEY"
# Add to ~/.bashrc or script
context7() {
local library_search="$1"
local query="$2"
local format="${3:-txt}"
# Search for library and get first result's ID using jq
local library_id=$(curl -s "https://context7.com/api/v2/libs/search?query=$library_search" \
-H "x-api-key: $CONTEXT7_API_KEY" | jq -r '.results[0].id // empty')
if [ -z "$library_id" ]; then
echo "No library found for: $library_search" >&2
return 1
fi
# Get documentation
curl -s "https://context7.com/api/v2/context?libraryId=$library_id&query=$query&type=$format" \
-H "x-api-key: $CONTEXT7_API_KEY"
}
# Usage
context7 "react" "useEffect cleanup"
context7 "fastapi" "dependency injection" "json"
context7_json() {
curl -s "https://context7.com/api/v2/context?libraryId=$1&query=$2" \
-H "x-api-key: $CONTEXT7_API_KEY" | jq '.'
}
Use Context7 when:
Don't use Context7 when:
# Quick lookup using jq
curl -s "https://context7.com/api/v2/libs/search?query=react" -H "x-api-key: $CONTEXT7_API_KEY" | \
jq -r '.results[0].id' | \
xargs -I {} curl -s "https://context7.com/api/v2/context?libraryId={}&query=useEffect&type=txt" -H "x-api-key: $CONTEXT7_API_KEY"
Popular library IDs you might use frequently:
/websites/react_dev/fastapi/fastapi (verify with search)/langchain-ai/langchain/vercel/next.js/microsoft/TypeScriptAlways search first to get the most current/relevant library ID.
Related skills: