Skip to main content

For developers and AI agents

What software can read on hamletsfriends.com, and how to send someone to the booking engine.

Start with these files

Files for software
ResourceWhat it holds
/llms.txtAn index of the site for language models, with a one-line description of every important page.
/llms-full.txtThe core English pages as one text file.
/{page}/index.mdA Markdown twin of every indexed page, such as /coliving/index.md. Pages kept out of search have none.
/pricing.mdEvery published rate.
/facts.mdKey facts: location, units, check-in times, policies and contact details.
/sitemap.xmlEvery indexed URL with the date it last changed.
/openapi.jsonAn OpenAPI 3.1 description of all of the above, the booking link and internet status.

None of these need a key or a login. The details are on the authentication, rate limits and errors pages. The glossary defines the words the site uses.

Send someone to the booking engine

GET /book-now/ returns the booking page. The Sirvoy booking widget on it reads three query parameters and shows the rooms and cabins free on those dates, with their prices. Without them it shows an empty search. We don't publish availability or live prices in machine-readable form, so build the link and hand it to the person who wants to book.

Query parameters of /book-now/
ParameterTypeRequiredExampleMeaning
check_indate, YYYY-MM-DDNo2027-03-08Arrival date
check_outdate, YYYY-MM-DDNo2027-03-12Departure date, after check_in
adultsinteger, 1 or moreNo2Number of adults
curl
curl -sI "https://hamletsfriends.com/book-now/?check_in=2027-03-08&check_out=2027-03-12&adults=2"
JavaScript
const url = new URL('https://hamletsfriends.com/book-now/');
url.searchParams.set('check_in', '2027-03-08');
url.searchParams.set('check_out', '2027-03-12');
url.searchParams.set('adults', '2');
console.log(url.href);
Response
HTTP/2 200
content-type: text/html

Check the internet at the finca

GET /api/internet-status returns the state of the finca's internet connection and of the Wi-Fi in three areas: the coworking space, the grounds with the cabins, and the Molino. level is ok, degraded or outage for the connection, and ok, limited or down for each area. From the finca's network it needs no password; from anywhere else, see authentication.

curl
curl -s https://hamletsfriends.com/api/internet-status \
  -H "x-status-password: $HF_STATUS_PASSWORD"
JavaScript
const response = await fetch('https://hamletsfriends.com/api/internet-status', {
  headers: { 'x-status-password': process.env.HF_STATUS_PASSWORD },
});
const { internet, spots } = await response.json();
console.log(internet.level, spots.map((s) => `${s.key}: ${s.level}`));
Response
{
  "updatedAt": "2026-10-15T09:40:12.000Z",
  "internet": { "level": "ok", "attribution": "ok" },
  "spots": [
    { "key": "coworking", "level": "ok", "showAps": false, "aps": [] },
    { "key": "terrain", "level": "limited", "showAps": true,
      "aps": [{ "key": "cabin-3", "level": "limited", "reason": "flapping" }] },
    { "key": "molino", "level": "ok", "showAps": true, "aps": [] }
  ],
  "override": { "active": false }
}