Improved

29 October 2026 - Open API 1.11.0

New functionality for websites, ability to add AML, and manage maintenance jobs in lettings, plus a few small changes

Website search form ranges and listing lookups

The last two network.api calls a website search needs now have V2 versions:

  • GET /v2/website/sales/properties/search-stats and GET /v2/website/lettings/properties/search-stats: the figures for a search form's dropdowns, with network.api's field names (totalCount, minPrice, maxPrice, avgPrice, or minRent, maxRent, avgRent, and minBedrooms, maxBedrooms), over the same properties the search shows.
  • New in V2: minBathrooms, maxBathrooms, and propertyTypes, the types you have on the market with how many of each. Each value is what the search's propertyTypes parameter takes.
  • GET /v2/website/sales/properties/by-listing/{listingId} and the lettings equivalent: a property by its website listing id, returned as /{id} returns it.
  • teamIds replaces network.api's teamAPIList, as on the search. With nothing on the market, every figure is 0.
{
  "totalCount": 57,
  "minPrice": 125000, "maxPrice": 650000, "avgPrice": 310500.5,
  "minBedrooms": 1, "maxBedrooms": 5,
  "minBathrooms": 1, "maxBathrooms": 3,
  "propertyTypes": [
    { "value": "detached", "name": "Detached House", "count": 20 },
    { "value": "flat", "name": "Flat", "count": 15 },
    { "value": "semiDetached", "name": "Semi-Detached House", "count": 22 }
  ]
}
📘

Moving a website from network.api? Moving a website to V2 now covers the search form ranges and listing lookups too.

Lettings maintenance jobs

For partners that run maintenance alongside the agency: read jobs, report them, add contractors' quotes and record the agent's instruction.

  • GET /v2/lettings/maintenance-jobs (filters teamId, status, property_id, updated_since) and GET /v2/lettings/maintenance-jobs/{id}: each job with its quotes. A percentage agency fee shows as percentage (10 is 10%) with the fee in pounds.
  • POST /v2/lettings/maintenance-jobs reports a job. It arrives as notAcknowledged, and an agent acknowledges it in Loop before anything else happens to it.
  • PATCH /v2/lettings/maintenance-jobs/{id} changes its details. Once a job is complete or cancelled, only completionNotes can change.
  • Quotes, once the job has been acknowledged:
    • POST …/{id}/quotes adds a contractor's quote: an entry from the agency's address book, the amount, VAT rate and an optional agency fee (percentage or fixedFee). There are no line items; attach the breakdown as a document.
    • POST …/{id}/quotes/{quoteId}/instruct records the agent's instruction of a quote; POST …/{id}/instruct adds a quote and instructs it in one call. The job becomes approved, and its other quotes are rejected, as in Loop.
  • POST …/{id}/complete, then PUT …/{id}/invoice for the contractor's invoice details and PUT …/{id}/invoice/file for the invoice PDF.
  • Documents and notes attach to a job with entity_type=MaintenanceJob.
  • No emails are sent from these calls: agents send any they want from Loop. Marking an invoice paid stays in Loop.
  • Scopes: read:maintenance and write:maintenance.
{
  "contractorId": 501,
  "quoteAmount": 200,
  "quoteVatRate": "standardRate",
  "agencyFeeType": "percentage",
  "agencyFeePercentage": 10,
  "agencyFeeVatRate": "standardRate",
  "details": "Replace the boiler pump.",
  "dateScheduled": "2026-11-12T09:00:00Z",
  "paymentSource": "rent"
}

The address book

  • GET /v2/address-book and GET /v2/address-book/{id}: the agency's contractors, solicitors, surveyors and other contacts. The address book belongs to the agency, so it's shared by all its offices.
  • POST /v2/address-book and PATCH /v2/address-book/{id} add and change entries, with the same rules as Loop's form. Entries can't be deleted through the API.
  • GET /v2/reference/address-book-categories lists the categories an entry can have.
  • Scopes: read:address-book and write:address-book.

A person's AML

  • GET /v2/people/{id}/aml: how the person's agency verifies AML (off, documentUpload or moveButler), whether Loop counts the person as verified, and their AML document if there is one.
  • POST /v2/people/{id}/aml/document uploads the person's AML document to their AML section in Loop, replacing any earlier one. It's for agencies that verify AML by document upload; any other answers 409 Conflict.
  • Once every seller in a group has an AML document, their pre-market, for sale and under offer properties are marked AML verified, as they are in Loop.
  • Scope: write:aml. Reading uses read:contacts.
📘

New scopes. read:maintenance, write:maintenance, read:address-book, write:address-book and write:aml aren't on existing keys. Ask us to add the ones you need to your key.

Fixed

  • Documents on people's records. POST /v2/documents with entity_type buyer, seller, landlord, renter, lettingsViewing or lettingsApplication answered 404 Not Found for records your key could see. They now work.

Changed

  • File uploads in the reference. POST /v2/documents, POST /v2/people/{id}/aml/document and PUT /v2/lettings/maintenance-jobs/{id}/invoice/file now show their request body: multipart/form-data with one file in a file field. Uploads that use another field name still work.