Get started
The WSS REST API (Representational State Transfer Application Programming Interface) allows users to interact with a system using standard HTTP methods. In this particular REST API, users can manage apartment data efficiently. The API provides endpoints to retrieve a list of available apartments and to update specific details of individual apartments, such as price, availability, or area. This enables seamless integration with frontend applications or other services that need access to apartment-related information.
Authorization
API Endpoint
Production environment: https://www.webshow.property-sales-engine.com/restapi
Dev environment: https://www.betawebshow.property-sales-engine.com/restapi
To use this API, you need an API key. Please contact us at peter@beyond-visual.com to get your own. You need provide this API key as X-API-key in the header of the request.
Get Apartments list
# Here is a curl example
curl \
-X GET https://www.webshow.property-sales-engine.com/restapi/apartment/list \
-H "x-API-key: your_api_key_here" \
-H "Content-Type: application/json" \
-F 'limit=50' \
-F 'offset=0'
To get a list of Apartments, you need make a GET call to the following URL:
https://www.webshow.property-sales-engine.com/restapi/apartment/list
Result example :
{
status: "ok",
apartments: [
{
id: 677,
name: "A.0.01",
status: "available",
is_active: true,
hidden: false,
price: 0,
area: 30.88,
gross_area: 33.78,
exterior_area: 42.61,
floor: 0,
room_number: 1,
datasheet_pdf: "https://sample.property-sales-engine.com/uploads/flat/677/sample.pdf",
datasheet_pdf_image: "https://sample.property-sales-engine.com/uploads/flat/677/sample.jpg",
url: "https://sample.property-sales-engine.com/#A.0.01",
media: [
{
image:{
large: "https://sample.property-sales-engine.com/uploads/flat/677/large/sample.jpg",
mid: "https://sample.property-sales-engine.com/uploads/flat/677/mid/sample.jpg",
thumb: "https://sample.property-sales-engine.com/uploads/flat/677/thumb/sample.jpg"
},
media_type: "image",
media_image: "floorplan"
}
]
rooms: [
{
"type":"living",
"area":43.71,
"area_string":"",
"name":
{
"en":"Living room",
"de":"Wohnzimmer"
}
},
{
"type":"bed",
"area":16.1,
"area_string":"",
"name":
{
"en":"Bedroom",
"de":"Schlafzimmer"
}
},
{
"type":"kitchen",
"area":11.3,
"area_string":"",
"name":
{
"en":"Kitchen",
"de":"Küche"
}
},
{
"type":"shower",
"area":5.7,
"area_string":"",
"name":
{
"en":"Shower",
"de":"Dusche"
}
},
{
"type":"garden",
"area":82.45,
"area_string":"",
"name":
{
"en":"Garden",
"de":"Garten"
}
}
]
},
{
id: 678,
name: "A.1.02",
status: "reserved",
is_active: false,
hidden: true,
price: 0,
area: 89.88,
gross_area: 91.69,
exterior_area: 12.3,
floor: 1,
room_number: 3,
datasheet_pdf: "https://sample.property-sales-engine.com/uploads/flat/678/sample.pdf",
datasheet_pdf_image: "https://sample.property-sales-engine.com/uploads/flat/678/sample.jpg",
url: "https://sample.property-sales-engine.com/#A.0.02",
media: [
{
image:{
large: "https://sample.property-sales-engine.com/uploads/flat/678/large/sample.jpg",
mid: "https://sample.property-sales-engine.com/uploads/flat/678/mid/sample.jpg",
thumb: "https://sample.property-sales-engine.com/uploads/flat/678/thumb/sample.jpg"
},
media_type: "image",
media_image: "floorplan"
}
]
rooms: [
{
"type":"living",
"area":43.71,
"area_string":"",
"name":
{
"en":"Living room",
"de":"Wohnzimmer"
}
},
{
"type":"bed",
"area":16.1,
"area_string":"",
"name":
{
"en":"Bedroom",
"de":"Schlafzimmer"
}
},
{
"type":"kitchen",
"area":11.3,
"area_string":"",
"name":
{
"en":"Kitchen",
"de":"Küche"
}
},
{
"type":"shower",
"area":5.7,
"area_string":"",
"name":
{
"en":"Shower",
"de":"Dusche"
}
},
{
"type":"garden",
"area":82.45,
"area_string":"",
"name":
{
"en":"Garden",
"de":"Garten"
}
}
]
},
{
id: 679,
name: "A.0.03",
status: "sold",
is_active: true,
hidden: true,
price: 0,
area: 66.57,
gross_area: 70.29,
exterior_area: 15.55,
floor: 2,
room_number: 2,
datasheet_pdf: "https://sample.property-sales-engine.com/uploads/flat/679/sample.pdf",
datasheet_pdf_image: "https://sample.property-sales-engine.com/uploads/flat/679/sample.jpg",
url: "https://sample.property-sales-engine.com/#A.2.03",
media: [
{
image:{
large: "https://sample.property-sales-engine.com/uploads/flat/679/large/sample.jpg",
mid: "https://sample.property-sales-engine.com/uploads/flat/679/mid/sample.jpg",
thumb: "https://sample.property-sales-engine.com/uploads/flat/679/thumb/sample.jpg"
},
media_type: "image",
media_image: "floorplan"
}
]
rooms: [
{
"type":"living",
"area":43.71,
"area_string":"",
"name":
{
"en":"Living room",
"de":"Wohnzimmer"
}
},
{
"type":"bed",
"area":16.1,
"area_string":"",
"name":
{
"en":"Bedroom",
"de":"Schlafzimmer"
}
},
{
"type":"kitchen",
"area":11.3,
"area_string":"",
"name":
{
"en":"Kitchen",
"de":"Küche"
}
},
{
"type":"shower",
"area":5.7,
"area_string":"",
"name":
{
"en":"Shower",
"de":"Dusche"
}
},
{
"type":"garden",
"area":82.45,
"area_string":"",
"name":
{
"en":"Garden",
"de":"Garten"
}
}
]
},
{
id: 680,
name: "SR6.A.0.04",
status: "not_available",
is_active: false,
hidden: false,
price: 0,
area: 49.27,
gross_area: 51.11,
exterior_area: 5.6,
floor: 0,
room_number: 2,
datasheet_pdf: "https://sample.property-sales-engine.com/uploads/flat/680/sample.pdf",
datasheet_pdf_image: "https://sample.property-sales-engine.com/uploads/flat/680/sample.jpg",
url: "https://sample.property-sales-engine.com/#A.0.04",
media: [
{
image:{
large: "https://sample.property-sales-engine.com/uploads/flat/680/large/sample.jpg",
mid: "https://sample.property-sales-engine.com/uploads/flat/680/mid/sample.jpg",
thumb: "https://sample.property-sales-engine.com/uploads/flat/680/thumb/sample.jpg"
},
media_type: "image",
media_image: "floorplan"
}
]
rooms: [
{
"type":"living",
"area":43.71,
"area_string":"",
"name":
{
"en":"Living room",
"de":"Wohnzimmer"
}
},
{
"type":"bed",
"area":16.1,
"area_string":"",
"name":
{
"en":"Bedroom",
"de":"Schlafzimmer"
}
},
{
"type":"kitchen",
"area":11.3,
"area_string":"",
"name":
{
"en":"Kitchen",
"de":"Küche"
}
},
{
"type":"shower",
"area":5.7,
"area_string":"",
"name":
{
"en":"Shower",
"de":"Dusche"
}
},
{
"type":"garden",
"area":82.45,
"area_string":"",
"name":
{
"en":"Garden",
"de":"Garten"
}
}
]
}
]
}
Result example on error :
{
status: "error"
error_message: "Unauthorized"
}
QUERY PARAMETERS
| Field | Type | Required? | Description |
|---|---|---|---|
| offset | Integer | optional | (optional) A cursor for use in pagination. Pagination starts offset the specified offset. |
| limit | Integer | optional | (optional) A limit on the number of objects to be returned, between 1 and 500. |
Create Apartment
# Here is a curl example
curl \
-X POST https://www.webshow.property-sales-engine.com/restapi/apartment/create \
-H "x-API-key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"name": "A112", building "A", "area": 45.11, floor: 1, room_number: 1}'
To create an Apartment you need make a POST call to the following URL:
https://www.webshow.property-sales-engine.com/restapi/apartment/create
Parameters example:
{
name: "A112",
building "A",
status: "available",
is_active: true,
hidden: false,
price: 0,
area: 30.88,
gross_area: 33.78,
exterior_area: 42.61,
floor: 1,
room_number: 1,
datasheet_pdf: "https://sample.property-sales-engine.com/uploads/flat/677/sample.pdf",
datasheet_pdf_image: "https://sample.property-sales-engine.com/uploads/flat/677/sample.jpg",
flatplan: "https://sample.property-sales-engine.com/uploads/flat/677/flatplan.jpg",
flatplan2: "https://sample.property-sales-engine.com/uploads/flat/677/flatplan2.jpg",
floorplan: "https://sample.property-sales-engine.com/uploads/flat/677/floorplan:.jpg",
floorplan2:"https://sample.property-sales-engine.com/uploads/flat/677/floorplan2:.jpg",
rooms: [
{
"type":"living",
"area":43.71,
"area_string":"",
"name":
{
"en":"Living room",
"de":"Wohnzimmer"
}
},
{
"type":"bed",
"area":16.1,
"area_string":"",
"name":
{
"en":"Bedroom",
"de":"Schlafzimmer"
}
},
{
"type":"kitchen",
"area":11.3,
"area_string":"",
"name":
{
"en":"Kitchen",
"de":"Küche"
}
},
{
"type":"shower",
"area":5.7,
"area_string":"",
"name":
{
"en":"Shower",
"de":"Dusche"
}
},
{
"type":"garden",
"area":82.45,
"area_string":"",
"name":
{
"en":"Garden",
"de":"Garten"
}
}
]
}
Result example :
{
status: "ok",
apartment_id: 9999
}
Result example on error :
{
status: "error"
error_message: "The value provided in the exterior_area field is invalid."
}
QUERY PARAMETERS
| Field | Type | Required? | Description |
|---|---|---|---|
| name | string | required | Name of the apartment |
| status | String | optional |
Status, allowed values: available reserved not_available sold |
| is_active | Boolean | optional | Is the apartment active? You can temporarily mark it as sold without changing its status. |
| hidden | Boolean | optional | You can completely hide the apartment. |
| price | float | optional | Price of the apartment |
| area | float | required | Net or sales area |
| gross_area | float | optional | Gross area |
| exterior_area | float | optional | Exterior area |
| building | string | required | Building |
| floor | float | required | Floor/Level |
| room_number | integer | required | How many roomsdoes it have? |
| datasheet_pdf | string | optional | It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. Only PDF files are allowed to be uploaded. |
| datasheet_pdf_image | string | optional | Image of datasheet PDF. If you upload this, the datasheet_pdf field is not required. When you download the datasheet from showroom, this field will be downloaded. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| flatplan | string | optional | The apartment floor plan. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| flatplan2 | string | optional | The apartment second floor plan. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| floorplan | string | optional | Floor plan of the entire floor/level. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| floorplan2 | string | optional | Second floor plan of the entire floor/level. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| rooms | array | optional | If you want to update the room list, you need to provide the full room list. |
| rooms -> area | float | optional | The area of the room |
| rooms -> area_string | float | optional | The area of the room if it is not a float number. |
| rooms -> type | required | optional | The type of the room. Please at least specify terrace, balcony, and garden here. You can find the full list of room types here. |
| rooms -> name | required | optional | The name of the room. If you set the lang_names, this is not required. |
| rooms -> lang_names | required | optional | If you want to set the name of the room for each languages, use this. If you set the name, this is not required. |
| rooms -> lang_names -> lang code (example: en) | string | optional | You need to provide the ISO 639-1 code of the language as the key, and the name of the room as the value. |
Update Apartment
# Here is a curl example
curl \
-X PATCH https://www.webshow.property-sales-engine.com/restapi/apartment/update/{APARTMENT_ID} \
-H "x-API-key: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{"status": "available", "is_active": true, "area": 45.11}'
To update an Apartment you need make a PATCH call to the following URL:
https://www.webshow.property-sales-engine.com/restapi/apartment/update/{APARTMENT_ID}
You can get the {APARTMENT_ID} at Get Apartments List
Parameters example:
{
building "A",
status: "available",
is_active: true,
hidden: false,
price: 0,
area: 30.88,
gross_area: 33.78,
exterior_area: 42.61,
floor: 0,
room_number: 1,
datasheet_pdf: "https://sample.property-sales-engine.com/uploads/flat/677/sample.pdf",
datasheet_pdf_image: "https://sample.property-sales-engine.com/uploads/flat/677/sample.jpg",
flatplan: "https://sample.property-sales-engine.com/uploads/flat/677/flatplan.jpg",
flatplan2: "https://sample.property-sales-engine.com/uploads/flat/677/flatplan2.jpg",
floorplan: "https://sample.property-sales-engine.com/uploads/flat/677/floorplan:.jpg",
floorplan2:"https://sample.property-sales-engine.com/uploads/flat/677/floorplan2:.jpg",
rooms: [
{
"type":"living",
"area":43.71,
"area_string":"",
"name":
{
"en":"Living room",
"de":"Wohnzimmer"
}
},
{
"type":"bed",
"area":16.1,
"area_string":"",
"name":
{
"en":"Bedroom",
"de":"Schlafzimmer"
}
},
{
"type":"kitchen",
"area":11.3,
"area_string":"",
"name":
{
"en":"Kitchen",
"de":"Küche"
}
},
{
"type":"shower",
"area":5.7,
"area_string":"",
"name":
{
"en":"Shower",
"de":"Dusche"
}
},
{
"type":"garden",
"area":82.45,
"area_string":"",
"name":
{
"en":"Garden",
"de":"Garten"
}
}
]
}
Result example :
{
status: "ok",
apartment_id: 9999
}
Result example on error :
{
status: "error"
error_message: "The value provided in the exterior_area field is invalid."
}
QUERY PARAMETERS
| Field | Type | Required? | Description |
|---|---|---|---|
| status | String | optional |
Status, allowed values: available reserved not_available sold |
| is_active | Boolean | optional | Is the apartment active? You can temporarily mark it as sold without changing its status. |
| hidden | Boolean | optional | You can completely hide the apartment. |
| price | float | optional | Price of the apartment |
| area | float | optional | Net or sales area |
| gross_area | float | optional | Gross area |
| exterior_area | float | optional | Exterior area |
| building | string | optional | Building |
| floor | float | optional | Floor/Level |
| room_number | integer | optional | How many roomsdoes it have? |
| datasheet_pdf | string | optional | It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. Only PDF files are allowed to be uploaded. |
| datasheet_pdf_image | string | optional | Image of datasheet PDF. If you upload this, the datasheet_pdf field is not required. When you download the datasheet from showroom, this field will be downloaded. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| flatplan | string | optional | The apartment floor plan. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| flatplan2 | string | optional | The apartment second floor plan. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| floorplan | string | optional | Floor plan of the entire floor/level. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| floorplan2 | string | optional | Second floor plan of the entire floor/level. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| rooms | array | optional | If you want to update the room list, you need to provide the full room list. |
| rooms -> area | float | optional | The area of the room |
| rooms -> area_string | float | optional | The area of the room if it is not a float number. |
| rooms -> type | required | optional | The type of the room. Please at least specify terrace, balcony, and garden here. You can find the full list of room types here. |
| rooms -> name | required | optional | The name of the room. If you set the lang_names, this is not required. |
| rooms -> lang_names | required | optional | If you want to set the name of the room for each languages, use this. If you set the name, this is not required. |
| rooms -> lang_names -> lang code (example: en) | string | optional | You need to provide the ISO 639-1 code of the language as the key, and the name of the room as the value. |
Upload a file for the Apartment
# Here is a curl example
curl \
-X POST https://www.webshow.property-sales-engine.com/restapi/apartment/file_upload/{APARTMENT_ID} \
-H "x-API-key: your_api_key_here" \
-H "Content-Type: multipart/form-data" \
-F datasheet_pdf=@sample.pdf
-F datasheet_pdf_image=@sample.jpg
Upload a new file using a multipart request to specify destination and file information. To upload a file for the Apartment you need make a POST call to the following URL:
https://www.webshow.property-sales-engine.com/restapi/apartment/update/{APARTMENT_ID}
You can get the {APARTMENT_ID} at Get Apartments List
Result example :
{
status: "ok"
}
Result example on error :
{
status: "error"
error_message: "The file provided in the datasheet_pdf_image field is invalid. The image dimensions must not exceed 6000px in width or height."
}
QUERY PARAMETERS
| Field | Type | Required? | Description |
|---|---|---|---|
| datasheet_pdf | string | optional | Datasheet PDF. We will store this image, and if you change it, you will need to send it again. Only PDF files are allowed to be uploaded. |
| datasheet_pdf_image | string | optional | Image of datasheet PDF. If you upload this, the datasheet_pdf field is not required. When you download the datasheet from showroom, this field will be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| flatplan | string | optional | The apartment floor plan. It must contain a full URL from which it can be downloaded. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| flatplan2 | string | optional | The apartment second floor plan. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| floorplan | string | optional | Floor plan of the entire floor/level. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
| floorplan2 | string | optional | Second floor plan of the entire floor/level. We will store this image, and if you change it, you will need to send it again. The image dimensions must not exceed 6000px in width or height. Allowed file types: JPEG, PNG, WEBP |
Delete Apartment
# Here is a curl example
curl \
-X DELETE https://www.webshow.property-sales-engine.com/restapi/apartment/delete/{APARTMENT_ID} \
-H "x-API-key: your_api_key_here" \
-H "Content-Type: application/json"
To delete an Apartment you need make a DELETE call to the following URL:
https://www.webshow.property-sales-engine.com/restapi/apartment/delete/{APARTMENT_ID}
You can get the {APARTMENT_ID} at Get Apartments List
Result example :
{
status: "ok"
}
Result example on error :
{
status: "error"
error_message: "The apartment ID is missing"
}
QUERY PARAMETERS
No parameters are required.
Room types
The following romm types are available:
| Type | Description |
|---|---|
| ante | Ante |
| hallway | Hallway / Corridor |
| kitchen | Kitchen |
| pantry | Pantry |
| dining | Dining room |
| bath | Bathroom |
| shower | Shower |
| toilet | Toilet / WC |
| hh | Household room / Laundry room |
| living | Living room |
| bed | Bedroom |
| wardrobe | Wardrobe / Closet |
| hallway_wardrobe | Hallway + Wardrobe |
| terrace | Terrace |
| balcony | Balcony |
| loggia | Loggia |
| garden | Garden |
| roof_garden | Roof garden |
| green_roof | Green roof |
| living_dining | Living room + Dining room |
| intense_green_roof | Intensive green roof |
| living_work_dining | Living room + Workroom + Dining room |
| toilet_shower | Toilet + Shower |
| living_bed_dining | Living room + Bedroom + Dining room |
| winter_garden | Winter garden |
| halfintense_green_roof | Semi-intensive green roof |
| living_dining_bed | Living room + Dining room + Bedroom |
| terrace_balcony | Terrace / Balcony |
| storage | Storage |
| kitchen_dining | Kitchen + Dining room |
| sauna | Sauna |
| office | Office |
| stairs | Stairs |
| workroom | Workroom |
| ante_hallway | Ante + Hallway |
| stais_hallway | Stairs + Hallway |
| living_kitchen | Living room + Kitchen |
| basement | Basement |
| living_workroom | Living room + Workroom |
| dining_workroom | Dining room + Workroom |
| living_bed | Living room + Bedroom |
| living_dining_kitchen | Living room + Dining room + Kitchen |
| dressing | Dressing room |
| entrance | Entrance |
| living_office | Living room + Office |
| den | Den |
| kitchen_office | Kitchen + Office |
| juliet | Juliet balcony |
| den_bedroom | Den + Bedroom |
| other | Other |
Errors
The API uses the following error codes:
| Error Code | Meaning |
|---|---|
| 400 Bad Request | The request was malformed or missing required parameters. |
| 401 Unauthorized | The API key provided was invalid or missing. |
| 404 Not Found | The requested resource was not found. |
| 500 Internal Server Error | An unexpected error occurred on the server. |