# EventIndex.ai — Data model

One canonical schema, used everywhere: database, REST API, MCP server and the
YAML frontmatter of every `.md` page. Any divergence between surfaces is a bug.

## Event

| Field | Type | Notes |
|---|---|---|
| `id` | string | Stable, never reused, prefixed: `evt_9f3k2mqx` — the "ISBN" of the event |
| `status` | enum | `live` · `cancelled` · `postponed` · `expired` (drafts are never published) |
| `title` | string | Canonical English title |
| `title_local` | string | Original-language title, preserved verbatim |
| `summary` | string | 1–2 sentences, written by us — never copied from sources |
| `category` | enum | 16 flat top-level categories (see below) |
| `subcategory`, `tags` | string, string[] | Finer taxonomy |
| `start`, `end` | datetime | Always with explicit timezone offset |
| `timezone` | string | IANA name, e.g. `Europe/Rome` |
| `venue` | object | `id` (`ven_…`), `name`, `address`, `lat`, `lng`, `h3_r8`, `geocode_confidence` |
| `city` | object | `slug`, `name`, `country` (ISO 3166-1 alpha-2) |
| `is_online` | bool | |
| `price` | object | `min`, `max`, `currency`, `is_free` |
| `tickets_url` | string | Always points to the source/ticketing site — we send traffic |
| `organizer` | object | `name`, `verified` |
| `sources` | object[] | Full provenance: `source_id`, `url`, `first_seen`, `last_seen` |
| `quality_score` | float | 0–1, exposed for transparency (see below) |
| `confidence` | enum | `confirmed` (2+ sources or organizer) · `single_source` · `uncertain` |
| `last_verified` | datetime | When we last re-checked the event against its sources |

## Categories

`music`, `nightlife`, `performing-arts`, `exhibitions`, `film`, `food-drink`,
`festivals`, `markets-fairs`, `sports`, `fitness-wellness`, `family-kids`,
`talks-education`, `business-networking`, `community`, `tech`, `other`.

## Quality score

`0.30·source_trust + 0.25·completeness + 0.20·cross_confirmation +
0.15·geocode_confidence + 0.10·freshness_decay`. Events enter sitemaps and
default API/MCP results above **0.75**.

## Every page as markdown

Append `.md` to any URL (or send `Accept: text/markdown`) to get this same
data as markdown with YAML frontmatter. REST API: [https://eventindex.ai/openapi.json](https://eventindex.ai/openapi.json).
