System voxCRM udostępnia publiczne API XML (z opcją JSON), dzięki któremu strona WWW może w pełni zautomatyzowany sposób pobierać aktualne dane o inwestycjach, dostępnych lokalach oraz historii zmian cen. Dane w pliku XML są automatycznie aktualizowane raz na godzinę — rekomendujemy buforowanie po stronie WWW.
- Adres:
https://demo1.voxdeveloper.com - Testowy klucz API:
32323df398b32e65b22a9aae083c6751ec9c5e99 - Przykładowa inwestycja:
investment_id = 120— Magiczny Zakątek
Spis treści
- Endpoint — Lista inwestycji
- Endpoint — Lista lokali dla inwestycji
- Endpoint — Historia zmian cen
- Słowniki: statusy, typy lokali i kierunki świata
- Przykłady integracji
- Kontakt
1. Endpoint — Lista inwestycji
URL (XML — format domyślny):
GET https://demo1.voxdeveloper.com/webservice/investments-list/api_key/{API_KEY}
Przykład dla instancji demo (XML):
https://demo1.voxdeveloper.com/webservice/investments-list/api_key/32323df398b32e65b22a9aae083c6751ec9c5e99
Wersja JSON — ten sam endpoint zwraca dane w formacie JSON po dodaniu segmentu /json/1 w adresie:
GET https://demo1.voxdeveloper.com/webservice/investments-list/api_key/{API_KEY}/json/1
Przykład dla instancji demo (JSON):
https://demo1.voxdeveloper.com/webservice/investments-list/api_key/32323df398b32e65b22a9aae083c6751ec9c5e99/json/1
/json/1 endpoint zwraca XML (domyślnie). Z segmentem /json/1 — JSON. Oba warianty zawierają te same dane i pola, różnią się jedynie formatem.Pola domyślne (zawsze zwracane)
Tagi są dodawane do każdego elementu <investment>, ale mogą mieć pustą wartość, jeśli dane nie zostały uzupełnione w CRM.
| Tag | Opis | Przykład |
id |
ID inwestycji w CRM | 123 |
name |
Nazwa inwestycji | Testowa Inwestycja |
voivodeship |
Województwo | mazowieckie |
address_district |
Dzielnica / powiat | Śródmieście |
address_street |
Ulica | Al. Jerozolimskie |
address_building_number |
Numer budynku | 65 |
address_apartment_number |
Numer lokalu | 1 |
postal_code |
Kod pocztowy | 00-001 |
latitude |
Szerokość geograficzna | 52.2297 |
longitude |
Długość geograficzna | 21.0122 |
city |
Miasto | Warszawa |
transfer_ownership_date |
Data przeniesienia własności | 2025-06-30 |
website_url |
Adres strony WWW inwestycji | https://inwestycja.pl |
monetary_benefits |
Inne świadczenia pieniężne (opisowo) | Opłaty eksploatacyjne |
status |
Status inwestycji (tłumaczony) | W sprzedaży |
Pola opcjonalne (zależne od ustawień)
Te pola pojawią się w XML po włączeniu odpowiedniej opcji przez administratora, pod warunkiem że istnieją odpowiednie zdjęcia, logo lub dokumenty. Jeśli chcesz wykorzystać któreś z nich, poproś administratora o włączenie.
| Tag | Opis | Opcja do włączenia |
investment_mini |
Miniaturka wizualizacji inwestycji | Miniaturka wizualizacji inwestycji |
investment_photo_{N} |
Galeria zdjęć inwestycji (N = 1, 2, 3…) | Galeria wizualizacji inwestycji |
investment_logo |
Logo inwestycji | Logo inwestycji |
informative_prospectus_link{N} |
Prospekty informacyjne (inwestycja) | Prospekt informacyjny |
stage_informative_prospectus_link{N} |
Prospekty informacyjne (etapy) — z atrybutem stageName |
Prospekt informacyjny |
technical_standard_link{N} |
Standardy techniczne (inwestycja) | Standard techniczny |
stage_technical_standard_link{N} |
Standardy techniczne (etapy) — z atrybutem stageName |
Standard techniczny |
Przykład XML
<?xml version="1.0"?>
<xml>
<investment>
<id>123</id>
<name>Testowa Inwestycja</name>
<voivodeship>mazowieckie</voivodeship>
<address_district>Śródmieście</address_district>
<address_street>Al. Jerozolimskie</address_street>
<address_building_number>65</address_building_number>
<address_apartment_number></address_apartment_number>
<postal_code>00-001</postal_code>
<latitude>52.2297</latitude>
<longitude>21.0122</longitude>
<city>Warszawa</city>
<transfer_ownership_date>2025-06-30</transfer_ownership_date>
<website_url>https://inwestycja.pl</website_url>
<monetary_benefits>Opłaty eksploatacyjne</monetary_benefits>
<status>W sprzedaży</status>
<investment_logo>https://demo1.voxdeveloper.com/files/investments/logo.png</investment_logo>
</investment>
</xml>
2. Endpoint — Lista lokali dla inwestycji
URL (XML — format domyślny):
GET https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/{API_KEY}/investment_id/{ID}
Przykład dla instancji demo, XML (inwestycja nr 120):
https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/32323df398b32e65b22a9aae083c6751ec9c5e99/investment_id/120
Wersja JSON — ten sam endpoint zwraca dane w formacie JSON po dodaniu segmentu /json/1 w adresie:
GET https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/{API_KEY}/json/1/investment_id/{ID}
Przykład dla instancji demo, JSON (inwestycja nr 120):
https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/32323df398b32e65b22a9aae083c6751ec9c5e99/json/1/investment_id/120
/json/1 endpoint zwraca XML (domyślnie). Z segmentem /json/1 — JSON. Oba warianty zawierają te same dane i pola, różnią się jedynie formatem odpowiedzi.Filtrowanie wyników w URL
Endpoint realestatestatuslist wspiera dodatkowe, opcjonalne filtry przekazywane w adresie URL. Pozwalają one ograniczyć rozmiar zwracanego pliku XML — przydatne przy dużych inwestycjach, gdzie pełna lista lokali ładuje się wolno.
| Parametr | Opis | Wartości |
stage_id={ID} |
Filtruje lokale do konkretnego etapu inwestycji | ID etapu |
type_id={ID} |
Filtruje lokale po typie | ID typu lub lista CSV (słownik), np. 1 lub 1,2 |
status_id={ID} |
Filtruje lokale po statusie | ID statusu lub lista CSV (słownik), np. 1 lub 1,2 |
Zasady łączenia filtrów:
- Jako pierwszy w adresie występuje
investment_idlubstage_id. - Następnie, w dowolnej kolejności, można dodać
type_idi/lubstatus_id. - Każdy z filtrów
type_idistatus_idprzyjmuje pojedynczą wartość lub listę rozdzieloną przecinkami (CSV).
Przykłady poprawnych adresów:
# Tylko mieszkania (typ 1) w inwestycji 120
.../realestatestatuslist/api_key/{API_KEY}/investment_id/120/type_id/1
# Mieszkania i garaże (typy 1 i 2)
.../realestatestatuslist/api_key/{API_KEY}/investment_id/120/type_id/1,2
# Tylko lokale dostępne (status 1)
.../realestatestatuslist/api_key/{API_KEY}/investment_id/120/status_id/1
# Mieszkania dostępne i z rezerwacją ustną (typ 1, statusy 1 i 2)
.../realestatestatuslist/api_key/{API_KEY}/investment_id/120/type_id/1/status_id/1,2
# Filtrowanie po etapie zamiast inwestycji
.../realestatestatuslist/api_key/{API_KEY}/stage_id/15/type_id/1,2/status_id/1
type_id i status_id odpowiadają identyfikatorom ze słowników statusów i typów lokali w dalszej części dokumentacji.realestatestatuslist w systemie dostępny jest również /webservice/realestate-list-xml — alternatywny endpoint z nieco innym zestawem pól. Endpoint ten obsługuje filtrowanie po investment_id, type_id i status_id; filtry typu i statusu przyjmują pojedyncze ID lub listę CSV. W razie potrzeby warto skontaktować się z działem wsparcia, aby dobrać odpowiedni endpoint do integracji.Pola domyślne (zawsze zwracane)
Poniższe 26 tagów jest dodawanych do każdego elementu <realestate>. „Zawsze zwracane” oznacza obecność tagu, a nie gwarancję niepustej wartości: jeśli dane nie zostały uzupełnione, tag może być pusty. Puste pole liczbowe nie oznacza zera.
| Tag | Opis | Format / wartości |
id |
ID lokalu w CRM | liczba |
investment_id |
ID inwestycji | liczba |
investment_name |
Nazwa inwestycji | tekst |
investment_status |
Status inwestycji (tłumaczony) | tekst |
investment_stage |
ID etapu inwestycji przypisanego do lokalu; odpowiada filtrowi stage_id. Nazwa etapu jest zwracana osobno w opcjonalnym polu stage |
liczba (ID etapu) lub pusta wartość |
building |
Nazwa budynku zapisana przy lokalu; pole może być puste i nie jest wyodrębniane z nazwy etapu | tekst |
name |
Nazwa lokalu: budynek + „ - ” + numer lokalu; przy pustym budynku — sam numer lokalu | tekst, np. A - M1 lub M1 |
local_number |
Numer lokalu | tekst, np. M1 |
status_id |
ID statusu lokalu | 1–11 (słownik) |
status_name |
Nazwa statusu (tłumaczona) | tekst |
area |
Powierzchnia całkowita | liczba (m²) |
area_usable |
Powierzchnia użytkowa | liczba (m²) |
rooms |
Liczba pokoi | liczba |
floor |
Piętro | liczba lub tekst (np. 3A) |
completion_date |
Data zakończenia etapu, a jeśli jej brak — data zakończenia inwestycji | data (YYYY-MM-DD), pusta wartość lub tłumaczony komunikat o gotowości lokalu, zależnie od ustawień |
ask_for_price |
Pytaj o cenę | 0, 1 lub pusta wartość |
city |
Miasto inwestycji | tekst |
date_modified |
Data ostatniej zmiany; jeśli jej brak — data utworzenia lokalu | YYYY-MM-DD HH:MM:SS |
promotion |
Flaga „Lokal w promocji” w CRM; nie określa samodzielnie, czy promocja obowiązuje w danym dniu | 0 lub 1 |
direction |
Kierunek świata (strony świata lokalu) | lista CSV (słownik) |
two_levels |
Lokal dwupoziomowy | 0 lub 1 |
dont_send_to_www |
Flaga ukrycia na WWW; wartość 1 nie usuwa lokalu z tej odpowiedzi XML | 0 lub 1 |
sold_status |
Flaga powiązania lokalu ze sprzedażą w zamkniętej transakcji | 0 lub 1 |
dont_export_realestate_to_xml_table |
Flaga wyłączenia z tabeli XML; wartość 1 nie usuwa lokalu z tej odpowiedzi XML | 0 lub 1 |
virtual_walk |
Link do spaceru wirtualnego | URL |
view360 |
Link do widoku 360° | URL |
Pola podstawowe zwracane warunkowo
| Tag | Opis | Format / wartości |
type_id |
ID typu lokalu; tag dodawany, jeśli lokal ma przypisany niepusty typ | 1–31 (słownik) |
type |
Nazwa typu (tłumaczona); tag dodawany, jeśli lokal ma przypisany niepusty typ | tekst |
staircase |
Nazwa klatki; tag dodawany tylko przy niepustej wartości | tekst |
Pola cenowe (warunkowe)
Zwracane dla lokali ze statusami 1 i 2 lub po włączeniu opcji „Dodaj ceny do xml kiedy status jest niedostępny”. Przy wyłączonym eksporcie ceny danego lokalu pola price, promotion_price, promotion_price_net i daty promocji pozostają puste, a pola pricemkw, price_net i pricemkw_net nie są dodawane. Pola cen i dat promocji są uzupełniane tylko wtedy, gdy promocja jest dostępna w danym dniu; daty mogą pozostać puste, jeśli nie określono jej początku lub końca.
| Tag | Opis | Format / wartości |
price |
Cena katalogowa brutto; cena promocyjna jest zwracana osobno w promotion_price |
liczba (PLN) |
pricemkw |
Katalogowa cena za m² brutto | liczba (PLN/m²) |
price_net |
Cena katalogowa netto | liczba (PLN) |
pricemkw_net |
Katalogowa cena za m² netto | liczba (PLN/m²) |
promotion_price |
Cena promocyjna brutto | liczba (PLN) |
promotion_price_net |
Cena promocyjna netto | liczba (PLN) |
promotion_date_from |
Data startu promocji | data (YYYY-MM-DD) |
promotion_date_to |
Data końca promocji | data (YYYY-MM-DD) |
Pola opcjonalne
Widoczność poniższych pól zależy od konfiguracji, uzupełnienia danych lub obecności plików. Pola balkon, taras, ogrod, loggia i area_attic są dodawane przy niepustej, niezerowej wartości atrybutu. Pola www_id, balcony_count i sales_area wymagają włączenia także odpowiedniego pola dodatkowego lokalu w CRM. Plany, karty i miniatury są dodawane, gdy istnieją odpowiednie pliki; warianty _extension wymagają dodatkowego ustawienia eksportu linków z rozszerzeniem. Tag może mieć pustą wartość, jeśli dane nie zostały uzupełnione.
Dodatkowe ceny:
| Tag | Opis | Format / wartości |
minimal_price_gross |
Najniższa cena brutto z 30 dni zapisana w CRM dla promocji; wartość może być pusta | liczba (PLN) |
minimal_price_net |
Wartość minimal_price_gross przeliczona na netto; tag dodawany tylko wtedy, gdy cena brutto jest liczbą |
liczba (PLN) |
promotion_price_mkw / promotion_price_mkw_net |
Cena promocyjna za m² brutto / netto | liczba (PLN/m²) |
promotion_price_mkw_usable / promotion_price_mkw_usable_net |
Cena promocyjna za m² użytkowy brutto / netto | liczba (PLN/m²) |
pricemkw_usable / pricemkw_net_usable |
Cena za m² powierzchni użytkowej brutto / netto | liczba (PLN/m²) |
price_marketing / pricemkw_marketing |
Cena marketingowa i za m² | liczba (PLN) / (PLN/m²) |
parking_place_price |
Cena miejsca parkingowego | liczba (PLN) |
total_gross_price / total_net_price |
Cena łączna brutto / netto: lokal + powiązane lokale/przynależności, według relacji zapisanych w CRM | liczba (PLN) |
promotion_desc |
Opis promocji; wartość pusta, jeśli flaga „Lokal w promocji” jest wyłączona | tekst |
last_price_change |
Data i godzina ostatniej zmiany ceny; pole dodawane razem z price_change_history |
YYYY-MM-DD HH:MM:SS lub pusta wartość |
price_change_history |
Link do XML-a z historią cen lokalu | URL |
price_change_history_json |
Link do historii cen w JSON; wymaga włączenia eksportu historii, generowania plików JSON oraz opcji „Pokaż historię zmian cen również w formacie JSON” | URL |
Wynajem:
| Tag | Opis | Format / wartości |
base_rent |
Czynsz bazowy brutto | liczba (PLN) |
available_for_sale |
Dostępne do sprzedaży | 0 lub 1 |
available_for_rent |
Dostępne do wynajmu | 0 lub 1 |
Powierzchnie i miary:
| Tag | Opis | Format / wartości |
balkon |
Powierzchnia balkonu | liczba (m²) |
balcony_count |
Liczba balkonów | liczba |
taras |
Powierzchnia tarasu | liczba (m²) |
ogrod |
Powierzchnia ogrodu | liczba (m²) |
loggia |
Powierzchnia loggii | liczba (m²) |
antresole_area |
Powierzchnia antresoli | liczba (m²) |
area_attic |
Powierzchnia strychu | liczba (m²) |
area_marketing |
Powierzchnia marketingowa | liczba (m²) |
plot_area |
Powierzchnia działki | liczba (m²) |
room_height |
Wysokość pomieszczenia | liczba (m) |
sales_area |
Powierzchnia sprzedażowa | liczba (m²) |
Identyfikatory i nazewnictwo:
| Tag | Opis | Format / wartości |
administrative_number |
Numer administracyjny lokalu | tekst |
zeropadded_name |
Numer lokalu z zerami wiodącymi | tekst |
www_id |
Identyfikator na portalu WWW | tekst |
Cechy i wyposażenie:
| Tag | Opis | Format / wartości |
description |
Opis lokalu | tekst |
features |
Cechy lokalu zapisane w atrybucie CRM | tekst; endpoint nie narzuca formatu CSV |
recommended |
Lokal rekomendowany | 0 lub 1 |
ready_to_move |
Gotowe do odbioru | 0 lub 1 |
turnkey_condition |
Wykończenie pod klucz | 0 lub 1 |
finish_and_equipment |
Wartość brutto wykończenia i wyposażenia | liczba (PLN) lub pusta wartość |
finish_and_equipment_premium |
Wartość brutto wykończenia i wyposażenia premium | liczba (PLN) lub pusta wartość |
fireplace |
Kominek | 0 lub 1 |
air_conditioner |
Klimatyzacja | 0 lub 1 |
corner_apartment |
Lokal narożny | 0 lub 1 |
home_office |
Nadający się pod biuro | 0 lub 1 |
pantry |
Spiżarnia / schowek gospodarczy | 0 lub 1 |
photovoltaics |
Fotowoltaika | 0 lub 1 |
recuperation |
Rekuperacja | 0 lub 1 |
underfloor_heating |
Ogrzewanie podłogowe | 0 lub 1 |
duplex |
Lokal typu duplex | 0 lub 1 |
kitchen |
Rodzaj kuchni | tekst |
wardrobe |
Garderoba / szafa | 0 lub 1 |
cubby |
Miejsce na gospodarstwo | 0 lub 1 |
building_type |
Typ budynku (tłumaczony) | tekst |
district |
Dzielnica inwestycji | tekst |
Parkingi, piwnice, rowerownie:
| Tag | Opis | Format / wartości |
number_of_mandatory_parking_spaces |
Obowiązkowa liczba miejsc parkingowych | liczba |
number_of_mandatory_cellars |
Obowiązkowa liczba piwnic | liczba |
number_of_mandatory_bicycle_boxes |
Obowiązkowa liczba boksów rowerowych | liczba |
Energetyka:
| Tag | Opis | Format / wartości |
energy_class |
Klasa energetyczna | tekst (np. A+, B, C) |
annual_demand_indicator_for_usable_energy |
Roczne zapotrzebowanie — energia użytkowa | liczba (kWh/m²/rok) |
annual_demand_indicator_for_final_energy |
Roczne zapotrzebowanie — energia końcowa | liczba (kWh/m²/rok) |
annual_demand_indicator_for_non_renewable_primary_energy |
Roczne zapotrzebowanie — energia pierwotna nieodnawialna | liczba (kWh/m²/rok) |
share_of_renewable_energy_sources |
Udział OZE | liczba (%) |
unit_amount_of_co2_emission |
Emisja CO₂ na m² | liczba (kg CO₂/m²/rok) |
Daty i statusy dodatkowe:
| Tag | Opis | Format / wartości |
stage |
Nazwa etapu inwestycji; tag dodawany po włączeniu opcji eksportu etapu (realestate_stage). Nie należy mylić z ID w investment_stage |
tekst lub pusta wartość |
date_pnu |
Data pozwolenia na użytkowanie z etapu; zależnie od ustawienia, przy jej braku może zostać użyta data przeniesienia własności inwestycji | data (YYYY-MM-DD) lub pusta wartość |
inspection_date |
Data odbioru: z pola lokalu, a przy jej braku kolejno z atrybutu lokalu, etapu lub inwestycji | data (YYYY-MM-DD) |
total_finally_net_value |
Wartość łączna lokalu „pod klucz” netto, zapisana w atrybucie CRM | liczba (PLN) |
Pliki:
| Tag | Opis | Format / wartości |
photo_link{N} |
Zdjęcia lokalu (N = 1, 2, 3…) | URL |
card_link / card_link_extension / card_link_file_extension |
Link do karty lokalu / pełny link z rozszerzeniem / samo rozszerzenie pliku (np. .pdf) |
URL / URL / tekst |
plan_link / plan_link_extension / plan_link_tn |
Link do planu / pełny link z rozszerzeniem / link do miniatury | URL / URL / URL |
plan3d_link |
Plan 3D | URL |
plan_thumbnail_link / plan_thumbnail_link_extension |
Link do miniatury planu / pełny link z rozszerzeniem | URL / URL |
plan_preview / plan_preview_extension |
Link do podglądu planu / pełny link z rozszerzeniem | URL / URL |
document_link / documents_link_extension |
Link do dokumentu lokalu / pełny link z rozszerzeniem | URL / URL |
housing_estate_plan{N} |
Plany osiedla | URL |
video_link |
Film o lokalu | URL |
Struktury zagnieżdżone
Pojawiają się jako osobne elementy wewnątrz <realestate>.
<contiguity_list> — powiązane lokale / przynależności. Lista jest dodawana do każdego lokalu i może być pusta. Poszczególne pola <contiguity> są zwracane według warunków podanych poniżej:
| Tag | Opis | Format / wartości |
contiguity_id |
ID powiązanego lokalu; wymaga włączenia opcji eksportu ID przynależności | liczba |
contiguity_name |
Nazwa | tekst |
contiguity_type |
Typ (tłumaczony) | tekst |
contiguity_multilingual_description |
Opis wielojęzyczny | tekst |
contiguity_price / contiguity_price_net |
Cena brutto / netto; zależy od statusu przynależności lub opcji zwracania cen dla niedostępnych statusów. Wariant netto wymaga dodatkowego włączenia | liczba (PLN) |
contiguity_pricemkw / contiguity_pricemkw_net |
Cena za m² brutto / netto; każdy wariant wymaga włączenia odpowiedniej opcji i spełnienia warunku statusu dla cen | liczba (PLN/m²) |
contiguity_area / contiguity_area_usable |
Powierzchnia / powierzchnia użytkowa; wariant użytkowy wymaga włączenia opcji „Powierzchnia użytkowa” w dodatkowych polach XML | liczba (m²) |
contiguity_last_price_change |
Data i godzina ostatniej zmiany ceny przynależności; wymaga włączenia jej historii cen | YYYY-MM-DD HH:MM:SS lub pusta wartość |
contiguity_price_change_history / contiguity_price_change_history_json |
Link do historii cen przynależności w XML / JSON; wymaga włączenia historii przynależności, a wariant JSON dodatkowo generowania JSON i eksportu linku JSON | URL |
contiguity_available_for_sale / contiguity_available_for_rent |
Flagi dostępności do sprzedaży / wynajmu; każda wymaga włączenia odpowiedniej opcji | 0 lub 1 |
<storey_list> — rozbicie powierzchni na kondygnacje / strefy dodatkowe. Lista kondygnacji i stref lokalu, które nie są głównymi pomieszczeniami (np. antresole, strychy, poddasza). Sekcja pojawia się po włączeniu opcji „Powierzchnia apartamentu" (wspólnej dla <storey_list> i <room_list>). Każdy <storey> zawiera:
| Tag | Opis | Format / wartości |
storey_name |
Nazwa kondygnacji / strefy | tekst |
storey_area |
Powierzchnia | liczba (m²) |
storey_height |
Wysokość | liczba (m) |
storey_area_usable |
Powierzchnia użytkowa | liczba (m²) |
storey_area_under_the_walls_and_stairs |
Powierzchnia pod ścianami i schodami | liczba (m²) |
<room_list> — rozbicie powierzchni na pomieszczenia główne. Lista pomieszczeń głównych lokalu (np. pokoje, kuchnia, łazienka). Sekcja pojawia się po włączeniu opcji „Powierzchnia apartamentu" (wspólnej z <storey_list>). Każdy <room> zawiera:
| Tag | Opis | Format / wartości |
room_name |
Nazwa pomieszczenia (np. „Pokój dzienny", „Kuchnia") | tekst |
room_area |
Powierzchnia | liczba (m²) |
<flags_list> — atuty / wyróżniki lokalu. Lista cech wyróżniających lokal (np. „Balkon", „Narożne okno", „Widok na park"). Sekcja pojawia się po włączeniu opcji „Zalety". Każdy <flag> zawiera:
| Tag | Opis | Format / wartości |
flag_name |
Nazwa atutu | tekst |
Przykład XML
<?xml version="1.0"?>
<xml>
<realestate>
<id>2041</id>
<investment_id>15</investment_id>
<investment_name>Testowa Inwestycja</investment_name>
<investment_status>W sprzedaży</investment_status>
<investment_stage>6</investment_stage>
<stage>Etap I</stage>
<building>A</building>
<name>A - M1</name>
<local_number>M1</local_number>
<status_id>1</status_id>
<status_name>Dostępne</status_name>
<area>45.50</area>
<area_usable>38.20</area_usable>
<rooms>2</rooms>
<floor>3</floor>
<completion_date>2025-06-15</completion_date>
<ask_for_price>0</ask_for_price>
<city>Warszawa</city>
<price>490000.00</price>
<pricemkw>10769.23</pricemkw>
<price_net>453703.70</price_net>
<pricemkw_net>9971.51</pricemkw_net>
<date_modified>2025-05-26 17:00:00</date_modified>
<type_id>1</type_id>
<type>Mieszkanie</type>
<balkon>8.50</balkon>
<plan_link>https://demo1.voxdeveloper.com/files/realestate/plan.pdf</plan_link>
<card_link>https://demo1.voxdeveloper.com/files/realestate/card.pdf</card_link>
<contiguity_list>
<contiguity>
<contiguity_name>MP-12</contiguity_name>
<contiguity_type>Miejsce postojowe</contiguity_type>
<contiguity_price>25000.00</contiguity_price>
<contiguity_area>12.00</contiguity_area>
</contiguity>
</contiguity_list>
</realestate>
</xml>
3. Endpoint — Historia zmian cen
Link do pliku XML historii cen każdego lokalu znajdziesz w polu price_change_history poprzedniego endpointu. Przykład ścieżki:
https://demo1.voxdeveloper.com/files/price_changes/{hash1}/{hash2}.xml
Plik jest generowany automatycznie po każdej zmianie cen — nie wymaga autoryzacji poza znajomością URL-a. Dla wygody dostępna jest również wersja JSON (jeśli administrator ją włączył).
Pola podstawowe
Poniższe tagi są dodawane do elementu <realestate>, z wyjątkiem warunkowych type_id i type. Wartości mogą być puste, jeśli dane nie zostały uzupełnione.
| Tag | Opis | Format / wartości |
id |
ID lokalu | liczba |
investment_id |
ID inwestycji | liczba |
investment_name |
Nazwa inwestycji | tekst |
investment_stage |
ID etapu inwestycji przypisanego do lokalu | liczba (ID etapu) lub pusta wartość |
building |
Budynek | tekst |
name |
Nazwa lokalu: budynek + „ - ” + numer lokalu; przy pustym budynku — sam numer lokalu | tekst |
local_number |
Numer lokalu | tekst |
type_id / type |
ID / nazwa typu lokalu (tłumaczona); tagi dodawane tylko przy niepustym typie przypisanym do lokalu | liczba / tekst |
price / price_net |
Bieżąca cena brutto / netto: cena aktywnej promocji, a jeśli promocja nie obowiązuje — cena katalogowa | liczba (PLN) |
pricemkw / pricemkw_net |
Bieżąca cena za m² brutto / netto, obliczana z bieżącej ceny uwzględniającej aktywną promocję i powierzchni lokalu | liczba (PLN/m²) |
Pola opcjonalne (włączane przez administratora)
| Tag | Opis | Format / wartości |
pricemkw_usable / pricemkw_usable_net |
Cena za m² użytkowy brutto / netto | liczba (PLN/m²) |
Struktura <price_history>
Zawiera listę <price_change>. Każdy zawiera:
| Tag | Opis | Format / wartości |
date_modified |
Data i godzina zmiany | YYYY-MM-DD HH:MM |
type |
Rodzaj zmiany (tłumaczony): „Cena katalogowa”, „Start promocji”, „Edycja promocji” lub „Koniec promocji” | tekst |
<before> |
Stan przed zmianą — price, price_net, pricemkw, pricemkw_net oraz opcjonalnie pricemkw_usable i pricemkw_usable_net. Element pozostaje pusty, jeśli brak niezerowej poprzedniej ceny |
grupa pól lub pusty element <before/> |
<after> |
Stan po zmianie — te same pola cenowe; poszczególne wartości mogą być puste, jeśli nie można ich wyliczyć | grupa pól |
Format JSON historii: price_history jest tablicą wpisów. Każdy wpis zawiera date_modified, before i after; obecny generator JSON nie dodaje pola rodzaju zmiany type we wpisie historii. Ceny są liczbami, a brakujące lub puste wartości cenowe z XML są konwertowane na 0 — taka wartość nie musi oznaczać ceny równej zero.
Przykład XML
<?xml version="1.0"?>
<xml>
<realestate>
<id>2041</id>
<investment_id>15</investment_id>
<investment_name>Testowa Inwestycja</investment_name>
<investment_stage>6</investment_stage>
<building>A</building>
<name>A - M1</name>
<local_number>M1</local_number>
<type_id>1</type_id>
<type>Mieszkanie</type>
<price>490000.00</price>
<price_net>453703.70</price_net>
<pricemkw>10769.23</pricemkw>
<pricemkw_net>9971.51</pricemkw_net>
<price_history>
<price_change>
<date_modified>2025-05-20 09:00</date_modified>
<type>Cena katalogowa</type>
<before/>
<after>
<price>500000.00</price>
<price_net>462962.96</price_net>
<pricemkw>10989.01</pricemkw>
<pricemkw_net>10175.01</pricemkw_net>
</after>
</price_change>
<price_change>
<date_modified>2025-05-26 17:00</date_modified>
<type>Cena katalogowa</type>
<before>
<price>500000.00</price>
<price_net>462962.96</price_net>
<pricemkw>10989.01</pricemkw>
<pricemkw_net>10175.01</pricemkw_net>
</before>
<after>
<price>490000.00</price>
<price_net>453703.70</price_net>
<pricemkw>10769.23</pricemkw>
<pricemkw_net>9971.51</pricemkw_net>
</after>
</price_change>
</price_history>
</realestate>
</xml>
4. Słowniki: statusy, typy lokali i kierunki świata
Statusy lokali
| ID | Status |
| 1 | Dostępne |
| 2 | Rezerwacja ustna |
| 3 | Umowa rezerwacyjna |
| 4 | Sprzedane |
| 5 | Umowa przedwstępna |
| 6 | Umowa deweloperska |
| 7 | Akt notarialny |
| 8 | Odbiór |
| 9 | Wstrzymany |
| 10 | Rezerwacja podtrzymana |
| 11 | Umowa najmu |
Typy lokali
| ID | Typ |
| 1 | Mieszkanie |
| 2 | Garaż |
| 3 | Miejsce postojowe |
| 4 | Komórka lokatorska |
| 5 | Miejsce postojowe zadaszone |
| 6 | Piwnica |
| 7 | Boks rowerowy |
| 8 | Lokal komercyjny |
| 9 | Lokal biurowy |
| 10 | Schowek |
| 11 | Miejsce postojowe naziemne |
| 12 | Miejsce postojowe podziemne |
| 13 | Miejsce postojowe ze schowkiem |
| 14 | Miejsce postojowe zależne podwójne |
| 15 | Miejsce postojowe na jednoślad |
| 16 | Dom |
| 17 | Udział |
| 18 | Hala na platformie |
| 19 | Standard wykończenia |
| 20 | Condohotel |
| 21 | Apartament |
| 22 | Udział w nieruchomości wodnej |
| 23 | Miejsce cumownicze |
| 24 | Działka |
| 25 | Osiedle mieszkaniowe |
| 26 | Miejsce postojowe dla osób z niepełnosprawnością |
| 27 | Taras dachowy |
| 28 | Schowek na jednoślad |
| 29 | Sauna |
| 30 | Ogród |
| 31 | Loggia |
Kierunki świata (pole direction)
Pole direction w XML opisuje strony świata, na które wychodzi lokal. Może zawierać jedną lub kilka wartości rozdzielonych przecinkami (dla lokali narożnych / przechodnich).
Format wartości zależy od ustawienia w panelu voxCRM — opcji „Wyświetl alternatywną listę stron świata (skrócone polskie nazwy i posortowane według zegara)":
| Ustawienie | Format w XML | Przykład |
| Opcja wyłączona (domyślnie) | Surowe kody literowe N / S / E / W | <direction>NE,NS,SW</direction> |
| Opcja włączona | Skrócone nazwy polskie rozdzielone przecinkami | <direction>Pn., Wsch., Pd., Zach.</direction> |
direction, ustal z administratorem voxCRM po stronie klienta, który wariant jest włączony — i trzymaj się jednego. Mieszanie formatów (raz kody, raz polskie skróty) w tym samym pliku XML nie wystąpi, ale zmiana ustawienia w panelu zmienia format w kolejnym wygenerowaniu XML.Pełna lista dostępnych kodów (wariant domyślny — opcja wyłączona)
| Kod | Znaczenie | Proponowany skrót polski |
N |
Północ | Pn. |
S |
Południe | Pd. |
E |
Wschód | Wsch. |
W |
Zachód | Zach. |
NE |
Północny-Wschód | Pn., Wsch. |
EN |
Wschodni-Północ | Pn., Wsch. |
NW |
Północny-Zachód | Pn., Zach. |
WN |
Zachodni-Północ | Pn., Zach. |
SE |
Południowy-Wschód | Pd., Wsch. |
ES |
Wschodni-Południe | Pd., Wsch. |
SW |
Południowy-Zachód | Pd., Zach. |
WS |
Zachodni-Południe | Pd., Zach. |
NS |
Północ-Południe | Pn., Pd. |
SN |
Południe-Północ | Pn., Pd. |
EW |
Wschód-Zachód | Wsch., Zach. |
WE |
Zachód-Wschód | Wsch., Zach. |
NSE |
Północ, Południe, Wschód | Pn., Wsch., Pd. |
NES |
Północ, Wschód, Południe | Pn., Wsch., Pd. |
NSW |
Północ, Południe, Zachód | Pn., Pd., Zach. |
NWS |
Północ, Zachód, Południe | Pn., Pd., Zach. |
SWN |
Południe, Zachód, Północ | Pn., Pd., Zach. |
NEW |
Północ, Wschód, Zachód | Pn., Wsch., Zach. |
NWE |
Północ, Zachód, Wschód | Pn., Wsch., Zach. |
EWN |
Wschód, Zachód, Północ | Pn., Wsch., Zach. |
SWE |
Południe, Zachód, Wschód | Pd., Wsch., Zach. |
ESW |
Wschód, Południe, Zachód | Pd., Wsch., Zach. |
NSEW |
Wszystkie cztery strony | Pn., Wsch., Pd., Zach. |
NE i EN oznaczają to samo). Przy parsowaniu surowych kodów warto rozpoznawać wartość po zestawie liter, a nie po dokładnym ciągu — tak, aby mapowanie działało niezależnie od kolejności znaków w kodzie. W wariancie z włączoną alternatywną listą problem nie występuje: XML zwraca gotowe skróty polskie z kolumny „Proponowany skrót polski".5. Przykłady integracji
PHP — pobranie statusu lokalu
<?php
// Dla środowiska produkcyjnego podmień adres instancji, klucz API i ID inwestycji na własne.
function getRealEstateInfo(int $id): ?array {
$url = 'https://demo1.voxdeveloper.com/webservice/realestatestatuslist'
. '/api_key/32323df398b32e65b22a9aae083c6751ec9c5e99/investment_id/120';
$xml = simplexml_load_file($url);
if ($xml === false) {
return null;
}
foreach ($xml->realestate as $realestate) {
if ((int) $realestate->id === $id) {
return [
'id' => (string) $realestate->id,
'status_id' => (int) $realestate->status_id,
'status_name' => (string) $realestate->status_name,
'price' => (float) $realestate->price,
'area' => (float) $realestate->area,
];
}
}
return null;
}
$info = getRealEstateInfo(4178);
if ($info !== null) {
echo "Lokal #{$info['id']} — {$info['status_name']} — {$info['price']} PLN";
}
WordPress — shortcode z buforowaniem
<?php
/* Plugin Name: voxCRM Real Estate Table */
function voxcrm_realestate_table() {
if (false === ($output = get_transient('voxcrm_realestate_table'))) {
// Dla środowiska produkcyjnego podmień adres instancji, klucz API i ID inwestycji na własne.
$url = 'https://demo1.voxdeveloper.com/webservice/realestatestatuslist'
. '/api_key/32323df398b32e65b22a9aae083c6751ec9c5e99/investment_id/120';
$xml = simplexml_load_file($url);
if ($xml === false) {
return '<p>Brak danych.</p>';
}
$output = '<table><thead><tr>'
. '<th>Lokal</th><th>Metraż</th><th>Status</th><th>Cena</th>'
. '</tr></thead><tbody>';
foreach ($xml->realestate as $r) {
$output .= sprintf(
'<tr><td>%s</td><td>%s m²</td><td>%s</td><td>%s PLN</td></tr>',
esc_html((string) $r->name),
esc_html((string) $r->area),
esc_html((string) $r->status_name),
esc_html((string) $r->price)
);
}
$output .= '</tbody></table>';
set_transient('voxcrm_realestate_table', $output, HOUR_IN_SECONDS);
}
return $output;
}
add_shortcode('voxcrm_realestate_table', 'voxcrm_realestate_table');
Powiązane materiały
- Jak pobrać dane historii cen lokalu
- Jak zarządzać prospektem informacyjnym do przekazania na dane.gov.pl oraz na stronę WWW
6. Kontakt
W razie pytań lub problemów z integracją prosimy o kontakt z działem wsparcia technicznego:
- E-mail: kontakt@voxcommerce.pl
- Telefon: 534 571 638
W sprawach związanych z kluczem API, zakresem udostępnionych inwestycji oraz widocznością pól opcjonalnych — skontaktuj się z administratorem Twojej instancji voxCRM.