📦 Dokumentacja API
API REST dla biur nieruchomości i deweloperów — automatyczny import i synchronizacja ofert z zewnętrznych systemów CRM. Oferty pojawiają się na portalu natychmiast po przesłaniu.
Wprowadzenie
Bazowy URL wszystkich endpointów:
API używa formatu JSON zarówno dla żądań (Content-Type: application/json), jak i odpowiedzi. Każde żądanie musi zawierać nagłówek autoryzacyjny z kluczem API.
Autentykacja
Każde żądanie musi zawierać nagłówek Authorization z tokenem Bearer:
Klucz API jest powiązany z kontem biura lub dewelopera. Wszystkie oferty importowane przez dany klucz trafiają automatycznie na to konto.
Nie powinien być przechowywany w publicznych repozytoriach ani udostępniany poza zaufanym środowiskiem.
W przypadku podejrzenia wycieku należy niezwłocznie wygenerować nowy klucz i dezaktywować poprzedni.
Limity zapytań
Każdy klucz API ma przypisany dzienny limit zapytań, ustalany przez administratora portalu. Domyślna wartość to 1 000 zapytań/dzień. Po przekroczeniu limitu API zwraca kod 429 Too Many Requests.
Aktualny stan wykorzystania limitu widoczny jest w Panelu konta → Klucze API.
Kody błędów
| Kod HTTP | Znaczenie |
|---|---|
200 | OK — zapytanie zakończone sukcesem |
201 | Created — oferta została utworzona |
400 | Bad Request — nieprawidłowy JSON lub brakujące pola |
401 | Unauthorized — brak lub nieważny klucz API |
404 | Not Found — oferta o podanym ref nie istnieje |
409 | Conflict — oferta o tym ref już istnieje (użyj PUT) |
422 | Unprocessable — błąd walidacji; szczegóły w polu error |
429 | Too Many Requests — przekroczono dzienny limit zapytań |
Każda odpowiedź zawiera pole success (bool) oraz opcjonalnie error z opisem błędu:
GET — Pobierz ofertę
Zwraca dane oferty identyfikowanej numerem ref z Twojego CRM.
Przykład
Odpowiedź 200
POST — Utwórz ofertę
Tworzy nową ofertę. Pole ref to unikalny identyfikator z Twojego CRM — służy do późniejszej aktualizacji i usuwania. Oferta trafia od razu ze statusem aktywnym.
Nagłówki
Ciało żądania
Odpowiedź 201
PUT — Zaktualizuj ofertę
Aktualizuje istniejącą ofertę. Wszystkie przesłane pola zostają nadpisane. Jeśli podasz tablicę images, stare zdjęcia zostaną zastąpione nowymi.
Przykład
Odpowiedź 200
DELETE — Usuń ofertę
Trwale usuwa ofertę i jej zdjęcia. Operacja jest nieodwracalna.
Przykład
Odpowiedź 200
Pola oferty
| Pole | Typ | Wymagane | Opis |
|---|---|---|---|
ref | string | tak | Unikalny ID oferty w Twoim CRM (maks. 100 znaków) |
title | string | tak | Tytuł ogłoszenia |
type | string | tak | Typ nieruchomości — patrz Typy |
deal | string | tak | sell lub rent |
city | string | tak | Miasto (np. Poznań) |
price | number | nie | Cena w PLN |
area | number | nie | Powierzchnia w m² |
market | string | nie | primary lub secondary |
description | string | nie | Opis oferty |
address | string | nie | Ulica i numer |
district | string | nie | Dzielnica |
rooms | integer | nie | Liczba pokoi |
floor | integer | nie | Piętro (0 = parter) |
floors_total | integer | nie | Liczba pięter w budynku |
build_year | integer | nie | Rok budowy |
building_type | string | nie | Typ budynku (np. blok, kamienica) |
build_material | string | nie | Materiał budowlany |
heating | string | array | nie | Ogrzewanie, np. ["miejskie"] |
amenities | array | nie | Udogodnienia, np. ["balkon","winda"] |
media | array | nie | Media, np. ["internet","gaz"] |
finish | string | nie | Stan wykończenia |
ownership | string | nie | Forma własności |
seller_type | string | nie | agency, developer lub private |
lat | number | nie | Szerokość geograficzna (np. 52.4064) |
lng | number | nie | Długość geograficzna (np. 16.9252) |
images | array | nie | Tablica publicznych URL-ów zdjęć (https). PUT zastępuje poprzednie. |
Typy i wartości
type — typ nieruchomości
| Wartość | Opis |
|---|---|
apartment | Mieszkanie |
house | Dom |
plot | Działka |
commercial | Lokal użytkowy |
garage | Garaż / miejsce parkingowe |
room | Pokój |
studio | Kawalerka |
other | Inne |
deal — transakcja
| Wartość | Opis |
|---|---|
sell | Sprzedaż |
rent | Wynajem |
market — rynek
| Wartość | Opis |
|---|---|
primary | Rynek pierwotny |
secondary | Rynek wtórny |
Przykłady kodu
PHP
Python
Lokale inwestycyjne — wprowadzenie
Oprócz standardowych ofert, API umożliwia import lokali w inwestycjach deweloperskich. Każdy lokal jest przypisany do konkretnej inwestycji i opcjonalnie do jej etapu.
Identyfikatory UUID inwestycji i etapów
Każda inwestycja i każdy etap posiadają unikalny identyfikator UUID, który jest wymagany przy wysyłaniu lokali przez API. Znajdziesz je w panelu edycji inwestycji — w sekcji „🔑 Identyfikatory API". Każdy UUID możesz skopiować jednym kliknięciem.
investment_uuid jest zawsze wymagane. Pole phase_uuid jest opcjonalne — jeśli inwestycja ma tylko jeden etap, możesz je pominąć. Bazowy URL endpointów lokali:
GET — Pobierz lokal
Zwraca dane lokalu identyfikowanego numerem ref z Twojego CRM w ramach wskazanej inwestycji.
Parametry URL
| Parametr | Wymagane | Opis |
|---|---|---|
ref | tak | Identyfikator lokalu w Twoim CRM (w URL) |
investment_uuid | tak | UUID inwestycji (query string) |
Przykład
Odpowiedź 200
POST — Utwórz lokal
Tworzy nowy lokal w inwestycji. Pole ref to unikalny identyfikator z Twojego CRM w obrębie danej inwestycji.
Nagłówki
Ciało żądania
Odpowiedź 201
PUT — Zaktualizuj lokal
Aktualizuje istniejący lokal. Wszystkie przesłane pola zostają nadpisane. Najczęstszy przypadek użycia to zmiana statusu (np. z available na reserved lub sold).
Przykład
Odpowiedź 200
DELETE — Usuń lokal
Trwale usuwa lokal z inwestycji. Operacja jest nieodwracalna.
Przykład
Odpowiedź 200
Pola lokalu
| Pole | Typ | Wymagane | Opis |
|---|---|---|---|
ref | string | tak | Unikalny ID lokalu w Twoim CRM (maks. 100 znaków). Wymagany przy POST; dla PUT podawany w URL. |
investment_uuid | string | tak | UUID inwestycji — widoczny w Panelu → Inwestycje → Edytuj → sekcja „Identyfikatory API" |
unit_number | string | tak | Numer / oznaczenie lokalu widoczne na portalu (np. M.1.01, A3) |
phase_uuid | string | nie | UUID etapu inwestycji — widoczny obok nazwy etapu w sekcji „Identyfikatory API". Pomiń jeśli inwestycja ma jeden etap. |
rooms | integer | nie | Liczba pokoi |
floor | integer | nie | Piętro (0 = parter) |
area | number | nie | Powierzchnia lokalu w m² |
price | number | nie | Cena w PLN |
show_price | boolean | nie | true — cena widoczna publicznie; false — ukryta. Domyślnie false. |
status | string | nie | Status lokalu: available (dostępny), reserved (zarezerwowany), sold (sprzedany). Domyślnie available. |
description | string | nie | Opis lokalu |
Wartości pola status
| Wartość | Opis |
|---|---|
available | Lokal dostępny — widoczny jako wolny |
reserved | Lokal zarezerwowany |
sold | Lokal sprzedany |