# Listings API
The Listing API has been designed to cover two common scenarios:
- Get listings from KPro Marketing to publish them in another portal.
- Publish listings in Keaze and Homes for Londoners portals without having to create and maintain the inventory and the listings in KPro Marketing.
# On this page
# Get listings
To get all the live listings (listings ready to be published), send a GET to /api/rest/open/listings
.
To get all listings, no matter their visibility (draft or live), send a GET to /api/rest/open/listings/all
.
You need to pass the QueryString parameter api_key
with your API key to get access to the resources.
# Payload
In both cases all responses are JSON encoded, and as they are paginated, the data is contained into an envelope:
{
"data": [items],
"pagination": {
"currentPage": 2, // current page number
"perPage": 10, // number of items to be shown per page
"total": 212, // total number of items
"from": 11, // number of the first item in the result
"to": 20, // number of the last item in the result
"lastPage": 23, // last page number
},
"links": {
"first": "url to the first page",
"prev": "url to the previous page",
"next": "url to the next page",
"last": "url to the last page",
}
}
where items
is the collection of listings.
Listings can advertise a single property or a development. In the first case the details about the property are returned in the field property
, but to get all the properties for the second case, it is necessary to issue a second request. Check the value of the field singleProperty
to identify how many properties the listing is advertising.
The payload for every listing is the same in both cases, but in the second one the field propertyDetails
will be null.
Although property payloads contains detailed information about the properties being advertised, for most portals, all relevant information to publish a listing is in the listing payload itself, and it is not necessary to use the property details.
# Listing fields
For a better understanding of the fields returned for listings, they have been divided in different sections.
The field detailsPerBedroom
is an array with one entry per each different amount the bedroom the properties being advertised have. Each entry will return fields with the best prices for the corresponding bedrooms. Listings also have fields for best prices in general.
Some fields are redundant, but it could help reducing computation on the API consumer side.
As KPro Marketing deals with different schemes, some fields only have meaning for some specific schemes. Take a look to the section Understanding prices fields to know how to use all the fields returned.
Field name | Type | Nullable | Description |
---|---|---|---|
General | |||
id | number | false | Keaze Reference Id. |
externalRef | string | true | External reference provided by the client. |
name | string | false | Listing name to display. |
singleProperty | boolean | false | true when the listing is advertising a single property. |
propertyDetails | object | true | Object containing the property details when the listing is single property. |
schemeGroup | object | false | Object that contains details about the schemes for the listing. Listings usually are related to a single scheme, but sometimes they can be related to more than one, like Help to Buy and First Dibs. The object has fields for the group of schemes and also the collection of all single schemes. Check the list of all possible scheme groups. |
availabilityStatus | object | false | Object that contains the code & name of the availability status. Regardless the occupancy type, there are only four possible values. Codes don't depend on the occupancy type, but names do. Codes are: coming-soon, available, under-offer & closed. |
visibility | string | false | draft or live |
contactEmail | string | true | Contact e-mail home seekers can write to if interested in the listing. |
contactPhone | string | true | Contact telephone number |
defaultNotificationEmail | string | true | Default notification e-mail where automatic e-mails can be sent about leads. |
galleryImages | array | true | Array that contains the image gallery. Every item contains urls for different view ports: largeSize (1080px width), mediumSize (720px width) & thumbnail (360px width), as well as two more fields that could be empty: alternativeText and caption . All images match the aspect ratio 16x9. |
videos | array | true | Array that contains videos urls and some extra details like the embedded iframe code and the thumbnail image. For some videos there are not available thumbnail images. |
brochures | array | true | Array that contains urls to brochures as pdf files. |
Address | |||
displayAddress | string | false | The address to display in the listing. The address doesn't contain the postcode. |
postcode | string | true | UK postcode for the listing. |
localAuthority | object | true | Object with details of local authority, consisting in local authority name, county name and region name. |
latitude | number | false | The latitude where the listing is. |
longitude | number | false | The longitude where the listing is. |
mapImageUrl | string | false | Map image url with a pin indicating the position of the property, useful if you want to display an image instead of calling Google Map or a similar map service. |
Descriptions | |||
shortDescription | string | true | Listing summary. |
longDescription | string | true | The full description of the listing. |
localAreaName | string | true | Name of the local area. |
localAreaDescription | string | true | Description of the local area. |
specifications | array | true | Array of objects, where each one contains three fields: name , description and imageUrls |
termsAndConditions | string | true | Terms and conditions. |
disclaimer | string | true | Disclaimer. |
keyFeatures | array | true | Array of free text key features. |
Premises details | |||
newBuild | boolean | false | true is the listing if for new build properties. |
propertyType | object | false | An object with two fields: name and group . The second one could be Flat or House, while the first one is a more specific property type name, like Terrace or Bungalow . See all the property type values |
detailsPerBedroom | array | false | An array containing details per each bedroom the listing has. |
bedrooms | array | false | An array containing the different amount of bedrooms of the listing properties. |
bathrooms | array | true | An array containing the different amount of bathrooms of the listing properties. |
receptionRooms | array | true | An array containing the different amount of reception rooms of the listing properties. |
furnitureStatus | array | true | An array containing the different furniture status of the listing properties. Possible values are: unfurnished, part-furnished & furnished. |
tenure | string | false | Condition on which a property is held: leasehold or freehold. |
propertyFeatures | array | false | Array of objects describing all property features. Every object has two fields: section (text with the property feature section, e.g.: Parking ) & values (an array of string, containing all the property features for the section). |
forSale | boolean | false | The listing is for sale, otherwise is to rent. |
For sale | |||
fullMarketPrice | number | true | The minimum full market price. |
depositPercentage | number | true | The deposit percentage for the minimum full market price. |
depositValue | number | true | The deposit value computed from fullMarketPrice and depositPercentage . |
isSharedOwnership | boolean | false | The listing scheme is shared ownership, so there's a share to buy and the rest to rent. |
minSharePercentage | number | true | The minimum share percentage if isSharedOwnership . |
minShareValue | number | true | The minimum share value if isSharedOwnership , computed from fullMarketPrice and minSharePercentage |
subsidisedMonthlyRent | number | true | The minimum amount to pay for rent of the part doesn't own when isSharedOwnership . |
maxGovernmentLoanPercent | number | true | Depending on the scheme, eligible buyers could receive a government loan. In such a case, this value is the maximum government loan percent. |
maxGovernmentLoanValue | number | true | The maximum government loan value, computed from fullMarketPrice and maxGovernmentLoanPercent |
monthlyServiceCharge | number | true | Monthly bill that covers the costs of any repairs or maintenance to the structure of the building, including drainage, insurance and management charges. |
annualGroundRent | number | true | Rent to pay annually to the freeholder or landlord of the leasehold property. |
reservationFee | number | true | Reservation fee to a developer that allows a buyer to reserve a property for a period. |
To rent | |||
monthlyRent | number | true | Monthly rent. |
weeklyRent | number | true | Weekly rent, computed from monthlyRent . |
rentalDeposit | number | true | Rental deposit value. |
minTenancyMonths | number | true | Minimum tenancy term in months. |
maxTenancyMonths | number | true | Maximum tenancy term in months. |
Both: For sale & To rent | |||
administrationFee | number | true | Fee charged by an agency to cover expenses related to record-keeping and/or other. |
Timestamps | |||
createdAt | string | false | Date-time when the listing was created. |
updatedAt | string | false | Last date-time when the listing was updated. |
# Details per bedroom
Field name | Type | Nullable | Description |
---|---|---|---|
bedrooms | number | false | Total number of bedrooms. |
bathrooms | number | false | Total number of bathrooms. |
receptionRooms | number | true | Total number of reception rooms. |
furnitureStatus | string | true | unfurnished, part-furnished or furnished. |
fullMarketPrice | number | true | The minimum full price. |
depositPercentage | number | true | The minimum deposit percentage. |
depositValue | number | true | The minimum deposit value. Computed from previous fields. |
minSharePercentage | number | true | The minimum share percentage if isSharedOwnership . |
minShareValue | number | true | The minimum share value if isSharedOwnership . Computed from previous fields. |
subsidisedMonthlyRent | number | true | The minimum amount to pay for rent of the part you don't own when isSharedOwnership . |
subsidisedAsYearlyPercent | boolean | false | When it is shared ownership, subsidised rent can be entered as a monthly value (false) or as a yearly percent (true). |
subsidisedMonthlyRent | number | true | The minimum amount to pay for rent of the part you don't own when isSharedOwnership . Computed from previous fields. |
monthlyServiceCharge | number | true | Monthly bill that covers the costs of any repairs or maintenance to the structure of the building, including drainage, insurance and management charges. |
annualGroundRent | number | true | Rent to pay annually to the freeholder or landlord of the leasehold property. |
reservationFee | number | true | Reservation fee to a developer that allows a buyer to reserve a property for a period. |
monthlyRent | number | true | Monthly rent. |
weeklyRent | number | true | Weekly rent. Computed from monthlyRent . |
rentalDeposit | number | true | Rental deposit value. |
minTenancyMonths | number | true | Minimum tenancy term in months. |
maxTenancyMonths | number | true | Maximum tenancy term in months. |
administrationFee | number | true | Fee charged by an agency to cover expenses related to record-keeping and/or other. |
# Filtering
The API provides several fields that can be used to filter the results:
createdAt
: the timestamp when the listing was created.updatedAt
: the last timestamp when the listing was updated.name
: listing namenewBuild
: if the listing is new build or notavailabilityStatus.name
: name of the availability statusavailabilityStatus.code
: code of the availability statusschemeGroup.slug
: slug of the scheme groupschemeGroup.name
: name of the scheme group
and several operators to be used in conjunction with the fields:
not
: not equalgt
: greater than (for numbers, date and timestamps)lt
: less than (for numbers, date and timestamps)gte
: greater than or equal to (for numbers, date and timestamps)lte
: less than or equal to (for numbers, date and timestamps)ltt
: less than tomorrow's date, useful for datetime or timestamp fields when the filter value is a date without the time componentin
: in a list of values separated by commasnotin
: not in a list of values separated by commaslike
: standard like operator, use * for any amount of chars and _ for a single oneregex
: regular expression
Operators should be placed after the fields, separated by a dot (.
). When multiple filters are specified, the AND logic operator will be used (except when using square brackets at the end of the parameter name to replace in
and notin
operators). When no operator is specified for a filter, the usual equal comparison is applied.
In order to filter dates and timestamps, use the ISO date format YYYY-MM-DD for dates, and if you want to include hours and minutes, use YYYY-MM-DD HH:mm. Notice that in all cases, UTC date/time is used.
Examples
- To get listings updated after 20-Mar-2021 10:00:
/api/rest/open/listings?updatedAt.gte=2021-03-20 10:00
- To get only Shared ownership listings:
/api/rest/open/listings?schemeGroup.slug=shared-ownership
# Bracket option
Brackets can be used instead of values separated by commas to replace the operators in
and notin
.
Examples
schemeGroup.slug[]=shared-owership&schemeGroup.slug[]=help-to-buy
is the same asschemeGroup.slug.in=shared-ownership,help-to-buy
schemeGroup.slug.not[]=shared-owership&schemeGroup.slug.not[]=help-to-buy
is the same asschemeGroup.slug.notin=shared-ownership,help-to-buy
# Sorting
By default results are sorting by name
, but you can change it by using parameter sort
and the field you want to sort by, separated by comma, as the value. Fields are sorted ascending, but you use the minus symbol (-
) in front of any of fields to change the order to descending.
Example, to sort first by updatedAt
descending, and then by name
ascending, use: sort=-updatedAt,name
# Pagination
Results are paginated based on parameters page
(page number, optional, default is 1) and size
(maximum number of records to return per page, optional, default is 50, maximum possible value is 1000).
# Get a specific listing
To get only one listing, send a GET to /api/rest/open/listings/{listing.id}
, where listing.id is the id reference in KPro Marketing.
The payload is the same as when requesting the collection of listings.
# Example
{
"id": 1234,
"externalRef": "BrickStreetResale",
"name": "Brick street Resale",
"singleProperty": true,
"propertyDetails": {
"propertyType": {
"name": "Flat",
"group": "Flat"
},
"availabilityStatus": {
"code": "available",
"name": "For sale"
},
"active": true,
"newBuild": false,
"propertyNumber": "",
"name": "Brick street - Resale",
"handoverDate": null,
"useDevelopmentAddress": false,
"building": "",
"street": "Brick Street",
"town": "London",
"postcode": "E1 6QL",
"localAuthority": null,
"address": "Brick Lane, London, E1 6QL",
"bedrooms": 2,
"bathrooms": 1,
"receptionRooms": 1,
"furnitureStatus": "furnished",
"floorArea": null,
"numberOfFloors": 1,
"floor": {
"code": "ground",
"name": "Ground floor"
},
"tenure": "leasehold",
"leaseYears": 99,
"leaseStartDate": "2021-01-25",
"energyEfficiencyRatingCurrent": 87,
"energyEfficiencyRatingPotential": 93,
"environmentalImpactRatingCurrent": 89,
"environmentalImpactRatingPotential": 91,
"kid": [
{
"url": "https://static.keaze.co.uk/assets/plots/5646/kids/sample.pdf",
"source": "https://yourserver.com/pdfs/4534/sample.pdf",
"caption": "Important document"
}
],
"forSale": true,
"fullMarketPrice": 270000,
"depositPercentage": 5,
"depositValue": 3375,
"minSharePercentage": 25,
"maxSharePercentage": 75,
"minShareValue": 67500,
"subsidisedRent": 312,
"subsidisedAsYearlyPercent": false,
"subsidisedMonthlyRent": 312,
"monthlyServiceCharge": 177.33,
"annualGroundRent": null,
"reservationFee": null,
"administrationFee": null,
"rentalDeposit": null,
"monthlyRent": null,
"weeklyRent": null,
"minTenancyMonths": null,
"maxTenancyMonths": null,
"maxGovernmentLoanPercent": null,
"maxGovernmentLoanValue": null,
"fullSpecifications": "",
"features": [
{
"name": "Off street parking",
"section": "Parking"
}
],
"keyFeatures": [],
"floorplanImages": [ ],
"updatedAt": "2021-03-29T15:55:58+00:00",
"createdAt": "2020-10-30T15:13:17+00:00"
},
"schemeGroup": {
"slug": "shared-ownership",
"name": "Shared ownership",
"forSale": true,
"schemes": [
{
"slug": "shared-ownership",
"name": "Shared ownership"
}
]
},
"availabilityStatus": {
"code": "available",
"name": "For sale"
},
"visibility": "live",
"contactEmail": "info@housing-provider.co.uk",
"contactPhone": "+44 7345-762-392",
"defaultNotificationEmail": null,
"galleryImages": [
{
"alternativeText": "",
"caption": "",
"main": true,
"thumbnail": "https://static.propertybooking.co.uk/assets/developments/9471/gallery/360/flat-16-8-crabapple-road-1.jpg",
"mediumSize": "https://static.propertybooking.co.uk/assets/developments/9471/gallery/720/flat-16-8-crabapple-road-1.jpg",
"largeSize": "https://static.propertybooking.co.uk/assets/developments/9471/gallery/1080/flat-16-8-crabapple-road-1.jpg"
},
{
"alternativeText": "",
"caption": "",
"main": false,
"thumbnail": "https://static.propertybooking.co.uk/assets/developments/9471/gallery/360/flat-16-8-crabapple-road-3.jpg",
"mediumSize": "https://static.propertybooking.co.uk/assets/developments/9471/gallery/720/flat-16-8-crabapple-road-3.jpg",
"largeSize": "https://static.propertybooking.co.uk/assets/developments/9471/gallery/1080/flat-16-8-crabapple-road-3.jpg"
}
],
"logo": null,
"videos": [
{
"caption": "",
"url": "https://youtu.be/3hR6JH19yWE",
"extraDetails": {
"type": "youtube",
"title": "Flat Tour",
"videoId": "3hR6JH19yWE",
"embedCode": "<iframe src='https://www.youtube.com/embed/3hR6JH19yWE' id='youtubeIframe' class='embed-responsive-item' frameborder='0' allow='accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture' allowfullscreen></iframe>",
"thumbnailUrl": "https://img.youtube.com/vi/3hR6JH19yWE/mqdefault.jpg",
"metaInformation": null
}
}
],
"brochures": [ ],
"displayAddress": "Crabapple Road, Tonbridge",
"postcode": "TN9 1FT",
"localAuthority": null,
"latitude": 51.1967418,
"longitude": 0.2823028,
"mapImageUrl": "http://api.test/assets/developments/9471/map.png",
"shortDescription": "We are pleased to present to the market this two bedroom...",
"longDescription": "<p>We are pleased to present to the market this two bedroom...</p>",
"localAreaName": "",
"localAreaDescription": "<p>There is a wealth of retail outlets within a few minutes' walk ...</p>",
"termsAndConditions": "",
"disclaimer": "",
"keyFeatures": ["Great location", "Excellent Transport Links", "Lots to do nearby"],
"specifications": [],
"newBuild": false,
"propertyType": {
"name": "Flat",
"group": "Flat"
},
"detailsPerBedroom": [
{
"bedrooms": 2,
"bathrooms": 1,
"receptionRooms": 1,
"furnitureStatus": "furnished",
"fullMarketPrice": 270000,
"depositPercentage": 5,
"minSharePercentage": 25,
"subsidisedRent": 312,
"subsidisedAsYearlyPercent": false,
"subsidisedMonthlyRent": 312,
"monthlyServiceCharge": 177.33,
"annualGroundRent": null,
"reservationFee": null,
"administrationFee": null,
"rentalDeposit": null,
"monthlyRent": null,
"minTenancyMonths": null,
"maxTenancyMonths": null
}
],
"bedrooms": [2],
"bathrooms": [1],
"receptionRooms": [1],
"furnitureStatus": ["furnished"],
"tenure": "leasehold",
"propertyFeatures": [
{
"section": "Parking",
"values": [
"Off street parking"
]
}
],
"forSale": true,
"isSharedOwnership": true,
"fullMarketPrice": 270000,
"depositValue": 3375,
"minSharePercentage": 25,
"minShareValue": 67500,
"subsidisedMonthlyRent": 312,
"maxGovernmentLoanPercent": null,
"maxGovernmentLoanValue": null,
"monthlyServiceCharge": 177.33,
"annualGroundRent": null,
"reservationFee": null,
"monthlyRent": null,
"weeklyRent": null,
"rentalDeposit": null,
"minTenancyMonths": null,
"maxTenancyMonths": null,
"administrationFee": null,
"updatedAt": "2021-03-29T15:56:48+00:00",
"createdAt": "2020-10-30T15:13:17+00:00"
}
# Get listing properties
When the listing is a development listing, send a GET to /api/rest/open/listings/{listing.id}/properties
to get all the properties advertised by the listing.
Unlike the listing collection payload, this one is not paginated, but it will be a JSON object with the field data
, which is an array containing all the properties.
{
"data": [items]
}
# Property details fields
Some fields match the ones in Listing details, and in many cases they are interpreted the same, but some as bedrooms
, bathrooms
and receptionRooms
are not. In property details they are considered as numbers, while in listings they are array of numbers.
Field name | Type | Nullable | Description |
---|---|---|---|
id | number | false | Reference Id. |
propertyNumber | string | true | Number to identify the property. |
name | string | true | Name to identify the property when it is an independent unit. |
propertyType | object | false | An object with two fields: name and group . The second one could be Flat or House, while the first one is a more specific property type name, like Terrace or Bungalow . See all the property type values |
availabilityStatus | object | false | Object that contains the code & name of the availability status. Regardless the occupancy type, there are only four possible values. Codes don't depend on the occupancy type, but names do. Codes are: coming-soon, available, under-offer & closed, and they can be used to associate colours to each status. |
fullSpecifications | string | true | A full description of the property. |
floorplanImages | array | No | Collection of floorplan images. Every item has 4 fields: url is the url in KPro Marketing servers, and source is the url where the image was uploaded from if it was added via API. alt is the alternative text for the html image and caption is an optional caption you would like to display in some portals. |
forSale | boolean | false | The property is for sale, otherwise is to rent. |
Premises details | |||
newBuild | boolean | false | true if the property is new build. Development properties are always new-build |
bedrooms | number | false | Total number of bedrooms. |
bathrooms | number | false | Total number of bathrooms. |
receptionRooms | number | true | Total number of reception rooms. |
furnitureStatus | string | true | unfurnished, part-furnished or furnished. |
floorArea | number | true | Floor area in square meters. |
numberOfFloors | number | true | Total number of floors the property has. |
floor | object | true | Entrance floor. Object containing: name , code and level . name is a readable text that usually ends with the word floor, like Ground floor or Basement, code is the internal code managed by KPro Marketing, while level is the corresponding level number for the floor that can be used for sorting purposes, example 0 for Ground floor, -2 for Basement and 3 for 3rd floor. for sorting purposes |
liftProvided | boolean | true | Lift provided |
tenure | string | false | Condition on which a property is held: leasehold or freehold. |
leaseYears | number | true | When the tenure is leasehold, the number of years the lease lasts. |
leaseStartDate | string | true | Date when the lease started, if applicable, useful to calculate the remaining lease in years. |
propertyFeatures | array | false | Array of objects describing all property features. Every object has two fields: section (text with the property feature section, e.g.: Parking ) & values (an array of string, containing all the property features for the section). |
rooms | array | false | Collection of property rooms. Every item has: name , additionalDetails , units (foot or metre), width , length and floorArea . Name and additional details are free texts, up to 255 chars length, while width, length and floorArea are numbers expressed in the provided units. Only name and units are required. |
energyEfficiencyRatingCurrent | number | false | Integer number less or equal than 100, that reflects the Energy rating for the property. When it's a new build property, this value will be the Predicted energy rating, otherwise it will be the Current energy rating |
energyEfficiencyRatingPotential | number | false | Integer number less or equal than 100, that reflects the Potential energy rating for resale properties (not new build). |
environmentalImpactRatingCurrent | number | false | Integer number less or equal than 100, that reflects the Environmental impact rating for the property. When it's a new build property, this value will be the Predicted environmental impact rating, otherwise it will be the Current environmental impact rating |
environmentalImpactRatingPotential | number | false | Integer number less or equal than 100, that reflects the Potential environmental impact rating for resale properties (not new build). |
kid | array | true | Collection of key important documents. Every item has 3 fields: url is the url in KPro Marketing servers, and source is the url where the file was uploaded from if it was added via API. caption is an optional caption you would like to display in some portals. |
keyFeatures | array | true | Array of free text key features. |
For sale | |||
fullMarketPrice | number | true | The minimum full price. |
depositPercentage | number | true | The minimum deposit percentage. |
depositValue | number | true | The minimum deposit value. Computed from previous fields. |
isSharedOwnership | boolean | false | The property scheme is shared ownership, so there's a share to buy and the rest to rent. |
minSharePercentage | number | true | The minimum share percentage if isSharedOwnership . |
minShareValue | number | true | The minimum share value if isSharedOwnership . Computed from previous fields. |
maxSharePercentage | number | Yes | The maximum share percentage if isSharedOwnership . |
subsidisedMonthlyRent | number | true | The minimum amount to pay for rent of the part you don't own when isSharedOwnership . |
subsidisedAsYearlyPercent | boolean | false | Subsidised rent can be entered as a monthly value (false) or as a yearly percent (true) |
subsidisedMonthlyRent | number | true | The minimum amount to pay for rent of the part you don't own when isSharedOwnership . It is computed from previous fields. |
maxGovernmentLoanPercent | number | true | Depending on the scheme, eligible buyers could receive a government loan. In such a case, this value is the maximum government loan percent. |
maxGovernmentLoanValue | number | true | The maximum government loan value. |
monthlyServiceCharge | number | true | Monthly bill that covers the costs of any repairs or maintenance to the structure of the building, including drainage, insurance and management charges. |
annualGroundRent | number | true | Rent to pay annually to the freeholder or landlord of the leasehold property. |
reservationFee | number | true | Reservation fee to a developer that allows a buyer to reserve a property for a period. |
To rent | |||
monthlyRent | number | true | Monthly rent. |
weeklyRent | number | true | Weekly rent. Computed from monthlyRent . |
rentalDeposit | number | true | Rental deposit value. |
minTenancyMonths | number | true | Minimum tenancy term in months. |
maxTenancyMonths | number | true | Maximum tenancy term in months. |
Both: For sale & To rent | |||
administrationFee | number | true | Fee charged by an agency to cover expenses related to record-keeping and/or other. |
# Understanding prices fields
Although listing and property payloads contains all available price fields, their use depends on the occupancy type and the schemes.
Some or even all the relevant price fields could be null. In those cases those values should be treated as TBA (To be announced).
There are two different occupancy types: For sale or To rent. The listing and property details always contain the field forSale
, which will be true when the occupancy type is For sale, otherwise is To rent.
# For sale fields
There are basically three different cases for sale properties, regarding the price fields:
- Standard: There is a
fullMarketPrice
, and to buy the property, it is necessary to pay adepositValue
. - Shared ownership: There is a share to buy and the rest to rent. The minimum share to buy is returned in the field
minSharePercentage
and the amount (computed from the full market price) is returned inminShareValue
. The monthly rent for the rest is returned in the fieldsubsidisedMonthlyRent
. ThedepositValue
is usually lower, because it's computed against the price for the share to buy. - The buyer can receive a government loan: It behaves like the Standard case, but field
maxGovernmentLoanPercent
will contain the percent of the government loan (usually 20 or 40, depending if the property is in London or not), andmaxGovernmentLoanValue
the amount it represents out of thefullMarketPrice
.
When it has the behavior of Shared ownership, the flag isSharedOwnership
will be true.
When buyers could receive a government loan, and fullMarketPrice
is null, maxGovernmentLoanValue
will be also null.
There are other fields that do not depend on the schemes, like:
monthlyServiceCharge
: Monthly bill that covers the costs of any repairs or maintenance to the structure of the building, including drainage, insurance and management charges.annualGroundRent
: Rent to pay annually to the freeholder or landlord of the leasehold property. Notice this field only make sense whentenure
is leasehold.reservationFee
: Reservation fee to a developer that allows a buyer to reserve a property for a period.administrationFee
: Fee charged by an agency to cover expenses related to record-keeping and/or other.
# To rent fields
There is no different cases for properties to rent.
The most important value is monthlyRent
, but sometimes is a good idea to display the weeklyRent
too, which is a computed value. rentalDeposit
, minTenancyMonths
and maxTenancyMonths
are sometimes specified by the housing providers, although it is not common.
administrationFee
is the other relevant field for properties to rent.
# Create and update listings in KPro Marketing
There are three different endpoints to keep your listings updated in KPro Marketing.
Add a new listing
POST /api/rest/open/listings
Update an existing listing
PUT /api/rest/open/listings/{listing.id}
Archive a listing
PATCH /api/rest/open/listings/{listing.id}/archive
The payload to add or update a listing are the same, although when using to update a listing, only fields provided are updated.
When creating new listings by issuing a POST request, the system won't allow duplicate names for non-archived listings that share the same scheme group. This rule will prevent adding duplicate listings if the POST request is issued more than once in error. If you want to bypass this rule and add a new listing, even when there's another one with the same name and scheme, add the query string parameter allow_duplication
with value 1
to the request.
POST /api/rest/open/listings?allow_duplication=1&api_key=...
There are two types of listings: development listing and single-property listing. The type of listing is determined by inspecting the existence of the field properties
, which must be only sent when it is a development listing.
There are also other differences which will be explained in the listing request payload.
When creating listings through the API, the corresponding entries in the inventory are created, although they are updated using the listings payload. For development listings, a new development is created and all the properties of the listing are assigned to the development, which name will match the listing's. For single-property listings, a new independent unit will be also created.
# Listing request payload
Field name | Type | Mandatory | Description |
---|---|---|---|
name | string | ✓ | Listing name to display. |
externalRef | string | External reference provided by the client. | |
schemeGroup | string | ✓ | Scheme group under the properties in the listings are sold or rented. |
visibility | string | ✓ | draft or live |
contactEmail | string | Contact e-mail | |
contactPhone | string | Contact telephone number | |
defaultNotificationEmail | string | Default notification e-mail | |
displayAddress | string | ✓ | The address to display in the listing. The address does not contain the postcode. |
latitude | number | ✓ | The latitude where the listing is. |
longitude | number | ✓ | The longitude where the listing is. |
shortDescription | string | Summary of the listing. | |
longDescription | string | The full description of the listing. | |
localAreaName | string | Name of the local area. | |
localAreaDescription | string | Description of the local area. | |
termsAndConditions | string | Terms and conditions. | |
disclaimer | string | Disclaimer. | |
galleryImages | array | ✓ | Collection of gallery images. Every item has 3 fields: source is the url where the image will be uploaded from. alt is the alternative text for the html image and caption is an optional caption you would like to display in some portals. Only source is mandatory. Images will be automatically cropped and centered to match the aspect ratio 16x9, but all images must have a minimum width of 720 pixels. At least one image must be present. |
videos | array | Array that contains objects with two attributes: url (mandatory) and caption (optional). The url is the url of the video on the video platform like YouTube or Vimeo, and caption is any caption as a description of the video. | |
brochures | array | Array that contains objects with two attributes: url (mandatory) and caption (optional). The url is the url of the brochure as Pdf, and caption is any caption as a description of the brochure. | |
keyFeatures | array | Array of free text key features. |
When the listing is to advertise a development (development listing), it must also contain the following fields:
Field name | Type | Mandatory | Description |
---|---|---|---|
developmentAddress | object | ✓ | Object with the development address details. |
properties | array | ✓ | Array with all the properties in the listing. |
Where developmentAddress
is an object with the following fields:
Field name | Type | Mandatory | Description |
---|---|---|---|
building | string | The building name or number. | |
street | string | The name of the street or road. | |
town | string | The nearest large urban area. | |
postcode | string | ✓ | The postal area code. |
When the listing is to advertise a single property (single-property listing), it must contain the field property with the details of the property being advertised.
# Property request payload
Property fields are the same, regardless the type of listings, although some fields are not used depending on the case, which are explained in the column description.
Field name | Type | Mandatory | Description |
---|---|---|---|
propertyNumber | string | ✓ | Only for multi-property listings. Alphanumeric value to identify the property. It must be unique and it is also used to identify the property in the collection. |
name | string | ✓ | Only for single-property listings. Property name. |
active | boolean | Only for multi-property listings. When it's not active , it is not display on portals. If omitted, it's set to true. | |
propertyType | string | ✓ | Describe the type of property. |
availabilityStatus | string | ✓ | One of the four possible availability status, regardless the property is for sale or to rent. |
fullSpecifications | string | A full description of the property. | |
newBuild | boolean | Only for single-property listings. If true the property is new build, otherwise is resale. For multi-property listings, properties are always New-build. | |
useDevelopmentAddress | boolean | Only for multi-property listings. When true, the address fields need to be included, at least postcode . If omitted it's set to true. | |
building | string | The building name or number for single-property listing or if useDevelopmentAddress is false. | |
street | string | The name of the street or road for single-property listing or if useDevelopmentAddress is false. | |
town | string | The nearest large urban area for single-property listing or if useDevelopmentAddress is false. | |
postcode | string | The postal area code for single-property listing or if useDevelopmentAddress is false, in which case is required. | |
bedrooms | number | ✓ | Total number of bedrooms. |
bathrooms | number | ✓ | Total number of bathrooms. |
receptionRooms | number | ✓ | Total number of reception rooms. |
furnitureStatus | string | ✓ | unfurnished, part-furnished or furnished. |
floorArea | number | Floor area in square meters. | |
numberOfFloors | number | ✓ | Total number of floors the property has. |
floor | string | ✓ | The property entrance floor. Please see our floor labels. |
liftProvided | boolean | Lift provided | |
tenure | string | ✓ | Condition on which a property is held: leasehold or freehold. |
leaseYears | number | When the tenure is leasehold, the number of year the lease lasts. | |
leaseStartDate | string | Date when the lease started, if applicable, useful to calculate the remaining lease in years. | |
features | array | ✓ | KPro Marketing provides some predefined property features. Include all features applicable from the list of feature labels. |
rooms | array | Collection of property rooms. Every item has: name , additionalDetails , units (foot or metre), width , length and floorArea . Name and additional details are free texts, up to 255 chars length, while width, length and floorArea are numbers expressed in the provided units. Only name and units are required. When updating properties, the value in name is used to identify existing rooms, updating matching records in the database. | |
energyEfficiencyRatingCurrent | number | Integer number less or equal than 100, that reflects the Energy rating for the property. When it's a new build property, this value will be the Predicted energy rating, otherwise it will be the Current energy rating | |
energyEfficiencyRatingPotential | number | Only for resale properties. Integer number less or equal than 100, that reflects the Potential energy rating for resale properties. | |
environmentalImpactRatingCurrent | number | Integer number less or equal than 100, that reflects the Environmental impact rating for the property. When it's a new build property, this value will be the Predicted environmental impact rating, otherwise it will be the Current environmental impact rating | |
environmentalImpactRatingPotential | number | Only for resale properties. Integer number less or equal than 100, that reflects the Potential environmental impact rating for resale properties. | |
kid | array | Collection of key important documents. Every item has 2 fields: url is the url to download the pdf file from, and save it in the KPro servers , and caption is an optional caption you would like to display in some portals. | |
keyFeatures | array | Array of free text key features. | |
fullMarketPrice | number | If the availability status is not coming-soon and it's for sale. | The property full market price when it is for sale. |
depositPercentage | number | Percent to compute the lender deposit requirements when the property is for sale. | |
minSharePercentage | number | Minimum share to buy in percentage when the scheme is shared ownership (between 10 and 100). | |
maxSharePercentage | number | Maximum share to buy in percentage when the scheme is shared ownership (less or equal than 100). | |
subsidisedAsYearlyPercent | boolean | For shared ownership properties, true is the subsidised value is expressed as a percent of the part the buyer is not going to purchase, false if the subsidised value is a fixed monthly value. | |
subsidisedRent | number | It will depend on the subsidisedAsYearlyPercent value. If true, it should contain the subsidised rent as a yearly percent, otherwise it is the monthly rent value. | |
monthlyServiceCharge | number | When the property is for sale, the monthly bill that covers the costs of any repairs or maintenance to the structure of your building, including drainage, insurance and management charges. | |
annualGroundRent | number | The annual ground rent, made by a holder of a leasehold property to the freeholder or a superior leaseholder, as required under a lease. | |
reservationFee | number | Fee a buyer may have to pay to reserve a property for a specific period. It is not refundable, but it will usually be deducted from the purchase price if you then go on to complete the purchase of the property. | |
administrationFee | number | Fee charged by an agency to cover expenses related to record-keeping and/or other administrative costs. | |
monthlyRent | number | If the availability status is not coming-soon and it's to rent | When the property is to rent, the monthly rent payment amount. |
rentalDeposit | number | Security deposit to rent the property. | |
minTenancyMonths | number | Minimum tenancy term in months when the property if to rent. | |
maxTenancyMonths | number | Maximum tenancy term in months when the property if to rent. | |
floorplanImages | array | Collection of floorplan images. Every item has 3 fields: source is the url where the image will be uploaded from. alt is the alternative text for the html image and caption is an optional caption you would like to display in some portals. Only source is mandatory. |
Non mandatory fields can be omitted when creating new listings and properties, in such cases null value will be used. For shared ownership properties, price fields related to shared ownership are mandatory.
When updating existing listings, fields that are not going to be updated can be omitted, no matter if they are mandatory or not.
To assign an empty value to a field, e.g., remove the full market price to a coming-soon property, assign the value null to that field.
For multi-property listings, you should always send the collection of all the properties for the listing, although for existing properties, only `propertyNumber` is required. Properties omitted will be removed from the listing.
# Examples
In both cases the fields for the listing don't change, except that for listings based on developments (multi-property) the field developmentAddress
must be included, and the use of the field property
or properties
depending on the type of listing, single-property or multi-property respectively.
Fields for properties will vary depending on the type of listing and on the schemes.
Listing based on an independent-unit
Depending on the schemeGroup
some price fields are not needed for the property, although all fields are included in the example for illustration purposes.
For listing based on independent unit (single-property), name
must be used instead of propertyNumber
, newBuild
should be used, although once it's set to false, it can not be reverted. Fields for address must be included.
{
"externalRef": "86843",
"name": "Listing based on an independent unit",
"schemeGroup": "shared-ownership",
"visibility": "live",
"contactEmail": "info@housing-provider.co.uk",
"contactPhone": "+44 7345-762-392",
"defaultNotificationEmail": "info@housing-provider.co.uk",
"displayAddress": "Street, Town",
"latitude": 51.2167342,
"longitude": 0.2967323,
"shortDescription": "We are pleased to present to the market this two bedroom...",
"longDescription": "<p>We are pleased to present to the market this two bedroom...</p>",
"localAreaName": "Area name",
"localAreaDescription": "<p>There is a wealth of retail outlets within a few minutes' walk ...</p>",
"termsAndConditions": "Terms and conditions if applicable",
"disclaimer": "Disclaimer if applicable",
"galleryImages": [
{
"source": "https://domain/images/01.jpg",
"caption": "Living room",
"alt": "Living-room"
},
{
"source": "https://domain/images/02.jpg"
},
{
"source": "https://domain/images/03.jpg"
}
],
"videos": [
{
"url": "https://youtu.be/aBcDeFgHi",
"caption": "video caption"
}
],
"brochures": [
{
"url": "https://domain/assets/brochure.pdf"
}
],
"keyFeatures": ["Great location", "Excellent Transport Links", "Lots to do nearby"],
"property": {
"name": "Property name",
"propertyType": "flat",
"availabilityStatus": "available",
"newBuild": false,
"handoverDate": "2021-04-24",
"building": "",
"street": "Brick Street",
"town": "London",
"postcode": "E1 6QL",
"bedrooms": 2,
"bathrooms": 1,
"receptionRooms": 1,
"furnitureStatus": "furnished",
"floorArea": 60,
"numberOfFloors": 1,
"floor": "ground",
"liftProvided": false,
"tenure": "leasehold",
"leaseYears": 99,
"leaseStartDate": "2021-01-25",
"energyEfficiencyRatingCurrent": 87,
"energyEfficiencyRatingPotential": 93,
"environmentalImpactRatingCurrent": 89,
"environmentalImpactRatingPotential": 91,
"kid": [
{
"url": "https://yourserver.com/pdfs/4534/sample.pdf",
"caption": "Important document"
}
],
"keyFeatures": [],
"fullMarketPrice": 270000,
"depositPercentage": 5,
"minSharePercentage": 25,
"maxSharePercentage": 75,
"subsidisedAsYearlyPercent": false,
"subsidisedRent": 312,
"monthlyServiceCharge": 177.33,
"annualGroundRent": null,
"reservationFee": null,
"administrationFee": null,
"rentalDeposit": null,
"monthlyRent": null,
"weeklyRent": null,
"minTenancyMonths": null,
"maxTenancyMonths": null,
"fullSpecifications": "<p>Open plan layout...<p>",
"features": ["off-street-parking", "communal-garden", "wheelchair-accessible"],
"floorplanImages": [
{
"source": "https://domain/floorplans/01.jpg"
}
],
"rooms": [
{
"name": "Kitchen",
"additionalDetails": "Open plan",
"units": "foot",
"width": 18,
"length": 24,
"floorArea": 430
},
{
"name": "Bedroom 1",
"additionalDetails": "Ensuite bathroom",
"units": "foot",
"width": 16,
"length": 15,
"floorArea": 238
}
],
}
}
Listing based on a development
Depending on the schemeGroup
some price fields could be omitted for the property.
For listing based on developments (multi-property), propertyNumber
must be always included, and it's the field used to identify if a property must be added, updated or deleted from the listing.
Fields for address should be only included when useDevelopmentAddress
is false, if this field is omitted, it's assumed that it's true.
{
"externalRef": "86843",
"name": "Listing based on a development",
"schemeGroup": "shared-ownership",
"visibility": "live",
"contactEmail": "info@housing-provider.co.uk",
"contactPhone": "+44 7345-762-392",
"defaultNotificationEmail": "info@housing-provider.co.uk",
"displayAddress": "Street, Town",
"latitude": 51.2167342,
"longitude": 0.2967323,
"shortDescription": "We are pleased to present to the market this two bedroom...",
"longDescription": "<p>We are pleased to present to the market this two bedroom...</p>",
"localAreaName": "Area name",
"localAreaDescription": "<p>There is a wealth of retail outlets within a few minutes' walk ...</p>",
"termsAndConditions": "Terms and conditions if applicable",
"disclaimer": "Disclaimer if applicable",
"galleryImages": [
{
"source": "https://domain/images/01.jpg",
"caption": "Living room",
"alt": "Living-room"
},
{
"source": "https://domain/images/02.jpg"
},
{
"source": "https://domain/images/03.jpg"
}
],
"videos": [
{
"url": "https://youtu.be/aBcDeFgHi",
"caption": "video caption"
}
],
"brochures": [
{
"url": "https://domain/assets/brochure.pdf"
}
],
"keyFeatures": ["Great location", "Excellent Transport Links", "Lots to do nearby"],
"developmentAddress": {
"building": "building-name",
"street": "Church Street",
"town": "London",
"postcode": "N2 7JL"
},
"properties": [
{
"propertyNumber": "A1",
"active": true,
"propertyType": "flat",
"availabilityStatus": "available",
"useDevelopmentAddress": true,
"handoverDate": "2021-05-23",
"bedrooms": 2,
"bathrooms": 1,
"receptionRooms": 1,
"furnitureStatus": "furnished",
"floorArea": null,
"numberOfFloors": 1,
"floor": "ground",
"tenure": "leasehold",
"leaseYears": 125,
"energyEfficiencyRatingCurrent": 87,
"energyEfficiencyRatingPotential": 93,
"kid": [
{
"url": "https://yourserver.com/pdfs/4534/sample.pdf",
"caption": "Important document"
}
],
"keyFeatures": [],
"fullMarketPrice": 270000,
"depositPercentage": 5,
"minSharePercentage": 25,
"maxSharePercentage": 75,
"subsidisedAsYearlyPercent": false,
"subsidisedRent": 312,
"monthlyServiceCharge": 177.33,
"annualGroundRent": null,
"reservationFee": null,
"administrationFee": null,
"rentalDeposit": null,
"monthlyRent": null,
"weeklyRent": null,
"minTenancyMonths": null,
"maxTenancyMonths": null,
"fullSpecifications": "<p>Open plan layout...<p>",
"features": ["off-street-parking", "communal-garden", "wheelchair-accessible"],
"floorplanImages": [
{
"source": "https://domain/floorplans/01.jpg"
}
],
"rooms": [
{
"name": "Kitchen",
"additionalDetails": "Open plan",
"units": "foot",
"width": 18,
"length": 24,
"floorArea": 430
},
{
"name": "Bedroom 1",
"additionalDetails": "Ensuite bathroom",
"units": "foot",
"width": 16,
"length": 15,
"floorArea": 238
}
],
},
{
"propertyNumber": "B1",
"active": true,
"propertyType": "flat",
"availabilityStatus": "available",
"useDevelopmentAddress": false,
"building": "building-name",
"street": "East Street",
"town": "London",
"postcode": "N2 7JK",
"handoverDate": null,
"bedrooms": 2,
"bathrooms": 1,
"receptionRooms": 1,
"furnitureStatus": "furnished",
"floorArea": null,
"numberOfFloors": 1,
"floor": "ground",
"liftProvided": true,
"tenure": "leasehold",
"leaseYears": null,
"energyEfficiencyRatingCurrent": 87,
"energyEfficiencyRatingPotential": 93,
"fullMarketPrice": 280000,
"depositPercentage": 5,
"minSharePercentage": 25,
"maxSharePercentage": 75,
"subsidisedAsYearlyPercent": false,
"subsidisedRent": 312,
"monthlyServiceCharge": 177.33,
"annualGroundRent": null,
"reservationFee": null,
"administrationFee": null,
"rentalDeposit": null,
"monthlyRent": null,
"weeklyRent": null,
"minTenancyMonths": null,
"maxTenancyMonths": null,
"fullSpecifications": "<p>Open plan layout...<p>",
"features": ["off-street-parking", "communal-garden", "wheelchair-accessible"],
"floorplanImages": [
{
"source": "https://domain/floorplans/02.jpg"
}
],
"rooms": []
}
]
}
# Label conventions
Possible values for some fields need to match available values in KPro Marketing. Find below KPro Marketing label convention for those fields.
# Scheme groups
- For sale
Label | Description |
---|---|
shared-ownership | Scheme that allows buyers to own a share and then rent the part they do not own at a reduced rate. Display value: Shared ownership. |
help-to-buy | Scheme that offers an equity loan where the government lends money to buy a newly-built home. Display value: Help to Buy only. |
first-dibs | Scheme to ensure that new, lower-cost homes in the capital are marketed and sold exclusively to Londoners and UK-based buyers first. Display value: First Dibs only. |
help-to-buy-and-first-dibs | Combine two previous schemes. Display value: Help to Buy & First Dibs. |
discounted-market-sale | Low-cost home ownership product where a housing provider offers a discount on the purchase of a new build property. Display value: Discounted market sale. |
private-sale | The option to use when you want to sale a property in the private market. Display value: Private sale. |
- To rent
Label | Description |
---|---|
london-living-rent | Scheme for middle-income households who now rent and want to build up savings to buy a home. Display value: London living rent. |
discount-market-rent | Offers home seekers the opportunity to rent a home at a rent that is 20% less than the market rate. It is also sometimes known as Intermediate Rent. Display value: Discounted market rent. |
rent-to-buy | Scheme that allows you to rent a property for less than the market price for a set amount of time, in which you are expected to use the money saved from the lower rent for a deposit to buy the property after the tenancy ends. Display value: Rent to Buy (Outside London). |
private-rent | The option to use when you want to rent a property in the private market. Display value: Private rent. |
# Availability status
The labels are the same regardless if the property is for sale or to rent, but the meaning depends on the purpose.
- For sale
Label | Description |
---|---|
coming-soon | The property is listed for sale soon. Display value: Coming soon. |
available | The property is available for sale. Display value: For sale. |
under-offer | The property is currently under offer. Display value: Sale Under offer. |
closed | The property was sold. Display value: Sold. |
- To rent
Label | Description |
---|---|
coming-soon | The property is listed to rent soon. Display value: Coming soon. |
available | The property is available to rent. Display value: To rent. |
under-offer | The property is currently under offer. Display value: Rent under offer. |
closed | The property is currently rented. Display value: Rented. |
# Property types
Property types (or building types) fields to describe the kind of property for sale or to rent.
Label | Description |
---|---|
flat | Flats are mostly single-level residential properties comprising of a set or rooms all located on one floor. Display value: Flat. |
semi-detached-house | Property attached to just one neighbouring house as part of a block of just two houses. Display value: Semi-detached house. |
detached-house | A stand-alone residential structure that does not share outside walls with another house or building. Display value: Detached house. |
terraced-house | One of a row of similar houses joined together by their side walls. Display value: Terraced house. |
end-of-terrace-house | A house attached to just one neighbour that in its turn is attached to two neighbours. Display value: End of terrace house. |
bungalow | Single-storey detached house or has a second storey built into a sloping roof. Display value: Bungalow. |
maisonette | A set of rooms for living in typically on two storeys as part of a larger building with a separate entrance from rest of the building. Display value: Maisonette. |
studio | A single room with cooking facilities which has its own bathroom attached. Display value: Studio. |
house | The default value to use when the house is not in any of the previous categories. Display value: House. |
# Property features
Features are grouped in different categories, although these categories are just for organizational purposes. When defining features, just add all applicable, and separate them by comma.
- Parking
Label | Description |
---|---|
off-street-parking | Whether the property has Off street parking facility available. |
on-street-parking | Whether On street/resident parking facility is available. |
underground-parking | Whether the property has Underground parking facility available. |
driveway | Whether the property has Driveway parking facility available. |
single-garage | Whether Single garage parking facility is available. |
double-garage | Whether Double garage parking facility is available. |
- Outside space: What outside areas are available.
Label | Description |
---|---|
back-garden | The property has access to a back garden area. |
communal-garden | The property has access to a communal garden. |
enclosed-garden | Whether enclosed garden outside area is available. |
front-garden | Whether the front garden outside area is available. |
private-garden | Whether the property has a private garden. |
rear-garden | Whether the property has a rear garden. |
terrace | Whether the property has a terrace. |
patio | Whether the property has a patio. |
- Others
Label | Description |
---|---|
wheelchair-accessible | Whether the property is wheelchair accessible. |
pets-allowed | Whether it is allowed to have pets. |
central-heating | Whether the property has central heating. |
double-glazing | Whether the property has double glazed windows. |
lift-access | Whether the property has lift access. |
# Furniture status labels
- furnished
- part-furnished
- unfurnished
# Floor labels
Floor in which the entrance of the property is located. The layout of floors within a multi-storey building is defined as follows:
Label | Description |
---|---|
ground | The entrance floor of the property is on the ground floor. |
1 | The entrance floor of the property is on the 1st floor. |
2 | The entrance floor of the property is on the 2nd floor. |
3 | The entrance floor of the property is on the 3rd floor. |
4 | The entrance floor of the property is on the 4th floor. |
5 | The entrance floor of the property is on the 5th floor. |
6 | The entrance floor of the property is on the 6th floor. |
7 | The entrance floor of the property is on the 7th floor. |
8 | The entrance floor of the property is on the 8th floor. |
9 | The entrance floor of the property is on the 9th floor. |
10+ | The entrance floor of the property is higher than the 9th floor. |
lower | The entrance floor of the property is on the lower ground. |
basement | The entrance floor of the property is on the basement. |