Changelog

Version 1.0. Additive changes land without notice; anything that breaks a caller gets a new version and notice first.

27 Oct 2026

  • Duplicate addresses: addresses are compared by a canonical key (addressKey). A second active listing of the same brokerage at one address answers 409 with existingKey; another brokerage's is flagged to both owners through GET /api/v1/conflicts and the listing.conflict webhook.
  • Key rotation: POST /api/v1/keys/rotate replaces the calling key; the old key keeps working for 24 hours, then stops.
  • Export: GET /api/v1/export returns every listing your brokerage owns, with deliveries and history, a page at a time.
  • RESO Add/Edit: POST /api/reso/Property and PATCH /api/reso/Property('{key}') take RESO Data Dictionary names, with Prefer, Idempotency-Key and field level OData errors.
  • Photos: up to 25 per listing through /api/v1/listings/{key}/media (upload, add, reorder, remove), the RESO Media resource and $expand=Media on Property. Owner reads now fill photos with signed links.
  • MLS draft: the console fills each MLS's input form from the listing for an agent to enter by hand; the MLS number they record comes back in mlsNumbers and in that MLS's delivery note.

26 Oct 2026

  • Renamed to ListOnce before launch: webhooks carry X-ListOnce-Signature, X-ListOnce-Timestamp and X-ListOnce-Delivery from ListOnce-Webhooks/1, and the extension fields are LO_SellerVisibilityChoice and LO_SellerChoiceRecordedAt.
  • RESO: the $metadata data model, a service document, the Lookup resource, fetch by key, and $filter with every comparison and logical operator, $select, $orderby and $count.
  • RESO values: PropertySubType uses Data Dictionary names and BathroomsTotalInteger is a whole number, with BathroomsFull and BathroomsHalf.
  • Founder sandboxes: a key per founder whose listings stay apart from real ones.
  • Developer guides at /developers and the OpenAPI 3.1 document at /api/openapi.json, checked against the server with scripts/check-openapi.mjs before each release.
  • The read API moved onto the database. Members only and coming soon listings never appear in it.
  • Write API: POST /api/v1/listings, GET and PATCH /api/v1/listings/{key}, GET /api/v1/listings/{key}/deliveries, with Idempotency-Key on POST.
  • Signed webhooks: listing.created and listing.updated, retried for about two hours.
  • Scoped API keys with per minute limits.