Przejdź do treści

W jaki sposób podłączyć stronę WWW do voxCRM?

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.

💡 Zanim zaczniesz: Klucz API, zakres udostępnionych inwestycji oraz widoczność pól opcjonalnych konfiguruje administrator Twojej instancji voxCRM. Skontaktuj się z nim, aby otrzymać klucz oraz — jeśli potrzebujesz dodatkowych pól w XML — poprosić o ich włączenie.
⚠ Uwaga: Poniższa dokumentacja opisuje zakres pól możliwych do wystąpienia w XML. Część pól opcjonalnych może nie być dostępna w każdej instancji voxCRM — niektóre zostały wdrożone pod konkretne zastosowania branżowe (np. specjalistyczne typy nieruchomości). Jeśli potrzebujesz konkretnego pola, skontaktuj się z administratorem swojej instancji.
💡 Instancja demonstracyjna — do szybkich testów:
  • Adres: https://demo1.voxdeveloper.com
  • Testowy klucz API: 32323df398b32e65b22a9aae083c6751ec9c5e99
  • Przykładowa inwestycja: investment_id = 120 — Magiczny Zakątek
Poniższe przykłady linków oraz kodów PHP używają tych danych — możesz je wywołać bez żadnych dodatkowych kroków.

Spis treści

  1. Endpoint — Lista inwestycji
  2. Endpoint — Lista lokali dla inwestycji
  3. Endpoint — Historia zmian cen
  4. Słowniki: statusy, typy lokali i kierunki świata
  5. Przykłady integracji
  6. 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

💡 XML czy JSON? Bez segmentu /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

💡 XML czy JSON? Bez segmentu /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_id lub stage_id.
  • Następnie, w dowolnej kolejności, można dodać type_id i/lub status_id.
  • Każdy z filtrów type_id i status_id przyjmuje 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
💡 Wskazówka: Wartości type_id i status_id odpowiadają identyfikatorom ze słowników statusów i typów lokali w dalszej części dokumentacji.
💡 Drugi endpoint XML. Obok 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

⚠ Informacja: Poniższa tabela przedstawia domyślną listę typów lokali. Nazwy typów oraz ich widoczność mogą się różnić w zależności od ustawień danego panelu voxCRM.
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>
⚠ Uwaga dla developera strony WWW: Zanim zaczniesz parsować pole 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.
💡 Wskazówka (wariant domyślny): Te same strony świata bywają reprezentowane kilkoma różnymi kodami (np. 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


6. Kontakt

W razie pytań lub problemów z integracją prosimy o kontakt z działem wsparcia technicznego:

W sprawach związanych z kluczem API, zakresem udostępnionych inwestycji oraz widocznością pól opcjonalnych — skontaktuj się z administratorem Twojej instancji voxCRM.