Entwickler
Öffentliche Blog-API
Diese Schnittstelle liefert veröffentlichte Blog-Artikel als JSON: Titel, Teaser, Kategorie, Zeitstempel und feste Links zur Originalseite. Gedacht für Verlinkungen, „Neueste Artikel“-Listen oder einfache Widgets — ohne Login, nur per HTTP GET.
API interaktiv testen
Anfragen laufen gegen dieselbe Domain wie diese Seite (kein API-Key). Wähle ein Szenario, optional Slug oder Kategorie, dann „Anfrage senden“ — die Code-Snippets passen sich an.
https://wischtig.de/api/public/v1/posts
Antwort (JSON)
Noch keine Anfrage — Szenario wählen und „Anfrage senden“.Code-Snippets
curl -sS "https://wischtig.de/api/public/v1/posts" \
-H "Accept: application/json"Wofür?
Statt HTML zu scrapen, könnt ihr Titel, Teaser, Kategorie, Zeitstempel und feste Leseadressen (`urls.de` / `urls.en`) per JSON lesen. So bleiben Verweise stabil, wenn sich das Layout der Website ändert.
Basis-URL
Alle Beispiele nutzen die öffentliche Domain https://wischtig.de (kanonische Adresse der Website).
https://wischtig.de
Artikelliste
HTTP GET, Antwort `application/json`. Query-Parameter:
- limit (optional): 1–50, Standard 50.
- offset (optional): für Pagination (z. B. zweite Seite mit limit=20&offset=20).
- category (optional): Filter nach internem Kategorie-Slug (z. B. organisation, digitalisierung).
Sortierung: zuerst nach Veröffentlichungsdatum (neueste zuerst), sonst nach Erstellungsdatum.
GET https://wischtig.de/api/public/v1/posts
GET https://wischtig.de/api/public/v1/posts?limit=10&offset=0&category=organisationBeispielantwort (Auszug)
{
"version": "1",
"posts": [
{
"slug": "beispiel-slug",
"title": { "de": "…", "en": "…" },
"excerpt": { "de": "…", "en": "…" },
"urls": {
"de": "https://wischtig.de/blog/beispiel-slug",
"en": "https://wischtig.de/en/blog/beispiel-slug"
},
"category": "organisation",
"readingTimeMinutes": 5,
"publishedAt": "2026-03-01T12:00:00.000Z",
"updatedAt": "2026-03-02T08:00:00.000Z",
"createdAt": "2026-03-01T10:00:00.000Z",
"tags": ["kmu"],
"isSponsored": false,
"sponsoredBy": null
}
],
"meta": {
"total": 42,
"limit": 50,
"offset": 0,
"hasMore": false
}
}Einzelartikel
Liefert einen veröffentlichten Beitrag anhand des URL-Slugs. Standardmäßig ohne Volltext; optional mit Markdown-Inhalt in beiden Sprachen.
- body=1: liefert zusätzlich `content.de` und `content.en` (Markdown). Bitte sparsam nutzen und Lesende zur kanonischen Seite verlinken.
GET https://wischtig.de/api/public/v1/posts/beispiel-slug
GET https://wischtig.de/api/public/v1/posts/beispiel-slug?body=1CORS & Nutzung im Browser
Die API antwortet mit Access-Control-Allow-Origin: * und unterstützt OPTIONS für Preflight. Bitte die Antworten nicht aggressiv cachen — es gibt kurze CDN-/Cache-Header; bei Widgets reicht ein Intervall von einigen Minuten.
Rate Limit & Caching
Pro Client-IP gilt ein Sliding-Window (Standard: 100 Anfragen pro 60 Sekunden, per Umgebungsvariable anpassbar). Antwort-Header: X-RateLimit-Limit, -Remaining, -Reset. Bei Überschreitung: HTTP 429, JSON-Feld retry_after, Header Retry-After. GET-Antworten sind mit kurzem s-maxage am Edge cachebar (Listen etwas länger als Einzelartikel).
Werbung & Kennzeichnung
Gesponserte Beiträge sind mit isSponsored und sponsoredBy markiert. Wenn ihr Inhalte bei euch einbindet, trennt sie optisch klar von eigenem redaktionellem Text und verweist auf die Originalseite.
Fair use
Die API ist für moderate, automatisierte Abrufe gedacht. Bitte keine Lasttests gegen die Produktiv-Domain und keine Volltext-Spiegelung ohne eigenen Mehrwert — Urheber- und Leistungsschutz der Texte bleiben unberührt.
AGENTS.md — Deutsch & Englisch
Für KI-Assistenten und Entwickler: unten die passende Datei für die aktuelle Sprache einblenden, kopieren oder als .md speichern (entspricht AGENTS.de.md bzw. AGENTS.md im Repository).
AGENTS.md für diese Sprache anzeigen
# wischtig.de — Öffentliche Blog-API (Agent-Anleitung)
**Sprache:** Deutsch · **English:** [AGENTS.md](./AGENTS.md)
Diese Datei richtet sich an **KI-Assistenten** und Entwickler, die die **öffentliche JSON-API** von [wischtig.de](https://wischtig.de) in Websites, Skripte oder Tools einbinden sollen.
## Zweck
- **Nur lesen:** Veröffentlichte Blog-Artikel als JSON (Listen + Einzelabruf).
- **Kein Login, kein Bearer-Token** für diese öffentliche API.
- **Kanonische Artikel-URLs** stehen in `urls.de` und `urls.en` (vollständige HTTPS-URLs).
## Basis-URL
Produktion: **`https://wischtig.de`**
Alle Pfade unten sind relativ zu dieser Origin.
## Endpunkte
### 1) Artikelliste
```http
GET /api/public/v1/posts
```
**Optionale Query-Parameter**
| Parameter | Beschreibung |
|------------|--------------|
| `limit` | 1–50, Standard 50 |
| `offset` | Pagination |
| `category` | Interner Kategorie-Slug (z. B. `organisation`, `digitalisierung`) |
**Antwort (Kernfelder):** `version`, `posts[]`, `meta` (total, limit, offset, hasMore).
Jeder Eintrag in `posts` enthält u. a.: `slug`, `title`/`excerpt` (je `{ de, en }`), `urls` (`de`, `en`), `category`, `readingTimeMinutes`, Zeitstempel, `tags`, `isSponsored`, `sponsoredBy`.
### 2) Einzelartikel
```http
GET /api/public/v1/posts/{slug}
```
**Optional:** `?body=1` — liefert zusätzlich `content.de` und `content.en` (Markdown). Sparsam nutzen; Lesende zur HTML-Seite verlinken.
**404:** Slug unbekannt oder nicht veröffentlicht.
## Authentifizierung
Keine. Nur `GET` (und Browser-`OPTIONS` für CORS).
## Rate Limiting
- Pro Client-IP: **Sliding Window** (Standard: **100 Anfragen / 60 Sekunden** — serverseitig anpassbar).
- Antwort-Header: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`.
- Bei Überschreitung: **HTTP 429**, JSON `error: "rate_limited"`, Feld `retry_after` (Sekunden), Header `Retry-After`.
**Empfehlung:** Backoff bei 429, kein aggressives Polling (z. B. Widget alle 1–5+ Minuten).
## Caching
- Antworten nutzen `Cache-Control` für Browser/CDN (kurze `s-maxage` / `stale-while-revalidate`).
- Eigene Clients dürfen kurz cachen, aber nicht sekündlich neu abfragen.
## Werbung / Sponsoring
- `isSponsored === true`: werblicher Beitrag; `sponsoredBy` kann einen Hinweis enthalten.
- **UI:** Gesponserte Inhalte klar von eigenem redaktionellem Text trennen und auf die Originalseite verlinken.
## Beispiel: JavaScript (fetch)
```javascript
const base = "https://wischtig.de";
const res = await fetch(`${base}/api/public/v1/posts?limit=10`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
for (const p of data.posts) {
const url = p.urls.de; // oder p.urls.en
console.log(p.title.de, url);
}
```
## Beispiel: cURL
```bash
curl -sS "https://wischtig.de/api/public/v1/posts?limit=5" \
-H "Accept: application/json"
```
## Menschliche Doku & Test-UI
- **Dokumentation + interaktiver Tester:** [https://wischtig.de/blog-api](https://wischtig.de/blog-api) (Englisch: `/en/blog-api`).
Dort können Nutzer Szenarien ausprobieren und **cURL-/fetch-Snippets** kopieren.
## Nicht erfinden / nicht annehmen
- **Keine internen Server-Details** (Monitoring, Hintergrund-Jobs, Betreiber-Umgebungsvariablen) in Antworten oder öffentlichen Texten erfinden.
- Die öffentliche API **schreibt** keine Artikel; Schreib-/Admin-Workflows sind **nicht** Gegenstand dieser Datei.
## Fair use
- Moderate Abrufe; keine Lasttests gegen die Produktiv-Domain.
- Keine Volltext-Spiegelung ohne Mehrwert; **Urheberrecht** der Texte beachten.
---
*Stand: 2026 — Pfade und Verhalten an die live ausgelieferte API anpassen, falls sich etwas ändert.*