---
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 Artikel-Endpunkte geben nur Artikel mit dem Status `PUBLISHED` zurück.

## Artikel-Layout der Startseite

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

Lokale Nachrichten:
- `lf-1` ist der hervorgehobene lokale Artikel.
- `l-1`/`l-2`, `l-3`/`l-4` und `l-5`/`l-6` bilden drei Reihen in zwei Spalten rechts neben `lf-1`.
- `l-7` bis `l-10` bilden die einzelne Reihe unterhalb des lokalen Hauptlayouts, von links nach rechts.

Weltweite Nachrichten:
- `wf-1` ist der hervorgehobene weltweite Artikel.
- `w-1`/`w-2` und `w-3`/`w-4` bilden zwei Reihen in zwei Spalten rechts neben `wf-1`.
- `w-5` bis `w-8` bilden die einzelne Reihe unterhalb des weltweiten Hauptlayouts, von links nach rechts.
- `w-9` und `w-10` sind weitere Standard-Slots der öffentlichen API, erscheinen aber nicht im Startseitenraster.

`l-1` und `w-1` sind die neuesten nicht hervorgehobenen Anzeige-Slots in ihren jeweiligen Bereichen. Ältere nicht hervorgehobene Artikel rücken nach unten, wenn ein neuerer Artikel erstellt wird; der bisherige Artikel in `l-10` oder `w-10` wird archiviert und aus den öffentlichen API-Antworten entfernt.

## Artikel

### Artikel auflisten

```
GET /articles
```

Query-Parameter (alle optional):

| Parameter   | Typ     | Beschreibung                               |
|-------------|---------|--------------------------------------------|
| `section`   | string  | Seitenbereich: `LOKAL` oder `WELT` |
| `category`  | string  | Kategorie-Slug                             |
| `featured`  | string  | `true` oder `false`                        |
| `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, "featured": null }
}
```

### Einzelnen Artikel abrufen

```
GET /articles/{id-oder-slug-oder-anzeigeSlot}
```

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

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

## Veranstaltungen

Veranstaltungen werden über die dafür vorgesehenen `/events`-Endpunkte verwaltet. `EVENTS` ist kein gültiger Wert für den Artikel-Filter `section`.

### Veranstaltungen auflisten

```
GET /events
```

Query-Parameter (alle optional):

| Parameter   | Typ     | Beschreibung                          |
|-------------|---------|---------------------------------------|
| `category`  | string  | `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.

Antwort (200):

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

### Einzelne Veranstaltung abrufen

```
GET /events/{id-oder-slug}
```

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

## Kategorien

### Kategorien auflisten

```
GET /categories
```

### Einzelne Kategorie abrufen

```
GET /categories/{id-oder-slug}
```

## Statusprüfung

```
GET /health
```

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