Mediflo
REST API

Uwierzytelnianie

Format klucza API, nagłówek Authorization, jednorazowe wyświetlenie i rotacja z oknem karencji.

Każde żądanie do /api/external/v1/* wymaga klucza API. Klucze są przypisane do workspace i noszą jawną listę zakresów — trasa, do której zakresu brakuje, odpowiada 403 API_KEY_INSUFFICIENT_SCOPE.

Skąd wziąć klucz

  1. W Portalu wejdź w Ustawienia → Integracje → Klucze API.
  2. Kliknij Wygeneruj nowy klucz API.
  3. Nadaj nazwę i zaznacz zakresy — minimalny zestaw, jaki wystarcza integracji.
  4. Skopiuj pełny klucz od razu. Pokazujemy go jeden raz.
  5. Wrzuć go do menedżera sekretów albo zmiennej środowiskowej. Nigdy do repozytorium.

Klucz zobaczysz tylko raz

Przechowujemy wyłącznie skrót sekretu (HMAC-SHA256), więc nie możemy pokazać klucza ponownie — nawet gdybyśmy chcieli. Zgubiony klucz zastępuje się rotacją albo nowym kluczem.

Format klucza

Produkcja:  mflo_live_<keyId>_<secret>
Deweloperka: mflo_test_<keyId>_<secret>

keyId to 16 znaków szesnastkowych — część jawna, widoczna na liście kluczy i używana do korelacji logów. secret to 64 znaki szesnastkowe.

Przykład:

mflo_live_a1b2c3d4e5f6a7b8_9f8e7d6c5b4a39281706f5e4d3c2b1a0aabbccddeeff00112233445566778899

Prefiks nie jest gwarancją środowiska

Prefiks mflo_live_ albo mflo_test_ nie mówi, przeciwko czemu klucz działa — oba weryfikują się identycznie. To kosmetyka; nie buduj na tym logiki.

Nagłówek

Klucz jedzie w nagłówku Authorization ze schematem Bearer:

Authorization: Bearer mflo_live_a1b2c3d4e5f6a7b8_x9y8z7w6...
curl -s https://app.mediflo.ai/api/external/v1/bots \
  -H "Authorization: Bearer mflo_live_..." \
  -H "Content-Type: application/json"

Co może pójść nie tak

StatusKodZnaczenie
401API_KEY_INVALIDFormat klucza jest zły albo klucza nie ma
401API_KEY_EXPIREDKlucz minął datę ważności
401API_KEY_REVOKEDKlucz został unieważniony
403API_KEY_INSUFFICIENT_SCOPEKlucz jest dobry, ale brakuje mu zakresu; details niesie requiredScope i availableScopes
503EXTERNAL_API_UNAVAILABLENie udało nam się zweryfikować klucza z powodu awarii po naszej stronie

401 jest celowo nierozróżnialne poza „wygasł" i „unieważniony" — żeby nie dało się nim sondować, które klucze istnieją.

`503` to nigdy nie jest problem z kluczem

EXTERNAL_API_UNAVAILABLE znaczy, że nasz backend nie odpowiedział podczas weryfikacji. Ponów żądanie z wykładniczym odczekaniem. Nie rotuj kluczy w reakcji na 503 — Twoje poświadczenia są w porządku.

Rotacja klucza

Rotacja jest tylko przez API — w Portalu nie ma jeszcze przycisku.

POST /api/api-keys/{apiKeyId}/rotate

To endpoint zarządczy, nie część /api/external/v1: uwierzytelnia go sesja Portalu (nie klucz Bearer mflo_…) i wymaga uprawnienia api-keys.manage. {apiKeyId} to UUID id klucza — wartość z listy kluczy API, a nie jawny keyId.

curl -s -X POST \
  'https://app.mediflo.ai/api/api-keys/550e8400-e29b-41d4-a716-446655440000/rotate' \
  -H 'Content-Type: application/json' \
  -H 'Cookie: <ciasteczko sesji Portalu>' \
  -d '{ "graceHours": 24 }'
  • graceHours — jak długo działa poprzedni sekret. Liczba całkowita 1–168 (7 dni), domyślnie 24. Puste ciało też jest przyjmowane i bierze wartość domyślną.
  • Odpowiedź zawiera nowy formattedKey raz. Nigdy więcej go nie pokażemy.
  • Jawny keyId się nie zmienia, więc korelacja logów przeżywa rotację.
  • Do końca okna karencji uwierzytelnia i stary, i nowy sekret. Wdróż nowy klucz, potwierdź ruch, poczekaj aż okno się zamknie.
  • Klucza unieważnionego nie da się zrotować (409 API_KEY_ROTATE_REVOKED).

Honorujemy tylko jeden poprzedni sekret

Rotacja wykonana w trakcie otwartego okna karencji sprawia, że poprzednikiem staje się sekret z drugiej rotacji — a pierwotny przestaje działać natychmiast, przed końcem obiecanego okna. Zrotuj raz, dokończ wdrożenie, dopiero potem rotuj ponownie.

Wygaśnięcie jest wyliczane, nie zamiatane: kolumny poprzedniego sekretu nie są czyszczone po upływie okna — weryfikacja po prostu przestaje je akceptować, gdy previousSecretExpiresAt jest w przeszłości.

Higiena kluczy

  • Osobne klucze dla osobnych integracji. Wtedy unieważnienie jednej nie kładzie pozostałych, a dziennik audytu mówi, kto co zrobił.
  • Minimalne zakresy. Zobacz Zakresy.
  • Data ważności przy tworzeniu, jeśli integracja jest tymczasowa.
  • Podglądaj „Ostatnio użyty" na liście kluczy i unieważniaj to, czego nikt nie używa.
  • Klucz wyciekł? Unieważnij go, nie czekając na rotację.

Na tej stronie