Changelog
Historia zmian zewnętrznego API Mediflo, od 1.0.0 do dziś.
Zmiany niekompatybilne dostają nową wersję w ścieżce. Nowe pola dodajemy bez zapowiedzi — parsuj odpowiedzi tolerancyjnie i ignoruj nieznane klucze.
25 października 2026 — boty czatu w serwerze MCP
Zmiana kompatybilna wstecz: nowe pola i jedno nowe narzędzie. Istniejące klucze i trasy zostają.
- Dodane
channelSettingswGETiPATCH /bots/{botId}/configoraz w wynikach narzędzi MCPget_bot_configiupdate_bot_config. To ustawienia czatu na stronie: powitanie, komunikat przekazania i tekst blokady. Zapis tego pola działał już wcześniej; odczyt go pomijał. - Dodane narzędzie MCP
update_bot— to samo coPATCH /bots/{botId}: nazwa, aktywność, kanały i numer. Działa od razu, nie jest wersją roboczą. Nowy kanał można dodać tylko wtedy, gdy organizacja może z niego korzystać. - Zmienione
GET /bots/{botId}/readinessiget_bot_readinesssą świadome kanałów.readyForWebChatmówi, czy widget czatu jest podpięty. Bot tylko czatowy nie wymaga numeru (readyForOutbound: falsenie jest wtedy usterką). Przy włączonych rezerwacjach na czacie pojawiają się kontroleWEB_CHAT_BOOKING_WIDGET_MISSINGiWEB_CHAT_BOOKING_SMS_MISSING. - Zmienione
get_prompting_guidancezwraca też blokchatz zasadami dla czatu na stronie. - Widget (domeny i kolory), podgląd czatu, crawl strony do bazy wiedzy i przełączniki Terminarza zostają w aplikacji — serwer MCP o tym mówi, ale ich nie wykonuje.
19 października 2026 — modele botów konfiguruje Mediflo; bez kosztów i tokenów w odpowiedziach
Ścieżki i zakresy bez zmian. Zmienia się zawartość kilku odpowiedzi i to, które pola konfiguracji bota możesz zmieniać. Klucz działa z uprawnieniami osoby, która go utworzyła (przy połączeniu przez OAuth — osoby zalogowanej); poniższe ograniczenia nie dotyczą kluczy pracowników Mediflo.
- Zmienione modele bota konfiguruje zespół Mediflo.
PATCH /bots/{botId}/configodrzuca zmianęmodelConfig,remarksLlmModelIdi dawnychagentLlmModelId/agentSttModelId/agentTtsModelIdbłędem403BOT_MODEL_CONFIG_STAFF_ONLY(wdetails.fields— które pola); narzędzie MCPupdate_bot_configodmawia tak samo. Odesłanie niezmienionej, odczytanej wartości nadal działa. Te pola zniknęły z opublikowanego schematu wejścia.POST /botsicreate_botnadal zapisują w nowym bocie rekomendowane modele. - Zmienione
GET /bots/{botId}/config, odpowiedziPATCH /bots/{botId}/configiPOST /bots/{botId}/config/rollbackoraz narzędzia MCPget_bot_config,update_bot_configirollback_bot_confignie zawierają kluczamodelConfig. - Zmienione
GET /model-catalogzwraca tylkorecommendedDefaults, bezmodelConfigiextraction;models,recommendedChainsiextractionModelsnie są zwracane. Narzędzie MCPget_recommended_defaultsdziała tak samo, alist_extraction_modelsodmawia. - Zmienione narzędzie MCP
get_prompting_guidancezwraca ogólne zasady pisania promptu (general.guidance), bez wskazówek dla konkretnych modeli i bez listy źródeł. - Zmienione
GET /bot-sessions/{dispatchId}/telemetryi narzędzie MCPget_bot_session_telemetry:pipelineMetricszawiera tylko opóźnienia i liczniki żądań (np.avg_ttft_s,avg_ttfb_s,avg_eou_delay_s,request_count,cancelled_count). Liczby tokenów, sekundy audio rozpoznawania mowy i liczba znaków syntezy nie są zwracane. - Zmienione żadna odpowiedź API ani narzędzia MCP nie zawiera pól kosztów, tokenów ani jednostek rozliczeniowych dostawców (np.
cost,usage,inputTokens,total_tokens,total_characters). Ceny Twoich usług (price,priceAmount) bez zmian. - Zmienione narzędzia MCP trunków: ustawienie redukcji szumów w kierunku przychodzącym nazywa się
noiseReduction(dotądenableKrisp) — w odpowiedziach (inbound.noiseReduction) i na wejściucreate_carrier_trunkorazupdate_carrier_trunk_direction. Stara nazwa jest nadal przyjmowana na wejściu.
13 października 2026 — sprawy klientów w API i w serwerze MCP
Nowa rodzina tras i narzędzi, dwa nowe zakresy. Istniejące trasy i klucze bez zmian — także klucze z * nie dostają spraw, bo oba zakresy trzeba nadać wprost. Dostępne w organizacjach biznesowych, które mają włączone sprawy. Szczegóły: sprawy.
- Dodane zakresy
cases.readicases.write(zapis obejmuje odczyt). Przy logowaniu asystenta przez OAuth wynikają z uprawnieńcases.viewicases.manage. - Dodane trasy
GET /cases,POST /cases,GET /cases/{caseId},PATCH /cases/{caseId},GETiPOST /cases/{caseId}/comments,POST /cases/{caseId}/links,DELETE /cases/{caseId}/links/{linkId}. - Dodane narzędzia MCP
list_cases,get_case,create_case,update_case. - Dodane webhooki
case.created,case.updated(z polemchanged) icase.deleted. Treść notatek nigdy nie trafia do webhooka. Typy zdarzeń widzą tylko organizacje z włączonymi sprawami.
12 października 2026 — profil taksonomii w call.analysis.completed
Zmiana kompatybilna wstecz: nowe pole w zdarzeniu, kształt pozostałych pól bez zmian.
- Dodane
insights.profilew zdarzeniucall.analysis.completed— taksonomia, z której pochodzą wartościprimaryIntent,category,payeribooking:medical,commercial,b2balbob2c(lista może się wydłużyć).nulloznacza, że profil nie jest znany — na przykład dla rozmów przeanalizowanych przed wprowadzeniem profili. - Zmienione organizacje z branżą inną niż medyczna albo bez ustawionej branży dostają wartości z taksonomii
commercial,b2blubb2c(np.categoryrówneorder_status,service_requestalboquote_pricing) zamiast medycznych, apayerma u nich zawsze wartośćnull. W organizacjach medycznych wartości się nie zmieniają.
12 października 2026 — neutralna nazwa osoby w terminie rozmowy bota
Zmiana kompatybilna wstecz: dotychczasowe pole działa jak dawniej.
- Dodane
context.appointment.staffName(aliasdoctorName) wPOST /bot-sessionsi narzędziu MCPcreate_bot_session— osoba, z którą jest umówiony termin (pracownik, specjalista, konsultant). Trafia do tej samej zmiennej{{appointment_doctor_name}}.doctorNamenadal działa; oba pola naraz są przyjmowane tylko z tą samą wartością.
1 października 2026 — telefonia Twojej organizacji przez MCP: trunki SIP, drzewka IVR i kolejki
Nowe narzędzia MCP do konfiguracji telefonii Twojej organizacji i sześć nowych zakresów. Powierzchnia REST bez zmian. Istniejące klucze — także z * — nie dostają tych narzędzi: zakresy trzeba nadać wprost, a zakresy zapisu nadaje tylko administrator (nigdy logowanie asystenta przez OAuth). Szczegóły: zakresy.
- Dodane zakresy
trunks.read,trunks.write,ivr-flows.read,ivr-flows.write,queues.read,queues.write. Zakres zapisu obejmuje odpowiadający mu odczyt. - Dodane trunki SIP:
list_trunk_providers(obsługiwani operatorzy i to, jak operator ma się z nami łączyć),list_trunks,get_trunk(z prostą diagnostyką: stan rejestracji, synchronizacja z bramką SIP, lista kontrolna gotowości, liczba połączeń z ostatnich 24 h i 7 dni),create_carrier_trunk,update_carrier_trunk,update_carrier_trunk_direction,set_trunk_phone_numbers. Hasło trunka można tylko zapisać — nigdy nie wraca w odpowiedzi; zamiast podawać je w rozmowie, można je wpisać w Portalu pod adresemportalUrlz odpowiedzi. Trunki z rejestracją centrali (peer) narzędzia tylko odczytują. - Dodane drzewka IVR:
list_ivr_flows,get_ivr_flow,get_ivr_flow_schema,list_ivr_audio_assets,validate_ivr_flow,create_ivr_flow,create_ivr_flow_version,save_ivr_flow_draft,activate_ivr_flow_version,assign_ivr_flow_to_phone_number,detach_ivr_flow_from_phone_number. Narzędzia edytują wyłącznie wersje robocze; aktywacja i przypisanie numeru działają od następnego połączenia, a aktywacja zwraca identyfikator poprzedniej wersji do wycofania jednym wywołaniem. - Dodane kolejki:
list_queues,get_queue,list_queue_member_candidates,create_queue,update_queue,add_queue_member,update_queue_member,remove_queue_member,set_queue_member_schedules,set_user_external_phone_number. Prywatne numery, na które dzwoni kolejka zewnętrzna, w odpowiedziach są zawsze zamaskowane. - Zmienione przypisanie do trunka numeru, który jest aktywny w innej organizacji, kończy się błędem
PHONE_NUMBER_UNAVAILABLE. Adres IP operatora musi być publiczny i nie szerszy niż/24(IPv4) lub/64(IPv6).
29 września 2026 — webhooki bez pracowników wsparcia Mediflo
Kształt zdarzeń bez zmian — zmienia się tylko to, kogo mogą wskazywać.
- Zmienione webhooki
task.created,task.updatedicall.completednie wskazują pracowników wsparcia Mediflo pracujących w Twoim workspace — tak jak odpowiedzi API od 28 września. Gdy zadanie jest przypisane lub sugerowane takiej osobie albo taka osoba obsłużyła rozmowę,assignedTo,suggestedAssigneelubagentma wartośćnull. Samo zdarzenie, zadanie i rozmowa zostają.
28 września 2026 — mniej danych wewnętrznych w odpowiedziach
Powierzchnia API bez zmian w ścieżkach i zakresach. Zmienia się zawartość kilku pól — parsuj je tolerancyjnie, jak zawsze.
- Zmienione
GET /bot-sessions/{dispatchId}/telemetryi narzędzie MCPget_bot_session_telemetry:otherzawiera wyłącznie wybrany zestaw dodatkowej diagnostyki — czasy połączenia, liczniki ciszy i rozpoznawania mowy, wynik detektorów (np. poczty głosowej) oraz ścieżkę przez przepływ rozmowy (węzły, bez zebranych wartości). Komunikaty błędów zgłaszanych przez środowisko wykonawcze bota są skracane do typu błędu; krótkie, sklasyfikowane komunikaty (np. status SIP) zostają bez zmian. Pełną treść widzi wsparcie Mediflo. - Zmienione odpowiedzi nie pokazują pracowników wsparcia Mediflo pracujących w Twoim workspace. W połączeniach (
GET /calls,list_calls,get_call) i zadaniach (GET/POST /tasks,GET/PATCH /tasks/{taskId},list_tasks,create_task) w miejscu ich danych jestnull, a ich wpisy wassigneesznikają — sam rekord, połączenie czy zadanie, zostaje.GET /usersich nie zwraca, a statystyki zadań (get_task_statistics) nie mają dla nich wiersza. - Zmienione
aggregate_calls(wymiardisconnect_reason) iget_ivr_statistics: zakończenia rozmowy po stronie platformy są zgrupowane jakoSYSTEM_ENDED. - Zmienione odmowy
POST /bot-sessions(create_bot_session) zwracają wdetailstylkoreason, pola kraju (phone_country,default_country,allowed_countries) idispatchId.
26 września 2026 — MCP get_call: komunikaty IVR na jednej rozmowie
- Dodane narzędzie MCP
get_call(zakrescalls.read). Zwraca jedną rozmowę — te same pola co wierszlist_calls— oraz tablicęannouncements: przybliżona rekonstrukcja z osi czasu IVR rozmowy, aktualnejflowDefinitionprzypiętej wersji przepływu i tabeliaudio_assets. Węzły:audio,menu,hangup(tylko gdy węzeł ma plik audio) iintent. Gdy wersja przepływu się nie wczyta (brakivr_flow_version_idalbo usunięta wersja),hangupbez pliku audio i tak pojawia się w wyniku. - Zdarzenie
ivr.node.enteredpowstaje, zanim silnik rozwiąże albo odtworzy audio.enteredAtto znacznik czasu tego zdarzenia, a niepotwierdzony początek ani koniec odsłuchu. Wynik nie jest dowodem, że rozmówca usłyszał ten zasób. ivr_flow_version_idwskazuje wiersz, któregoflowDefinitionnadal można nadpisać w miejscu. Historyczneget_callmoże więc pokazać późniejszą edycję tej wersji, a nie zamrożony obraz tego, co poszło na linii. v1 zostawia to złączenie jako best-effort. Trwałe rozwiązanie to zapisaudioAssetIdidurationSecondsna zdarzeniu osi czasu w chwili emisji — poza tym wydaniem.contentto tekst TTS zasobu audio, gdy kolumnatextjest uzupełniona; w przeciwnym razie nazwa wyświetlana zasobu (alboname); dla węzłaintentbez treści i nazwy zasobu —promptText; na końcu etykieta węzła.contentSourcemówi, które źródło zostało użyte (tts_text,display_name,node_label) albo jestnull. To nie jest transkrypcja wypowiedzi rozmówcy.durationSecondspochodzi zaudio_assets.duration, gdy złączenie z zasobem się uda. Rozmowa bezivr_flow_version_id, z usuniętą wersją albo z węzłem, którego nie ma w tej wersji, nadal zwraca wpisy z osi czasu: treść z etykiety węzła, adurationSecondsrównenull.- Bez zmian
list_callsiGET /api/external/v1/calls— lista nie dostaje tych pól. Nie ma odpowiednika REST.serverVersionzostaje0.6.0. Wersje przepływu IVR nie stają się niemutowalne.
Przykład announcements:
[
{
"nodeId": "audio-welcome",
"nodeType": "audio",
"nodeLabel": "Powitanie",
"audioAssetId": "44444444-4444-4444-8444-444444444444",
"content": "Dzień dobry, tu rejestracja.",
"contentSource": "tts_text",
"durationSeconds": 4.2,
"enteredAt": "2026-09-26T08:00:01.000Z"
},
{
"nodeId": "menu-main",
"nodeType": "menu",
"nodeLabel": "Menu główne",
"audioAssetId": "55555555-5555-4555-8555-555555555555",
"content": "Menu główne",
"contentSource": "display_name",
"durationSeconds": 8,
"enteredAt": "2026-09-26T08:00:06.000Z"
}
]25 września 2026 — serwer MCP 0.6.0: nowe SDK i protokół 2026-07-28 per organizacja
Serwer MCP działa na nowej wersji SDK. Wersję protokołu 2026-07-28 włączamy per organizacja, na prośbę — bez tego żądanie w tej wersji dostaje, jak dotąd, 400 i -32000, a klient wraca do 2025-11-25. Powierzchnia REST bez zmian.
- Dodane wersja protokołu MCP
2026-07-28, włączana per organizacja: kopertaparams._metaw każdym żądaniu (protocolVersioniclientCapabilities), nagłówekMcp-Method, a przytools/calltakżeMcp-Name, opcjonalne sondowanieserver/discover, bez rundyinitializei bez sesji. Strumieńsubscriptions/listennie jest obsługiwany (404,-32601) — serwer jest bezstanowy i ogłaszalistChanged: false. Szczegóły: instalacja. - Bez zmian wersje
2025-11-25,2025-06-18i2025-03-26(oraz starsze, od2024-10-07) działają jak dotąd. Istniejące połączenia nie wymagają ponownego łączenia ani zmian konfiguracji, a narzędzia, ich opisy i schematy wejściowe (JSON Schema draft-07) są te same. - Zmienione wywołanie nieznanego narzędzia (także takiego, na które połączenie nie ma zakresu) zwraca błąd JSON-RPC
-32602zamiast wyniku z flagąisError, w każdej wersji protokołu i w każdej organizacji. Biblioteki klienckie — np.ClientSession.call_toolw SDK dla Pythona icallToolw SDK TypeScript v1 — zgłaszają teraz wyjątek, zamiast zwrócić wynik z błędem. - Zmienione
tools/callbez polaargumentswykonuje narzędzie (argumenty są sprawdzane jak{}); dotąd kończyło się wynikiem zisError. - Zmienione
tools/callw wersji2025-11-25z parametremtaskwykonuje narzędzie; dotąd serwer odmawiał kodem-32603. - Zmienione
tools/listnie zwraca już polaexecution({"taskSupport": "forbidden"}) — brak pola znaczy to samo. Komunikaty walidacji argumentów mają inny format tekstu. - Zmienione w organizacjach z włączoną wersją
2026-07-28żądanie w wersji 2025, które ma w_metakluczio.modelcontextprotocol/protocolVersion, jest odrzucane (400,-32022); bez włączenia działa jak dotąd. - Zmienione
get_server_inforaportujeserverVersion: "0.6.0", alatestProtocolVersionisupportedProtocolVersionswymieniają2026-07-28tylko w organizacjach, które ją mają.
7 września 2026 — dokumentacja przeniesiona na docs.mediflo.ai
Zamiast jednego pliku Markdown masz renderowaną, przeszukiwalną stronę po polsku. Powierzchnia API bez zmian.
- Dodane katalog narzędzi MCP i katalog zdarzeń webhook publikowane jako JSON:
/api/mcp-tools.jsoni/api/webhook-events.json. Generuje je ten sam przebieg, coopenapi.json, więc nie mogą się rozjechać z kodem. - Zmienione stary plik
rest-api.mdprzestał istnieć; jego treść żyje tutaj, a poprzedni adres przekierowuje na/api/. - Bez zmian
/api/openapi.jsoni/api/llms.txtserwują dokładnie te same bajty pod tymi samymi adresami.
1.7.0 — 6 września 2026
- Dodane
GET /bot-sessions/{dispatchId}/recording(zakresbot-calls.read). Zwraca podpisany adres URL do nagrania rozmowy, ważny przez 15 minut;available: false, gdy sesja nie ma zapisanego nagrania. Webhookbot_call.completedjuż wcześniej podawał tę ścieżkę wlinks.recording— dotąd odpowiadała404. - Dodane
links.recordingwGET /bot-sessions/{dispatchId}(i w narzędziu MCPget_bot_session, które zwraca ten sam obiekt). Zmiana addytywna — dotychczasowetelemetryitranscriptbez zmian. - Nagranie nie ma narzędzia MCP: podpisany adres audio to nie jest coś, na czym agent może działać, ani coś, co chcemy przepuszczać przez kontekst modelu. Użyj endpointu REST.
1.6.1 — 6 września 2026
Powitania zależne od kierunku rozmowy. Bot może inaczej otwierać rozmowy przychodzące i wychodzące, a każde z powitań da się wyłączyć.
- Dodane opcjonalne
greetingConfig.byDirection: { inbound?, outbound? }wGET/PATCH /bots/{botId}/configoraz wget_bot_config/update_bot_config. Każdy wpis tostatic,llmalbo{ "type": "off" }(bot czeka na rozmówcę, a po ok. 4 s ciszy improwizuje otwarcie); brakujący klucz zachowuje wspólne powitanie. Zmiana addytywna — istniejące konfiguracje bez zmian. - Zmienione ostrzeżenie gotowości
ai_disclosuresprawdza teraz wspólne powitanie i powitanie każdego kierunku, więc powitanie przychodzące bez ujawnienia AI jest zgłaszane nawet wtedy, gdy wspólne je zawiera.
1.6.0 — 6 września 2026
Połączenia wychodzące zlecane przez partnera. Twój system może zlecić rozmowę bota z pacjentem, zamiast wysyłać SMS — patrz POST /bot-sessions.
- Zmienione
get_server_inforaportuje terazserverVersion: "0.4.0". - Dodane
POST /bot-sessionsoraz narzędzie MCPcreate_bot_session, oba pod nowym zakresembot-calls.write. Dzwoni od razu (bez planowania), wymagaidempotencyKey(powtórka →200z istniejącą sesją, nigdy drugie połączenie), odmawia poza 08:00–20:00 czasu tenanta (OUTSIDE_CALL_WINDOW) i przyjmuje typowaną kopertęcontext(reason,message,appointment,variables) renderowaną w prompcie bota. - Dodane kody błędów
OUTSIDE_CALL_WINDOW,IDEMPOTENCY_KEY_REUSED,BOT_INACTIVE,BOT_SESSION_LINE_BUSY,BOT_SESSION_CREATE_FAILED. - Zmienione
GET /bot-sessionsraportujestatus: FAILEDdla sesji, które zostały przyjęte, ale nigdy się nie połączyły — wcześniej czytały się jakoCOMPLETED, podczas gdy webhookbot_call.completedmówiłfailed. - Sesje zlecone tą drogą noszą
attemptIdw formacieext-<dispatchId>.
1.5.0 — 20 sierpnia 2026
Pętla wsparcia przez MCP. Wszystko, co 1.4.0 dodało do REST, jest teraz dostępne jako narzędzia MCP — agent może zdiagnozować rozmowę i ją zgłosić bez przeglądarki.
- Dodane
list_bot_sessions,get_bot_session,get_bot_session_telemetryiget_bot_session_transcript(zakresbot-calls.read). Telemetria i transkrypcja zostają dwoma osobnymi narzędziami z tego samego powodu, dla którego są dwoma endpointami: diagnostyka nigdy nie niesie treści rozmowy. - Dodane
create_support_ticket,attach_sessions_to_ticket,list_support_ticketsiget_support_ticket(zakresytickets.read/tickets.write). Zgłoszenia założone tą drogą są oznaczanereportedVia: "mcp"i — o ile wywołujący nie podareportedByUserId— nie mają zgłaszającego. - Zmienione
get_server_inforaportujeserverVersion: "0.3.0".
1.4.0 — 20 sierpnia 2026
Sesje botów i zgłoszenia do wsparcia — headless pętla wsparcia.
- Dodane
GET /bot-sessions,GET /bot-sessions/{dispatchId},GET /bot-sessions/{dispatchId}/telemetryiGET /bot-sessions/{dispatchId}/transcript(zakresbot-calls.read). Telemetria i transkrypcja są osobnymi endpointami celowo: diagnostyka nigdy nie niesie treści rozmowy, więc można debugować rozmowę bez wyciągania wypowiedzi pacjenta. - Dodane
GET /tickets,POST /tickets,GET /tickets/{ticketId}iPOST /tickets/{ticketId}/sessions(zakresytickets.read/tickets.write). Zgłoszenie może nieść sesje botów, które SĄ problemem, jako pełnoprawne odnośniki, a nie URL w komentarzu. - Zmienione zgłaszający jest teraz opcjonalny.
Ticket.reportedByUserIdmoże byćnull, a nowy znacznikreportedViazapisuje, którymi drzwiami przyszło zgłoszenie (external_api,mcp, albonulldla Portalu). PodajreportedByUserId, kiedy wiesz, kto zgłasza; pomiń go, a zgłoszenie powstanie bez zgłaszającego, zamiast być przypisane komuś, kto go nie założył. Żadne istniejące zgłoszenie się nie zmieniło.
1.3.0 — 20 sierpnia 2026
- Dodane narzędzia MCP do zarządzania botami — headless powierzchnia botów jest dostępna przez MCP tak samo jak przez REST: boty, wersje robocze konfiguracji, przepływy (razem z szablonami po stronie serwera i bezstanową walidacją), źródła wiedzy, gotowość i publikacja z wersjonowanym wycofaniem (
publish_bot_config,list_config_versions,rollback_bot_config). - Dodane
get_recommended_defaultsilist_extraction_models— odpowiednikirecommendedDefaultsiextractionModelszGET /model-catalog, serwowane z tego samego źródła, żeby headless klient nigdy nie musiał wymyślać stosu modeli ani zgadywać, skąd wziąć poprawneremarksLlmModelId. - Bot utworzony przez MCP przychodzi wstępnie skonfigurowany:
create_botod razu wypełnia rekomendowanymodelConfig,turnTakingModei model ekstrakcji. - Narzędzia są ogłaszane w kolejności konfiguracji, a te modyfikujące zwracają tablicę
nextStepsz nazwą wywołania, które logicznie następuje dalej. Obowiązuje reguła: zmiany konfiguracji — również to, co odtwarza podgląd bota — działają dopiero po publikacji.
1.2.1 — 20 sierpnia 2026
- Dodane
GET /model-catalogzwraca terazextractionModels— listę wyboru modelu ekstrakcji pouwagowej (remarks), z którejremarksLlmModelIdbierze identyfikatory. To pole jest wymagane do publikacji bota, a katalog za nim nie miał zewnętrznej powierzchni, więc headless klient mógł skonfigurować bota, ale nigdy go opublikować. Lista zawiera wyłącznie modele obsługujące structured output. POST /bots/{botId}/config/publishdołącza terazdetails.hintdo400 BOT_CONFIG_INCOMPLETE, kiedy brakujeremarksLlmModelId, wskazując endpoint, z którego bierze się identyfikator.details.missingFieldsbez zmian.
1.2.0 — 19 sierpnia 2026
- Dodane serwer MCP pod
POST /api/external/mcp— bezstanowy streamable HTTP, uwierzytelniany tymi samymi kluczamimflo_…, z narzędziami filtrowanymi po zakresach klucza. Wystartował zget_server_info,list_calls,list_tasksicreate_task; pełna powierzchnia narzędzi przyszła w 1.3.0. Jedna wiadomość na żądanie — wsadowe JSON-RPC jest odrzucane, a ciała są ograniczone do 1 MB.
1.1.0 — 19 sierpnia 2026
Dodane
- Limity zapytań — 600 odczytów / 120 zapisów na klucz na minutę,
429zRetry-After. - Rotacja klucza API z konfigurowalnym oknem karencji (1–168 h), żeby wymieniać poświadczenia bez przestoju.
- Udokumentowane endpointy, które istniały, ale brakowało ich w opisie:
GET /calls,GET /contact-requests,POST /contact-requests. - Audyt — każde zewnętrzne żądanie trafia do dziennika audytu workspace (nigdy ciała żądań ani odpowiedzi).
Zmienione
GET /taskszwraca teraztotalPages;pageszostaje jako przestarzały alias i zniknie w kolejnej wersji głównej. Arytmetyka bez zmian:totalPagestoceil(total / limit), więc pusty wynik nadal daje0.GET /contact-requestsiPOST /contact-requestszwracają teraz jawny, udokumentowany zestaw pól — pola spoza kontraktu nie są już zwracane. Obiekty prób są przycięte doid,status,result,startedAt,completedAt, a obiekt paginacji ma wyłącznie pola opisane w Paginacji.- Awaria backendu podczas weryfikacji klucza zwraca teraz
503 EXTERNAL_API_UNAVAILABLEzamiast401— ponów zamiast rotować poświadczenia. VALIDATION_ERROR.detailsjest konsekwentnie tablicą{ field, message }, również przy sprawdzaniu formatu identyfikatora zadania na/tasks/{taskId}.- Przykład niewystarczającego zakresu pokazuje prawdziwe klucze payloadu (
requiredScope/availableScopes). - Nieznane zakresy są odrzucane przy tworzeniu klucza.
users.writeitags.writenigdy nie zostały zaimplementowane i nie da się ich już przyznać.
1.0.0 — luty 2026
Pierwsze wydanie
- Operacje CRUD na zadaniach.
- Endpoint listujący użytkowników (tylko odczyt).
- Endpoint listujący tagi (tylko odczyt).
- Uwierzytelnianie kluczem API z HMAC-SHA256.
- Uprawnienia oparte na zakresach.
- Spójna obsługa błędów.
Wsparcie
Coś nie działa? Załóż zgłoszenie przez POST /tickets razem z identyfikatorami sesji,
które nie zadziałały — wtedy nie musimy pytać, o którą rozmowę chodzi.