Updates Portal API
Updates Portal предоставя малък публичен JSON API, за да можете да проверявате статуса, да извличате записи от changelog, да следите roadmap и да проверявате известни проблеми от вашите собствени системи. Не се изисква автентикация. Този API връща само текст на английски език; езиковият префикс в пътя се игнорира.
Base URL
https://updates.foura.ai
Статус на услугите
GET /api/v1/status
Връща текущото работно състояние на всяка FourA услуга, както и активните и скорошните инциденти. Кешира се от страна на сървъра за 15 секунди, така че по-честото изпращане на заявки връща същия 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": "..." }
]
}
| Поле от най-високо ниво | Тип | Описание |
|---|---|---|
overall |
string | operational, ако всяка услуга работи нормално, в противен случай една от стойностите за статус на услуга |
services |
array | По един запис за всяка наблюдавана услуга с slug, name, description, текущ status и daily история (до 90 дни) |
active_incidents |
array | Инциденти, които в момента са отворени |
recent_incidents |
array | Решени инциденти от последните 14 дни |
Стойности за status на услуга: operational, degraded, partial_outage, major_outage, maintenance.
Стойности за impact на инцидент: minor (влошена производителност), major (частично прекъсване), critical (прекъсване на услугата).
Модел на периодично извличане (polling)
Използвайте този 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 масив, кодиран като string. Парснете го преди употреба: json.loads(entry["tags"]). |
published |
integer | Винаги 1 тук. Този endpoint връща само публикувани записи. |
published_at |
string | ISO 8601 със суфикс Z |
created_at |
string | YYYY-MM-DD HH:MM:SS, UTC, без маркер за часова зона |
updated_at |
string | Същият формат като created_at |
Двата формата за времеви отпечатък са различни умишлено: published_at е редакционната дата и съдържа часова зона, докато created_at и updated_at са времеви отпечатъци за съхранение. И двата са в UTC. Парсер, който предполага един и същ формат за трите, ще генерира грешка при другите два.
RSS
Пълният changelog (30-те най-нови записа) се публикува и като RSS на адрес:
https://updates.foura.ai/rss
Абонирайте се във Feedly, Miniflux, Thunderbird или друг четец. Съдържанието на фийда съвпада със съдържанието на changelog-а, включително markdown, рендериран към HTML.
Roadmap
GET /api/roadmap
Връща всеки публикуван елемент от 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, достига до вас през този endpoint и никога не се появява на страницата.
category е slug с малки букви, а не етикетът, който се изписва на страницата. Използвани slugs към момента: api, infrastructure, developer-experience, dashboard, billing, analytics, authentication. Считайте списъка за отворен, тъй като нов елемент може да въведе нов slug.
target_date е свободен текст ("Q3 2026"), а не дата. completed_at е null, докато даден елемент не бъде пуснат, след което е ISO 8601 със суфикс Z (2026-09-01T10:15:30.000Z), същият формат като published_at на запис от changelog. created_at използва YYYY-MM-DD HH:MM:SS в UTC. Двата формата се различават в рамките на един обект, затова парсвайте всяко поле поотделно.
Гласуване
POST /api/roadmap/:id/vote
Превключва глас за отделен roadmap елемент. Гласовете са анонимни и свързани с IP адреса на извикващия плюс първите 50 знака от неговия User-Agent. Повторното извикване премахва гласа. Непознат или непубликуван елемент връща 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 и този, са ограничени до 30 requests в минута на изходен IP адрес. При превишаване отговорът е {"error": "Too many votes, slow down"}.
Known Issues
GET /api/issues
Връща проблеми, проследявани от поддръжката на FourA.
curl "https://updates.foura.ai/api/issues?tab=open"
Query параметри:
| Параметър | Тип | По подразбиране | Описание |
|---|---|---|---|
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 | ISO 8601 с наставка Z |
resolved_at |
string or null | ISO 8601 с наставка Z, null докато е отворен |
service_id е числов foreign key, а не slug стойността, която виждате на страницата за статус. Свързвайте проблемите с услугите чрез service_name.
Payload на проблема е фиксиран списък от колони и не съдържа timestamp за модификация. Сортирайте или определяйте възрастта на проблем чрез opened_at и resolved_at. От трите публични колекции само записите в changelog връщат created_at и updated_at.
Разделът resolved връща последните 30 разрешени проблема и спира дотам. Разделът open връща всички.
Бележки
- Всички endpoint адреси са публични и не изискват API key. Roadmap endpoint адресите са ограничени до 30 заявки в минута за IP адрес на източника; останалите в момента нямат собствен rate limit, затова проверявайте статуса не по-често, отколкото 15-секундният кеш позволява.
- Отговорите са JSON през HTTPS. Roadmap и проблемите не приемат параметри за пагинация. Единственото ограничение е
?tab=resolvedпри проблемите, което връща 30 реда. - За версии на changelog в свободен текст или суров HTML използвайте емисията
/rssвместо/api/changelog.
Свързани
- Статус на услугите: Прегледайте същите данни в браузъра
- Changelog: Преглеждайте записи с филтри и пагинация
- Roadmap: Гласувайте за предложения в потребителския интерфейс
- Известни проблеми: Преглеждайте отворени и разрешени проблеми
- Портал за актуализации: Преглед на раздела