API Updates Portal
Updates Portal cung cấp một JSON API công khai nhỏ để bạn có thể truy vấn trạng thái, thu thập các mục changelog, theo dõi roadmap và kiểm tra các sự cố đã biết từ hệ thống của riêng bạn. Không yêu cầu xác thực. API chỉ cung cấp văn bản tiếng Anh; tiền tố ngôn ngữ trong đường dẫn sẽ bị bỏ qua.
Base URL
https://updates.foura.ai
Trạng thái dịch vụ
GET /api/v1/status
Trả về trạng thái hoạt động trực tiếp của mọi dịch vụ FourA, cùng với các sự cố đang diễn ra và gần đây. Được lưu trong bộ nhớ cache phía server trong 15 giây, do đó việc gửi request kiểm tra thường xuyên hơn khoảng thời gian này sẽ trả về cùng một 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": "..." }
]
}
| Trường cấp cao nhất | Kiểu dữ liệu | Mô tả |
|---|---|---|
overall |
string | operational nếu mọi dịch vụ đều hoạt động bình thường, nếu không sẽ là một trong các giá trị trạng thái dịch vụ |
services |
array | Một mục cho mỗi dịch vụ được giám sát với slug, name, description, status hiện tại và lịch sử daily (tối đa 90 ngày) |
active_incidents |
array | Các sự cố hiện đang mở |
recent_incidents |
array | Các sự cố đã được giải quyết trong 14 ngày qua |
Các giá trị status của dịch vụ: operational, degraded, partial_outage, major_outage, maintenance.
Các giá trị impact của sự cố: minor (hiệu năng suy giảm), major (gián đoạn một phần), critical (gián đoạn dịch vụ).
Mô hình polling
Sử dụng endpoint này để tích hợp trạng thái FourA vào bảng điều khiển hoặc hệ thống phân trang của riêng bạn.
Khi không thể lấy dữ liệu trạng thái, endpoint sẽ trả về 502 cùng với {"error": "Monitor unreachable"}. Hãy xử lý trường hợp này như một trạng thái chưa xác định thay vì trạng thái lỗi, và thử lại trong lần poll tiếp theo.
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 cũ trả về 410 Gone và điều hướng người gọi đến đây.
Changelog
GET /api/changelog
Trả về các mục changelog đã xuất bản theo thứ tự thời gian đảo ngược.
curl "https://updates.foura.ai/api/changelog?limit=20"
Query parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
page |
integer | 1 | Số trang (bắt đầu từ 1) |
limit |
integer | 20 | Số mục trên mỗi trang (tối đa 50) |
category |
string | - | Lọc theo new, improved, hoặc 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
}
| Trường | Kiểu dữ liệu | Mô tả |
|---|---|---|
id |
integer | ID mục |
title |
string | Tiêu đề mục |
body |
string | Nội dung Markdown |
category |
string | new, improved, hoặc fixed |
tags |
string | Mảng JSON được mã hóa dưới dạng chuỗi. Phân tích cú pháp trước khi dùng: json.loads(entry["tags"]). |
published |
integer | Luôn là 1 ở đây. Endpoint chỉ trả về các mục đã xuất bản. |
published_at |
string | ISO 8601 với hậu tố Z |
created_at |
string | YYYY-MM-DD HH:MM:SS, UTC, không có ký hiệu múi giờ |
updated_at |
string | Cùng định dạng với created_at |
Hai định dạng timestamp khác nhau là có chủ ý: published_at là ngày biên tập và có kèm múi giờ, trong khi created_at và updated_at là timestamp lưu trữ. Cả hai đều là UTC. Trình phân tích cú pháp giả định một định dạng cho cả ba trường sẽ báo lỗi ở hai trường còn lại.
RSS
Toàn bộ changelog (30 mục gần nhất) cũng được xuất bản dưới dạng RSS tại:
https://updates.foura.ai/rss
Đăng ký trong Feedly, Miniflux, Thunderbird hoặc bất kỳ trình đọc nào. Phần thân nguồn cấp dữ liệu khớp với phần thân changelog, bao gồm cả markdown được kết xuất sang HTML.
Roadmap
GET /api/roadmap
Trả về mọi mục roadmap đã xuất bản, được sắp xếp theo số lượng phiếu bầu rồi đến thời gian tạo.
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"
}
]
}
Các giá trị của item status: planned, in_progress, done, cancelled. Bảng tại updates.foura.ai/roadmap hiển thị ba cột, vì vậy một item được đặt thành cancelled sẽ đến bạn qua endpoint này và không bao giờ xuất hiện trên trang.
category là slug chữ thường, không phải nhãn hiển thị trên trang. Các slug đang được sử dụng hiện nay: api, infrastructure, developer-experience, dashboard, billing, analytics, authentication. Danh sách này có thể mở rộng, vì một item mới có thể giới thiệu một slug mới.
target_date là văn bản tự do ("Q3 2026"), không phải ngày tháng. completed_at là null cho đến khi một item được phát hành, sau đó là ISO 8601 với hậu tố Z (2026-09-01T10:15:30.000Z), cùng định dạng với published_at của changelog entry. created_at sử dụng YYYY-MM-DD HH:MM:SS theo UTC. Hai định dạng này khác nhau trong cùng một object, vì vậy hãy parse từng trường riêng biệt.
Voting
POST /api/roadmap/:id/vote
Bật hoặc tắt bình chọn cho một roadmap item. Lượt bình chọn là ẩn danh và gắn liền với IP của bên gọi cùng với 50 ký tự đầu tiên của User-Agent. Gọi lại lần nữa sẽ hủy bình chọn. Một item không tồn tại hoặc chưa xuất bản sẽ trả về 404 {"error": "Not found"}.
curl -X POST https://updates.foura.ai/api/roadmap/12/vote
{ "votes": 24, "voted": true }
voted báo cáo trạng thái sau lệnh gọi: true nếu lượt bình chọn của bạn đã được thêm, false nếu đã bị xoá.
Các endpoint roadmap, GET /api/roadmap và endpoint này, bị giới hạn 30 request mỗi phút cho mỗi IP nguồn. Vượt quá mức đó, phản hồi sẽ là {"error": "Too many votes, slow down"}.
Known Issues
GET /api/issues
Trả về các sự cố được theo dõi bởi bộ phận hỗ trợ FourA.
curl "https://updates.foura.ai/api/issues?tab=open"
Query parameters:
| Parameter | Type | Mặc định | Mô tả |
|---|---|---|---|
tab |
string | open |
open cho các sự cố đang hoạt động, resolved cho các sự cố đã giải quyết/đã đóng |
{
"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"
}
]
}
| Field | Type | Description |
|---|---|---|
id |
integer | ID của sự cố |
title |
string | Tóm tắt ngắn gọn |
body |
string | Mô tả định dạng Markdown |
severity |
string | low, medium, high, hoặc critical |
status |
string | open, investigating, resolved, hoặc closed |
service_id |
integer or null | ID số của dịch vụ bị ảnh hưởng. null khi sự cố không gắn với dịch vụ nào. |
service_name |
string or null | Tên hiển thị của dịch vụ, đã được phân giải sẵn. Đọc giá trị này thay vì tự ánh xạ service_id. |
resolution |
string | Cách thức khắc phục. Chuỗi rỗng khi sự cố đang mở. |
opened_at |
string | ISO 8601 với hậu tố Z |
resolved_at |
string or null | ISO 8601 với hậu tố Z, null khi đang mở |
service_id là khóa ngoại dạng số, không phải slug hiển thị trên trang trạng thái. Khớp sự cố với dịch vụ bằng service_name.
Payload của sự cố là danh sách cột cố định và không có timestamp sửa đổi. Sắp xếp thứ tự hoặc tính tuổi thọ sự cố bằng opened_at và resolved_at. Trong ba tập hợp công khai, chỉ các mục changelog mới trả về created_at và updated_at.
Tab resolved trả về 30 sự cố được giải quyết gần đây nhất rồi dừng lại. Tab open trả về toàn bộ sự cố.
Ghi chú
- Mọi endpoint đều công khai và không cần API key. Các endpoint roadmap bị giới hạn 30 request mỗi phút cho mỗi IP nguồn; các endpoint khác hiện không có rate limit riêng, vì vậy không nên poll trạng thái thường xuyên hơn mức cache 15 giây cho phép.
- Phản hồi là JSON qua HTTPS. Roadmap và issues không nhận tham số phân trang. Giới hạn duy nhất là
?tab=resolvedtrên issues, trả về 30 hàng. - Đối với phiên bản văn bản thuần hoặc HTML thô của changelog, hãy sử dụng nguồn cấp
/rssthay vì/api/changelog.
Liên quan
- Trạng thái dịch vụ: Đọc dữ liệu tương tự trên trình duyệt
- Changelog: Duyệt các mục với bộ lọc và phân trang
- Roadmap: Bỏ phiếu cho các hạng mục trên UI
- Sự cố đã biết: Xem các sự cố đang mở và đã xử lý
- Cổng cập nhật: Tổng quan về phần này