{"openapi":"3.1.0","info":{"title":"Article Extractor & AI Summarizer API","version":"1.0.0","description":"Turn a news or blog URL into a clean article: title, authors, publish and update dates, site name, language, lead image, canonical URL and tags, plus the body as Markdown or plain text with word count, reading time and a token estimate. A second endpoint adds an AI summary (TL;DR, paragraph or bullets, in any language). Home pages, listings, login walls, paywalls, cookie-consent pages and bot checks are detected and refused with `422 not_an_article` before any AI work. Plain HTTP first; a real browser only when a site blocks bots or needs JavaScript.\n\nAll endpoints accept GET (query string) or POST (JSON body). Errors use one shape: `{\"success\": false, \"error\": {\"code\", \"message\", \"retryable\"}}`. When a numeric `Retry-After` header is present, `error.retryAfterSeconds` is included.","contact":{"name":"TidyTools","url":"https://apify.com/tidytools"}},"servers":[{"url":"https://webcapture-api.yukailin.workers.dev","description":"Origin (reachable only through the marketplace gateway)"}],"tags":[{"name":"Article"}],"paths":{"/api/v1/article":{"get":{"operationId":"articleGet","summary":"Extract an article from a URL (GET)","description":"Returns the article metadata and its clean body (main content only: navigation, ads, share bars, related-story lists and footers are removed). Never runs AI; `summaryGenerated` is always false here. Pages that are not articles return `422 not_an_article` with `details.pageType`.","tags":["Article"],"parameters":[{"name":"url","schema":{"type":"string"},"description":"Article URL. A bare domain is accepted (https is assumed). Private, local and cloud-metadata addresses are refused.","required":true,"example":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","in":"query"},{"name":"format","schema":{"type":"string","default":"markdown","enum":["markdown","text","both"]},"description":"Body format: `markdown`, `text` (plain text) or `both`.","required":false,"in":"query"},{"name":"maxChars","schema":{"type":"integer","default":200000,"minimum":100,"maximum":500000},"description":"Cut the body at this many characters (`truncated` tells you). Counts (words, tokens) always describe the whole article.","required":false,"in":"query"},{"name":"includeLinks","schema":{"type":"boolean","default":false},"description":"Also return the absolute links inside the article body (up to 500).","required":false,"in":"query"},{"name":"allowNonArticle","schema":{"type":"boolean","default":false},"description":"Return home pages, listings, product pages and paywall teasers too (with `isArticle: false` and `pageType`) instead of `422 not_an_article`. Bot checks, login walls, consent pages and empty pages are always refused.","required":false,"in":"query"},{"name":"render","schema":{"type":"string","default":"auto","enum":["auto","never","always"]},"description":"`auto` (default): plain HTTP first, a real Chrome browser only when the site blocks plain requests or needs JavaScript. `never`: HTTP only. `always`: browser only.","required":false,"in":"query"},{"name":"timeoutMs","schema":{"type":"integer","default":20000,"minimum":1000,"maximum":30000},"description":"Page-load timeout in milliseconds.","required":false,"in":"query"},{"name":"summary","schema":{"type":"string","default":"none","enum":["none"]},"description":"Only `none` is accepted here: summaries are the `/api/v1/article/summary` endpoint (billed separately).","required":false,"in":"query"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"url":{"type":"string"},"finalUrl":{"type":"string"},"canonicalUrl":{"type":"string","nullable":true},"statusCode":{"type":"integer","nullable":true},"renderedWith":{"type":"string"},"isArticle":{"type":"boolean"},"pageType":{"type":"string","enum":["article","home","listing","product","paywall"],"description":"`article`, or (only with allowNonArticle=true) the kind of non-article page."},"articleType":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"author":{"type":"string","nullable":true},"authors":{"type":"array","items":{"type":"string"}},"publishedAt":{"type":"string","nullable":true},"modifiedAt":{"type":"string","nullable":true},"siteName":{"type":"string","nullable":true},"publisher":{"type":"string","nullable":true},"language":{"type":"string","nullable":true},"leadImage":{"type":"string","nullable":true},"tags":{"type":"array","items":{"type":"string"}},"paywalled":{"type":"boolean"},"wordCount":{"type":"integer"},"readingTimeMinutes":{"type":"integer"},"tokensEstimate":{"type":"integer"},"chars":{"type":"integer"},"format":{"type":"string"},"markdown":{"type":"string","nullable":true,"description":"The article as Markdown (`format=markdown` or `both`), else null."},"text":{"type":"string","nullable":true,"description":"The article as plain text (`format=text` or `both`), else null."},"truncated":{"type":"boolean"},"images":{"type":"array","items":{"type":"string"}},"summaryGenerated":{"type":"boolean","description":"Whether an AI summary is in this answer (always false on /article)."},"summary":{"type":"object","description":"Always null on /article; see /article/summary.","properties":{"style":{"type":"string","enum":["tldr","paragraph","bullets"]},"language":{"type":"string","description":"Language requested, or `same as source`."},"maxWords":{"type":"integer"},"focus":{"type":"string","description":"Present when a focus was requested."},"text":{"type":"string","description":"The summary (bullets as `- ` lines)."},"bullets":{"type":"array","items":{"type":"string"},"description":"Only for `summary=bullets`: the bullet points without markers."},"inputChars":{"type":"integer","description":"Characters of article text the model read."},"inputTruncated":{"type":"boolean","description":"The article was longer than the model input cap (about 6,000 tokens) and was cut."},"tokens":{"type":"object","description":"AI tokens used for this summary.","properties":{"input":{"type":"integer","nullable":true},"output":{"type":"integer","nullable":true}}}},"nullable":true},"fallbackReason":{"type":"string","description":"Why a real browser was used (render=auto)."},"pageTypeReason":{"type":"string","description":"Only with allowNonArticle=true for a non-article page: why it is not an article."},"links":{"type":"array","items":{"type":"string"},"description":"Only with includeLinks=true: absolute links inside the article body (up to 500)."}}},"example":{"success":true,"url":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","finalUrl":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","canonicalUrl":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","statusCode":200,"renderedWith":"http","isArticle":true,"pageType":"article","articleType":"NewsArticle","title":"Trump administration diverts human rights funds to push far-right agenda abroad","description":"Support for white Afrikaners, anti-communism and others reveals how US redefining what qualifies as human rights","author":"Andrew Roth, Joseph Gedeon","authors":["Andrew Roth","Joseph Gedeon"],"publishedAt":"2026-09-30T19:51:24.000Z","modifiedAt":"2026-09-30T19:51:24.000Z","siteName":"the Guardian","publisher":"The Guardian","language":"en","leadImage":"https://i.guim.co.uk/img/media/41ac63906656f3420c997c8618d3b3a1a86a0811/720_0_7200_5760/master/7200.jpg?width=1200&height=630&quality=85&auto=format&fit=crop&precrop=40:21,offset-x50,offset-y0&overlay-align=bottom%2Cleft&overlay-width=100p&overlay-base64=L2ltZy9zdGF0aWMvb3ZlcmxheXMvdGctZGVmYXVsdC5wb…","tags":["US foreign policy","South Africa","US news","Africa"],"paywalled":false,"wordCount":1443,"readingTimeMinutes":6,"tokensEstimate":2373,"chars":10341,"format":"markdown","markdown":"![Afrikaner refugees hold small American flags on arrival, a woman carrying a toddler in yellow](https://i.guim.co.uk/img/media/41ac63906656f3420c997c8618d3b3a1a86a0811/0_0_8640_5760/master/8640.jpg?width=465&dpr=1&s=none&crop=none)\n\nAfrikaner refugees from South Africa hold American flags as they a…","text":null,"truncated":true,"images":["https://i.guim.co.uk/img/media/41ac63906656f3420c997c8618d3b3a1a86a0811/0_0_8640_5760/master/8640.jpg?width=465&dpr=1&s=none&crop=none"],"summaryGenerated":false,"summary":null}}}},"400":{"description":"Invalid parameter (`invalid_request`) or a private/local target (`url_not_allowed`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"success":false,"error":{"code":"url_not_allowed","message":"private, local and reserved hosts are not allowed"}}}}},"413":{"description":"Request body or target document too large (`too_large`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"The page is not an article (`not_an_article`: a home page, a listing, a login wall, a paywall teaser, a cookie-consent page, a bot check, a product page or a page with almost no text; `details.pageType` says which — no AI work is done and nothing is summarized), the site refused (`target_blocked`), could not be reached (`target_unreachable`), the page does not exist (`target_error`, HTTP 404/410), or it is not a web page (`unsupported_content`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"success":false,"error":{"code":"not_an_article","message":"This page is not an article: this page lists articles or links rather than being one.","details":{"pageType":"listing","finalUrl":"https://www.bbc.com/news","title":"BBC News - Breaking news, video and the latest top stories from the U.S. and around the world","renderedWith":"http"}}}}}},"502":{"description":"Temporary failure on our side (`upstream_error`); safe to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"The target did not respond in time (`timeout`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"article","summary":"Extract an article from a URL","description":"Returns the article metadata and its clean body (main content only: navigation, ads, share bars, related-story lists and footers are removed). Never runs AI; `summaryGenerated` is always false here. Pages that are not articles return `422 not_an_article` with `details.pageType`.\n\nThe same parameters as the GET form, sent as a JSON body.","tags":["Article"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Article URL. A bare domain is accepted (https is assumed). Private, local and cloud-metadata addresses are refused."},"format":{"type":"string","default":"markdown","enum":["markdown","text","both"],"description":"Body format: `markdown`, `text` (plain text) or `both`."},"maxChars":{"type":"integer","default":200000,"minimum":100,"maximum":500000,"description":"Cut the body at this many characters (`truncated` tells you). Counts (words, tokens) always describe the whole article."},"includeLinks":{"type":"boolean","default":false,"description":"Also return the absolute links inside the article body (up to 500)."},"allowNonArticle":{"type":"boolean","default":false,"description":"Return home pages, listings, product pages and paywall teasers too (with `isArticle: false` and `pageType`) instead of `422 not_an_article`. Bot checks, login walls, consent pages and empty pages are always refused."},"render":{"type":"string","default":"auto","enum":["auto","never","always"],"description":"`auto` (default): plain HTTP first, a real Chrome browser only when the site blocks plain requests or needs JavaScript. `never`: HTTP only. `always`: browser only."},"timeoutMs":{"type":"integer","default":20000,"minimum":1000,"maximum":30000,"description":"Page-load timeout in milliseconds."},"summary":{"type":"string","default":"none","enum":["none"],"description":"Only `none` is accepted here: summaries are the `/api/v1/article/summary` endpoint (billed separately)."}},"required":["url"]}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"url":{"type":"string"},"finalUrl":{"type":"string"},"canonicalUrl":{"type":"string","nullable":true},"statusCode":{"type":"integer","nullable":true},"renderedWith":{"type":"string"},"isArticle":{"type":"boolean"},"pageType":{"type":"string","enum":["article","home","listing","product","paywall"],"description":"`article`, or (only with allowNonArticle=true) the kind of non-article page."},"articleType":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"author":{"type":"string","nullable":true},"authors":{"type":"array","items":{"type":"string"}},"publishedAt":{"type":"string","nullable":true},"modifiedAt":{"type":"string","nullable":true},"siteName":{"type":"string","nullable":true},"publisher":{"type":"string","nullable":true},"language":{"type":"string","nullable":true},"leadImage":{"type":"string","nullable":true},"tags":{"type":"array","items":{"type":"string"}},"paywalled":{"type":"boolean"},"wordCount":{"type":"integer"},"readingTimeMinutes":{"type":"integer"},"tokensEstimate":{"type":"integer"},"chars":{"type":"integer"},"format":{"type":"string"},"markdown":{"type":"string","nullable":true,"description":"The article as Markdown (`format=markdown` or `both`), else null."},"text":{"type":"string","nullable":true,"description":"The article as plain text (`format=text` or `both`), else null."},"truncated":{"type":"boolean"},"images":{"type":"array","items":{"type":"string"}},"summaryGenerated":{"type":"boolean","description":"Whether an AI summary is in this answer (always false on /article)."},"summary":{"type":"object","description":"Always null on /article; see /article/summary.","properties":{"style":{"type":"string","enum":["tldr","paragraph","bullets"]},"language":{"type":"string","description":"Language requested, or `same as source`."},"maxWords":{"type":"integer"},"focus":{"type":"string","description":"Present when a focus was requested."},"text":{"type":"string","description":"The summary (bullets as `- ` lines)."},"bullets":{"type":"array","items":{"type":"string"},"description":"Only for `summary=bullets`: the bullet points without markers."},"inputChars":{"type":"integer","description":"Characters of article text the model read."},"inputTruncated":{"type":"boolean","description":"The article was longer than the model input cap (about 6,000 tokens) and was cut."},"tokens":{"type":"object","description":"AI tokens used for this summary.","properties":{"input":{"type":"integer","nullable":true},"output":{"type":"integer","nullable":true}}}},"nullable":true},"fallbackReason":{"type":"string","description":"Why a real browser was used (render=auto)."},"pageTypeReason":{"type":"string","description":"Only with allowNonArticle=true for a non-article page: why it is not an article."},"links":{"type":"array","items":{"type":"string"},"description":"Only with includeLinks=true: absolute links inside the article body (up to 500)."}}},"example":{"success":true,"url":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","finalUrl":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","canonicalUrl":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","statusCode":200,"renderedWith":"http","isArticle":true,"pageType":"article","articleType":"NewsArticle","title":"Trump administration diverts human rights funds to push far-right agenda abroad","description":"Support for white Afrikaners, anti-communism and others reveals how US redefining what qualifies as human rights","author":"Andrew Roth, Joseph Gedeon","authors":["Andrew Roth","Joseph Gedeon"],"publishedAt":"2026-09-30T19:51:24.000Z","modifiedAt":"2026-09-30T19:51:24.000Z","siteName":"the Guardian","publisher":"The Guardian","language":"en","leadImage":"https://i.guim.co.uk/img/media/41ac63906656f3420c997c8618d3b3a1a86a0811/720_0_7200_5760/master/7200.jpg?width=1200&height=630&quality=85&auto=format&fit=crop&precrop=40:21,offset-x50,offset-y0&overlay-align=bottom%2Cleft&overlay-width=100p&overlay-base64=L2ltZy9zdGF0aWMvb3ZlcmxheXMvdGctZGVmYXVsdC5wb…","tags":["US foreign policy","South Africa","US news","Africa"],"paywalled":false,"wordCount":1443,"readingTimeMinutes":6,"tokensEstimate":2373,"chars":10341,"format":"markdown","markdown":"![Afrikaner refugees hold small American flags on arrival, a woman carrying a toddler in yellow](https://i.guim.co.uk/img/media/41ac63906656f3420c997c8618d3b3a1a86a0811/0_0_8640_5760/master/8640.jpg?width=465&dpr=1&s=none&crop=none)\n\nAfrikaner refugees from South Africa hold American flags as they a…","text":null,"truncated":true,"images":["https://i.guim.co.uk/img/media/41ac63906656f3420c997c8618d3b3a1a86a0811/0_0_8640_5760/master/8640.jpg?width=465&dpr=1&s=none&crop=none"],"summaryGenerated":false,"summary":null}}}},"400":{"description":"Invalid parameter (`invalid_request`) or a private/local target (`url_not_allowed`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"success":false,"error":{"code":"url_not_allowed","message":"private, local and reserved hosts are not allowed"}}}}},"413":{"description":"Request body or target document too large (`too_large`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"The page is not an article (`not_an_article`: a home page, a listing, a login wall, a paywall teaser, a cookie-consent page, a bot check, a product page or a page with almost no text; `details.pageType` says which — no AI work is done and nothing is summarized), the site refused (`target_blocked`), could not be reached (`target_unreachable`), the page does not exist (`target_error`, HTTP 404/410), or it is not a web page (`unsupported_content`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"success":false,"error":{"code":"not_an_article","message":"This page is not an article: this page lists articles or links rather than being one.","details":{"pageType":"listing","finalUrl":"https://www.bbc.com/news","title":"BBC News - Breaking news, video and the latest top stories from the U.S. and around the world","renderedWith":"http"}}}}}},"502":{"description":"Temporary failure on our side (`upstream_error`); safe to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"The target did not respond in time (`timeout`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/article/summary":{"get":{"operationId":"articleSummaryGet","summary":"Extract an article and summarize it with AI (GET)","description":"The same extraction as `/api/v1/article`, then an AI summary (Llama 3.3 70B) grounded in the article text only. The body is returned only with `includeContent=true`. Or send your own `text` (POST) to summarize it without a URL. Non-articles are refused (`422 not_an_article`) before the model runs; paywall teasers are never summarized. `summaryGenerated: true` and header `x-summary-generated: true` mark answers that contain a summary.","tags":["Article"],"parameters":[{"name":"url","schema":{"type":"string"},"description":"Article URL (or send `text`). A bare domain is accepted; private and local addresses are refused.","required":false,"example":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","in":"query"},{"name":"format","schema":{"type":"string","default":"markdown","enum":["markdown","text","both"]},"description":"Body format: `markdown`, `text` (plain text) or `both`.","required":false,"in":"query"},{"name":"maxChars","schema":{"type":"integer","default":200000,"minimum":100,"maximum":500000},"description":"Cut the body at this many characters (`truncated` tells you). Counts (words, tokens) always describe the whole article.","required":false,"in":"query"},{"name":"includeLinks","schema":{"type":"boolean","default":false},"description":"Also return the absolute links inside the article body (up to 500).","required":false,"in":"query"},{"name":"allowNonArticle","schema":{"type":"boolean","default":false},"description":"Return home pages, listings, product pages and paywall teasers too (with `isArticle: false` and `pageType`) instead of `422 not_an_article`. Bot checks, login walls, consent pages and empty pages are always refused.","required":false,"in":"query"},{"name":"render","schema":{"type":"string","default":"auto","enum":["auto","never","always"]},"description":"`auto` (default): plain HTTP first, a real Chrome browser only when the site blocks plain requests or needs JavaScript. `never`: HTTP only. `always`: browser only.","required":false,"in":"query"},{"name":"timeoutMs","schema":{"type":"integer","default":20000,"minimum":1000,"maximum":30000},"description":"Page-load timeout in milliseconds.","required":false,"in":"query"},{"name":"summary","schema":{"type":"string","default":"paragraph","enum":["tldr","paragraph","bullets"]},"description":"Summary shape: `tldr` (one sentence), `paragraph` or `bullets` (up to 7).","required":false,"in":"query"},{"name":"maxWords","schema":{"type":"integer","minimum":10,"maximum":300},"description":"Approximate summary length. Default: 30 (tldr), 100 (paragraph), 120 (bullets).","required":false,"in":"query"},{"name":"language","schema":{"type":"string"},"description":"Write the summary in this language (e.g. `English`, `Spanish`, `Traditional Chinese`). Default: the article's language.","required":false,"in":"query"},{"name":"focus","schema":{"type":"string"},"description":"What the summary should focus on (e.g. `numbers and dates`).","required":false,"in":"query"},{"name":"includeContent","schema":{"type":"boolean","default":false},"description":"Also return the article body (`markdown` / `text`, per `format`).","required":false,"in":"query"},{"name":"text","schema":{"type":"string"},"description":"Your own text to summarize instead of a URL (200 to 100,000 characters; send it in a POST body). Then `url` is not needed.","required":false,"in":"query"},{"name":"title","schema":{"type":"string"},"description":"Optional title for `text`.","required":false,"in":"query"}],"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"url":{"type":"string"},"finalUrl":{"type":"string"},"canonicalUrl":{"type":"string","nullable":true},"statusCode":{"type":"integer","nullable":true},"renderedWith":{"type":"string"},"isArticle":{"type":"boolean"},"pageType":{"type":"string","enum":["article","home","listing","product","paywall"],"description":"`article`, or (only with allowNonArticle=true) the kind of non-article page."},"articleType":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"author":{"type":"string","nullable":true},"authors":{"type":"array","items":{"type":"string"}},"publishedAt":{"type":"string","nullable":true},"modifiedAt":{"type":"string","nullable":true},"siteName":{"type":"string","nullable":true},"publisher":{"type":"string","nullable":true},"language":{"type":"string","nullable":true},"leadImage":{"type":"string","nullable":true},"tags":{"type":"array","items":{"type":"string"}},"paywalled":{"type":"boolean"},"wordCount":{"type":"integer"},"readingTimeMinutes":{"type":"integer"},"tokensEstimate":{"type":"integer"},"chars":{"type":"integer"},"format":{"type":"string"},"markdown":{"type":"string","nullable":true,"description":"The article as Markdown when includeContent=true (and format markdown/both), else null."},"text":{"type":"string","nullable":true,"description":"The article as plain text when includeContent=true (and format text/both), else null."},"truncated":{"type":"boolean"},"images":{"type":"array","items":{"type":"string"}},"summaryGenerated":{"type":"boolean","description":"true: this answer contains an AI summary (billed as a Summary)."},"summary":{"type":"object","description":"The AI summary.","properties":{"style":{"type":"string","enum":["tldr","paragraph","bullets"]},"language":{"type":"string","description":"Language requested, or `same as source`."},"maxWords":{"type":"integer"},"focus":{"type":"string","description":"Present when a focus was requested."},"text":{"type":"string","description":"The summary (bullets as `- ` lines)."},"bullets":{"type":"array","items":{"type":"string"},"description":"Only for `summary=bullets`: the bullet points without markers."},"inputChars":{"type":"integer","description":"Characters of article text the model read."},"inputTruncated":{"type":"boolean","description":"The article was longer than the model input cap (about 6,000 tokens) and was cut."},"tokens":{"type":"object","description":"AI tokens used for this summary.","properties":{"input":{"type":"integer","nullable":true},"output":{"type":"integer","nullable":true}}}}},"fallbackReason":{"type":"string","description":"Why a real browser was used (render=auto)."},"pageTypeReason":{"type":"string","description":"Only with allowNonArticle=true for a non-article page: why it is not an article."},"links":{"type":"array","items":{"type":"string"},"description":"Only with includeLinks=true: absolute links inside the article body (up to 500)."},"source":{"type":"string","enum":["text"],"description":"Only when you sent `text` instead of a URL (then url/finalUrl are null and only title, counts and summary are returned)."}}},"example":{"success":true,"url":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","finalUrl":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","canonicalUrl":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","statusCode":200,"renderedWith":"http","isArticle":true,"pageType":"article","articleType":"NewsArticle","title":"Trump administration diverts human rights funds to push far-right agenda abroad","description":"Support for white Afrikaners, anti-communism and others reveals how US redefining what qualifies as human rights","author":"Andrew Roth, Joseph Gedeon","authors":["Andrew Roth","Joseph Gedeon"],"publishedAt":"2026-09-30T19:51:24.000Z","modifiedAt":"2026-09-30T19:51:24.000Z","siteName":"the Guardian","publisher":"The Guardian","language":"en","leadImage":"https://i.guim.co.uk/img/media/41ac63906656f3420c997c8618d3b3a1a86a0811/720_0_7200_5760/master/7200.jpg?width=1200&height=630&quality=85&auto=format&fit=crop&precrop=40:21,offset-x50,offset-y0&overlay-align=bottom%2Cleft&overlay-width=100p&overlay-base64=L2ltZy9zdGF0aWMvb3ZlcmxheXMvdGctZGVmYXVsdC5wb…","tags":["US foreign policy","South Africa","US news","Africa"],"paywalled":false,"wordCount":1443,"readingTimeMinutes":6,"tokensEstimate":2373,"chars":10341,"format":"markdown","markdown":null,"text":null,"truncated":false,"images":["https://i.guim.co.uk/img/media/41ac63906656f3420c997c8618d3b3a1a86a0811/0_0_8640_5760/master/8640.jpg?width=465&dpr=1&s=none&crop=none"],"summaryGenerated":true,"summary":{"style":"bullets","language":"same as source","maxWords":90,"text":"- The Trump administration is diverting human rights funds to push a far-right agenda abroad, including support for white Afrikaners and anti-communism.\n- The administration is directing over $175m of the state department's flagship human rights fund to a slate of awards, including a $40m grant for …","bullets":["The Trump administration is diverting human rights funds to push a far-right agenda abroad, including support for white Afrikaners and anti-communism.","The administration is directing over $175m of the state department's flagship human rights fund to a slate of awards, including a $40m grant for an anti-communism fund.","A $1m award is allocated to fund civil society groups opposing Brazil's supreme court, while a $2m program will promote \"Western Civilization Allies\" in Europe.","The state department obligated the funds to grantees hours before the deadline, despite congressional concerns and requests not to do so."],"inputChars":9573,"inputTruncated":false,"tokens":{"input":2027,"output":211}}}}}},"400":{"description":"Invalid parameter (`invalid_request`) or a private/local target (`url_not_allowed`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"success":false,"error":{"code":"url_not_allowed","message":"private, local and reserved hosts are not allowed"}}}}},"413":{"description":"Request body or target document too large (`too_large`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"The page is not an article (`not_an_article`: a home page, a listing, a login wall, a paywall teaser, a cookie-consent page, a bot check, a product page or a page with almost no text; `details.pageType` says which — no AI work is done and nothing is summarized), the site refused (`target_blocked`), could not be reached (`target_unreachable`), the page does not exist (`target_error`, HTTP 404/410), or it is not a web page (`unsupported_content`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"success":false,"error":{"code":"not_an_article","message":"This page is not an article: this page lists articles or links rather than being one.","details":{"pageType":"listing","finalUrl":"https://www.bbc.com/news","title":"BBC News - Breaking news, video and the latest top stories from the U.S. and around the world","renderedWith":"http"}}}}}},"502":{"description":"Temporary failure on our side (`upstream_error`); safe to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"The target did not respond in time (`timeout`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"articleSummary","summary":"Extract an article and summarize it with AI","description":"The same extraction as `/api/v1/article`, then an AI summary (Llama 3.3 70B) grounded in the article text only. The body is returned only with `includeContent=true`. Or send your own `text` (POST) to summarize it without a URL. Non-articles are refused (`422 not_an_article`) before the model runs; paywall teasers are never summarized. `summaryGenerated: true` and header `x-summary-generated: true` mark answers that contain a summary.\n\nThe same parameters as the GET form, sent as a JSON body.","tags":["Article"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Article URL (or send `text`). A bare domain is accepted; private and local addresses are refused."},"format":{"type":"string","default":"markdown","enum":["markdown","text","both"],"description":"Body format: `markdown`, `text` (plain text) or `both`."},"maxChars":{"type":"integer","default":200000,"minimum":100,"maximum":500000,"description":"Cut the body at this many characters (`truncated` tells you). Counts (words, tokens) always describe the whole article."},"includeLinks":{"type":"boolean","default":false,"description":"Also return the absolute links inside the article body (up to 500)."},"allowNonArticle":{"type":"boolean","default":false,"description":"Return home pages, listings, product pages and paywall teasers too (with `isArticle: false` and `pageType`) instead of `422 not_an_article`. Bot checks, login walls, consent pages and empty pages are always refused."},"render":{"type":"string","default":"auto","enum":["auto","never","always"],"description":"`auto` (default): plain HTTP first, a real Chrome browser only when the site blocks plain requests or needs JavaScript. `never`: HTTP only. `always`: browser only."},"timeoutMs":{"type":"integer","default":20000,"minimum":1000,"maximum":30000,"description":"Page-load timeout in milliseconds."},"summary":{"type":"string","default":"paragraph","enum":["tldr","paragraph","bullets"],"description":"Summary shape: `tldr` (one sentence), `paragraph` or `bullets` (up to 7)."},"maxWords":{"type":"integer","minimum":10,"maximum":300,"description":"Approximate summary length. Default: 30 (tldr), 100 (paragraph), 120 (bullets)."},"language":{"type":"string","description":"Write the summary in this language (e.g. `English`, `Spanish`, `Traditional Chinese`). Default: the article's language."},"focus":{"type":"string","description":"What the summary should focus on (e.g. `numbers and dates`)."},"includeContent":{"type":"boolean","default":false,"description":"Also return the article body (`markdown` / `text`, per `format`)."},"text":{"type":"string","description":"Your own text to summarize instead of a URL (200 to 100,000 characters; send it in a POST body). Then `url` is not needed."},"title":{"type":"string","description":"Optional title for `text`."}}}}}},"responses":{"200":{"description":"Success.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"url":{"type":"string"},"finalUrl":{"type":"string"},"canonicalUrl":{"type":"string","nullable":true},"statusCode":{"type":"integer","nullable":true},"renderedWith":{"type":"string"},"isArticle":{"type":"boolean"},"pageType":{"type":"string","enum":["article","home","listing","product","paywall"],"description":"`article`, or (only with allowNonArticle=true) the kind of non-article page."},"articleType":{"type":"string","nullable":true},"title":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"author":{"type":"string","nullable":true},"authors":{"type":"array","items":{"type":"string"}},"publishedAt":{"type":"string","nullable":true},"modifiedAt":{"type":"string","nullable":true},"siteName":{"type":"string","nullable":true},"publisher":{"type":"string","nullable":true},"language":{"type":"string","nullable":true},"leadImage":{"type":"string","nullable":true},"tags":{"type":"array","items":{"type":"string"}},"paywalled":{"type":"boolean"},"wordCount":{"type":"integer"},"readingTimeMinutes":{"type":"integer"},"tokensEstimate":{"type":"integer"},"chars":{"type":"integer"},"format":{"type":"string"},"markdown":{"type":"string","nullable":true,"description":"The article as Markdown when includeContent=true (and format markdown/both), else null."},"text":{"type":"string","nullable":true,"description":"The article as plain text when includeContent=true (and format text/both), else null."},"truncated":{"type":"boolean"},"images":{"type":"array","items":{"type":"string"}},"summaryGenerated":{"type":"boolean","description":"true: this answer contains an AI summary (billed as a Summary)."},"summary":{"type":"object","description":"The AI summary.","properties":{"style":{"type":"string","enum":["tldr","paragraph","bullets"]},"language":{"type":"string","description":"Language requested, or `same as source`."},"maxWords":{"type":"integer"},"focus":{"type":"string","description":"Present when a focus was requested."},"text":{"type":"string","description":"The summary (bullets as `- ` lines)."},"bullets":{"type":"array","items":{"type":"string"},"description":"Only for `summary=bullets`: the bullet points without markers."},"inputChars":{"type":"integer","description":"Characters of article text the model read."},"inputTruncated":{"type":"boolean","description":"The article was longer than the model input cap (about 6,000 tokens) and was cut."},"tokens":{"type":"object","description":"AI tokens used for this summary.","properties":{"input":{"type":"integer","nullable":true},"output":{"type":"integer","nullable":true}}}}},"fallbackReason":{"type":"string","description":"Why a real browser was used (render=auto)."},"pageTypeReason":{"type":"string","description":"Only with allowNonArticle=true for a non-article page: why it is not an article."},"links":{"type":"array","items":{"type":"string"},"description":"Only with includeLinks=true: absolute links inside the article body (up to 500)."},"source":{"type":"string","enum":["text"],"description":"Only when you sent `text` instead of a URL (then url/finalUrl are null and only title, counts and summary are returned)."}}},"example":{"success":true,"url":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","finalUrl":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","canonicalUrl":"https://www.theguardian.com/us-news/2026/sep/30/trump-state-department-human-rights-fund","statusCode":200,"renderedWith":"http","isArticle":true,"pageType":"article","articleType":"NewsArticle","title":"Trump administration diverts human rights funds to push far-right agenda abroad","description":"Support for white Afrikaners, anti-communism and others reveals how US redefining what qualifies as human rights","author":"Andrew Roth, Joseph Gedeon","authors":["Andrew Roth","Joseph Gedeon"],"publishedAt":"2026-09-30T19:51:24.000Z","modifiedAt":"2026-09-30T19:51:24.000Z","siteName":"the Guardian","publisher":"The Guardian","language":"en","leadImage":"https://i.guim.co.uk/img/media/41ac63906656f3420c997c8618d3b3a1a86a0811/720_0_7200_5760/master/7200.jpg?width=1200&height=630&quality=85&auto=format&fit=crop&precrop=40:21,offset-x50,offset-y0&overlay-align=bottom%2Cleft&overlay-width=100p&overlay-base64=L2ltZy9zdGF0aWMvb3ZlcmxheXMvdGctZGVmYXVsdC5wb…","tags":["US foreign policy","South Africa","US news","Africa"],"paywalled":false,"wordCount":1443,"readingTimeMinutes":6,"tokensEstimate":2373,"chars":10341,"format":"markdown","markdown":null,"text":null,"truncated":false,"images":["https://i.guim.co.uk/img/media/41ac63906656f3420c997c8618d3b3a1a86a0811/0_0_8640_5760/master/8640.jpg?width=465&dpr=1&s=none&crop=none"],"summaryGenerated":true,"summary":{"style":"bullets","language":"same as source","maxWords":90,"text":"- The Trump administration is diverting human rights funds to push a far-right agenda abroad, including support for white Afrikaners and anti-communism.\n- The administration is directing over $175m of the state department's flagship human rights fund to a slate of awards, including a $40m grant for …","bullets":["The Trump administration is diverting human rights funds to push a far-right agenda abroad, including support for white Afrikaners and anti-communism.","The administration is directing over $175m of the state department's flagship human rights fund to a slate of awards, including a $40m grant for an anti-communism fund.","A $1m award is allocated to fund civil society groups opposing Brazil's supreme court, while a $2m program will promote \"Western Civilization Allies\" in Europe.","The state department obligated the funds to grantees hours before the deadline, despite congressional concerns and requests not to do so."],"inputChars":9573,"inputTruncated":false,"tokens":{"input":2027,"output":211}}}}}},"400":{"description":"Invalid parameter (`invalid_request`) or a private/local target (`url_not_allowed`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"success":false,"error":{"code":"url_not_allowed","message":"private, local and reserved hosts are not allowed"}}}}},"413":{"description":"Request body or target document too large (`too_large`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"The page is not an article (`not_an_article`: a home page, a listing, a login wall, a paywall teaser, a cookie-consent page, a bot check, a product page or a page with almost no text; `details.pageType` says which — no AI work is done and nothing is summarized), the site refused (`target_blocked`), could not be reached (`target_unreachable`), the page does not exist (`target_error`, HTTP 404/410), or it is not a web page (`unsupported_content`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"example":{"success":false,"error":{"code":"not_an_article","message":"This page is not an article: this page lists articles or links rather than being one.","details":{"pageType":"listing","finalUrl":"https://www.bbc.com/news","title":"BBC News - Breaking news, video and the latest top stories from the U.S. and around the world","renderedWith":"http"}}}}}},"502":{"description":"Temporary failure on our side (`upstream_error`); safe to retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"504":{"description":"The target did not respond in time (`timeout`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"Error":{"type":"object","required":["success","error"],"properties":{"success":{"const":false},"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["not_configured","unauthorized","not_found","method_not_allowed","invalid_request","rate_limited","url_not_allowed","target_blocked","target_unreachable","target_error","unsupported_content","too_large","timeout","upstream_error","board_not_found","app_not_found","not_an_article"]},"message":{"type":"string"},"retryable":{"type":"boolean","description":"true for rate_limited, timeout, upstream_error and browser_busy; false for other errors."},"retryAfterSeconds":{"type":"integer","description":"Seconds to wait before retrying, when a numeric Retry-After header is present."},"details":{"type":"object","additionalProperties":true}}}}}}}}