GET /v1/serp/content
Run a search and extract the content of the top results in one call. Returns SERP results with content blocks attached.
curl -G "https://api.chuger.com/v1/serp/content" \
--data-urlencode "q=react server components" \
--data-urlencode "max_content=10" \
--data-urlencode "whitelist_domains[]=*.dev" \
--data-urlencode "whitelist_domains[]=react.dev" \
--data-urlencode "blacklist_domains[]=ads.example.com" \
-H "Authorization: Bearer YOUR_API_TOKEN"
const params = new URLSearchParams();
params.set('q', 'react server components');
params.set('max_content', '10');
params.append('whitelist_domains[]', '*.dev');
params.append('whitelist_domains[]', 'react.dev');
params.append('blacklist_domains[]', 'ads.example.com');
const res = await fetch(`https://api.chuger.com/v1/serp/content?${params}`, {
headers: { Authorization: `Bearer ${process.env.CHUGER_TOKEN}` },
});
{
"search_information": {
"query_displayed": "react server components",
"total_results": 1230000,
"time_taken": 0.39
},
"organic_results": [
{
"position": 1,
"title": "React Server Components",
"link": "https://react.dev/learn/server-components",
"snippet": "Server Components let you...",
"displayed_link": "react.dev",
"favicon": "https://react.dev/favicon.ico",
"content": {
"url": "https://react.dev/learn/server-components",
"success": true,
"statusCode": 200,
"errorMessage": null,
"html": "<article>...</article>",
"markdown": "# Server Components
...",
"metadata": {
"title": "React Server Components",
"description": "Learn how Server Components work",
"language": "en",
"ogImage": "https://react.dev/og.png"
}
}
}
],
"related_questions": [],
"related_searches": []
}
{
"message": "Search with content extraction failed using available services."
}
Run a search and extract the content of the top results in a single request. Returns the same shape as /v1/serp but with a content block attached to each organic result that was fetched.
GET https://api.chuger.com/v1/serp/content
Authentication
Bearer token in the Authorization header. See Authentication.
Cost
Two things are billed when the request succeeds:
- The SERP query itself
- One content extraction for each result actually fetched (capped by
max_contentand your filtering)
| Plan | SERP | Each content fetch |
|---|---|---|
| Basic | 5 | 2 |
| Pro | 5 | 2 |
| Business | 5 | 2 |
Example on Pro with max_content=10, no filtering: 5 + (10 × 2) = 25 credits.
Always call /v1/credits/preview-cost before scaling this endpoint up.
Query parameters
The search query. 1–100 characters.
Location, free-form. Max 100 characters.
Interface language code. Max 10 characters.
Country code. Max 10 characters.
How many organic results to extract content for. 1–50. Defaults to 10.
Only fetch content from URLs whose domain matches one of these. Supports *.example.com.
Never fetch content from URLs whose domain matches one of these (takes precedence over the whitelist).
Filters apply after you get search results — they don't change what comes back from search, just whether we pull the content for each result. Domain matching supports exact matches, subdomain matches (example.com matches blog.example.com), and wildcards (*.example.com).
Example
When a result is skipped (filtered out or beyond max_content) the content field is omitted from that result. The content object matches the response shape of /v1/content.
Filtering behavior
A URL is fetched only if:
- It isn't blacklisted
- The whitelist is empty or contains a match
- We haven't already hit
max_contentsuccessful fetches
Domain matching is case-insensitive. *.example.com matches any subdomain (e.g. blog.example.com) as well as the bare apex (example.com). example.com (without a wildcard) matches any subdomain of example.com. URLs with unsafe hosts (raw IPs or non-default ports) are skipped automatically.
Errors
| Status | When |
|---|---|
401 | Missing / invalid token |
402 | No plan, or insufficient credits |
422 | Validation failed (missing q, bad max_content, etc.) |
429 | Rate limit or monthly quota exceeded |
503 | Search could not be completed |
See Errors for the full reference.
Tips
- Keep
max_contentas low as your use case allows — every additional fetch costs credits - Combine
whitelist_domainswith a smallmax_contentto focus on trusted sources without overspending - If you only need search results without bodies, use
/v1/serp— it's much cheaper