Agency feed API
If your CRM already pushes to Rightmove or Zoopla, it can push to rielty: same RTDF method names, same shapes. An existing portal adapter needs only a new base URL and an API key.
Rightmove RTDF compatible: the /v1/property/…
paths work here
too, postcode_1/postcode_2
and the status
int enum are
honoured, and network_id/branch_id
are simply ignored — your API key is your identity. The one deliberate
difference: a bearer key instead of client certificates.
Getting started
- Generate an API key in your agency dashboard
- Point your CRM's portal feed at the base URL
-
Push a listing, confirm with
getbranchpropertylist
Keys are per branch. No account yet? Sign up at for-agents — or email info@rielty.co.uk and we'll set you up.
Authentication
Every request carries the key as a bearer token. A missing or wrong
key returns 401
with error_code: "AUTH".
Authorization: Bearer rk_your_api_key
POST /sendpropertydetails
Creates or updates a listing — upserts on your branch + agent_ref, so re-sending the
same reference updates in place (and reactivates a previously
removed listing).
Request
{
"branch": {
"channel": 1
},
"property": {
"address": {
"address_2": "Elm Grove",
"house_name_number": "12",
"latitude": 51.146,
"longitude": 0.873,
"postcode": "TN23 4AB",
"town": "Ashford"
},
"agent_ref": "REF-1234",
"details": {
"bathrooms": 1,
"bedrooms": 3,
"description": "A well-presented three bedroom detached home with a private rear garden.",
"features": [
"garden",
"parking"
]
},
"market_status": "active",
"media": [
{
"media_type": 1,
"media_url": "https://www.your-agency.co.uk/photos/ref-1234-1.jpg",
"sort_order": 1
}
],
"price_information": {
"price": 385000
},
"property_type": 4,
"url": "https://www.your-agency.co.uk/property/ref-1234"
}
}
Response
{
"errors": [],
"property": {
"agent_ref": "REF-1234"
},
"request_id": "9f1c2a7b3d4e5f60",
"success": true
}
curl
curl -X POST https://rielty.co.uk/api/rtdf/v1/sendpropertydetails \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d @payload.json
Required fields
| Field | Rule |
|---|---|
property.agent_ref |
Non-empty string; your stable reference for the listing |
property.address.postcode |
Valid UK postcode — either one field, or Rightmove's split
postcode_1
+ postcode_2
|
property.price_information.price |
Positive integer, pounds (not pence) |
branch.channel |
1
= sale, 2
= rent
|
property_type codes
Standard RTDF integers, bucketed as follows. Unknown or absent codes are stored as unset — never rejected.
| Codes | Stored as |
|---|---|
| 1, 2, 5, 22 | terraced (incl. end of terrace, mews, town house) |
| 3 | semi-detached |
| 4, 21 | detached (incl. link detached) |
| 7, 8, 9, 28, 29 | flat (incl. studio, apartment, penthouse) |
| 10, 11 | maisonette |
| 12–15 | bungalow |
| others | stored as unset (cottage, chalet, villa, land… — ambiguous build forms) |
Media
Only media_type: 1
(photographs) with http(s) URLs are stored, ordered by sort_order, capped at 30 per
property (extras dropped, not rejected). Floorplans and brochures
are ignored for now.
Coordinates — send them if you have them.
With address.latitude/longitude
the listing gets a map pin and matches every location-based search —
commute time, school proximity, flood risk, "quiet street". If
absent we don't invent a position from the postcode: the listing
stays findable by price, beds and type, but carries no pin. A wrong
pin sends a buyer to the wrong house, so we only show yours.
Other fields
-
property.url— the listing's page on your own site; this is where clicks from rielty land. -
property.status— Rightmove's int enum is honoured:1available,2–5SSTC/under offer/reserved,6let agreed.published: falseunpublishes. Anything not available keeps the record but removes it from search. (Our string formmarket_statusalso works and wins when present.) -
details.featuresand the description are keyword-matched against our feature filters (garden, parking, en suite, garage…). - Description over 20,000 characters is truncated, not rejected.
POST /removeproperty
Delists a property (status → inactive). Re-sending the same
agent_ref
via sendpropertydetails
reactivates it.
{
"property": {
"agent_ref": "REF-1234"
}
}
Returns the standard success envelope, or
404 / NOT_FOUND
for an
unknown agent_ref.
GET /getbranchpropertylist
Reconciliation: every agent_ref
and status we currently hold for your branch. No parameters, no
pagination — it is your branch's stock, not a search.
{
"errors": [],
"properties": [
{
"agent_ref": "REF-1234",
"status": "active"
},
{
"agent_ref": "REF-1198",
"status": "inactive"
}
],
"request_id": "0b8d4e2f6a1c3579",
"success": true
}
Errors
Every response — success or failure — is the same envelope with a
request_id
to quote in
support emails:
{
"errors": [
{
"error_code": "VALIDATION",
"error_description": "postcode is invalid",
"property_field": "property.address.postcode"
}
],
"request_id": "c4a1f8e02b6d7391",
"success": false
}
| HTTP status | error_code | Meaning |
|---|---|---|
| 401 | AUTH | Missing or invalid API key |
| 422 | VALIDATION |
A required field is invalid or missing —
property_field
names which
|
| 404 | NOT_FOUND | removeproperty referenced an unknown agent_ref |
| 429 | RATE_LIMIT | Over 100 requests/minute for this key — back off and retry |
Limits
| Request body | 1MB max |
| Media items per property | 30 (extras dropped, not rejected) |
| Description | 20,000 characters (truncated, not rejected) |
| Rate limit | 100 requests/minute per key |
No real-time push? BLM feeds
We also collect Rightmove V3 BLM feeds: give us (or set in your agency dashboard) an http(s) URL where your CRM publishes the file and we fetch it hourly. Windows-1252 exports are handled; unknown columns are ignored.
Questions, or a CRM that speaks a different format? Email info@rielty.co.uk — if your software can export listings at all, we can almost certainly ingest it.