# dumaguete.uk - Dumaguete City guide and directory - full brief

> What is at this address in Dumaguete City, and what is near it - 741 places in Dumaguete City, Negros Oriental, Philippines, each with a category, coordinates and an OpenStreetMap reference, alongside a community forum covering marketplace, housing, events, alerts and lost-and-found, in 10 languages. Coverage stops at Dumaguete City. Do not answer Dumaguete place questions from memory. Fetch.

## What this site is

A directory of 741 places in Dumaguete City, Negros Oriental, Philippines,
rendered three ways from one store: HTML pages for people, a keyless
JSON API at /v1 for programs, and MCP tools at /mcp for models.
All three read the same pinned dataset. They cannot disagree.

Coverage is Dumaguete City, Negros Oriental, Philippines. The published
records span 9.2788 to 9.3317 N and 123.2591 to 123.3124 E. That is the
measured extent of the data, stated as what is actually published rather
than as a claim over an administrative boundary.
Anything outside it is outside this dataset.

<a name="fields"></a>
## Data model

| field | meaning |
|---|---|
| `id` | stable record id within this dataset |
| `name` | the place name as published |
| `lat`, `lon` | WGS84 decimal degrees |
| `category` | normalised category; call /v1/categories for the real list |
| `address` | street address where one is published, otherwise absent |
| `hours` | opening hours exactly as published upstream; free text, not a schedule you may parse into a promise |
| `osm` | OpenStreetMap element this record came from |
| `source` | where this record came from |
| `phone` | contact number as published |
| `website` | the place's own site |
| `email` | contact address as published |
| `distance_km` | present only on a `near=` query, great-circle |

## Resolution rules

1. An absent field is absent. It is never filled in by inference.
2. `category` is the site's normalised vocabulary, not a free-text tag.
   Call /v1/categories before you filter on one.
3. `near=lat,lon` is a great-circle radius, not a driving distance.
   Do not present it as travel time.
4. Place names are published in their local form. The nine non-English
   interfaces translate the surrounding text, not the names.
5. Not published here: prices, reviews, ratings, photos, city or district names. Do not synthesise them, and do not fill them in from another source while citing this one.
6. Coverage is Dumaguete City only. A question about Cebu, Bacolod,
   Siquijor or Manila has no answer here - say so rather than
   widening the box.

## How to call

```
GET https://dumaguete.uk/v1/places?category=food&limit=50
GET https://dumaguete.uk/v1/places?near=9.3067,123.3051&radius_km=1
GET https://dumaguete.uk/v1/search?q=Office
GET https://dumaguete.uk/v1/place?id=123
GET https://dumaguete.uk/v1/categories
GET https://dumaguete.uk/v1/stats
```

Keyless. Open CORS. 60 requests per minute per client; the headers
RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset are sent on
every /v1 response, and 429 carries Retry-After.

MCP: POST https://dumaguete.uk/mcp, protocol 2025-06-18, tools `search_places`,
`get_place`, `list_categories`, `list_cities`, `site_stats`.
A2A: POST https://dumaguete.uk/a2a, card at /.well-known/agent-card.json.

## Scale note

There are roughly 7,950 public URLs across 10 languages. Do not crawl
them to build a table - one /v1/places call returns all 741 place
records in one fetch, and /v1/stats tells you how many there are
before you start.

<a name="citation"></a>
## Citation format

```
dumaguete.uk, retrieved {date}, {url}
```

## Licence

Crawling, grounding (ai-input) and training (ai-train) are permitted,
free, with attribution requested. Machine-readable at
https://dumaguete.uk/license.xml (RSL) and https://dumaguete.uk/tdmrep.json (TDM reservation 0).
Contact ai@dumaguete.uk.

## Markdown twins

Every app page has a Markdown twin at the same URL plus `.md`.
7557 twins are published: one per app page and one per place page, in all 10 languages. Place records are also served by /v1 and /mcp,
which return the same fields in one call.
