Updates-Portal-API
Das Updates-Portal stellt eine kleine öffentliche JSON-API bereit, damit du den Status abfragen, Changelog-Einträge erfassen, die Roadmap verfolgen und bekannte Probleme über deine eigenen Systeme prüfen kannst. Keine Authentifizierung erforderlich. Die API liefert nur den englischen Text aus. Ein Sprachpräfix im Pfad wird ignoriert.
Basis-URL
https://updates.foura.ai
Service-Status
GET /api/v1/status
Gibt den aktuellen Betriebsstatus aller FourA-Services sowie aktive und kürzliche Vorfälle zurück. Server-seitig für 15 Sekunden zwischengespeichert, häufigeres Abfragen liefert daher dieselbe Payload.
curl https://updates.foura.ai/api/v1/status
{
"overall": "operational",
"services": [
{
"slug": "api",
"name": "API",
"description": "...",
"status": "operational",
"daily": [
{ "date": "2026-05-19", "status": "operational", "major_outage_minutes": 0, "partial_outage_minutes": 0, "degraded_minutes": 0, "internal_degraded_minutes": 0 }
]
}
],
"active_incidents": [],
"recent_incidents": [
{ "id": "...", "service_slug": "api", "service_name": "API", "impact": "minor", "started_at": "...", "resolved_at": "..." }
]
}
| Top-Level-Feld | Typ | Beschreibung |
|---|---|---|
overall |
string | operational, wenn alle Services fehlerfrei laufen, andernfalls einer der Service-Statuswerte |
services |
array | Ein Eintrag pro überwachtem Service mit slug, name, description, aktuellem status und daily-Verlauf (bis zu 90 Tage) |
active_incidents |
array | Derzeit offene Vorfälle |
recent_incidents |
array | Gelöste Vorfälle der letzten 14 Tage |
status-Werte für Services: operational, degraded, partial_outage, major_outage, maintenance.
impact-Werte für Vorfälle: minor (eingeschränkte Leistung), major (Teilausfall), critical (Service-Ausfall).
Polling-Muster
Nutze diesen Endpoint, um den FourA-Status in dein eigenes Dashboard oder Paging-System einzubinden.
Wenn die Statusdaten nicht abgerufen werden können, antwortet der Endpoint mit 502 und {"error": "Monitor unreachable"}. Behandle dies als unbekannten statt als fehlerhaften Status und versuche es beim nächsten Poll erneut.
import requests
def check_foura():
r = requests.get("https://updates.foura.ai/api/v1/status", timeout=5)
r.raise_for_status() # raises on the 502 "Monitor unreachable" answer: retry next poll
data = r.json()
if data["overall"] != "operational":
# Page on-call, post to Slack, flip a feature flag, etc.
for svc in data["services"]:
if svc["status"] != "operational":
print(f"{svc['name']}: {svc['status']}")
return data
Der Legacy-Endpunkt GET /api/status gibt 410 Gone zurück und verweist Aufrufer hierher.
Changelog
GET /api/changelog
Gibt veröffentlichte Changelog-Einträge in umgekehrter chronologischer Reihenfolge zurück.
curl "https://updates.foura.ai/api/changelog?limit=20"
Query-Parameter:
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
page |
integer | 1 | 1-basierte Seitennummer |
limit |
integer | 20 | Einträge pro Seite (max. 50) |
category |
string | - | Filtern nach new, improved oder fixed |
{
"entries": [
{
"id": 42,
"title": "...",
"body": "Markdown body",
"category": "new",
"tags": "[\"api\",\"dashboard\"]",
"published": 1,
"published_at": "2026-05-19T12:00:00Z",
"created_at": "2026-05-19 11:42:08",
"updated_at": "2026-05-19 11:44:31"
}
],
"total": 137,
"page": 1,
"limit": 20
}
| Feld | Typ | Beschreibung |
|---|---|---|
id |
integer | Eintrags-ID |
title |
string | Eintragstitel |
body |
string | Markdown-Body |
category |
string | new, improved oder fixed |
tags |
string | Ein JSON-Array, als String encodiert. Vor der Verwendung parsen: json.loads(entry["tags"]). |
published |
integer | Hier immer 1. Der Endpoint gibt nur veröffentlichte Einträge zurück. |
published_at |
string | ISO 8601 mit einem Z-Suffix |
created_at |
string | YYYY-MM-DD HH:MM:SS, UTC, ohne Zeitzonenmarkierung |
updated_at |
string | Gleiches Format wie created_at |
Die beiden Zeitstempelformate unterscheiden sich bewusst: published_at ist das redaktionelle Datum und enthält eine Zeitzone, während created_at und updated_at Speicherzeitstempel sind. Beide sind UTC. Ein Parser, der für alle drei dasselbe Format erwartet, wirft bei den anderen beiden einen Fehler.
RSS
Das vollständige Changelog (die 30 neuesten Einträge) wird auch als RSS veröffentlicht unter:
https://updates.foura.ai/rss
Abonniere in Feedly, Miniflux, Thunderbird oder einem beliebigen Reader. Der Feed-Body entspricht dem Changelog-Body, inklusive zu HTML gerendertem Markdown.
Roadmap
GET /api/roadmap
Gibt jedes veröffentlichte Roadmap-Element zurück, sortiert nach Anzahl der Stimmen und anschliessend nach Erstellungszeitpunkt.
curl https://updates.foura.ai/api/roadmap
{
"items": [
{
"id": 12,
"title": "...",
"description": "...",
"status": "planned",
"category": "developer-experience",
"votes": 23,
"target_date": "Q3 2026",
"completed_at": null,
"created_at": "2026-03-30 09:32:47"
}
]
}
Item-status-Werte: planned, in_progress, done, cancelled. Das Board unter updates.foura.ai/roadmap stellt drei Spalten dar, daher erreicht dich ein auf cancelled gesetztes Item über diesen Endpoint und erscheint nie auf der Seite.
category ist ein kleingeschriebener Slug, nicht das Label, das die Seite anzeigt. Aktuell verwendete Slugs: api, infrastructure, developer-experience, dashboard, billing, analytics, authentication. Betrachte die Liste als offen, da ein neues Item einen neuen Slug einführen kann.
target_date ist Freitext ("Q3 2026"), kein Datum. completed_at ist null, bis ein Item veröffentlicht wird, danach ISO 8601 mit einem Z-Suffix (2026-09-01T10:15:30.000Z), genau wie das published_at eines Changelog-Eintrags. created_at verwendet YYYY-MM-DD HH:MM:SS in UTC. Die beiden Formate unterscheiden sich innerhalb eines Objekts, parse also jedes Feld separat.
Voting
POST /api/roadmap/:id/vote
Schaltet einen Vote für ein einzelnes Roadmap-Item um. Votes sind anonym und an die IP des Aufrufers sowie die ersten 50 Zeichen seines User-Agents gebunden. Ein erneuter Aufruf entfernt den Vote. Ein unbekanntes oder unveröffentlichtes Item antwortet mit 404 {"error": "Not found"}.
curl -X POST https://updates.foura.ai/api/roadmap/12/vote
{ "votes": 24, "voted": true }
voted meldet den Status nach dem Aufruf: true, wenn dein Vote hinzugefügt wurde, false, wenn er entfernt wurde.
Die Roadmap-Endpoints, GET /api/roadmap und dieser hier, sind auf 30 Requests pro Minute pro Quell-IP limitiert. Darüber hinaus lautet die Antwort {"error": "Too many votes, slow down"}.
Known Issues
GET /api/issues
Gibt vom FourA-Support erfasste Issues zurück.
curl "https://updates.foura.ai/api/issues?tab=open"
Query-Parameter:
| Parameter | Type | Default | Description |
|---|---|---|---|
tab |
string | open |
open für aktive Issues, resolved für behobene/geschlossene |
{
"issues": [
{
"id": 5,
"title": "...",
"body": "Markdown description",
"severity": "medium",
"status": "investigating",
"service_id": 3,
"resolution": "",
"opened_at": "2026-05-18T09:00:00Z",
"resolved_at": null,
"service_name": "API"
}
]
}
| Feld | Typ | Beschreibung |
|---|---|---|
id |
integer | Issue-ID |
title |
string | Kurze Zusammenfassung |
body |
string | Markdown-Beschreibung |
severity |
string | low, medium, high oder critical |
status |
string | open, investigating, resolved oder closed |
service_id |
integer oder null | Numerische ID des betroffenen Service. null, wenn das Issue an keinen gebunden ist. |
service_name |
string oder null | Der Anzeigename des Service, für dich aufgelöst. Lies diesen aus, anstatt service_id selbst zuzuordnen. |
resolution |
string | Wie es behoben wurde. Leerer String, solange das Issue offen ist. |
opened_at |
string | ISO 8601 mit einem Z-Suffix |
resolved_at |
string oder null | ISO 8601 mit einem Z-Suffix, null solange offen |
service_id ist ein numerischer Fremdschlüssel, nicht der Slug von der Statusseite. Ordne Issues zu Services über service_name zu.
Die Issue-Payload hat eine feste Spaltenliste und enthält keinen Änderungs-Timestamp. Sortiere oder datiere ein Issue nach opened_at und resolved_at. Von den drei öffentlichen Collections geben nur Changelog-Einträge created_at und updated_at zurück.
Der Reiter resolved liefert die 30 zuletzt behobenen Issues zurück und stoppt dort. Der Reiter open liefert alle zurück.
Hinweise
- Alle Endpoints sind öffentlich und erfordern keinen API-Key. Die Roadmap-Endpoints sind auf 30 Requests pro Minute pro Quell-IP limitiert; die anderen haben aktuell kein eigenes Rate Limit. Rufe den Status daher nicht öfter ab, als der 15-Sekunden-Cache rechtfertigt.
- Responses sind JSON über HTTPS. Roadmap und Issues akzeptieren keine Paging-Parameter. Das einzige Limit ist
?tab=resolvedbei Issues, was 30 Zeilen zurückgibt. - Für Freitext- oder reine HTML-Versionen des Changelogs nutze den Feed
/rssanstelle von/api/changelog.
Verwandt
- Service-Status: Lies dieselben Daten im Browser
- Changelog: Durchsuche Einträge mit Filtern und Paginierung
- Roadmap: Stimme in der UI über Einträge ab
- Bekannte Probleme: Lies offene und behobene Issues
- Updates-Portal: Bereichsübersicht