Updates Portal API

Updates Portal은 자체 시스템에서 상태를 폴링하고, changelog 항목을 수집하고, 로드맵을 모니터링하고, 알려진 문제를 확인할 수 있도록 소규모 공개 JSON API를 제공합니다. 인증은 필요하지 않습니다.

Base URL

https://updates.foura.ai

Service Status

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": "..." }
  ]
}
Top-level field Type Description
overall string 모든 서비스가 정상인 경우 operational, 그렇지 않으면 서비스 상태 값 중 하나
services array 모니터링 대상 서비스당 하나의 항목으로, slug, name, description, 현재 statusdaily 이력(최대 90일) 포함
active_incidents array 현재 진행 중인 인시던트
recent_incidents array 지난 14일 동안 해결된 인시던트

서비스 status 값: operational, degraded, partial_outage, major_outage, maintenance.

인시던트 impact 값: minor(성능 저하), major(부분 중단), critical(서비스 중단).

폴링 패턴

이 endpoint를 사용하여 FourA 상태를 자체 대시보드나 호출 시스템에 연동하세요.

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

기존의 GET /api/status410 Gone을 반환하며 호출자를 여기로 안내합니다.

Changelog

GET /api/changelog

게시된 changelog 항목을 역순(최신순)으로 반환합니다.

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

쿼리 매개변수:

Parameter Type Default Description
page integer 1 1부터 시작하는 페이지 번호
limit integer 20 페이지당 항목 수 (최대 50개)
category string - new, improved 또는 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

전체 changelog(최근 항목 30개)는 다음 주소에서 RSS로도 제공됩니다.

https://updates.foura.ai/rss

Feedly, Miniflux, Thunderbird 또는 임의의 리더기에서 구독하세요. 피드 본문은 HTML로 렌더링된 markdown을 포함하여 changelog 본문과 일치합니다.

Roadmap

GET /api/roadmap

모든 로드맵 항목을 투표 수, 생성 시간 순으로 정렬하여 반환합니다.

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

항목 status 값: planned, in_progress, done, cancelled.

투표

POST /api/roadmap/:id/vote

단일 로드맵 항목에 대한 투표를 토글합니다. 투표는 익명이며 호출자의 IP 및 User-Agent에 연결됩니다. 다시 호출하면 투표가 취소됩니다.

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

voted는 호출 후 상태를 보고합니다. 투표가 추가된 경우 true, 제거된 경우 false입니다.

알려진 문제

GET /api/issues

FourA 지원 부서에서 추적하는 문제를 반환합니다.

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

쿼리 매개변수:

Parameter Type Default Description
tab string open 활성 상태의 문제인 경우 open, 해결됨/닫힘 상태인 경우 resolved
{
  "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 값: low, medium, high, critical. status 값: open, investigating, resolved, closed.

참고 사항

  • 모든 endpoint는 공개되어 있습니다. API 키는 필요하지 않지만, 소스 IP당 넉넉한 수준의 rate limit가 적용됩니다.
  • 응답은 HTTPS 기반의 JSON입니다. 로드맵이나 알려진 문제에는 페이지네이션이 제공되지 않으며, 목록의 크기가 작습니다.
  • changelog의 자유 텍스트 또는 원시 HTML 버전이 필요한 경우, /api/changelog 대신 /rss 피드를 사용하세요.

관련 링크

최근 업데이트: 2026년 5월 20일