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=resolved bei Issues, was 30 Zeilen zurückgibt.
  • Für Freitext- oder reine HTML-Versionen des Changelogs nutze den Feed /rss anstelle von /api/changelog.

Verwandt

Aktualisiert: 10. September 2026