업데이트 포털 API

업데이트 포털은 자체 시스템에서 상태를 폴링하고, 변경 로그 항목을 수집하며, 로드맵을 확인하고, 알려진 문제를 점검할 수 있도록 소규모 퍼블릭 JSON API를 제공합니다. 인증은 필요하지 않습니다. 이 API는 영어 텍스트만 제공하며 경로의 언어 접두사는 무시됩니다.

Base 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 및 daily 이력(최대 90일)을 포함하는 모니터링 대상 서비스별 항목 1개
active_incidents array 현재 진행 중인 인시던트 목록
recent_incidents array 최근 14일간 해결된 인시던트 목록

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

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

폴링 패턴

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

상태 데이터를 가져올 수 없는 경우 endpoint는 502와 함께 {"error": "Monitor unreachable"}를 응답합니다. 이를 장애 상태가 아닌 알 수 없는 상태로 처리하고 다음 폴링 시 다시 시도하세요.

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을(를) 반환하며 호출자를 여기로 안내합니다.

Changelog

GET /api/changelog

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

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

Query 매개변수:

매개변수 타입 기본값 설명
page integer 1 1부터 시작하는 페이지 번호
limit integer 20 페이지당 항목 수 (최대 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입니다. 이 endpoint는 게시된 항목만 반환합니다.
published_at string Z 접미사가 포함된 ISO 8601
created_at string YYYY-MM-DD HH:MM:SS, UTC, 시간대 표시 없음
updated_at string created_at와 동일한 형식

두 타임스탬프 형식은 의도적으로 다릅니다. published_at은 편집 날짜이며 시간대가 포함되지만, created_at 및 updated_at은 스토리지 타임스탬프입니다. 둘 다 UTC입니다. 세 항목 모두에 대해 하나의 형식을 가정하는 파서는 다른 두 항목에서 오류를 발생시킵니다.

RSS

전체 변경 로그(최근 항목 30개)는 다음 위치에 RSS로도 게시됩니다:

https://updates.foura.ai/rss

Feedly, Miniflux, Thunderbird 또는 지원되는 모든 리더기에서 구독할 수 있습니다. 피드 본문은 HTML로 렌더링된 마크다운을 포함하여 changelog 본문과 동일합니다.

Roadmap

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의 보드는 세 개의 열을 렌더링하므로, cancelled(으)로 설정된 항목은 이 엔드포인트를 통해 전달되며 페이지에는 표시되지 않습니다.

category은(는) 페이지에 출력되는 라벨이 아닌 소문자 슬러그입니다. 현재 사용 중인 슬러그: api, infrastructure, developer-experience, dashboard, billing, analytics, authentication. 새 항목에서 새로운 슬러그가 추가될 수 있으므로 이 목록은 고정되지 않은 것으로 간주하십시오.

target_date은(는) 날짜가 아닌 자유 형식 텍스트("Q3 2026")입니다. completed_at은(는) 항목이 배포되기 전까지는 null이며, 배포된 후에는 변경 로그 항목의 published_at와(과) 동일한 형식인 Z 접미사가 붙은 ISO 8601(2026-09-01T10:15:30.000Z) 형식입니다. created_at은(는) UTC 기준의 YYYY-MM-DD HH:MM:SS을(를) 사용합니다. 하나의 객체 내에서 두 형식이 다르므로 각 필드를 개별적으로 파싱하십시오.

투표

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입니다.

로드맵 endpoint인 GET /api/roadmap 및 본 endpoint는 소스 IP당 분당 30개의 request로 제한됩니다. 초과 시 {"error": "Too many votes, slow down"} 응답이 반환됩니다.

알려진 문제

GET /api/issues

FourA 지원팀에서 추적 중인 문제를 반환합니다.

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

Query 매개변수:

Parameter Type Default Description
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을 통해 이슈를 서비스와 매칭하세요.

이슈 payload는 고정된 컬럼 목록이며 수정 타임스탬프를 포함하지 않습니다. opened_at 및 resolved_at을 기준으로 이슈를 정렬하거나 사용 기간을 계산하세요. 세 가지 공개 컬렉션 중 변경 로그 항목만 created_at 및 updated_at을 반환합니다.

resolved 탭은 가장 최근에 해결된 30개의 이슈를 반환하고 종료됩니다. open 탭은 모든 이슈를 반환합니다.

참고 사항

  • 모든 endpoint는 공개되어 있으며 API key가 필요하지 않습니다. 로드맵 endpoint는 소스 IP당 분당 30개의 request로 제한됩니다. 다른 endpoint는 현재 자체적인 rate limit이 없으므로, 15초 캐시 주기에 맞춰 상태를 폴링하세요.
  • response는 HTTPS 기반 JSON 형식입니다. 로드맵 및 이슈는 페이징 매개변수를 지원하지 않습니다. 유일한 제한은 이슈의 ?tab=resolved으로, 30개 행을 반환합니다.
  • 일반 텍스트 또는 원시 HTML 버전의 변경 로그가 필요한 경우 /api/changelog 대신 /rss 피드를 사용하세요.

관련 항목

최근 업데이트: 2026년 9월 10일