The voxCRM system provides a public XML API (with a JSON option), thanks to which a website can retrieve up-to-date data about investments, available units and price change history in a fully automated way. The data in the XML file is automatically updated once per hour — we recommend caching on the website side.
- Address:
https://demo1.voxdeveloper.com - Test API key:
ab33c2fb8240c8c7ca015d924713b5d234b7778e - Example investment:
investment_id = 15
Table of contents
- Endpoint — Investment list
- Endpoint — List of units for an investment
- Endpoint — Price change history
- Dictionaries: statuses, unit types and cardinal directions
- Integration examples
- Contact
1. Endpoint — Investment list
URL (XML — default format):
GET https://demo1.voxdeveloper.com/webservice/investments-list/api_key/{API_KEY}
Example for the demo instance (XML):
https://demo1.voxdeveloper.com/webservice/investments-list/api_key/ab33c2fb8240c8c7ca015d924713b5d234b7778e
JSON version — the same endpoint returns data in JSON format after adding the /json/1 segment to the address:
GET https://demo1.voxdeveloper.com/webservice/investments-list/api_key/{API_KEY}/json/1
Example for the demo instance (JSON):
https://demo1.voxdeveloper.com/webservice/investments-list/api_key/ab33c2fb8240c8c7ca015d924713b5d234b7778e/json/1
/json/1 segment, the endpoint returns XML (by default). With the /json/1 segment — JSON. Both variants contain the same data and fields; they differ only in format.Default fields (always returned)
| Tag | Description | Example |
id |
Investment ID in the CRM | 123 |
name |
Investment name | Test Investment |
voivodeship |
Voivodeship | mazowieckie |
address_district |
District / county | Śródmieście |
address_street |
Street | Al. Jerozolimskie |
address_building_number |
Building number | 65 |
address_apartment_number |
Apartment number | 1 |
postal_code |
Postal code | 00-001 |
latitude |
Latitude | 52.2297 |
longitude |
Longitude | 21.0122 |
city |
City | Warszawa |
transfer_ownership_date |
Ownership transfer date | 2025-06-30 |
website_url |
Investment website address | https://inwestycja.pl |
monetary_benefits |
Other financial benefits (descriptive) | 5% cashback |
status |
Investment status (translated) | For sale |
Optional fields (depending on settings)
These fields will appear in the XML only when the administrator has enabled the corresponding option. If you want to use any of them, ask the administrator to enable it.
| Tag | Description | Option to enable |
investment_mini |
Investment visualization thumbnail | Investment visualization thumbnail |
investment_photo_{N} |
Investment photo gallery (N = 1, 2, 3…) | Investment visualization gallery |
investment_logo |
Investment logo | Investment logo |
informative_prospectus_link{N} |
Information prospectuses (investment) | Information prospectus |
stage_informative_prospectus_link{N} |
Information prospectuses (stages) — with the stageName attribute |
Information prospectus |
technical_standard_link{N} |
Technical standards (investment) | Technical standard |
stage_technical_standard_link{N} |
Technical standards (stages) — with the stageName attribute |
Technical standard |
XML example
<?xml version="1.0"?>
<xml>
<investment>
<id>123</id>
<name>Test Investment</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>5% cashback</monetary_benefits>
<status>For sale</status>
<investment_logo>https://demo1.voxdeveloper.com/files/investments/logo.png</investment_logo>
</investment>
</xml>
2. Endpoint — List of units for an investment
URL (XML — default format):
GET https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/{API_KEY}/investment_id/{ID}
Example for the demo instance, XML (investment no. 15):
https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/ab33c2fb8240c8c7ca015d924713b5d234b7778e/investment_id/15
JSON version — the same endpoint returns data in JSON format after adding the /json/1 segment to the address:
GET https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/{API_KEY}/json/1/investment_id/{ID}
Example for the demo instance, JSON (investment no. 15):
https://demo1.voxdeveloper.com/webservice/realestatestatuslist/api_key/ab33c2fb8240c8c7ca015d924713b5d234b7778e/json/1/investment_id/15
/json/1 segment, the endpoint returns XML (by default). With the /json/1 segment — JSON. Both variants contain the same data and fields; they differ only in the response format.Filtering results in the URL
The realestatestatuslist endpoint supports additional, optional filters passed in the URL. They allow you to reduce the size of the returned XML file — useful for large investments, where the full list of units loads slowly.
| Parameter | Description | Values |
stage_id={ID} |
Filters units to a specific investment stage | Stage ID |
type_id={ID} |
Filters units by type | Type ID or a CSV list (dictionary), e.g. 1 or 1,2 |
status_id={ID} |
Filters units by status | Status ID or a CSV list (dictionary), e.g. 1 or 1,2 |
Rules for combining filters:
- The first segment in the address is
investment_idorstage_id. - Then, in any order, you can add
type_idand/orstatus_id. - Each of the
type_idandstatus_idfilters accepts a single value or a comma-separated list (CSV).
Examples of valid addresses:
# Only flats (type 1) in investment 15
.../realestatestatuslist/api_key/{API_KEY}/investment_id/15/type_id/1
# Flats and garages (types 1 and 2)
.../realestatestatuslist/api_key/{API_KEY}/investment_id/15/type_id/1,2
# Only available units (status 1)
.../realestatestatuslist/api_key/{API_KEY}/investment_id/15/status_id/1
# Flats available and with a verbal reservation (type 1, statuses 1 and 2)
.../realestatestatuslist/api_key/{API_KEY}/investment_id/15/type_id/1/status_id/1,2
# Filtering by stage instead of investment
.../realestatestatuslist/api_key/{API_KEY}/stage_id/15/type_id/1,2/status_id/1
type_id and status_id values correspond to the identifiers from the unit status and type dictionaries later in this documentation.realestatestatuslist, the system also provides /webservice/realestate-list-xml — an alternative endpoint with a slightly different set of fields. This endpoint supports filtering only by investment_id (the type_id and status_id filters are available only in realestatestatuslist). If needed, it is worth contacting the support team to choose the right endpoint for your integration.Default fields (always returned)
| Tag | Description | Format / values |
id |
Unit ID in the CRM | number |
investment_id |
Investment ID | number |
investment_name |
Investment name | text |
investment_status |
Investment status (translated) | text |
investment_stage |
Investment stage name | text |
building |
Building name | text |
name |
Full unit name (building + number) | text, e.g. A - M1 |
local_number |
Unit number | text, e.g. M1 |
status_id |
Unit status ID | 1–11 (dictionary) |
status_name |
Status name (translated) | text |
area |
Total area | number (m²) |
area_usable |
Usable area | number (m²) |
rooms |
Number of rooms | number |
floor |
Floor | number or text (e.g. 3A) |
completion_date |
Occupancy permit date | date or text (e.g. "Available immediately") |
ask_for_price |
Ask for price | 0 or 1 |
city |
City | text |
date_modified |
Last modification date | YYYY-MM-DD HH:MM:SS |
type_id |
Unit type ID | 1–31 (dictionary) |
type |
Type name (translated) | text |
staircase |
Staircase name | text |
promotion |
Unit on promotion | 0 or 1 |
direction |
Cardinal direction (directions the unit faces) | CSV list (dictionary) |
two_levels |
Two-level unit | 0 or 1 |
dont_send_to_www |
Hidden on the website | 0 or 1 |
sold_status |
Sales status | number |
dont_export_realestate_to_xml_table |
Excluded from XML export (table) | 0 or 1 |
virtual_walk |
Virtual walk link | URL |
view360 |
360° view link | URL |
Price fields (conditional)
Returned for available units (statuses 1, 2). If you want to display prices also for reserved or sold units — contact the administrator, who can enable the option "Add prices to xml when the status is unavailable". Completely disabling prices in the XML (e.g. at the developer's request) is also handled by the administrator.
| Tag | Description | Format / values |
price |
Gross price | number (PLN) |
pricemkw |
Gross price per m² | number (PLN/m²) |
price_net |
Net price | number (PLN) |
pricemkw_net |
Net price per m² | number (PLN/m²) |
promotion_price |
Gross promotional price | number (PLN) |
promotion_price_net |
Net promotional price | number (PLN) |
promotion_date_from |
Promotion start date | date (YYYY-MM-DD) |
promotion_date_to |
Promotion end date | date (YYYY-MM-DD) |
Optional fields
These fields are visible in the XML only when the administrator has enabled them in the system configuration. They are grouped by topic — if you need a specific field, ask the administrator to enable it.
Additional prices:
| Tag | Description | Format / values |
minimal_price_gross |
Lowest gross price from the last 30 days | number (PLN) |
minimal_price_net |
Lowest net price from the last 30 days | number (PLN) |
promotion_price_mkw / promotion_price_mkw_net |
Promotional price per m², gross / net | number (PLN/m²) |
promotion_price_mkw_usable / promotion_price_mkw_usable_net |
Promotional price per usable m², gross / net | number (PLN/m²) |
pricemkw_usable / pricemkw_net_usable |
Price per m² of usable area, gross / net | number (PLN/m²) |
price_marketing / pricemkw_marketing |
Marketing price and price per m² | number (PLN) / (PLN/m²) |
parking_place_price |
Parking space price | number (PLN) |
total_gross_price / total_net_price |
Total price (unit + appurtenances), gross / net | number (PLN) |
promotion_desc |
Promotion description | text |
last_price_change |
Date of the last price change | date (YYYY-MM-DD) |
price_change_history |
Link to the XML with the unit's price history | URL |
price_change_history_json |
Same as above, in JSON format (if the administrator has enabled the option "Show price change history also in JSON format") | URL |
Rental:
| Tag | Description | Format / values |
rent_percentage_amount |
Percentage share in rent | number (%) |
base_rent / base_rent_net |
Base rent, gross / net | number (PLN) |
available_for_sale |
Available for sale | 0 or 1 |
available_for_rent |
Available for rent | 0 or 1 |
Areas and measurements:
| Tag | Description | Format / values |
balkon |
Balcony area | number (m²) |
balcony_count |
Number of balconies | number |
taras |
Terrace area | number (m²) |
ogrod |
Garden area | number (m²) |
loggia |
Loggia area | number (m²) |
antresole_area |
Mezzanine area | number (m²) |
area_attic |
Attic area | number (m²) |
area_marketing |
Marketing area | number (m²) |
plot_area |
Plot area | number (m²) |
room_height |
Room height | number (m) |
sales_area |
Sales area | number (m²) |
Identifiers and naming:
| Tag | Description | Format / values |
administrative_number |
Administrative number of the unit | text |
zeropadded_name |
Unit number with leading zeros | text |
www_id |
Identifier on the web portal | text |
Features and equipment:
| Tag | Description | Format / values |
description |
Unit description | text |
features |
Unit features (list) | list of texts (CSV) |
recommended |
Recommended unit | 0 or 1 |
ready_to_move |
Ready for handover | 0 or 1 |
turnkey_condition |
Turnkey finish | 0 or 1 |
finish_and_equipment |
Finish and equipment | 0 or 1 |
finish_and_equipment_premium |
Premium finish | 0 or 1 |
fireplace |
Fireplace | 0 or 1 |
air_conditioner |
Air conditioning | 0 or 1 |
corner_apartment |
Corner unit | 0 or 1 |
home_office |
Suitable for an office | 0 or 1 |
pantry |
Pantry / utility storage | 0 or 1 |
photovoltaics |
Photovoltaics | 0 or 1 |
recuperation |
Recuperation | 0 or 1 |
underfloor_heating |
Underfloor heating | 0 or 1 |
duplex |
Duplex unit | 0 or 1 |
kitchen |
Kitchen type | text |
wardrobe |
Wardrobe / closet | 0 or 1 |
cubby |
Utility storage space | 0 or 1 |
building_type |
Building type (translated) | text |
district |
District / housing estate | text |
Parking spaces, cellars, bicycle rooms:
| Tag | Description | Format / values |
number_of_mandatory_parking_spaces |
Mandatory number of parking spaces | number |
number_of_mandatory_cellars |
Mandatory number of cellars | number |
number_of_mandatory_bicycle_boxes |
Mandatory number of bicycle boxes | number |
Energy:
| Tag | Description | Format / values |
energy_class |
Energy class | text (e.g. A+, B, C) |
annual_demand_indicator_for_usable_energy |
Annual demand — usable energy | number (kWh/m²/year) |
annual_demand_indicator_for_final_energy |
Annual demand — final energy | number (kWh/m²/year) |
annual_demand_indicator_for_non_renewable_primary_energy |
Annual demand — non-renewable primary energy | number (kWh/m²/year) |
share_of_renewable_energy_sources |
Share of renewable energy sources | number (%) |
unit_amount_of_co2_emission |
CO₂ emission per m² | number (kg CO₂/m²/year) |
Additional dates and statuses:
| Tag | Description | Format / values |
date_pnu |
Occupancy permit date (stage) | date (YYYY-MM-DD) |
inspection_date |
Handover date | date (YYYY-MM-DD) |
realestate_promotion_available |
Promotion availability | 0 or 1 |
investment_other_cash_benefits |
Other financial benefits of the investment | text |
total_finally_net_value |
Final net value of the unit | number (PLN) |
Files:
| Tag | Description | Format / values |
photo_link{N} |
Unit photos (N = 1, 2, 3…) | URL |
card_link / card_link_extension / card_link_file_extension |
Unit card (PDF) + versions with extension | URL / text / text |
plan_link / plan_link_extension / plan_link_tn |
Unit plan + extension + thumbnail | URL / text / URL |
plan3d_link |
3D plan | URL |
plan_thumbnail_link / plan_thumbnail_link_extension |
Plan thumbnail | URL / text |
plan_preview / plan_preview_extension |
Plan preview | URL / text |
document_link / documents_link_extension |
Other unit documents | URL / text |
housing_estate_plan{N} |
Housing estate plans | URL |
video_link |
Unit video | URL |
Nested structures
They appear as separate elements inside <realestate>.
<contiguity_list> — appurtenances. Each <contiguity> contains:
| Tag | Description | Format / values |
contiguity_id |
ID of the appurtenant unit | number |
contiguity_name |
Name | text |
contiguity_type |
Type (translated) | text |
contiguity_multilingual_description |
Multilingual description | text |
contiguity_price / contiguity_price_net |
Price, gross / net | number (PLN) |
contiguity_pricemkw / contiguity_pricemkw_net |
Price per m², gross / net | number (PLN/m²) |
contiguity_area / contiguity_area_usable |
Area / usable area | number (m²) |
contiguity_last_price_change |
Date of the last price change | date (YYYY-MM-DD) |
contiguity_price_change_history / _json |
Links to the price change history | URL |
contiguity_available_for_sale / _for_rent |
Availability flags | 0 or 1 |
<storey_list> — area breakdown into storeys / additional zones. A list of the unit's storeys and zones that are not main rooms (e.g. mezzanines, attics, lofts). The section appears after the "Apartment area" option is enabled (shared by <storey_list> and <room_list>). Each <storey> contains:
| Tag | Description | Format / values |
storey_name |
Storey / zone name | text |
storey_area |
Area | number (m²) |
storey_height |
Height | number (m) |
storey_area_usable |
Usable area | number (m²) |
storey_area_under_the_walls_and_stairs |
Area under walls and stairs | number (m²) |
<room_list> — area breakdown into main rooms. A list of the unit's main rooms (e.g. rooms, kitchen, bathroom). The section appears after the "Apartment area" option is enabled (shared with <storey_list>). Each <room> contains:
| Tag | Description | Format / values |
room_name |
Room name (e.g. "Living room", "Kitchen") | text |
room_area |
Area | number (m²) |
<flags_list> — unit advantages / highlights. A list of features that distinguish the unit (e.g. "Balcony", "Corner window", "Park view"). The section appears after the "Advantages" option is enabled. Each <flag> contains:
| Tag | Description | Format / values |
flag_name |
Advantage name | text |
XML example
<?xml version="1.0"?>
<xml>
<realestate>
<id>2041</id>
<investment_id>15</investment_id>
<investment_name>Test Investment</investment_name>
<investment_status>For sale</investment_status>
<investment_stage>Stage I</investment_stage>
<building>A</building>
<name>A - M1</name>
<local_number>M1</local_number>
<status_id>1</status_id>
<status_name>Available</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>9970.96</pricemkw_net>
<date_modified>2025-05-26 17:00:00</date_modified>
<type_id>1</type_id>
<type>Flat</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>Parking space</contiguity_type>
<contiguity_price>25000.00</contiguity_price>
<contiguity_area>12.00</contiguity_area>
</contiguity>
</contiguity_list>
</realestate>
</xml>
3. Endpoint — Price change history
You will find the link to the price history XML file of each unit in the price_change_history field of the previous endpoint. Example path:
https://demo1.voxdeveloper.com/files/price_changes/{hash1}/{hash2}.xml
The file is generated automatically after every price change — it requires no authorization other than knowing the URL. For convenience, a JSON version is also available (if the administrator has enabled it).
Fields always returned
| Tag | Description | Format / values |
id |
Unit ID | number |
investment_id |
Investment ID | number |
investment_name |
Investment name | text |
investment_stage |
Stage name | text |
building |
Building | text |
name |
Full unit name | text |
local_number |
Unit number | text |
type_id / type |
Unit type | number / text |
price / price_net |
Current price, gross / net | number (PLN) |
pricemkw / pricemkw_net |
Current price per m², gross / net | number (PLN/m²) |
Optional fields (enabled by the administrator)
| Tag | Description | Format / values |
pricemkw_usable / pricemkw_usable_net |
Price per usable m², gross / net | number (PLN/m²) |
Structure of <price_history>
It contains a list of <price_change> elements. Each contains:
| Tag | Description | Format / values |
date_modified |
Date and time of the change | YYYY-MM-DD HH:MM |
type |
Type of change (translated), e.g. "List price", "Promotional price" | text |
<before> |
State before the change — price, price_net, pricemkw, pricemkw_net (+ optionally the _usable variants) |
field group |
<after> |
State after the change — the same fields | field group |
XML example
<?xml version="1.0"?>
<xml>
<realestate>
<id>2041</id>
<investment_id>15</investment_id>
<investment_name>Test Investment</investment_name>
<investment_stage>Stage I</investment_stage>
<building>A</building>
<name>A - M1</name>
<local_number>M1</local_number>
<type_id>1</type_id>
<type>Flat</type>
<price>490000.00</price>
<price_net>453703.70</price_net>
<pricemkw>10769.23</pricemkw>
<pricemkw_net>9970.96</pricemkw_net>
<price_history>
<price_change>
<date_modified>2025-05-26 17:00</date_modified>
<type>List price</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>9970.96</pricemkw_net>
</after>
</price_change>
</price_history>
</realestate>
</xml>
4. Dictionaries: statuses, unit types and cardinal directions
Unit statuses
| ID | Status |
| 1 | Available |
| 2 | Verbal reservation |
| 3 | Reservation agreement |
| 4 | Sold |
| 5 | Preliminary agreement |
| 6 | Developer agreement |
| 7 | Notarial deed |
| 8 | Handover |
| 9 | On hold |
| 10 | Maintained reservation |
| 11 | Lease agreement |
Unit types
| ID | Type |
| 1 | Flat |
| 2 | Garage |
| 3 | Parking space |
| 4 | Storage room |
| 5 | Covered parking space |
| 6 | Cellar |
| 7 | Bicycle box |
| 8 | Commercial unit |
| 9 | Office unit |
| 10 | Storage locker |
| 11 | Above-ground parking space |
| 12 | Underground parking space |
| 13 | Parking space with a locker |
| 14 | Double tandem parking space |
| 15 | Single-track vehicle parking space |
| 16 | House |
| 17 | Share |
| 18 | Hall on a platform |
| 19 | Finishing standard |
| 20 | Condohotel |
| 21 | Apartment |
| 22 | Share in a water property |
| 23 | Mooring berth |
| 24 | Plot |
| 25 | Housing estate |
| 26 | Parking space for persons with disabilities |
| 27 | Roof terrace |
| 28 | Single-track vehicle locker |
| 29 | Sauna |
| 30 | Garden |
| 31 | Loggia |
Cardinal directions (the direction field)
The direction field in the XML describes the cardinal directions the unit faces. It can contain one or several comma-separated values (for corner / dual-aspect units).
The value format depends on a setting in the voxCRM panel — the option "Display an alternative list of cardinal directions (shortened Polish names, sorted clockwise)":
| Setting | Format in the XML | Example |
| Option disabled (default) | Raw letter codes N / S / E / W | <direction>NE,NS,SW</direction> |
| Option enabled | Shortened Polish names separated by commas | <direction>Pn., Wsch., Pd., Zach.</direction> |
direction field, determine with the client's voxCRM administrator which variant is enabled — and stick to one. Mixed formats (codes one time, Polish abbreviations another) will not occur within the same XML file, but changing the setting in the panel changes the format in the next generated XML.Full list of available codes (default variant — option disabled)
| Code | Meaning | Suggested Polish abbreviation |
N |
North | Pn. |
S |
South | Pd. |
E |
East | Wsch. |
W |
West | Zach. |
NE |
North-East | Pn., Wsch. |
EN |
East-North | Pn., Wsch. |
NW |
North-West | Pn., Zach. |
WN |
West-North | Pn., Zach. |
SE |
South-East | Pd., Wsch. |
ES |
East-South | Pd., Wsch. |
SW |
South-West | Pd., Zach. |
WS |
West-South | Pd., Zach. |
NS |
North-South | Pn., Pd. |
SN |
South-North | Pn., Pd. |
EW |
East-West | Wsch., Zach. |
WE |
West-East | Wsch., Zach. |
NSE |
North, South, East | Pn., Wsch., Pd. |
NES |
North, East, South | Pn., Wsch., Pd. |
NSW |
North, South, West | Pn., Pd., Zach. |
NWS |
North, West, South | Pn., Pd., Zach. |
SWN |
South, West, North | Pn., Pd., Zach. |
NEW |
North, East, West | Pn., Wsch., Zach. |
NWE |
North, West, East | Pn., Wsch., Zach. |
EWN |
East, West, North | Pn., Wsch., Zach. |
SWE |
South, West, East | Pd., Wsch., Zach. |
ESW |
East, South, West | Pd., Wsch., Zach. |
NSEW |
All four directions | Pn., Wsch., Pd., Zach. |
NE and EN mean the same thing). When parsing the raw codes, it is worth recognizing the value by its set of letters rather than the exact string — so that the mapping works regardless of the order of characters in the code. In the variant with the alternative list enabled, this problem does not occur: the XML returns ready-made Polish abbreviations from the "Suggested Polish abbreviation" column.5. Integration examples
PHP — fetching a unit's status
<?php
// For the production environment, replace the API key and investment ID with your own.
function getRealEstateInfo(int $id): ?array {
$url = 'https://demo1.voxdeveloper.com/webservice/realestatestatuslist'
. '/api_key/ab33c2fb8240c8c7ca015d924713b5d234b7778e/investment_id/15';
$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(2041);
if ($info !== null) {
echo "Unit #{$info['id']} — {$info['status_name']} — {$info['price']} PLN";
}
WordPress — shortcode with caching
<?php
/* Plugin Name: voxCRM Real Estate Table */
function voxcrm_realestate_table() {
if (false === ($output = get_transient('voxcrm_realestate_table'))) {
// For the production environment, replace the API key and investment ID with your own.
$url = 'https://demo1.voxdeveloper.com/webservice/realestatestatuslist'
. '/api_key/ab33c2fb8240c8c7ca015d924713b5d234b7778e/investment_id/15';
$xml = simplexml_load_file($url);
if ($xml === false) {
return '<p>No data.</p>';
}
$output = '<table><thead><tr>'
. '<th>Unit</th><th>Area</th><th>Status</th><th>Price</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');
Related materials
- How to retrieve a unit's price history data
- How to manage the information prospectus for submission to dane.gov.pl and to the website
6. Contact
If you have any questions or problems with the integration, please contact our technical support team:
- E-mail: kontakt@voxcommerce.pl
- Phone: 534 571 638
For matters related to the API key, the scope of shared investments and the visibility of optional fields — contact the administrator of your voxCRM instance.