removedInput schema / additionalProperties
Removed value: -false
removedInput schema / properties / brandingOptions / additionalProperties
Removed value: -false
addedInput schema / properties / escalate
Added value: +{
+ "default": false,
+ "description": "When the plain fetch comes back blocked (403/429/challenge page/empty shell), retry once in the stealth browser and return its content instead of the block. Projected at 2+5; the actual charge stays at the base price when the plain fetch succeeded. Default: false",
+ "type": "boolean"
+}
addedInput schema / properties / escalate_engine
Added value: +{
+ "default": "playwright",
+ "description": "Stealth engine for the escalated retry (default: \"playwright\")",
+ "enum": [
+ "playwright",
+ "camoufox"
+ ],
+ "type": "string"
+}
changedInput schema / properties / formats / items / anyOf
Previous value: -[
- {
- "enum": [
- "markdown",
- "html",
- "rawHtml",
- "text",
- "links",
- "metadata",
- "screenshot",
- "branding"
- ],
- "type": "string"
- },
- {
- "additionalProperties": false,
- "properties": {
- "prompt": {
- "description": "Extraction instruction for the LLM",
- "type": "string"
- },
- "schema": {
- "additionalProperties": {},
- "description": "JSON schema for extraction",
- "type": "object"
- },
- "type": {
- "const": "json",
- "type": "string"
- }
- },
- "required": [
- "type"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "enum": [
+ "markdown",
+ "html",
+ "rawHtml",
+ "text",
+ "links",
+ "metadata",
+ "screenshot",
+ "branding"
+ ],
+ "type": "string"
+ },
+ {
+ "properties": {
+ "prompt": {
+ "description": "Extraction instruction for the LLM",
+ "type": "string"
+ },
+ "schema": {
+ "additionalProperties": {},
+ "description": "JSON schema for extraction",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "type": {
+ "const": "json",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "max_highlights": {
+ "default": 10,
+ "description": "How many units to return (default 10)",
+ "maximum": 50,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "mode": {
+ "default": "extractive",
+ "description": "\"extractive\" (default) returns verbatim page text, no model; \"model\" adds an LLM step (+3 credits)",
+ "enum": [
+ "extractive",
+ "model"
+ ],
+ "type": "string"
+ },
+ "query": {
+ "description": "What to look for; the matching sentences, table rows and code blocks come back verbatim with offsets into the markdown",
+ "maxLength": 500,
+ "minLength": 1,
+ "type": "string"
+ },
+ "type": {
+ "const": "highlights",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "query"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "mode": {
+ "default": "extractive",
+ "description": "\"extractive\" (default) returns verbatim page text, no model; \"model\" adds an LLM step (+3 credits)",
+ "enum": [
+ "extractive",
+ "model"
+ ],
+ "type": "string"
+ },
+ "question": {
+ "description": "The question to answer from the page; the evidence units come back verbatim with offsets",
+ "maxLength": 500,
+ "minLength": 1,
+ "type": "string"
+ },
+ "type": {
+ "const": "question",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "question"
+ ],
+ "type": "object"
+ }
+]
addedInput schema / properties / max_inline_chars
Added value: +{
+ "description": "Largest result to return inline, in characters of its JSON. Over it, the call returns a preview plus a result_handle for read_result instead of the whole result (default 40,000; env CRAWLFORGE_MAX_INLINE_CHARS)",
+ "maximum": 10000000,
+ "minimum": 1000,
+ "type": "integer"
+}
addedInput schema / properties / redact_pii
Added value: +{
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "properties": {
+ "entities": {
+ "description": "Which classes to redact, case-insensitive: EMAIL, PHONE, FINANCIAL, SECRET, plus PERSON and LOCATION when mode is \"model\". Omitted or empty means all four regex classes (and both model classes in \"model\" mode). An unknown name, or a model-only name without mode:\"model\", is rejected",
+ "items": {
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "mode": {
+ "description": "\"fast\" (default) is regex only and free; \"model\" adds an Ollama NER pass for PERSON and LOCATION (+3 credits once per call)",
+ "enum": [
+ "fast",
+ "model"
+ ],
+ "type": "string"
+ },
+ "replace_style": {
+ "description": "\"tag\" (default) writes <EMAIL>, \"mask\" writes [REDACTED], \"remove\" deletes the value",
+ "enum": [
+ "tag",
+ "mask",
+ "remove"
+ ],
+ "type": "string"
+ }
+ },
+ "type": "object"
+ }
+ ],
+ "description": "Redact personal data from the text this call returns, before it reaches your context window. true means the free regex pass over EMAIL, PHONE, FINANCIAL and SECRET. The result carries redaction:{entities,count}. Default: off"
+}
removedInput schema / properties / screenshotOptions / additionalProperties
Removed value: -false
changedOutput schema / properties / _cost / additionalProperties
Previous value: -trueNew value: +{}
addedOutput schema / properties / blocked
Added value: +{
+ "additionalProperties": {},
+ "description": "Present when a bot-defence vendor served a challenge page; the fallback hint names the tool to try next",
+ "properties": {
+ "evidence": {
+ "type": "string"
+ },
+ "vendor": {
+ "type": "string"
+ }
+ },
+ "type": "object"
+}
changedOutput schema / properties / content / additionalProperties
Previous value: -trueNew value: +{}
addedOutput schema / properties / content / properties / answer
Added value: +{
+ "additionalProperties": {},
+ "description": "Result of the {type:\"question\"} format",
+ "properties": {
+ "evidence": {
+ "description": "The units the answer rests on, verbatim with offsets",
+ "items": {
+ "additionalProperties": {},
+ "properties": {
+ "kind": {
+ "enum": [
+ "sentence",
+ "table_row",
+ "code_block"
+ ],
+ "type": "string"
+ },
+ "length": {
+ "type": "number"
+ },
+ "offset": {
+ "description": "JS string index into the markdown format of this call",
+ "type": "number"
+ },
+ "score": {
+ "description": "BM25 relevance to the query, higher is better",
+ "type": "number"
+ },
+ "text": {
+ "description": "Verbatim page text: markdown.slice(offset, offset + length) === text",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "grounded": {
+ "description": "True when every number and proper noun in text appears in the evidence or the question; always true in extractive mode",
+ "type": "boolean"
+ },
+ "text": {
+ "description": "Extractive mode: the evidence texts joined; model mode: the model's answer",
+ "type": "string"
+ }
+ },
+ "type": "object"
+}
addedOutput schema / properties / content / properties / branding / propertyNames
Added value: +{
+ "type": "string"
+}
addedOutput schema / properties / content / properties / highlights
Added value: +{
+ "description": "Result of the {type:\"highlights\"} format: the units matching the query, best first, verbatim with offsets",
+ "items": {
+ "additionalProperties": {},
+ "properties": {
+ "kind": {
+ "enum": [
+ "sentence",
+ "table_row",
+ "code_block"
+ ],
+ "type": "string"
+ },
+ "length": {
+ "type": "number"
+ },
+ "offset": {
+ "description": "JS string index into the markdown format of this call",
+ "type": "number"
+ },
+ "score": {
+ "description": "BM25 relevance to the query, higher is better",
+ "type": "number"
+ },
+ "text": {
+ "description": "Verbatim page text: markdown.slice(offset, offset + length) === text",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+}
changedOutput schema / properties / content / properties / links / additionalProperties
Previous value: -trueNew value: +{}
changedOutput schema / properties / content / properties / links / properties / links / items / additionalProperties
Previous value: -trueNew value: +{}
changedOutput schema / properties / content / properties / metadata / additionalProperties
Previous value: -trueNew value: +{}
addedOutput schema / properties / content / properties / metadata / properties / og_tags / propertyNames
Added value: +{
+ "type": "string"
+}
addedOutput schema / properties / content / properties / metadata / properties / twitter_tags / propertyNames
Added value: +{
+ "type": "string"
+}
changedOutput schema / properties / content / properties / screenshots / items / additionalProperties
Previous value: -trueNew value: +{}
addedOutput schema / properties / error
Added value: +{
+ "description": "Why success is false: a challenge page, an empty shell or an error placeholder was served instead of the content",
+ "type": "string"
+}
addedOutput schema / properties / escalated
Added value: +{
+ "description": "Present only when escalate:true was passed: whether the blocked plain fetch was retried in the stealth browser. False means the plain fetch sufficed and the call is charged at the base price",
+ "type": "boolean"
+}
addedOutput schema / properties / expires_at
Added value: +{
+ "description": "When the stored result is dropped (ISO 8601)",
+ "type": "string"
+}
addedOutput schema / properties / preview
Added value: +{
+ "description": "The first max_inline_chars characters of the view named by view_path (or of the pretty-printed JSON)",
+ "type": "string"
+}
addedOutput schema / properties / redaction
Added value: +{
+ "additionalProperties": {},
+ "description": "Present when redact_pii was set: what was redacted from the text of this result",
+ "properties": {
+ "count": {
+ "description": "Total spans replaced",
+ "type": "number"
+ },
+ "entities": {
+ "additionalProperties": {
+ "type": "number"
+ },
+ "description": "How many spans were replaced, by entity class; a class with no hits is omitted",
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ },
+ "mode": {
+ "description": "\"fast\" is the free regex pass; \"model\" added an Ollama NER pass for PERSON and LOCATION",
+ "enum": [
+ "fast",
+ "model"
+ ],
+ "type": "string"
+ },
+ "model_ran": {
+ "description": "mode \"model\" only: whether a model actually answered. False means no LLM route existed and the model surcharge was not charged",
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+}
addedOutput schema / properties / result_handle
Added value: +{
+ "description": "Handle for read_result; the full result is kept 1 hour",
+ "type": "string"
+}
addedOutput schema / properties / status
Added value: +{
+ "description": "HTTP status of the fetch; present when success is false",
+ "type": "number"
+}
addedOutput schema / properties / stealth
Added value: +{
+ "additionalProperties": {},
+ "description": "Present when escalated is true: the stealth engine that ran, and the bot-defence vendor the plain fetch hit (null when the block named none)",
+ "properties": {
+ "engine": {
+ "type": "string"
+ },
+ "vendor_detected": {
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "type": "object"
+}
addedOutput schema / properties / title
Added value: +{
+ "description": "Document title; present when success is false",
+ "type": "string"
+}
addedOutput schema / properties / total_chars
Added value: +{
+ "description": "Length of the full view in characters",
+ "type": "number"
+}
addedOutput schema / properties / truncated
Added value: +{
+ "description": "True when the inline result is a preview",
+ "type": "boolean"
+}
addedOutput schema / properties / view
Added value: +{
+ "description": "Whether preview and read_result offsets index a text field or the pretty-printed JSON",
+ "enum": [
+ "text",
+ "json"
+ ],
+ "type": "string"
+}
addedOutput schema / properties / view_path
Added value: +{
+ "description": "Dotted path of the text field the view was cut from; null for the JSON view",
+ "type": [
+ "string",
+ "null"
+ ]
+}