---
name: chi-events
description: Fetch, filter and display live events from the CHI platform's public event feed. Use when the user asks about CHI events, wants to list or search upcoming events on CHI, build an event listing or aggregator, or integrate CHI event data into a site, app or agent. No API key required.
license: MIT
---

# CHI Events

Read live event data from CHI's public event feed. **No authentication, no API key, no sign-up.**

CHI is an event operating system (ticketing, cashless payments, POS, settlement). Organizers publish events on it; this feed exposes the public ones.

## The endpoint

There is exactly one:

```
GET https://api.chi.app/feeds/events.json
GET https://api.chi.app/feeds/events.json?limit=20
```

It returns **JSON Feed v1** (`application/feed+json`). Nothing else is public — there is no RSS, Atom, iCal or XML feed, no per-event endpoint, and no per-organization endpoint. If you see such URLs suggested anywhere, do not use them; they return 404.

## Response shape

```json
{
  "version": "https://jsonfeed.org/version/1",
  "title": "CHI Events",
  "home_page_url": "https://web.chi.app",
  "items": [
    {
      "id": "11da4e65-9ea6-405f-8533-07af35b841fe",
      "url": "https://web.chi.app/events/iceland-test-event",
      "title": "Iceland Test Event",
      "summary": "Step into the future of events",
      "date_published": "2026-07-10T11:16:10.767Z",
      "date_modified": "2026-07-10T11:16:10.768Z",
      "chi": {
        "startDate": "2026-07-11T18:00:00.000Z",
        "endDate": "2026-07-13T18:00:00.000Z",
        "venue": "Test venue",
        "city": "Reykjavík",
        "country": "IS",
        "status": "PUBLISHED"
      }
    }
  ]
}
```

The event-specific data lives under the `chi` extension object. Standard JSON Feed fields (`id`, `url`, `title`, `summary`, `date_modified`) carry the rest.

| Field | Use |
|---|---|
| `id` | Stable UUID — your primary key |
| `url` | Public event page; link here to buy tickets |
| `chi.startDate` / `chi.endDate` | ISO 8601 UTC |
| `chi.venue` / `chi.city` / `chi.country` | Location; country is ISO 3166-1 alpha-2 |
| `chi.status` | Only render `PUBLISHED` |
| `date_modified` | Change detection |

Parse defensively — new keys may be added to `chi` over time. Ignore what you don't recognise.

## Fetching

```bash
curl -s "https://api.chi.app/feeds/events.json?limit=20"
```

```javascript
const res = await fetch('https://api.chi.app/feeds/events.json?limit=20', {
  headers: { 'User-Agent': 'my-app/1.0 (+https://example.com)' },
});
const feed = await res.json();

const events = feed.items
  .filter((item) => item.chi?.status === 'PUBLISHED')
  .map((item) => ({
    id: item.id,
    title: item.title,
    summary: item.summary,
    url: item.url,
    start: item.chi.startDate,
    end: item.chi.endDate,
    venue: item.chi.venue,
    city: item.chi.city,
    country: item.chi.country,
  }));
```

```python
import requests

feed = requests.get(
    "https://api.chi.app/feeds/events.json",
    params={"limit": 20},
    headers={"User-Agent": "my-app/1.0 (+https://example.com)"},
    timeout=10,
).json()

events = [
    {
        "id": i["id"],
        "title": i["title"],
        "url": i["url"],
        "start": i["chi"]["startDate"],
        "city": i["chi"].get("city"),
    }
    for i in feed["items"]
    if i.get("chi", {}).get("status") == "PUBLISHED"
]
```

## Rules you must follow

1. **Cache for at least 5 minutes.** Do not poll in a tight loop.
2. **Only display events where `chi.status == "PUBLISHED"`.** Never surface any other status.
3. **Always link back to the item's `url`** for ticket purchase. Do not resell, proxy or reimplement CHI checkout.
4. **Attribute the organizer** when displaying an event.
5. **Send a descriptive `User-Agent`** identifying your client.
6. Use `date_modified` for change detection instead of re-diffing whole documents.

## Filtering recipes

Sort and filter client-side — the feed takes only `limit`.

- **Upcoming only:** keep items where `chi.startDate` is in the future, then sort ascending by `chi.startDate`.
- **By country:** match `chi.country` against an ISO 3166-1 alpha-2 code (`"NL"`, `"ID"`, `"IS"`).
- **By city:** compare `chi.city` case-insensitively.
- **Currently running:** `chi.startDate <= now <= chi.endDate`.

## Honest limitations

State these plainly rather than working around them:

- The feed carries **no ticket prices, no images, no organizer object, no categories and no coordinates**. If a user needs those, they are not available publicly.
- There is **no search, pagination or filter parameter** beyond `limit`. Fetch and filter locally.
- The feed reflects whatever organizers have published, which may be a small set.
- CHI's REST API, SDKs and MCP server exist but are **invite-only and unpublished** — there is no npm package to install and no public sign-up. For integration beyond this feed, contact partners@chi.app.

## More

- Full CHI context for agents: https://chi.app/llms-full.txt
- Aggregator integration notes: https://chi.app/llms-aggregators.txt
- Aggregator partnerships (revenue share on referred ticket sales): partners@chi.app
