Improved
28 October 2026 · Open API 1.10.0
17 days ago by Martin Gunther
Main feature - Ability to power your websites from the V2 API, and some smaller changes throughout the API for consistency
Website enquiries and valuation requests
Websites can now send leads into Loop through V2. This replaces V1's viewing, call-back, information and seller enquiry endpoints.
POST /v2/sales/enquiriesandPOST /v2/lettings/enquiries, withtypeset toviewing,callBackorinformation.POST /v2/sales/valuation-requests, for a seller asking for a valuation, andGET /v2/sales/valuation-requests/{id}.- Scope: all three need the new
write:enquiriesscope. Existing keys don't have it; ask us to add it to your key. - Fields: they use the same names as the matching
GETreturns. Send the listing id (salesLifecycleListingIdorlettingsLifecycleListingId), as V1 did. - Preferred times:
preferredTimestakes up to three ISO 8601 times. They're written into the enquiry's comment in UK time, alongside the request type. - Property details: a valuation request can also include
propertyTypeandbedrooms. These are added to the request's comment, so the agent sees them with the rest of the details. - Response: a successful call answers
201 Createdwith the full enquiry and aLocationheader. A400lists each problem under the field it's about. - Side effects: the agency gets the same alert, automatic reply and phone notification as for a portal lead. Your request never fails because one of those does.
{
"salesLifecycleListingId": 99120,
"type": "viewing",
"firstName": "Sam",
"lastName": "Example",
"emailAddress": "[email protected]",
"preferredTimes": ["2026-11-07T10:00:00Z"]
}A guide to moving from V1 to V2 follows separately.
Website listings
GET /v2/website/sales/properties: sales search for a website, the V2 copy of network.api'sGET api/sales-properties. Results have the same fields with the same names, plusteamName(the property's office), and the filters are the same, except thatlimitreplacesfetch,teamIds(team ids) replacesteamAPIList(other teams' keys), and results come in V2's{ data, pagination }, withtotal.GET /v2/website/sales/properties/{id}: one sales property for a website's property page, the V2 copy of network.api'sGET api/sales-properties/{lifecycleId}, with the same fields and names, plusteamName. Unlike network.api, it returns only properties listed on the website; any other answers404.GET /v2/website/lettings/properties: lettings search for a website, the V2 copy of network.api'sGET api/lettings-properties, with the same fields, filters and differences as the sales search. WithoutwebListingStatuses, it shows properties to let and let agreed, or to let alone withexcludeUnderOffer.GET /v2/website/lettings/properties/{id}: one lettings property for a website's property page, the V2 copy of network.api'sGET api/lettings-properties/{lifecycleId}, with the same fields and names, plusteamName. As with the sales detail, only properties listed on the website are returned; any other answers404.GET /v2/website/teamsandGET /v2/website/teams/{id}: the offices your key covers, replacing V1'sGET team. A client or network key gets all its active teams. Each team has V1's fields, plusid,clientId, its active agents asmembers, and its prospecting and matching outcodes for routing a lead by postcode. Either website scope opens it. Unlike V1,membersleaves out agents who've left, and the brand colours are filled in (V1 always returned them asnull).- Enum values are names, as everywhere in V2:
webMarketingStatusis"forSale", not a number, andsortOrdertakesmostRecentlyAdded. - New scopes:
read:sales-websiteandread:lettings-website, for the website listing endpoints under/v2/website/. Existing keys don't have them; ask us to add them to your key. - One step for a website's key: we can set up a key with everything a website needs: both of these,
read:commercial-websiteandwrite:enquiries.
Moving a website from network.api? Moving a website to V2 covers the key, the addresses, paging and enquiries step by step.
Residential properties
- Address:
GET /v2/sales/propertiesandGET /v2/lettings/properties, list and detail, now return anaddress. Its parts areprimaryNameOrNumber,secondaryNameOrNumber,street,locality,district,townOrCity,county,postcode,displayAddressandshortAddress. A part that isn't recorded isnull. - Responsible agent:
responsibleAgentIdandlinks.responsibleAgentare on both. - Sales team: sales properties now include
teamIdandlinks.team, as lettings already did. - Seller: sales properties now include
sellerGroupIdandlinks.seller, as lettings already haslandlordGroupIdandlinks.landlord. - Service level: the lettings list now includes
rentalServiceLevel. - New filters on both lists:
teamId,clientIdandresponsibleAgentId.
{
"id": 13034,
"teamId": "…",
"responsibleAgentId": "…",
"sellerGroupId": 8338,
"address": {
"primaryNameOrNumber": "12",
"street": "Example Road",
"townOrCity": "Harrogate",
"postcode": "HG1 1AA",
"displayAddress": "Example Road, Harrogate",
…
},
"links": {
"team": "/v2/teams/…",
"responsibleAgent": "/v2/users/…",
"seller": "/v2/sellers/8338",
…
},
…
}Tenancies
- Dates:
GET /v2/lettings/tenanciesand its detail now returndateCreatedanddateUpdated.dateUpdatedmoves when the tenancy or one of its terms changes. - Older tenancies: those created before this release carry dates taken from their history.
updated_since: a new filter that collects only the tenancies changed since your last sync.- Notices:
noticeGivenDateandnoticeServedDate. A tenant's notice is cleared if they later say they're not moving out. - End of term:
endOfTermStatus(unknown,renewormoveOut) on the list and the detail.unknownincludes a tenant who has said they're not moving out after all. - On the list:
deposit.
Notes and documents on tenancies
tenancy is now a record type for notes and documents, so you can attach deposit certificates and inventories to a tenancy:
{ "entityType": "tenancy", "entityId": 51234, "noteText": "Deposit protected, certificate attached." }Changed
Check these if you handle errors by status code.
- No key: a call with no key now answers
401 Unauthorized, withWWW-Authenticate: Bearer, as a wrong or revoked key does. It was400.- Filters out of scope: a
teamId,clientIdorresponsibleAgentIdfilter outside your key's scope now answers403 Forbidden, whether or not it exists. Lettings properties'teamIdused to return an empty list in this case.
- Swagger: the documentation at api.loop.software/swagger now opens on V2.
