Properties API v1.0

Create, update and manage branch-level property records programmatically.

Introduction

With our Properties API you can create, update and manage branch-level property records programmatically from within your own software, CRM or property management system, then automatically push these property records for syndication across multiple real estate portals including Rightmove, Zoopla, OnTheMarket and Sturents. With flexible portal-specific options across sales, lettings and commercial, you can easily manage the advertising of your own or customer portfolio without leaving your own eco-system. Our Properties API includes a wide range of options to describe records across, pricing, features, rooms and media with near real-time publishing to portals.

API Authentication

To access the API you'll first need to request an API Key, API username and API password related to either your main advertising account or an individual branch connected to your main account.

Note Customers on a multi-branch management account can manage properties across all of their connected branches using a single set of API credentials.

To get your API Key, username and password, please contact account support.

Authentication headers

Your API requests must include the following headers:

eaf-client-key the unique API key for the account making the request eaf-nonce a unique string for every request. This will also be included in your authorization hash and used to prevent replay attacks. Authorization contains your authorization hash. See below for how to create and finalise your authorization hash. Content-type determines how you'll be encoding your data.

Your content-type should be specified as (JSON) application/json.

Authorization hash

The authorization hash is a concatenated string of <username>:<password>:<nonce>:<api_key> which must then be hashed using SHA-256. The resulting string is then encoded using Base64.

Generating a nonce

Although we have no strict requirement for how you create your unique nonce, its's highly recommended to use V4 UUID.

For example: 66e6955a-e814-4ee0-b5e9-20c3bbebd563

API end-points

Properties API calls are made using either POST, GET or PUT requests over a HTTPS connection to the following URL:

API end-point: https://eaf.cloud/agents/properties/v1/

Responses will always be in JSON format and include various headers you can use to troubleshoot issues.

200 OK The request was successfull 400 Bad Request The request was invalid or the payload malformed. 401 Unauthorised You don't have permission to access the resource. 429 Too Many Requests Rate limiting has kicked in, preventing the request being processed.

When contacting us with an API request issue, please be sure to provide the eaf-request-id provided in the response header.

/create

To submit a new property, POST /create must be called.

To see all available options, you can download the V1 Schema sendPropertyRequestSchema

You can download a sample payload sendPropertyRequestSample

property property.reference property.branch_id property.created property.updated property.transaction property.status property.type property.category property.pricing property.pricing.price property.pricing.rent_frequency property.pricing.contract_type property.pricing.deposit property.pricing.contract_length property.pricing.currency property.pricing.portal_pricing property.location property.location.house_name_number property.location.address_1 property.location.town property.location.city property.location.postcode property.location.latitude property.location.longitude property.details property.details.summary property.details.description property.details.bedrooms property.details.bathrooms property.details.receptions property.details.furnished property.details.features property.details.condition property.media property.media.image property.media.image[].url property.media.image[].caption property.media.floorplan property.media.epc property.rooms property.rooms[].room_name property.rooms[].room_description property.rooms[].room_length property.rooms[].room_width property.vtours property.output_rightmove property.output_zoopla property.output_onthemarket property.output_sturents property.output_other

[object] [string] [string] [string] [string] [enum] [enum] [enum] [enum] [object] [number] [enum] [enum] [number] [integer] [string] [array] [object] [string] [string] [string] [string] [string] [number] [number] [object] [string] [string] [integer] [integer] [integer] [enum] [array] [enum] [object] [array] [string] [string] [array] [array] [array] [string] [string] [number] [number] [array] [bool] [bool] [bool] [bool] [array]

The property record object. Unique property reference. The branch ID where this property is sent. Original creation date/time (YYYY-MM-DD HH:MM:SS). Last modification date/time (YYYY-MM-DD HH:MM:SS). Sales or lettings. Available, under offer etc. Detached, flat, semi-detached etc. Residential or commercial. Pricing details for the property. Sales price or rental amount. Rental frequency (per month, per week etc.). Lettings only (long_term, short_term, rolling). Deposit amount for lettings. Contract length in months for lettings. Currency code (ISO 4217, default: GBP). Portal-specific pricing overrides. Location and address information. House number or name. Primary street address line. Town or village name. City name. UK postcode (validated format). Latitude coordinate (-90 to 90). Longitude coordinate (-180 to 180). Property details and description. Short summary of the property (0-3000 chars). Detailed property description (0-32000 chars). Number of bedrooms (0-20). Number of bathrooms (0-20). Number of reception rooms (0-10). Furnished state: furnished, part furnished etc. Array of key property features. Overall condition: excellent, good etc. Media files associated with the property. Property images (1-100 required). Image URL (must be http/https). Image caption or description. Floorplan images (1-20). Energy Performance Certificate files (1-5). Room-by-room details (1-20 items). Room name/type: bedroom, kitchen etc. Room description. Room length (in metres or feet). Room width (in metres or feet). Virtual tour URLs (supports Matterport, YouTube etc.). Publish to Rightmove explicitly (true by default). Publish to Zoopla explicitly (true by default). Publish to OnTheMarket explicitly (true by default). Publish to Sturents explicitly (true by default). Controls publishing to all other sites.

Required Required Required Required Required Required Required Optional Optional Required Required Required * Required * Optional Optional Optional Optional Required Required Required Required Required Required Optional Optional Required Required Required Optional Optional Optional Optional Optional Required Required Optional Optional Optional Optional Optional Optional Optional Optional Optional Optional Optional Optional Optional Optional Optional Optional

* Marked fields are required for lettings transactions only (when property.transaction = 'lettings'). For sales transactions these fields are optional.

The output_portal keys

With the output keys you can control on a granular level which portals a property should be published or unpublished from. By default all portals provisioned with a branch will be set as TRUE, so you can use these keys to prevent publishing or remove listings from being advertised when required.

Response

Responses to the API are served as a JSON string and if successfull will include a unique record_id you can use in future calls.

Note that it may take 2 - 3 minutes for the property record to be available in the GET /list request.

{ "status": "ok", "timestamp": "2026-07-07 18:23:01", "type": "CREATE", "response": { "property": { "branch_id": "12345", "record_id": "12345678910", "reference": "LET-2026-00142" } } }

/update

To update an existing property, PUT /update must be called.

The payload you send is identical to POST /create. Make sure you have provided the existing branch_id and reference made in the original call.

You can download the Schema sendPropertyRequestSchema

You can download a sample payload sendPropertyRequestSample

Response

Responses to the API are served as a JSON string and if successfull will include the property reference and branch ID you used in the request.

{ "status": "ok", "timestamp": "2026-07-07 18:23:01", "type": "UPDATE", "response": { "property": { "branch_id": "12345", "record_id": "12345678910", "reference": "LET-2026-00142" } } }

/list

To get a summarised list of properties under a branch, GET /list must be called.

Below are the required and optional URL parameters you use to complete your request.

branch=[0-9]+ /[0-9]+

[number] [number]

Query parameter - the branch ID to fetch the list from The requested page number [0-9]+ e.g /list/5

Required Optional

Example request fetching page 9 might be /agents/properties/v1/list/9?branch=12345

Response

Responses to the API are served as a JSON string and if successfull will include an array of objects for each property found within a paginated list, 10 per page.

Note: new properties submitted using POST /create may take 2 - 3 min to appear in this list.

{ "status": "ok", "timestamp": "2026-07-07 18:23:01", "response": { "properties": [ { "record_id": "12345678910", "reference": "LET-2026-00142", "transaction": "lettings", "status": "available", "address": "14, Maple Street, London, Kensington, London, W8 4PT", "created": "2026-07-02 15:50:02", "updated": "2026-07-02 15:48:59" } ], "count": 1, "pages": 1, "current": 1 } }

/property/[RECORD_ID]

To fetch the details of a property record, GET /property/[RECORD_ID] must be called.

With this end-point you must use either the record_id or the property reference as a query parameter to request the details.

/[0-9]+ reference=[a-z0-9]+

[number] [string]

The record_id e.g /property/12345678910 Query parameter - the reference number

Required Required

Example request using the reference might be /agents/properties/v1/property/?reference=LET-2026-00142

Example request using the record_id might be /agents/properties/v1/property/123456789210

Response

Responses to the API are served as a JSON string and if successfull will include the property details.

{ "status": "ok", "timestamp": "2026-07-03 13:50:56", "response_id": "48C35A01-E324-7DF2-8583-F0C7AD6B5DDD", "response": { "property": { "branch_id": "12345", "record_id": 12345678910, "reference": "LET-2026-00142", "api_reference": "RTF12345_LET-2026-00142", "transaction": "lettings", "type": "Detached", "type_other": null, "status": "available", "tenure": null, "bedrooms": 2, "bathrooms": 2, "receptions": 1, "floors": 2, "price": 1750, "price_max": 0, "price_per_unit": null, "price_qualifier": null, "rent_frequency": "per month", "currency": "GBP", "area_size": "", "area_max_size": "", "area_size_type": null, "display_title": "2 Bed Detached, Maple Street, Kensington, London, W8", "location_name_number": 14, "location_town": "London", "location_address_1": "Maple Street", "location_address_2": "Kensington", "location_city": "London", "location_postcode_1": "W8", "location_postcode_2": "4PT", "location_country": "GB", "location_latitude": 51.4994, "location_longitude": -0.193, "details": { "lease_years_remaining": null, "auction_property": null, "summary": "Well-presented detached home in Kensington.", "description": "Two-bed detached home with modern kitchen, bright living space and strong transport links.", "furnished_type": null, "url": "https:\/\/www.youragency.co.uk\/...\/sal-2026-00142", "key_feature_1": "Three double bedrooms", "key_feature_2": "Modern fitted kitchen", "key_feature_3": "Hardwood floors", "key_feature_4": "High ceilings", "key_feature_5": "Walk-in shower", "key_feature_6": "Bike storage", "key_feature_7": "Near Kensington High St", "key_feature_8": "Good transport links", "key_feature_9": "Off-street parking", "shared_ownership": 2, "shared_ownership_percent": "", "shared_ownership_rent_amount": "", "shared_ownership_rent_frequency": "", "annual_ground_rent_amount": "", "ground_rent_percent_increase": "", "ground_rent_review_period_years": "", "annual_service_charge": "", "council_tax_band": "B", "council_tax_exempt": null, "annual_domestic_rates": "", "council_tax_exempt_reason": "", "property_business_sale": null }, "building_features": { "parking_options": [ "double_garage", "on_street" ], "electricity_supply": [ "mains_supply" ], "water_supply": [ "mains" ], "heating_supply": [ "gas_central", "double_glazing" ], "broadband_supply": [ "fttp" ], "sewerage_supply": [ "mains" ], "accessibility_options": [ "ramped_access", "wet_room" ], "restrictions": { "flood_risks": [ "none" ], "has_flood_defences": false, "listed_building": false, "property_restrictions": false, "permitted_development": false, "holiday_home": false, "subletting": false, "conservation_area": false, "restrictive_covenant": false } }, "photos": [ { "image": "https:\/\/s3...\/photo-0.png", "caption": "Front exterior", "modified": "2026-07-03 04:06:06" }, { "image": "https:\/\/s3...\/photo-1.jpg", "caption": "Reception room", "modified": "2026-07-03 04:06:06" }, { "image": "https:\/\/s3...\/photo-2.jpg", "caption": "Master bedroom", "modified": "2026-07-03 04:06:06" }, { "image": "https:\/\/s3...\/photo-3.jpg", "caption": "Second bedroom", "modified": "2026-07-03 04:06:06" }, { "image": "https:\/\/s3...\/photo-4.jpg", "caption": "Kitchen", "modified": "2026-07-03 04:06:06" }, { "image": "https:\/\/s3...\/photo-5.jpg", "caption": "Bathroom", "modified": "2026-07-03 04:06:06" }, { "image": "https:\/\/s3...\/photo-6.jpg", "caption": "Balcony", "modified": "2026-07-03 04:06:06" } ], "attachments": { "epc": [ { "file": "https:\/\/s3...\/epc.png", "modified": "2026-07-03 04:06:10" } ], "floor": [ { "file": "https:\/\/s3...\/floor.png", "modified": "2026-07-03 04:06:10" } ], "pdf": [], "pack": [] }, "virtual_tour": "https:\/\/my.matterport.com\/...\/abc123demo", "publish_status": "published", "available_date": "2026-07-15", "outside_space": "balcony", "new_build": true, "deposit_amount": 0, "contract_length": "", "contract_type": "", "content_source": "feed", "overseas": false, "waterfront": "no", "tennis": "no", "pool": "no", "gym": "no", "students": "excluded", "house_share": false, "housing_benefit": null, "pets_allowed": null, "rooms": [ { "room_name": "Master Bedroom", "room_description": "Double room with fitted wardrobes.", "room_length": 4.2, "room_width": 3.8, "room_dimension_unit": "metre" }, { "room_name": "Second Bedroom", "room_description": "Double room with built-in storage.", "room_length": 3.5, "room_width": 3.2, "room_dimension_unit": "metre" }, { "room_name": "Reception Room", "room_description": "Bright reception room with period detail.", "room_dimensions": "5.1m x 4.0m" }, { "room_name": "Kitchen", "room_description": "Modern fitted kitchen with integrated appliances.", "room_length": 3, "room_width": 2.5, "room_dimension_unit": "metre" }, { "room_name": "Bathroom", "room_description": "Modern bathroom with bath and shower.", "room_length": 2.8, "room_width": 2, "room_dimension_unit": "metre" } ], "commercial_classes": null, "import_date": "2026-07-03 04:06:06", "updated": "2026-07-03 04:01:04", "created": "2026-07-03 04:01:04", "out_zpl": 1, "out_rmv": 1, "out_otm": 1, "api-bmn": 1, "api-eaf": 1, "api-ontmtest": 1, "api-respe": 1, "api-stu": 1 } } }

/remove

To flag an existing property as removed and to therefore have it unpublish from all portal accounts PUT /remove must be called.

This end-point accepts query parameters which must be either the record or reference and branch with the relevant value.

An example request using the property record_id might be /agents/properties/v1/remove?record=12345678910

An example request using the property reference and branch might be /agents/properties/v1/remove?branch=12345&reference=LET-2026-00142

Note: properties that are removed are also removed from the EAF branch and will not longer be visible in the UI or contribute to the account property count limits. However the listing still exists and so to reinstate the removed property, simply make an PUT /UPDATE request with the current property data.

Response

Responses to the API are served as a JSON string and if successfull will include the property reference and branch ID of the record that was flagged for removal.

{ "status": "ok", "timestamp": "2026-07-07 18:23:01", "type": "REMOVE", "response": { "property": { "branch_id": "12345", "record_id": "12345678910", "reference": "LET-2026-00142" } } }

Help and support

Please email support@estateagentfeeds.com if you require help with our Property API.

Ok message

Error message