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
| Resource | What it holds |
|---|---|
| /llms.txt | An index of the site for language models, with a one-line description of every important page. |
| /llms-full.txt | The core English pages as one text file. |
| /{page}/index.md | A Markdown twin of every indexed page, such as /coliving/index.md. Pages kept out of search have none. |
| /pricing.md | Every published rate. |
| /facts.md | Key facts: location, units, check-in times, policies and contact details. |
| /sitemap.xml | Every indexed URL with the date it last changed. |
| /openapi.json | An 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.
| Parameter | Type | Required | Example | Meaning |
|---|---|---|---|---|
check_in | date, YYYY-MM-DD | No | 2027-03-08 | Arrival date |
check_out | date, YYYY-MM-DD | No | 2027-03-12 | Departure date, after check_in |
adults | integer, 1 or more | No | 2 | Number of adults |
curl -sI "https://hamletsfriends.com/book-now/?check_in=2027-03-08&check_out=2027-03-12&adults=2"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);HTTP/2 200
content-type: text/htmlCheck 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 -s https://hamletsfriends.com/api/internet-status \
-H "x-status-password: $HF_STATUS_PASSWORD"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}`));{
"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 }
}