Westminster City Council API: Follow PeopleFirst link
Follows the PeopleFirst link on Westminster's residents page and returns the destination address, status, title and first 2,000 characters of main text.
Unofficial. Not affiliated with or endorsed by Westminster City Council.
Inputs
This method takes no input.
Input as JSON
{}Output
{ "final_url": "https://www.peoplefirstinfo.org.uk/" , "page_title": "Homepage | People First", "status_code": 200, "source_link_url": "https://www.westminster.gov.uk/node/21229" , "source_page_url": "https://www.westminster.gov.uk/residents" , "source_link_text": "PeopleFirst - adult social care", "main_visible_text": "Supporting independent living and health in Kensington and Chelsea and Westminster All services Health & wellbeing Health and self-care information, including nutrition, exercise, medical support and guides to common health conditions. At home Support to help people live safely and independently at …"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"www.westminster.gov.uk/read_people_first_link","input":{}}' # 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": "www.westminster.gov.uk/read_people_first_link" , "input": {}})# 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": "www.westminster.gov.uk/read_people_first_link" , "input": {} }), 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 www.westminster.gov.uk/read_people_first_link# with {}"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", "properties": {}, "additionalProperties": false}Output schema
{ "type": "object", "required": [ "source_page_url", "source_link_url", "source_link_text", "final_url", "status_code", "page_title", "main_visible_text" ], "properties": { "final_url": { "type": "string", "description": "Final destination link after redirects." }, "page_title": { "type": "string", "description": "Title of the destination page." }, "status_code": { "type": "integer", "description": "HTTP status returned by the destination." }, "source_link_url": { "type": "string", "description": "The PeopleFirst link as found on the residents page." }, "source_page_url": { "type": "string", "description": "The Westminster residents page link." }, "source_link_text": { "type": "string", "description": "The link label shown on the residents page." }, "main_visible_text": { "type": "string", "description": "First 2,000 characters of visible text in the destination main content." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
www.westminster.gov.uk/read_people_first_link- Returns
- source page and link, final destination URL, status code, page title, main visible text
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 www.westminster.gov.uk/read_people_first_link; it needs no input.
Ask your agent
- Can you check where the PeopleFirst link on the Westminster residents page leads and tell me the final URL, status code, and page title?
- I need to know what the PeopleFirst link on Westminster City Council's residents section actually opens. Please follow it and summarise the main text.
- Follow the PeopleFirst link from the council's residents page and report back the destination address, whether it loads successfully, and what the page says.
- What does the PeopleFirst link on the Westminster residents page go to? Give me the landing page title and the opening content.
- Trace the PeopleFirst link from the residents page and show me where it ends up, the HTTP status returned, and the first couple of thousand characters of visible text.
See more
Returns current UK government (FCDO) travel warnings, entry requirements for British passport holders, safety, health and emergency information for a country. Summaries are shortened; follow the link for full details.
gov.uk/get_travel_adviceFinds food businesses by name and town, street or postcode and returns their official food hygiene rating, inspection date and score descriptions. Scottish ratings usually have no component scores.
ratings.food.gov.uk/get_hygiene_ratingFinds the neighbourhood policing team for a UK postcode (England, Wales, Northern Ireland) with its force, contacts, officers, priorities and upcoming events.
police.uk/get_neighbourhood_teamReads 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 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_articlePlans a London public transport journey between two places, stations, addresses or postcodes with the TfL Journey Planner, leaving or arriving at a given time. Returns journey options in TfL order with leg directions and an adult pay-as-you-go fare when available.
tfl.gov.uk/plan_journeyLooks up a UK postcode on Postcodes.io, including its location, administrative areas and whether it is still in use. Retired postcodes return location and retirement year only.
postcodes.io/get_postcodeGets public details for one Airbnb listing from its link. When dates are given, it also returns dated prices and cancellation terms if Airbnb offers a quote.
airbnb.com/get_listing