Skip to main content
Five endpoints return property records and take an attributes parameter:
  • GET /v1/property/{locationIds}
  • GET /v1/property/propertyId/{propertyIds}
  • GET /v1/property/sources/{sourceIds}
  • POST /v1/property/properties/by-slugs
  • POST /v1/property/query
List the dotted paths you want. Only those are returned, plus locationId, which is always included. The GET endpoints take a comma-separated string with no spaces, POST /v1/property/properties/by-slugs takes an array, and POST /v1/property/query takes either. Without attributes you get locationId, propertyId, slug and address. A group path such as epc returns everything under it.

The attribute catalogue

GET /v1/property/attributes lists every attribute, with the names that filters and sorts accept. It is free to call.
tiers[].credits and pencePerCredit are null when the price could not be read.

What a record costs

Property records are charged per record returned, by tier:
  • Every record is charged tier_core.
  • Each attribute you request by its catalogue path adds that attribute’s tier, for every record in the response, whether or not the record has a value for it.
  • Any tier above tier_core also adds tier_detail.
So ["address", "roomDetails.beds", "pricing.currentSale"] costs tier_core, tier_detail and tier_market per record. The catalogue gives list prices. The pricing page in the dashboard shows the rates your account pays, and the query builder adds up the cost per record as you pick attributes.

Filtering and sorting

POST /v1/property/query filters with conditions, each a field, a comparator and a value:
query is required; send [] to apply no filters. A condition’s field takes any name in filterFields: an attribute’s own path, where its filterable is true, or an alias such as beds for roomDetails.beds. Any other name is rejected with a 400. The comparators a field accepts depend on its kind: in and nin take an array. The other names in comparators, such as contains, are rejected with a 400. sort takes up to three entries, each a field from sortFields and an order of asc or desc.

Permissions

Some attributes need an extended permission, named in requiresPermission. grantedPermissions lists the ones your account holds. An attribute you lack the permission for is left out of responses, without an error. Filtering on one is rejected with a 403.