Użytkownicy — przebieg integracji¶
Wszystkie ścieżki poniżej są względne wobec /partner/v1/users.
Uwierzytelnienie: x-client-id i x-api-key przy każdym wywołaniu, a dodatkowo
x-user-id przy wszystkich poza zakładaniem konta.
Zasada ogólna¶
Użytkownik zakładany przez API jest bytem należącym wyłącznie do integracji. Nie ma konta logowania i nie może zalogować się do aplikacji PetAssist — dostęp do jego danych odbywa się tylko przez to API, w oparciu o klucz integracji.
Zwrócony id jest jedynym identyfikatorem potrzebnym później: trafia do nagłówka
x-user-id przy każdym kolejnym wywołaniu i to on decyduje, czyje dane są odczytywane
i modyfikowane.
Krok 1 — założenie użytkownika¶
POST /partner/v1/users
{ "email": "anna.kowalska@example.com", "name": "Anna", "surname": "Kowalska" }
surname jest opcjonalne. To jedyny endpoint, który nie wymaga x-user-id —
w tym momencie użytkownik jeszcze nie istnieje.
Odpowiedź:
{
"id": "3f2b…",
"email": "anna.kowalska@example.com",
"name": "Anna",
"surname": "Kowalska",
"language": "pl",
"marketId": "fca4…",
"birth_date": null,
"phone_code": null,
"phone": null,
"country_id": null,
"address": null,
"image_id": null,
"image_src": null,
"createdAt": "2026-09-08T10:15:00.000Z",
"alreadyExisted": false
}
language i marketId biorą się z konfiguracji integracji, nie z żądania. Pozostałe
pola profilu są puste przy zakładaniu konta — uzupełnia się je aktualizacją.
Język użytkownika¶
language to język ustawiony na integracji, ten sam dla wszystkich zakładanych
przez nią użytkowników. Nie przyjmujemy go w ciele żądania i nie da się go później
zmienić — PATCH /users/me nie ma takiego pola, a nieznane pole kończy się 400.
Ma to znaczenie tylko wtedy, gdy partner obsługuje użytkowników mówiących różnymi
językami. W takim wypadku jedynym mechanizmem jest nagłówek
x-language, przesyłany przy każdym wywołaniu — profil
pozostaje wtedy bez znaczenia.
Język integracji ustawiamy przy jej zakładaniu; do wyboru są pl i en.
Wywołanie jest idempotentne¶
Ponowne wysłanie tego samego adresu nie tworzy duplikatu — zwracany jest
istniejący użytkownik z alreadyExisted: true. Dzięki temu ponowienie żądania po
przerwanym połączeniu jest bezpieczne.
Ten sam adres może istnieć w PetAssist niezależnie¶
Jeśli pod tym adresem istnieje już samodzielne konto PetAssist, nie jest ono przejmowane ani łączone. Powstaje osobny użytkownik należący do integracji, a oba byty pozostają niezależne: mają osobne zwierzaki, osobną historię i osobne dane. Właściciel konta PetAssist nie zobaczy danych wprowadzonych przez integrację i odwrotnie.
Krok 2 — odczyt profilu¶
Zwraca ten sam kształt co zakładanie konta, dla użytkownika wskazanego w x-user-id.
Przydatne do sprawdzenia, czy identyfikator jest nadal aktywny.
Krok 3 — aktualizacja profilu¶
PATCH /partner/v1/users/me
{ "name": "Anna", "surname": "Nowak", "phone_code": "+48", "phone": "600100200" }
Pola do aktualizacji: name (wymagane), surname, birth_date, phone_code,
phone, country_id, address, image_id, image_src.
Wszystkie wracają też w odpowiedzi i w GET /me, więc formularz edycji można wypełnić
danymi z odczytu, a zapis potwierdzić bez dodatkowego wywołania.
emailnie podlega zmianie — jest ustalany przy zakładaniu konta.image_srcprzyjmuje ścieżkę zwróconą przy wgrywaniu pliku (patrz dokumentacja plików); zdjęcie profilowe jest publiczne.
Odpowiedź ma ten sam kształt co GET /me.
Krok 4 — usunięcie danych¶
Służy do realizacji żądania usunięcia danych. Usuwa wszystkie pola identyfikujące użytkownika — adres e-mail, imię, nazwisko, telefon, adres, datę urodzenia, zdjęcie — i zamyka konto.
Operacja jest nieodwracalna. Po jej wykonaniu każde wywołanie z tym x-user-id
zostanie odrzucone kodem 401. Jeśli ten sam użytkownik ma wrócić, trzeba założyć go
od nowa — otrzyma nowy identyfikator i nie odzyska poprzednich danych.
Czego to API nie robi¶
Nie wysyłamy żadnych powiadomień do użytkowników integracji. Ani e-maili, ani SMS-ów, ani powiadomień push. Wszystkie zdarzenia, które w aplikacji PetAssist skutkowałyby powiadomieniem, trafiają wyłącznie na webhook — treść, kanał i preferencje użytkownika pozostają po stronie partnera.
Z tego powodu API nie udostępnia ustawień powiadomień: nasze kanały nie są używane, a kanałów partnera nie znamy.
Nie ma limitów wynikających z abonamentu. Użytkownicy integracji mają pełny i nieograniczony dostęp do udostępnionego zakresu funkcji. Decyzja o tym, kto może korzystać z usługi, zapada po stronie partnera — wywołanie naszego API z danym identyfikatorem traktujemy jako potwierdzenie uprawnienia.
Najczęstsze przyczyny błędów¶
| Objaw | Przyczyna |
|---|---|
401 przy wywołaniu z x-user-id |
Użytkownik nie należy do tej integracji albo został usunięty |
401 bez x-user-id |
Nagłówek pominięty — wymagany wszędzie poza zakładaniem konta |
| Powstał duplikat użytkownika | Ten sam adres wysłany z innej integracji — użytkownicy nie są współdzieleni między integracjami |
Zmiana email nie działa |
Adres jest niezmienny po założeniu konta |
Przykładowa sekwencja¶
POST /partner/v1/users { "email": "...", "name": "..." } → zapamiętaj `id`
GET /partner/v1/users/me (x-user-id: <id>)
PATCH /partner/v1/users/me { "name": "...", "phone": "..." }
… dalsza praca: zwierzaki, książeczka zdrowia, prediagnoza, żywienie, czat …
DELETE /partner/v1/users/me — na żądanie usunięcia danych