summarize_content
Extractive summarization: sentences are taken from the source, never rewritten. The tool splits the text into sentences, discards fragments shorter than 20 characters, and returns the leading ones in the shape you ask for. No model is called, so the same page always summarizes the same way — and nothing can be invented.
Use Cases
Feed Previews
Generate a one-line teaser for each item in a link feed with summary_type: brief.
Digest Emails
Turn a list of articles into bullet points ready to paste into a newsletter.
Triage Before Reading
Decide whether a long page is worth a full extraction by looking at its first few sentences.
Search Result Snippets
Attach a consistent, quotable snippet to indexed pages, taken verbatim from the source.
Quotable Context
Because sentences are copied rather than paraphrased, the output can be quoted directly and cited.
Cheap Pre-Summaries
Shrink a page before sending it to a language model, so the model pays for fewer tokens.
Endpoint
/api/v1/tools/summarize_contentParameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
url | string | Optional | - | Page to fetch and summarize. Scripts, styles, nav, header and footer are stripped first. Provide either `url` or `content`. Example: https://example.com/blog/crawl-budgets |
content | string | Optional | - | Text to summarize directly, skipping the fetch. Takes effect only when `url` is omitted — if both are sent, the fetched page wins. Example: Search engines allocate a finite number of requests... |
max_sentences | number | Optional | 5 | How many sentences to keep, 1 to 20. Ignored when `summary_type` is `brief`, which always returns one. Example: 3 |
summary_type | string | Optional | extractive | `extractive` joins the sentences into one paragraph string. `key_points` returns them as an array of strings, one per sentence. `brief` returns the first sentence only, as a string. Example: key_points |
include_metadata | boolean | Optional | false | Add the page's title, description, author and publish date as a `metadata` object. Only has an effect together with `url` — there is no metadata to read when you pass `content`. Example: true |
timeout | number | Optional | 10000 | Fetch timeout in milliseconds, between 1000 and 30000. Only applies when `url` is used. Example: 10000 |
respect_robots | boolean | Optional | true | Respect the target site's robots.txt. Left at `true`, a path disallowed for `CrawlForge` is refused with 403 before anything is fetched and no credits are charged. Set it to `false` only for a target you have your own agreement with — the response then carries a `warnings` entry and the override is recorded against your API key. Example: true |
Request Examples
curl -X POST https://crawlforge.dev/api/v1/tools/summarize_content \
-H "X-API-Key: cf_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/blog/crawl-budgets",
"max_sentences": 3,
"summary_type": "extractive",
"include_metadata": true
}'Response Example
{ "success": true, "data": { "summary": "Search engines allocate a finite number of requests to each site, and that allowance is what people mean by crawl budget. Large sites hit the ceiling long before small ones do, usually through duplicate URLs rather than genuine pages. Faceted navigation is the classic offender, generating thousands of near-identical addresses from a single catalogue.", "summary_type": "extractive", "original_length": 613, "summary_length": 352, "compression_ratio": 0.57, "sentences_used": 3, "total_sentences": 5, "metadata": { "title": "Why crawl budgets matter — Acme Blog", "description": "How search engines ration requests, and what to do about it.", "author": "Dana Reyes", "publish_date": "2026-08-14T09:30:00Z" } }, "credits_used": 4, "credits_remaining": 996, "processing_time": 540}data.summaryA string for `extractive` and `brief`, an array of strings for `key_points`. Type your client accordinglydata.original_lengthCharacters of source text after HTML stripping, not the raw page sizedata.compression_ratio`summary_length / original_length`, rounded to two decimals. Lower is a tighter summarydata.sentences_usedSentences actually returned — lower than `max_sentences` on a short pagedata.total_sentencesSentences found in the source, counting only those over 20 characters. Compare with `sentences_used` to see how much was left behinddata.metadataPresent only when `include_metadata` is true and a `url` was given. Individual fields are undefined when the page does not declare themcredits_usedFixed 4 credits per call, whatever the text lengthError Handling
Neither url nor content (400 Bad Request)
VALIDATION_ERROR. At least one of the two must be present. The same status covers a malformed url, a max_sentences outside 1-20, an unknown summary_type, or a timeout outside 1000-30000.
Page Too Large (413 Payload Too Large)
RESPONSE_TOO_LARGE. The fetched page exceeded the 25MB read limit and was refused rather than buffered.
Target Timed Out (504 Gateway Timeout)
FETCH_TIMEOUT. The page stopped responding while sending its body. Raise timeout, up to 30000ms.
Fetch Failed (502 Bad Gateway)
FETCH_FAILED. The response body could not be read — connection reset, or a body that is not decodable text.
Summarization Failed (500 Internal Server Error)
TOOL_ERROR. Nothing is charged for a failed call; credits are deducted only after the summary is produced.
Blocked by robots.txt (403 Forbidden)
The target site's robots.txt disallows this path for CrawlForge. Set respect_robots: false to override if you have your own agreement with the target — the override is recorded against your API key. The override does not reach a host on CrawlForge's permanent opt-out list, which is refused whatever respect_robots is set to. Only the url form is gated — summarizing content you supply fetches nothing, so it cannot be refused here.
No content to summarize under brief, and an empty result under the other types, rather than an error. Check total_sentences before using the summary.Credit Cost
max_sentences you ask for. Failed calls are not charged.What's Included:
Page fetch and boilerplate stripping when you pass a url
Sentence splitting with short-fragment filtering
Paragraph, bullet-list or single-line output
Length and compression statistics
Optional page metadata (title, description, author, date)
Plan Recommendations:
Free Plan: 1,000 one-time trial credits = 250 summaries
Hobby Plan: 5,000 credits = 1,250 summaries ($19/mo)
Professional Plan: 50,000 credits = 12,500 summaries ($99/mo)