---
title: "For Developers and AI Agents | Hamlet's Friends"
description: "How software reads Hamlet's Friends: llms.txt, Markdown twins, pricing.md, facts.md, an OpenAPI file, the booking deep link and live internet status."
url: "https://hamletsfriends.com/developers/"
locale: "en"
lastmod: "2026-10-15"
alternates:
  en: "https://hamletsfriends.com/developers/"
  x-default: "https://hamletsfriends.com/developers/"
site_index: "https://hamletsfriends.com/llms.txt"
---
# 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

**Table: Files for software**

| 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](https://hamletsfriends.com/authentication/), [rate limits](https://hamletsfriends.com/rate-limits/) and [errors](https://hamletsfriends.com/errors/) pages. The [glossary](https://hamletsfriends.com/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.

**Table: Query parameters of /book-now/**

| 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

```bash
curl -sI "https://hamletsfriends.com/book-now/?check_in=2027-03-08&check_out=2027-03-12&adults=2"
```

JavaScript

```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
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](https://hamletsfriends.com/authentication/).

curl

```bash
curl -s https://hamletsfriends.com/api/internet-status \
  -H "x-status-password: $HF_STATUS_PASSWORD"
```

JavaScript

```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

```json
{
  "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 }
}
```
