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フィードを使用してください。
関連リンク
- サービスステータス: ブラウザで同じデータを閲覧
- 更新履歴: フィルタやページネーションを使用してエントリを閲覧
- ロードマップ: UI上でアイテムに投票
- 既知の課題: オープンおよび解決済みの課題を閲覧
- アップデートポータル: セクション概要