---
name: fraiburg-news
description:
  Skill für die KI-Nachrichtenplattform FrAIburg.news.
  Nutze die API um Artikel, Veranstaltungen und Kategorien zu KI-Nachrichten aus Freiburg im Breisgau
  sowie kuratierte globale KI-Schlagzeilen abzufragen. Nutze diesen Skill, wenn du KI-Nachrichten
  aus der Region Freiburg oder aus aller Welt suchst.
---

# FrAIburg.news

Öffentliche API für KI-Nachrichten aus Freiburg im Breisgau, Deutschland und der Welt.

Basis-URL: `https://fraiburg.news/api`

Alle Endpunkte geben JSON zurück. Alle Inhalte sind auf Deutsch. Es ist keine Authentifizierung erforderlich. Öffentliche Lese-Endpunkte liefern nur Inhalte, die aktuell auf der Website stehen.

## Artikel-Layout der Startseite

Artikel verwenden unveränderliche IDs. Die Platzierung auf der Startseite wird als abgeleitete Anzeige-Slots ausgegeben.

Lokale und weltweite Nachrichten erscheinen jeweils als 4-Spalten-Raster:
- Lokal: `l-1` bis `l-4` erste Reihe, `l-5` bis `l-8` zweite Reihe, `l-9` bis `l-12` dritte Reihe, jeweils von links nach rechts.
- Weltweit: `w-1` bis `w-4` erste Reihe, `w-5` bis `w-8` zweite Reihe, `w-9` bis `w-12` dritte Reihe, jeweils von links nach rechts.

Neue Artikel werden als `l-1` bzw. `w-1` eingefügt. Ältere Artikel rücken nach unten; der bisherige Artikel in `l-12` oder `w-12` wird archiviert und aus den öffentlichen API-Antworten entfernt. `GET /articles` und `GET /articles/{id}` liefern ausschließlich die Artikel in `l-1`–`l-12` und `w-1`–`w-12`. Entwürfe, archivierte Artikel und ältere Artikel ohne Slot fehlen; ein solcher Einzelabruf antwortet mit 404. Die Startseite zeigt Slots in aufsteigender Reihenfolge. `GET /articles` sortiert dagegen nach `publishedAt` absteigend — der erste Listeneintrag ist daher nicht unbedingt `l-1`.

## Artikel

### Artikel auflisten

```
GET https://fraiburg.news/api/articles
```

Query-Parameter (alle optional):

| Parameter   | Typ     | Beschreibung                               |
|-------------|---------|--------------------------------------------|
| `section`   | string  | Seitenbereich: `LOKAL` oder `WELT` |
| `category`  | string  | Kategorie-Slug                             |
| `limit`     | integer | Ergebnisse pro Seite, 1–100 (Standard: 20) |
| `offset`    | integer | Paginierungs-Offset (Standard: 0)          |

Antwort (200):

```json
{
  "articles": [ ... ],
  "pagination": { "limit": 20, "offset": 0, "total": 42 },
  "filters": { "section": null, "category": null }
}
```

### Einzelnen Artikel abrufen

```
GET https://fraiburg.news/api/articles/{id-oder-slug-oder-anzeigeSlot}
```

Anzeige-Slots wie `l-1` und `w-1` verweisen auf den aktuell veröffentlichten Artikel in diesem Startseiten-Slot.

Antwort (200): `{ "article": { ... } }` — ohne `homepageSlot`, `status` oder `uploadedAt`. Die Platzierung steht in `displaySlot`.

## RSS

`GET https://fraiburg.news/rss.xml` liefert die neuesten veröffentlichten Artikel und Veranstaltungen.

## Veranstaltungen

Veranstaltungen werden über die dafür vorgesehenen `/events`-Endpunkte verwaltet. Der Artikel-Filter `section` akzeptiert nur `LOKAL` oder `WELT`.

### Veranstaltungen auflisten

```
GET https://fraiburg.news/api/events
```

Query-Parameter (alle optional):

| Parameter   | Typ     | Beschreibung                          |
|-------------|---------|---------------------------------------|
| `category`  | string  | Freitext, z. B. `Vor-Ort` oder `Virtuell` |
| `limit`     | integer | Ergebnisse pro Seite, 1–100 (Standard: 20) |
| `offset`    | integer | Paginierungs-Offset (Standard: 0)     |

Ergebnisse werden aufsteigend nach einem internen `datetime`-Feld sortiert. Das Feld `datetime` ist nicht in Veranstaltungsantworten enthalten; nutze `when` als Anzeige-Text. Zurückgegeben werden nur kommende Veranstaltungen, die auf der Startseite stehen: `publishedAt` ist gesetzt und `datetime` liegt strikt nach dem Zeitpunkt der Anfrage. Vergangene Veranstaltungen fehlen. `GET /events/{id-oder-slug}` antwortet für sie mit 404.

Antwort (200):

```json
{
  "events": [ ... ],
  "pagination": { "limit": 20, "offset": 0, "total": 5 },
  "filters": { "category": null }
}
```

### Einzelne Veranstaltung abrufen

```
GET https://fraiburg.news/api/events/{id-oder-slug}
```

Antwort (200): `{ "event": { ... } }`

## Kategorien

### Kategorien auflisten

```
GET https://fraiburg.news/api/categories
```

### Einzelne Kategorie abrufen

```
GET https://fraiburg.news/api/categories/{id-oder-slug}
```

## Statusprüfung

```
GET https://fraiburg.news/api/health
```

Antwort (200): `{ "status": "ok", "service": "fraiburg.news", "timestamp": "..." }`

