Przejdź do treści
Sursa Developers

Uwierzytelnianie

Każde żądanie do Sursa API zawiera w nagłówku Authorization klucz API albo token dostępu OAuth aplikacji:

Authorization: Bearer kb_3f9c…

Klucz identyfikuje organizację i decyduje, co żądanie może widzieć i zmieniać: decydują o tym jego rola, zakresy, profil dostępu i kolekcje. Pod adresem API nie ma sesji ani plików cookie. Każde żądanie jest uwierzytelniane osobno, więc możesz wysyłać żądania równolegle i z kilku serwerów z tym samym kluczem.

curl https://api.sursa.com/v1/me \
  -H "Authorization: Bearer $SURSA_API_KEY"

Wcześniejsze integracje mogą zamiast tego wysyłać klucz w nagłówku X-API-Key. Jest on nadal akceptowany, ale nowy kod powinien używać Authorization: Bearer.

Rodzaje danych uwierzytelniających

Dane uwierzytelniająceWyglądGdzie działają
Klucz API organizacjikb_…Każda operacja API, w ramach roli, zakresów, profilu dostępu i kolekcji klucza.
Klucz własnego źródłakbsrc_…Tylko operacje push jego własnego źródła (/v1/push/sources/{source_id}/…).
Token dostępu OAuthkbat_…Operacje z dokumentacji API, w ramach zakresów tokenu. Token z POST /oauth/token uzyskany za pomocą kodu autoryzacji działa w imieniu pracownika, który wyraził zgodę; token client_credentials działa w imieniu organizacji, tak jak klucz API. Jest ważny przez 1 godzinę.

Wszystkie wysyła się w ten sam sposób. Klucz własnego źródła nie może niczego odczytywać, wyszukiwać ani zmieniać poza swoim źródłem; używaj go tam, gdzie klucz przechowuje strona trzecia, np. platforma integracyjna.

Błędy uwierzytelniania

Status i kodCo oznaczaCo zrobić
401 auth.not_authenticatedBrak klucza, błędnie wpisany klucz lub klucz unieważniony.Sprawdź nagłówek i wartość klucza.
401 api_keys.expiredMinęła data wygaśnięcia klucza.Utwórz nowy klucz i zastąp nim stary.
401 sources.push_key_invalidKlucz własnego źródła jest błędny, unieważniony lub należy do innego źródła.Sprawdź klucz i ID źródła w ścieżce.
401 oauth.token_expiredToken dostępu OAuth wygasł.Uzyskaj nowy za pomocą tokenu odświeżania.
403 api_keys.scopeKlucz nie ma zakresu potrzebnego do tej operacji.Dodaj zakres lub użyj klucza, który go ma.
403 api_keys.feature_disabledPlan organizacji nie obejmuje kluczy API.Skontaktuj się z administratorem organizacji.
403 api_keys.ip_not_allowedŻądanie pochodzi z adresu spoza dozwolonych adresów klucza.Wywołuj API z dozwolonej sieci albo zmień adresy klucza.
403 api_keys.mcp_onlyOsobisty klucz MCP został użyty poza operacją /mcp.Do API używaj klucza API organizacji.
403 oauth.operation_not_allowedOperacja nie należy do publicznego API, więc token OAuth nie może jej wywołać.Użyj operacji z dokumentacji API.
403 org.suspendedOrganizacja jest zawieszona. Jej dane są zachowane.Skontaktuj się z administratorem organizacji.

403 oznacza, że żądanie zostało uwierzytelnione, ale nie jest dozwolone. Na żądanie dotyczące obiektu, którego klucz nie może widzieć, API odpowiada 404, tak samo jak w przypadku obiektu, który nie istnieje, więc klucz nie może się dowiedzieć, co leży poza jego dostępem.

Działanie jako profil dostępu

Klucz z rolą admin może sprawdzić, co zobaczyłaby inna grupa osób: nagłówek X-View-As wykonuje żądanie jako wybrany profil dostępu i opcjonalnie jako wybrana rola.

curl "https://api.sursa.com/v1/cards?limit=20" \
  -H "Authorization: Bearer $SURSA_ADMIN_KEY" \
  -H "X-View-As: employee:viewer"

Żądania w tym trybie tylko odczytują dane: każda zmiana zwraca 403 z kodem view_as.read_only. Token OAuth ani klucz bez roli admin nie mogą używać X-View-As: API odpowiada wtedy 403 z kodem view_as.admin_key_required. Na nagłówek, który nie wskazuje żadnego istniejącego profilu, API odpowiada 400 z kodem view_as.invalid_header.

Aplikacje przeglądarkowe

API zezwala na żądania z dowolnego pochodzenia (origin) w sieci (Access-Control-Allow-Origin: *) i nigdy nie używa plików cookie, więc strona internetowa może je wywoływać za pomocą fetch. Klucz znajduje się wtedy w kodzie strony i jest widoczny dla każdego, kto z niej korzysta. Wywołuj API z przeglądarki tylko z kluczem, który możesz pokazać tym użytkownikom, np. kluczem viewer ograniczonym do publicznych kolekcji, albo umieść własny serwer między przeglądarką a Sursą.

Co może zrobić tylko pracownik

Klucz API organizacji działa w imieniu organizacji, a nie osoby. Dwie części API należą do ludzi, dlatego działają tylko z tokenem, który działa w imieniu pracownika: z sesją w Sursie albo z tokenem dostępu OAuth wydanym za zgodą pracownika.

Rozmowy należą do osoby. Klucz API organizacji widzi w GET /v1/conversations tylko rozmowy, które sam rozpoczął. Publiczne API nie ma operacji, która rozpoczyna rozmowę, więc dla klucza lista jest zwykle pusta, a rozmowy pracowników nigdy nie są mu pokazywane. Pytania bez rozmowy, przez POST /v1/ask lub POST /v1/chat, działają z każdym kluczem, który ma zakres ask. Aby pobrać listę rozmów pracownika i odczytać historię jednej z nich za pomocą GET /v1/conversations/{conv_id}, wywołaj API z tokenem OAuth w imieniu tego pracownika. Token widzi tylko własne rozmowy tego pracownika; na każdą inną rozmowę API odpowiada 404 z kodem conversations.not_found.

Kartę weryfikuje tylko pracownik. Weryfikacja potwierdza, że osoba sprawdziła treść, dlatego POST /v1/cards/{card_id}/verification/verify i POST /v1/cards/{card_id}/verify wymagają sesji albo tokenu OAuth w imieniu pracownika, który może zweryfikować kartę. Z kluczem API organizacji albo tokenem client_credentials odpowiadają 400 z kodem cards.verify_user_account_required. Najpierw wykonywane są zwykłe sprawdzenia: na kartę, której klucz nie może widzieć, API odpowiada 404, a na żądanie klucza, który nie może jej zweryfikować, 403.