Updates Portal API

Updates Portalは小規模なパブリックJSON APIを提供しており、独自のシステムからステータスのポーリング、変更履歴エントリの取得、ロードマップの確認、既知の問題のチェックが可能です。認証は不要です。APIは英語のテキストのみを提供し、パス内の言語プレフィックスは無視されます。

ベースURL

https://updates.foura.ai

サービスステータス

GET /api/v1/status

すべてのFourAサービスの稼働状況と、アクティブおよび最近のインシデントを返します。サーバー側で15秒間キャッシュされるため、それ以上の頻度でポーリングしても同じペイロードが返されます。

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": "..." }
  ]
}
トップレベルフィールド 型 説明
overall string すべてのサービスが正常な場合は operational、それ以外の場合はいずれかのサービスステータス値
services array 監視対象サービスごとのエントリ (slug、name、description、現在の status、および最大90日分の daily 履歴を含む)
active_incidents array 現在オープンしているインシデント
recent_incidents array 過去14日間に解決されたインシデント

サービス status の値: operational、degraded、partial_outage、major_outage、maintenance。

インシデント impact の値: minor (パフォーマンス低下)、major (部分的な停止)、critical (サービス停止)。

ポーリングパターン

この endpoint を使用して、独自のダッシュボードやページングシステムに FourA のステータスを連携します。

ステータスデータを取得できない場合、endpoint は {"error": "Monitor unreachable"} を含む 502 を返します。これは異常ではなく不明なステータスとして扱い、次回のポーリング時に再試行してください。

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

従来の GET /api/status は 410 Gone を返し、呼び出し元をここにリダイレクトします。

変更履歴

GET /api/changelog

公開された変更履歴エントリを新しい順(逆時系列順)で返します。

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

クエリパラメータ:

パラメータ 型 デフォルト値 説明
page integer 1 1から始まるページ番号
limit integer 20 1ページあたりの件数(最大50)
category string - new、improved、または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
}
フィールド 型 説明
id integer エントリID
title string エントリのタイトル
body string Markdown本文
category string new、improved、または fixed
tags string 文字列としてエンコードされた JSON配列。使用前にパースしてください: json.loads(entry["tags"])
published integer ここでは常に 1 です。エンドポイントは公開されたエントリのみを返します。
published_at string 末尾に Z が付くISO 8601形式
created_at string YYYY-MM-DD HH:MM:SS、UTC、タイムゾーンマーカーなし
updated_at string created_at と同じ形式

2つのタイムスタンプ形式が異なるのは意図的なものです。published_at は編集上の日付でありタイムゾーン情報を持ちますが、created_at および updated_at はストレージのタイムスタンプです。いずれもUTCです。3つすべてに同じ形式を想定するパーサーは、他の2つでエラーを発生させます。

RSS

完全なチェンジログ (最新の30件) は、以下からRSSとしても配信されています:

https://updates.foura.ai/rss

Feedly、Miniflux、Thunderbird、または任意のリーダーで購読できます。フィードの本文は、HTMLにレンダリングされたMarkdownを含め、変更履歴の本文と一致します。

ロードマップ

GET /api/roadmap

公開されたすべてのロードマップアイテムを、投票数順、続いて作成日時順で返します。

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"
    }
  ]
}

アイテムの status の値: planned、in_progress、done、cancelled。updates.foura.ai/roadmap のボードは3列で描画されるため、cancelled に設定されたアイテムはこの endpoint 経由で取得されますが、ページ上には表示されません。

category は小文字のスラッグであり、ページに表示されるラベルではありません。現在使用されているスラッグ: api、infrastructure、developer-experience、dashboard、billing、analytics、authentication。新しいアイテムによって新規スラッグが追加される可能性があるため、このリストは拡張される前提で扱ってください。

target_date は日付ではなく自由形式のテキスト("Q3 2026")です。completed_at はアイテムがリリースされるまで null であり、リリース後は changelog エントリの published_at と同じ形式である Z サフィックス付きの ISO 8601(2026-09-01T10:15:30.000Z)になります。created_at は UTC の YYYY-MM-DD HH:MM:SS を使用します。1つのオブジェクト内で2つの形式が異なるため、各フィールドを個別にパースしてください。

Voting

POST /api/roadmap/:id/vote

ロードマップアイテムへの投票を切り替えます。投票は匿名で、呼び出し元の IP と User-Agent の先頭50文字に関連付けられます。再度呼び出すと投票が取り消されます。不明または未公開のアイテムの場合は 404 {"error": "Not found"} が返されます。

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

voted は呼び出し後の状態を返します。投票が追加された場合は true、削除された場合は false となります。

ロードマップ endpoints(GET /api/roadmap および本 endpoint)は、送信元 IP ごとに毎分 30 requests に制限されています。これを超えると {"error": "Too many votes, slow down"} が返されます。

Known Issues

GET /api/issues

FourA サポートで追跡されている問題を返します。

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

クエリパラメーター:

パラメーター 型 デフォルト値 説明
tab string open アクティブな問題には open、解決済み/クローズされた問題には resolved
{
  "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"
    }
  ]
}
フィールド 型 説明
id integer 課題ID
title string 概要
body string Markdown形式の詳細
severity string low、medium、high、または critical
status string open、investigating、resolved、または closed
service_id integer or null 影響を受けるサービスの数値ID。特定のサービスに紐づかない場合は null。
service_name string or null 解決済みのサービス表示名。service_id を手動でマッピングする代わりにこちらを参照してください。
resolution string 修正内容。課題がオープンの間は空文字列。
opened_at string Z 接尾辞付きの ISO 8601
resolved_at string or null Z 接尾辞付きの ISO 8601(オープンの場合は null)

service_id は数値の外部キーであり、ステータスページに表示されるスラッグではありません。課題とサービスを照合するには service_name を使用してください。

課題ペイロードは固定カラムリストであり、更新タイムスタンプは含まれません。課題のソートや経過期間の判定には opened_at および resolved_at を使用してください。3つの公開コレクションのうち、更新履歴(changelog)エントリのみが created_at および updated_at を返します。

resolved タブは直近で解決された30件の課題のみを返します。open タブはすべての課題を返します。

備考

  • すべてのエンドポイントは公開されており、APIキーは不要です。Roadmapエンドポイントは送信元IPごとに毎分30リクエストに制限されています。その他のエンドポイントには現在固有のrate limitはありませんが、15秒のキャッシュ期間を超えない頻度でステータスをポーリングしてください。
  • レスポンスはHTTPS経由のJSONです。Roadmapおよび課題エンドポイントはページネーションパラメータを受け付けません。唯一の上限は課題の ?tab=resolved であり、30行を返します。
  • 更新履歴のプレーンテキストまたはRAW HTMLバージョンを取得するには、/api/changelog ではなく /rss フィードを使用してください。

関連リンク

最終更新日: 2026年9月10日