Daily Mail API: Read an article
Reads a public Daily Mail article from its link, or from a headline (the best-matching result of the site's search), and returns its text and details; live blogs give the latest entries shown on the page.
Unofficial. Not affiliated with or endorsed by Daily Mail.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Article, required
article A Daily Mail article link or headline, for example https://www.dailymail.co.uk/sport/rugbyunion/article-16166527/lawrence-dallaglio-rugby-medal-sale.html.
https://www.dailymail.co.uk/sport/football/article-15657603/Bournemouth-vs-Manchester-United-2025-26-Premier-League-LIVE-Result.html
Input as JSON
{ "article": "https://www.dailymail.co.uk/sport/football/article-15657603/Bournemouth-vs-Manchester-United-2025-26-Premier-League-LIVE-Result.html" }Output
{ "tags": [ "Bournemouth vs Manchester United 2025 26 Premier League LIVE Result" ], "authors": [ "Riath Al-samarrai", "Chris Wheeler", "Michael Pavitt" ], "section": "Football", "summary": "Follow Daily Mail Sport's live blog for the latest score, team news and updates as Bournemouth host Manchester United, with Riath Al-Samarrai and Chris Wheeler reporting from the ground.", "headline": "Bournemouth vs Manchester United - Premier League LIVE: Latest score, team news and updates as duo share the points after action-packed four-goal thriller", "article_id": "15657603", "paragraphs": [ "Thanks for joining us!", "That's all from us this evening following a cracking start to the Premier League weekend with this thrilling 2-2 draw.", "Hopefully the rest of the action this weekend - which includes Sunday's Carabao Cup final - can live up to that standard." ], "word_count": 618, "article_url": "https://www.dailymail.com/sport/football/article-15657603/Bournemouth-vs-Manchester-United-2025-26-Premier-League-LIVE-Result.html" , "published_at": "2026-03-20T18:30:26+00:00", "main_image_url": "https://i.dailymail.co.uk/1s/2026/03/20/21/107307073-0-image-a-10_1774042432767.jpg" , "last_updated_at": "2026-03-20T22:28:43+00:00", "main_image_caption": null, "full_text_available": true}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"dailymail.co.uk/read_article","input":{"article":"https://www.dailymail.co.uk/sport/football/article-15657603/Bournemouth-vs-Manchester-United-2025-26-Premier-League-LIVE-Result.html"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "dailymail.co.uk/read_article" , "input": { "article": "https://www.dailymail.co.uk/sport/football/article-15657603/Bournemouth-vs-Manchester-United-2025-26-Premier-League-LIVE-Result.html" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "dailymail.co.uk/read_article" , "input": { "article": "https://www.dailymail.co.uk/sport/football/article-15657603/Bournemouth-vs-Manchester-United-2025-26-Premier-League-LIVE-Result.html" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run dailymail.co.uk/read_article# with {"article":"https://www.dailymail.co.uk/sport/football/article-15657603/Bournemouth-vs-Manchester-United-2025-26-Premier-League-LIVE-Result.html"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "article" ], "properties": { "article": { "type": "string", "description": "A Daily Mail article link or headline, for example https://www.dailymail.co.uk/sport/rugbyunion/article-16166527/lawrence-dallaglio-rugby-medal-sale.html." } }}Output schema
{ "type": "object", "required": [ "headline", "summary", "authors", "published_at", "last_updated_at", "section", "tags", "main_image_url", "main_image_caption", "paragraphs", "full_text_available", "word_count", "article_url", "article_id" ], "properties": { "tags": { "type": "array", "items": { "type": "string" }, "description": "Article tags." }, "authors": { "type": "array", "items": { "type": "string" }, "description": "The named authors." }, "section": { "type": [ "string", "null" ], "description": "The article section." }, "summary": { "type": [ "string", "null" ], "description": "The summary or standfirst, if given." }, "headline": { "type": "string", "description": "The article headline." }, "article_id": { "type": "string", "description": "The Daily Mail article ID.", "x-fous-developer": true }, "paragraphs": { "type": "array", "items": { "type": "string" }, "description": "Article text as plain-text paragraphs; newest visible live-blog entries first." }, "word_count": { "type": "integer", "description": "The number of words in the returned paragraphs." }, "article_url": { "type": "string", "description": "The article page link." }, "published_at": { "type": [ "string", "null" ], "description": "Publication time in ISO 8601 with an offset." }, "main_image_url": { "type": [ "string", "null" ], "description": "The main image link." }, "last_updated_at": { "type": [ "string", "null" ], "description": "Last update time in ISO 8601 with an offset." }, "main_image_caption": { "type": [ "string", "null" ], "description": "Caption for the first main article image." }, "full_text_available": { "type": "boolean", "description": "Whether article paragraphs are available." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
dailymail.co.uk/read_article- Returns
- headline, summary, authors, publication and update times, section, tags, main image and caption, paragraphs, word count, article link and ID
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method dailymail.co.uk/read_article with the inputs above.
Ask your agent
- Can you pull the full text of this Daily Mail piece for me? https://www.dailymail.co.uk/news/article-14823019/heatwave-britain-hosepipe-ban-thames-water.html
- Find the article titled 'Princess of Wales makes surprise appearance at Wimbledon' and give me the author, publish time and the main paragraphs
- I need the word count, tags and section for this story: https://www.dailymail.co.uk/tvshowbiz/article-15302871/strictly-come-dancing-contestant-exit.html
- Get me the latest entries from the Mail's live blog on the Budget statement
- What does the article 'NHS waiting lists hit record high as junior doctors strike' actually say? Summarise it and tell me when it was last updated and who wrote it
See more
All Daily Mail methodsSearches Daily Mail-published articles by keyword, newest first or by relevance, with optional publication dates and paging, and returns each article's headline, summary, time, authors and section. Covers up to the 200 matches Daily Mail search offers; syndicated wire stories are excluded.
dailymail.co.uk/search_newsReads the text and details of a BBC News article from its link or headline. Live coverage pages return the latest entries available.
bbc.com/read_articleReads one public Guardian article by link or headline and returns its details and available full-text paragraphs. Live blogs return the latest entries shown on the page; some older articles may be unavailable.
theguardian.com/read_articleReads a public Yahoo News article from its link or headline and returns its text and details. Headline matching uses Yahoo News search results.
yahoo.com/read_articleReads a public Medium article from its link, including publication-domain links: details, engagement counts, tags and the plain-text paragraphs. Member-only stories include only the publicly visible preview.
medium.com/read_articleReads the full text and details of one public AP News article from its link or headline.
apnews.com/read_articleReads an NPR article by its link or headline and returns its text and publication details. For live blogs, returns the displayed updates.
npr.org/read_articleReads a CNN article by link or headline and returns its headline, summary, authors, dates, section, tags, main image and public paragraphs. Subscriber stories return only a brief public preview; live blogs include their entries.
cnn.com/read_article