Updates Portal API

The Updates Portal exposes a small public JSON API so you can poll status, ingest changelog entries, watch the roadmap, and check known issues from your own systems. No authentication required.

Base URL

https://updates.foura.ai

Service Status

GET /api/v1/status

Returns the live operational status of every FourA service, plus active and recent incidents. Server-side cached for 15 seconds, so polling more often than that returns the same 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 field Type Description
overall string operational if every service is healthy, otherwise one of the service status values
services array One entry per monitored service with slug, name, description, current status, and daily history (up to 90 days)
active_incidents array Incidents that are currently open
recent_incidents array Resolved incidents from the last 14 days

Service status values: operational, degraded, partial_outage, major_outage, maintenance.

Incident impact values: minor (degraded performance), major (partial disruption), critical (service disruption).

Polling pattern

Use this endpoint to wire FourA status into your own dashboard or paging system.

import requests

def check_foura():
    r = requests.get("https://updates.foura.ai/api/v1/status", timeout=5)
    r.raise_for_status()
    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

The legacy GET /api/status returns 410 Gone and points callers here.

Changelog

GET /api/changelog

Returns published changelog entries in reverse chronological order.

curl "https://updates.foura.ai/api/changelog?limit=20"

Query parameters:

Parameter Type Default Description
page integer 1 1-indexed page number
limit integer 20 Entries per page (max 50)
category string - Filter to new, improved, or fixed
{
  "entries": [
    {
      "id": 42,
      "title": "...",
      "body": "Markdown body",
      "category": "new",
      "published_at": "2026-05-19T12:00:00Z",
      "tags": "[\"api\", \"dashboard\"]"
    }
  ],
  "total": 137,
  "page": 1,
  "limit": 20
}

RSS

The full changelog (30 most recent entries) is also published as RSS at:

https://updates.foura.ai/rss

Subscribe in Feedly, Miniflux, Thunderbird, or any reader. The feed body matches the changelog body, including markdown rendered to HTML.

Roadmap

GET /api/roadmap

Returns every roadmap item, sorted by vote count then creation time.

curl https://updates.foura.ai/api/roadmap
{
  "items": [
    {
      "id": 12,
      "title": "...",
      "description": "...",
      "category": "API",
      "status": "planned",
      "votes": 23,
      "target_date": "Q3 2026"
    }
  ]
}

Item status values: planned, in_progress, done, cancelled.

Voting

POST /api/roadmap/:id/vote

Toggles a vote on a single roadmap item. Votes are anonymous and tied to the caller's IP + User-Agent. Calling again removes the vote.

curl -X POST https://updates.foura.ai/api/roadmap/12/vote
{ "votes": 24, "voted": true }

voted reports the post-call state: true if your vote was added, false if it was removed.

Known Issues

GET /api/issues

Returns issues tracked by FourA support.

curl "https://updates.foura.ai/api/issues?tab=open"

Query parameters:

Parameter Type Default Description
tab string open open for active issues, resolved for resolved/closed
{
  "issues": [
    {
      "id": 5,
      "title": "...",
      "body": "Markdown description",
      "severity": "medium",
      "status": "investigating",
      "service_id": "api",
      "opened_at": "2026-05-18T09:00:00Z",
      "resolved_at": null,
      "resolution": null
    }
  ]
}

severity values: low, medium, high, critical. status values: open, investigating, resolved, closed.

Notes

  • All endpoints are public. There's no API key required, but expect generous rate limiting per source IP.
  • Responses are JSON over HTTPS. There's no pagination on roadmap or issues; the lists are small.
  • For free-text or raw HTML versions of the changelog, use the /rss feed instead of /api/changelog.
Last updated: May 20, 2026