Standardowe odpowiedzi

Możliwe odpowiedzi dla każdego endpointu API

ALL /api/*

Te komunikaty mogą się pojawić w odpowiedzi na każde zapytanie

Responses

401 Token nie został przesłany

{
    "code": "401",
    "message": "JWT Token not found"
}

401 Token utracił ważność

{
    "code": "401",
    "message": "Expired JWT Token"
}

401 Nieprawidłowy token

{
    "code": "401",
    "message": "Invalid JWT Token"
}

Rejestracja

Umożliwia rejestrację użytkownika, lub użytkownika i organizacji, za pośrednictwem formularza rejestrowego. Po poprawnej rejestracji na adres email użytkownika zostaje wysłany link aktywacyjny.

POST /api/register/user

Tworzy użytkownika i wysyła email weryfikacyjny

Parameters

first_name string required

Imię

last_name string required

Nazwisko

email string required

Adres email

password string required

Hasło powiązane z adresem email

password_confirmation string required

Potwierdzenie hasła

Responses

201 Sukces. Użytkownik został utworzony

Użytkownik został pomyślnie utworzony, a email weryfikacyjny wysłany.

{
    "message": "User registered successfully. Verification email sent.",
    "user_id": 123
}

422 Błąd walidacji

Wybrane pola nie spełniają warunków walidacji.

{
    "last_name": "This field is required.",
    "email": "Email already in use.",
    "password": "The password confirmation does not match."
}

POST /api/registration

Tworzy organizację i użytkownika

Parameters

organization

name string required

Nazwa organizacji

nip string required

Numer identyfikacji podatkowej (NIP)

krs string required

Numer KRS

regon string required

Numer REGON

street string required

Ulica

building_number string required

Numer budynku

apartament_number string

Numer lokalu

city string required

Miasto

postal_code string required

Kod pocztowy

country string required

Państwo

user

first_name string required

Imię osoby do kotaktu

last_name string required

Nazwisko osoby do kotaktu

email string required

Adres email osoby do kotaktu

phone string required

Numer telefonu osoby do kotaktu

Responses

201 Sukces. Organizacja została utworzona

Organizacja została pomyślnie utworzona.

{
    "message": "Organization exists, user added"
}

400 Błąd zapytania

Niektóre pola nie spełniają warunków walidacji.

{
    "detail": "Cannot create an instance of ... from serialized data because its constructor requires the following parameters to be present: '$parameter'."
}

500 Użytkownik już istnieje

Użytkownik o podanym adresie email już istnieje w systemie.

{
    "detail": "User already exists"
}

Logowanie

Umożliwia autentykację użytkownika

POST /api/login

Uzyskanie tokena uwierzytelniającego. Czas ważności tokena wynosi 15 minut.

Parameters

email string required

Adres email

password string required

Hasło powiązane z adresem email

Responses

200 Sukces logowania bez 2FA

Użytkownik został poprawnie uwierzytelniony. Otrzymuje token autoryzacyjny.

{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

200 Wymagana dodatkowa weryfikacja (2FA)

Użytkownik został wstępnie uwierzytelniony, ale wymagana jest dodatkowa weryfikacja dwuskładnikowa.

{
    "status": "2FA_REQUIRED",
    "userId": "12345",
    "methods": [
        "sms",
        "email"
    ]
}

401 Użytkownik nie istnieje

{
    "status": "ERROR",
    "message": "User not found"
}

403 Konto użytkownika nie jest aktywne

{
    "status": "ERROR",
    "message": "User account is not active"
}

POST /api/token/refresh

Uzyskanie refresh tokena uwierzytelniającego. Czas ważności refresh tokena wynosi 8 godzin.

Parameters

refresh_token string required

Aktualny refresh token

Responses

200 Nowy token i refresh_token

Użytkownik został poprawnie uwierzytelniony. Otrzymuje nowy token i refresh token autoryzacyjny.

{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

401 Użytkownik nie istnieje

{
    "code": "401",
    "message": "JWT Refresh Token Not Found"
}

POST /api/password/reset-request

Wysyła prośbę o reset hasła

Parameters

email string required

Adres email

Responses

202 Mail został wysłany

Mail z linkiem do resetu hasła został wysłany na podany adres email.

{
    "message": "The email message has been sent"
}

401 Użytkownik nie istnieje

{
    "error": "User not found"
}

500 Mail nie został wysłany

Mail z linkiem do resetu hasła nie został wysłany na podany adres email.

{
    "message": "The email message has not been sent"
}

POST /api/password/reset

Resetowanie hasła na podstawie tokena przesłanego w mailu. Ważność tokena do resetu hasła wynosi 60 minut.

Parameters

token string required

Token przesłany w mailu z linkiem do resetu hasła

password string required

Nowe hasło

Responses

202 Hasło zostało zresetowane

Hasło zostało pomyślnie zresetowane

{
    "message": "Password has been successfully reset"
}

400 Token jest nieprawidłowy, lub utracił ważność

oken jest nieprawidłowy, lub utracił ważność. Ważność tokena do resetu hasła wynosi 60 minut

{
    "message": "Invalid or expired reset token"
}

POST /api/2fa/send-code

Wybór metody uwierzytelnienia dwuskładnikowego

Parameters

userId integer required

ID użytkownika

method string required

Wybrana metoda uwierzytelnienia dwuskładnikowego

Responses

200 Wysłanie kodu 2FA

Kod uwierzytelnienia dwuskładnikowego został wysłany wybrana metodą

{
    "status": "CODE_SENT",
    "method": "email"
}

401 User not found

{
    "status": "ERROR",
    "message": "User not found."
}

POST /api/2fa/verify

Weryfikacja kodu uwierzytelnienia dwuskładnikowego

Parameters

userId integer required

ID użytkownika

code string required

Kod uwierzytelnienia dwuskładnikowego przekazany użytkownikowi wybraną przez niego metodą

Responses

200 Sukces logowania z 2FA

Użytkownik został poprawnie uwierzytelniony. Otrzymuje token autoryzacyjny.

{
    "status": "AUTHENTICATED",
    "auth_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

401 Niepoprawny kod

Użytkownik przesłał niepoprawny kod uwierzytelnienia dwuskładnikowego.

{
    "status": "ERROR",
    "message": "Invalid verification code."
}

404 Użytkownik nie istnieje

Użytkownik przesłał ID nieistniejącego użytkownika.

{
    "status": "ERROR",
    "message": "User not found."
}

410 Kod wygasł

Użytkownik przesłał kod po upływie czasu ważności kodu.

{
    "status": "ERROR",
    "message": "Verification code expired."
}

POST /api/token/invalidate

Wylogowuje użytkownika unieważniając refresh token

Parameters

refresh_token string required

Refresh token do unieważnienia

Responses

200 Wylogowano

Wylogowanie użytkownika zakończone sukcesem. Wszystkie wygasłe refresh tokeny zostały usunięte

{
    "code": 200,
    "message": "The supplied refresh_token has been invalidated."
}

Urządzenia zaufane

Zarządzanie urządzeniami zaufanymi użytkownika

GET /api/trusted_devices

Zwraca listę urządzeń zaufanych zalogowanego użytkownika

Responses

200 Lista urządzeń zaufanych

Lista urządzeń zaufanych zalogowanego użytkownika

{
    "devices": [
        {
            "id": "a89558d2c9583093b55a7903c085cf52c6d46890da8365cf23ac034916d6cc73",
            "user": "/api/users/me",
            "deviceName": "Laptop HP",
            "createdAt": "2025-03-27T09:18:01+00:00"
        },
        {
            "id": "d0bdfcb8502aae4c6e6fb25713f7c8b102c5f3fa4dc3be90c99c318601a9ef9b",
            "user": "/api/users/me",
            "device_name": "iPhone Marka",
            "createdAt": "2025-03-29T09:00:21+00:00"
        }
    ]
}

POST /api/trusted_device

Dodaje urządzenie zaufane

Parameters

device_name string required

Nazwa urządzenia zaproponowana przez użytkownika

user_agent string required

Fingerprint: Informacja o przeglądarce i systemie operacyjnym użytkownika (navigator.userAgent)

hardware_concurrency string required

Fingerprint: Liczba rdzeni procesora dostępnych w urządzeniu (navigator.hardwareConcurrency)

language string required

Fingerprint: Preferowany język przeglądarki użytkownika (navigator.language)

platform string required

Fingerprint: Nazwa platformy/systemu operacyjnego (navigator.platform)

Responses

201 Urządzenie zostało dodane

Urządzenie zostało zapisane jako urządzenie zaufane pod wybraną nazwą

{
    "id": "a89558d2c9583093b55a7903c085cf52c6d46890da8365cf23ac034916d6cc73",
    "user": "/api/users/me",
    "deviceName": "Laptop HP",
    "createdAt": "2025-03-27T09:18:01+00:00"
}

500 Urządzenie już jest zaufane

Urządzenie już istnieje w bazie jako urządzenie zaufane

{
    "detail": "Device already trusted"
}

POST /api/trusted_device/check

Sprawdza, czy urządzenie jest zaufane

Parameters

user_agent string required

Fingerprint: Informacja o przeglądarce i systemie operacyjnym użytkownika (navigator.userAgent)

hardware_concurrency string required

Fingerprint: Liczba rdzeni procesora dostępnych w urządzeniu (navigator.hardwareConcurrency)

language string required

Fingerprint: Preferowany język przeglądarki użytkownika (navigator.language)

platform string required

Fingerprint: Nazwa platformy/systemu operacyjnego (navigator.platform)

Responses

200 Urządzenie jest zaufane

Urządzenie zostało rozpoznane jako urządzenie zaufane

{
    "device_name": "Device name"
}

404 Urządzenie nie jest zaufane

Urządzenie nie zostało rozpoznane jako urządzenie zaufane

{
    "error": "Trusted device not found"
}

DELETE /api/trusted_device/{device_id}

Usuwa urządzenie zaufane

Responses

204 Urządzenie zostało usunięte

Urządzenie zostało usunięte z listy urządzeń zaufanych

"no content"

404 Urządzenie zaufane nie zostało znalezione

Urządzenie zaufane nie zostało znalezione lub nie należy do użytkownika

{
    "detail": "Not Found"
}

DELETE /api/trusted_devices

Usuwa wszystkie urządzenia zaufane zalogowanego użytkownika

Responses

204 Urządzenia zostały usunięte

Wszystkie urządzenia zaufane zalogowanego użytkownika zostały usunięte

"no content"

Organizacja

POST /api/organization

Tworzy organizację

POST /api/organization/{organization_id}/unavailability

Zapisuje daty i godziny niedostępności

POST /api/organization/{organization_id}/okf

Aktualizuję listę OKF organizacji

GET /api/organizations

Lista organizacji

GET /api/organizations/prepaid

Lista organizacji prepaid

GET /api/organizations/postpaid

Lista organizacji postpaid

GET /api/organizations/prepaid/count

Liczba organizacji prepaid

GET /api/organizations/postpaid/count

Liczba organizacji postpaid

GET /api/organization/{organization_id}

Dane organizacji

GET /api/organization/{organization_id}/users

Lista użytkowników z przynależnością do zespołów

GET /api/organization/{organization_id}/invoices

Lista faktur

GET /api/organization/{organization_id}/teams

Lista zespołów

GET /api/organization/{organization_id}/availability

Zwraca godziny dostępności i wysyłki

GET /api/organization/{organization_id}/unavailability

Zwraca daty niedostępności

GET /api/organization/{organization_id}/pricing

Zwraca cenniki organizacji

GET /api/organization/{organization_id}/pricing/count

Zwraca liczbę cenników organizacji

GET /api/organization/{organization_id}/balance

Zwraca saldo organizacji

GET /api/organization/{organization_id}/expenses

Zwraca wydatki, jakie poniosła organizacja

GET /api/organization/{organization_id}/income

Zwraca przychody organizacji

GET /api/organization/{organization_id}/invoice_details

Zwraca dane do faktury

PUT /api/organization/{organization_id}

Aktualizuje organizację

DELETE /api/organization/{organization_id}

Usuwa organizację

DELETE /api/organization/{organization_id}/unavailability{unavailability_id}

Usuwa datę niedostępności

Użytkownicy

GET /api/users/me

Zalogowany użytkownik

Responses

200 Zalogowany użytkownik

Zwraca aktualnie zalogowanego użytkownika

{
    "id": 8,
    "email": "example@smartcawi.pl",
    "firstName": "Jan",
    "lastName": "Kowalski",
    "roles": [
        "ROLE_USER",
        "ROLE_OKF"
    ],
    "canOrderSurvey": true,
    "canAcceptSurvey": false,
    "twoFactorAuth": false,
    "notificationSmartcawi": true,
    "notificationPp": false,
    "status": "active",
    "trustedDevices": [
        {
            "id": "a89558d2c9583093b55a7903c085cf52c6d46890da8365cf23ac034916d6cc73",
            "deviceName": "Laptop HP",
            "createdAt": "2025-03-27T09:18:01+00:00"
        },
        {
            "id": "d0bdfcb8502aae4c6e6fb25713f7c8b102c5f3fa4dc3be90c99c318601a9ef9b",
            "device_name": "iPhone Marka",
            "createdAt": "2025-03-29T09:00:21+00:00"
        }
    ]
}

POST /api/users

Tworzy użytkownika

POST /api/users/invite

Tworzy użytkownika i wysyła do niego zaproszenie

POST /api/users/{user_id}/teams

Wiąże wiele zespołów z użytkownikiem

POST /api/users/{user_id}/surveys

Wiąże wiele badań z użytkownikiem

GET /api/users

Lista użytkowników

GET /api/users/{user_id}

Dane użytkownika

PUT /api/users/{user_id}

Aktualizuje użytkownika

DELETE /api/users/{user_id}

Usuwa użytkownika

DELETE /api/users/{user_id}/survey/{survey_id}

Usuwa użytkownika z projektu

Zespoły

POST /api/team

Tworzy zespół i przypisuje użytkowników

POST /api/team/{team_id}/user/{user_id}

Wiąże użytkownika z zespołem

POST /api/team/{team_id}/users

Wiąże wielu użytkowników z zespołem

PUT /api/team/{team_id}

Edytuje nazwę zespołu i użytkowników

DELETE /api/team/{team_id}

Usuwa zespół

DELETE /api/team/{team_id}/user/{user_id}

Usuwa użytkownika z zespołu

Finanse - Faktury

POST /api/invoice/import

Przesyła plik faktury do SmartCAWI

POST /api/invoice/request

DO zgłasza zapotrzebowanie na fakturę

POST /api/invoice/comment

Dodaje komentarz do faktury

GET /api/invoice

Lista faktur

GET /api/invoice/{invoice_id}

Szczegóły faktury

GET /api/invoice/file/{invoice_id}

Zwraca plik faktury

PUT /api/invoice/comment/{comment_id}

Edytuje komentarz do faktury

DELETE /api/invoice/{invoice_id}

Usuwa fakturę

DELETE /api/invoice/comment/{comment_id}

Usuwa komentarz do faktury

Cenniki

Zarządzanie cennikami organizacji

POST /api/pricing

Tworzy cennik

POST /api/pricing/generate-code

Generuje kod kliencki dla wybranego cennika

PUT /api/pricing/{pricing_id}

Edytuje wybrany cennik

GET /api/pricing/{pricing_id}

Zwraca wybrany cennik wraz z siatką cenową

GET /api/pricing/{pricing_id}/csv

Zwraca wybrany cennik wraz z siatką cenową w pliku CSV

GET /api/pricing/sample/csv

Zwraca wzorcowy plik z siatką cenową w formacie CSV

GET /api/pricing/code/{code}/users

Zwraca klientów, którzy skorzystali z kodu klienckiego

DELETE /api/pricing/{pricing_id}

Usuwa wybrany cennik

Badania

GET /api/surveys

Zwraca listę projektów

GET /api/surveys/export

Eksportuje listę projektów

GET /api/surveys/stats/{organization_id}

Zwraca statystyki liczbowe projektów organizacji z podziałem na status projektów

GET /api/surveys/stats

Zwraca statystyki liczbowe wszystkich projektów z podziałem na status projektów

GET /api/surveys/ordered/{organization_id}

Zwraca listę zleconych badań widocznych dla danego użytkownika + sumę wartości tych badań

GET /api/survey/{survey_id}/panelists

Zwraca panelistów z badania

POST /api/survey/{survey_id}/duplicate

Duplikuje projekt

PUT /api/survey/{survey_id}

Edytuje projekt

DELETE /api/survey/{survey_id}

Usuwa projekt

Target grupy

POST /api/target-group

Tworzy target grupę

Panele

GET /api/panels

Zwraca listę paneli

Paneliści

GET /api/panelists

Zwraca listę panelistów

GET /api/panelist/{panelist_id}

Zwraca informacje o paneliście

POST /api/panelists/export

Zwraca plik CSV z panelistami, których ID zostało przesłane

POST /api/panelists/quarantine

Ustawia karencję dla wybranych panelistów

POST /api/panelists/unreliable

Dodaje wybranych panelistów jako nierzetelnych

POST /api/panelists/import/quarantine

Ustawia karencję dla wybranych panelistów wgranych poprzez plik CSV

POST /api/panelists/import/unreliable

Dodaje panelistów jako nierzetelnych na podstawie id w pliku CSV

Cechy

GET /api/attributes

Lista cech

GET /api/attribute/{attribute_id}

Zwraca szczegóły cechy

POST /api/attribute

Dodaje nowe pytanie dodatkowe

POST /api/attribute/import

Import pytań dodatkowych z pliku CSV

POST /api/attribute/export

Export wybranego pytania dodatkowego do pliku CSV

PUT /api/attribute/{attribute_id}

Edytuje pytanie dodatkowe

Dane demograficzne

GET /api/demographic-data

Zwraca listę danych demograficznych wraz z opcjami wyboru

Tematy badań

GET /api/subjects

Zwraca tematy badań