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ń