openapi: 3.2.0 info: title: Connells Website JSON API (undocumented) Testimonials API version: '2026-07-26' summary: Read-only JSON endpoints served by the Connells estate agency website. description: 'This is NOT a published Connells Group product. Connells Group publishes no developer portal, no documentation and no specification of any kind. This document was DERIVED by API Evangelist purely from live, anonymous, unauthenticated HTTP probes of https://www.connells.co.uk/api on 2026-07-26, and every schema below is a faithful transcription of an observed response body — nothing was invented, and no field appears here that was not returned by the live service. The endpoints are Next.js App Router route handlers backing the www.connells.co.uk consumer site (branch finder, people directory, testimonials wall and location autocomplete). Content is sourced from the Homeflow estate-agency platform that powers the Connells consumer estate (asset URLs resolve to *.homeflow-assets.co.uk). They are unversioned, undocumented, carry no service-level commitment, are rate limited by Cloudflare (HTTP 429 with Retry-After) and may change or disappear without notice. Treat them as an observation of the estate, not as a contract. The sibling Connells Group brand sites (Hamptons, Sequence, Bairstow Eves, Fox & Sons, John D Wood, Blundells, Barnard Marcus, William H Brown) run the Homeflow Rails application directly and 302-redirect /api/* to their homepage; Countrywide 301-redirects; Gascoigne Halman 404s. Only www.connells.co.uk exposes these handlers.' x-provenance: api-evangelist-derived-from-live-probes x-published-by-provider: false x-probe-date: '2026-07-26' servers: - url: https://www.connells.co.uk/api description: Production (undocumented, unversioned, no SLA) tags: - name: Testimonials description: Published customer testimonials. paths: /testimonials: get: operationId: listTestimonials summary: List published customer testimonials description: 'Returns 12 published customer testimonials. Note the envelope differs from the others: `pagination` is null and the error key is singular (`error`, not `errors`).' tags: - Testimonials security: [] responses: '200': description: Testimonials. content: application/json: schema: $ref: '#/components/schemas/TestimonialListEnvelope' '429': $ref: '#/components/responses/RateLimited' components: schemas: Testimonial: type: object properties: id: type: integer example: 417891 name: type: string description: Partially redacted customer name as published on the site. content: type: string displayDate: type: string description: Human-formatted date, DD/MM/YYYY. example: 24/07/2026 contactCounty: type: - string - 'null' example: Cambridgeshire createdAt: type: string format: date-time example: '2026-07-24T13:29:00.000Z' TestimonialListEnvelope: type: object description: Note the singular `error` key and the null `pagination` — this envelope is not consistent with the branch and staff envelopes. properties: results: type: array items: $ref: '#/components/schemas/Testimonial' pagination: type: 'null' error: type: - object - 'null' responses: RateLimited: description: Rate limited at the Cloudflare edge. Body is the plain-text string "Too many requests" and a Retry-After header is supplied (34 seconds observed). headers: Retry-After: description: Seconds to wait before retrying. schema: type: integer example: 34 content: text/plain: schema: type: string example: Too many requests