# Changelog

Source: https://help.ruuster.com/api/changelog

> Releases and planned additions.

- **v1.0** — First release for brokerage owners and admins: account, properties (including
  `/properties/engagement`), leads, the agent directory, summary, email, traffic, webhooks and the
  event feed.

- **v1.13.3** — Connections no longer expire. A sign-in from any assistant now lasts until you
  disconnect it, Ruuster revokes it, or your API key stops working; the 90-day limit is gone.
- **v1.13.2** — Muse connects with the Ruuster sign-in and stays connected. Assistants that sign in
  but never renew, such as Meta's Muse, now get a sign-in that doesn't expire after an hour, so
  the connection no longer looks dead after the first hour. Revoke in the Ruuster web app still ends
  it at once. The [Muse](https://help.ruuster.com/api/mcp#muse) steps now use the sign-in, which also
  connects your CRM.
- **v1.13.1** — An MCP address for API keys only: `https://mcp.ruuster.com/key`. It offers no
  sign-in, so assistants that prefer a sign-in whenever one is offered, such as Meta's Muse, ask for
  your API key straight away. The tools and key checks are the same as at `/mcp`. The Muse steps now
  use this address and add the connector from a Muse chat. See
  [Muse and other assistants that take one API key](https://help.ruuster.com/api/mcp#muse-and-other-assistants-that-take-one-api-key).
- **v1.13.0** — Email status. [Get a lead's email status](https://help.ruuster.com/api/leads-email-status)
  answers, for one address, CRM id or lead, Ruuster's verdict on the email: `valid`, `invalid`,
  `blocked`, `soft_bounce`, `complaint`, `unsubscribed` or `unknown`, with the code behind it
  (the SMTP line or verification status), the reason in a sentence, and since when. The new
  `lead.email_status_changed` webhook event fires when that verdict changes (`lead.*`
  subscribers get it automatically). The [Email status](https://help.ruuster.com/api/email-status)
  guide covers the statuses and how to keep the verdict in Follow Up Boss, Sure Send or Sierra
  Interactive through their APIs, where smart lists and action plans can use it.
- **v1.12.2** — Your key on its own. AI assistants that take a single API key and send it in the
  `Authorization` header, such as Meta's Muse, connect to the MCP server with just your personal key
  (`Bearer <key>` or HTTP Basic); Ruuster finds the login it belongs to. A brokerage integration key
  still needs the person's email: paste `email:key`. On the REST API, `x-email` is now optional with a
  personal key, and a lone integration key gets `401 email_required`. See
  [Muse and other assistants that take one API key](https://help.ruuster.com/api/mcp#muse-and-other-assistants-that-take-one-api-key).
- **v1.12.1** — Public records reach only the states your brokerage's MLSs cover (for example, Oklahoma
  for a brokerage on MLSOK). A home elsewhere returns `400 mls_not_in_scope` from the public record calls
  and from a CMA on a home with no MLS record, and doesn't count toward the daily allowance.
- **v1.12.0** — Public records without running a CMA, for US homes whether or not they were ever on the
  MLS. [Look up a public record](https://help.ruuster.com/api/public-records-lookup) by address, parcel
  number or `propertyId` returns the parcel, building facts, tax and assessed value, AVM, last sale and the
  loans still open, with the owners' names and mailing address when you add `include=owner`.
  [Get a home's deed and mortgage history](https://help.ruuster.com/api/public-records-history) returns
  every recorded transfer and mortgage, each mortgage marked open, released or paid off. Both answer one
  home per call, under a daily allowance of 500 per brokerage. CMAs now value homes with no MLS record from
  their county record (`subject.publicRecordId`, or an address the MLS doesn't know).
- **v1.11.6** — Older sales are found again. `/properties/lookup` (by MLS number or address),
  `/properties/{propertyId}` and CMA subjects now reach a sale that closed more than about a year ago,
  which used to return nothing or `404 not_found`. Comps are unchanged (up to 12 months).
- **v1.11.5** — AI assistants that can't finish the Ruuster sign-in, such as Grok Bot, can connect with
  your login email and API key as headers (`x-email`, `x-api-key`), plus optional `x-crm-vendor`,
  `x-crm-key` and `x-crm-write` for the CRM tools. Assistants that sign in, such as Claude and ChatGPT,
  work as before. See
  [Grok Bot and other assistants that take headers](https://help.ruuster.com/api/mcp#grok-bot-and-other-assistants-that-take-headers).
- **v1.11.4** — In AI assistants, the first answer after you connect checks whether Claude can put your
  logo and listing photos into decks and documents, and says what to allow if it can't. The Ruuster
  connect screen and the owner's setup steps mention it too. See
  [Logos and photos in decks and documents](https://help.ruuster.com/api/mcp#logos-and-photos-in-decks-and-documents).
- **v1.11.3** — In AI assistants, every image Ruuster returns (your logo, agent photos, listing photos)
  now comes from one address, `api.ruuster.com`, so allowing that one address in Claude's settings lets
  Claude put them into the decks and documents it builds. See
  [Logos and photos in decks and documents](https://help.ruuster.com/api/mcp#logos-and-photos-in-decks-and-documents).
- **v1.11.2** — CMAs: the public record's `loans` and the net sheet's default `mortgagePayoff` count only
  the loans still open. A loan whose release was recorded, or that a later refinance paid off, is left out
  even when the county record still lists it (it could make a seller look underwater), and a newer
  refinance the county record hasn't picked up yet counts at its amortized balance.
- **v1.11.1** — `GET /brand`: `logo.url` is now your full logo from your brokerage profile, the one your
  site shows, instead of your app's square icon, which moves to the new `logo.appIcon`. For sites styled
  with the newer UI customization, `colors.text` is the color your site renders text in. In AI assistants,
  `cma_create` and `cma_get` include the brand kit, and the visual CMA shows your logo, colors and fonts
  with the agent's photo and contact details.
- **v1.11** — Changing your CRM, with brakes and a permanent record. `POST /crm/changes` previews a change
  (add or remove tags, change stage, reassign, add a note or a task, or undo an earlier tag, stage or
  assignment change) for up to 500 people and writes nothing; `POST /crm/changes/{changeId}/apply` makes it
  after the same person confirms, no sooner than 8 seconds and no later than 15 minutes after the preview,
  and checks every person against what the CRM answers. Needs `x-crm-write: allow`; Follow Up Boss for now.
  Every request, who asked, and each person's before and after are kept for good: `GET /crm/changes` and
  `GET /crm/changes/{changeId}`. Reads of your CRM are now on record too. In AI assistants, tick "Let the
  assistant make changes" under Your CRM on the connect screen. See [Connect your CRM](https://help.ruuster.com/api/crm).
- **v1.10** — Your CRM, joined with Ruuster. Send your CRM's API key (Follow Up Boss, Sierra Interactive
  or Sure Send) in the new `x-crm-vendor` and `x-crm-key` headers, used for that request only, and ask
  questions that need both sides. `GET /leads/follow-up` lists leads who viewed listings (or engaged more)
  on your Ruuster sites but have no call, or no contact, in your CRM for N days. `GET /leads/crm-segments`
  counts engaged leads by CRM pond, stage, agent or tag ("how many leads in our inactive ponds engaged
  meaningfully?"). `GET /crm/people` and `GET /crm/people/{crmPersonId}` read your CRM's people with their
  Ruuster activity attached, and `GET /crm/overview` and `GET /crm/identity` describe the key and the
  account's ponds, stages and users. In AI assistants, pick your CRM and paste its key on the connect
  screen. See [Connect your CRM](https://help.ruuster.com/api/crm).
- **v1.9.1** — `GET /properties/{propertyId}/prospects` is faster and no longer fails with
  `503 source_unavailable` when the check against shape areas (counties, school districts, neighborhoods,
  drawn areas) runs long: it returns the zip and city matches and says so in the new `meta.areaShapes`
  (`checked`, `timed_out` or `no_location`). Lead events and webhooks keep up again for every brokerage.
  Your brokerage's integration key now works with any owner's or admin's login email, and a brief outage
  on Ruuster's side no longer answers `403 brokerage_not_enabled`.
- **v1.9** — `GET /wins`: your account's highlights in one call. It shows figures that grew against the
  previous period (led by engagement: leads engaged, listing views, activity), your most-viewed listings, your most engaged leads, agent activity, your hottest areas
  with Ruuster's share of listing views, and, for Follow Up Boss accounts, dormant leads re-engaged after a
  Ruuster touch, with ready-written headlines. It reports highlights only; `/summary` remains the complete
  record. `GET /leads/map` gains `sources=1`, which places the listing views your CRM recorded from other
  sources (portals, IDX sites) on the same map and gives Ruuster's share of views for every point and area.
  The MCP map colours areas where Ruuster has most of the views. Through MCP these are the `wins` and
  `leads_map` tools.
- **v1.8.2** — Every Ruuster client brokerage now has API access without asking: owner and admin keys work
  within an hour of the brokerage being set up. Lead contact details (`email` and `phone` on lead objects
  and in webhooks) are on by default; ask your CSM if you'd like them off. `/me` shows the setting as
  `leadContactDetails`.
- **v1.8.1** — `/summary` buckets now carry `weeklyEmail`: the exact figures Ruuster's weekly analytics email showed
  for that week, next to the stricter measured figures. The summary page explains which to use: the email's
  numbers are the headline, and the measured ones (human opens, signed-in leads) are the detail and are
  expected to be lower. Assistants connected through MCP are told the same, so reports no longer flag the
  difference as a mismatch.
- **v1.8** — `GET /leads/map`: where your leads are looking for homes, as map-ready points. Listing
  views, favorites and tour requests from the last 30 days, grouped by the viewed listings' locations into
  clusters, ZIP codes, cities or single listings, with the top cities and the map bounds, in one call and
  without lead names. Through MCP this is the `leads_map` tool, so "make me a market map of where my leads
  are looking" no longer means paging through every lead. Also fixed: CMA ids are mixed-case, and the MCP
  `cma_get` tool and the OpenAPI document wrongly accepted lowercase ids only.
- **v1.7** — `GET /mortgage/rates`: the national mortgage-rate averages (30- and 15-year fixed, FHA,
  jumbo, VA, the 10-year Treasury; daily lock indices and the weekly Freddie Mac survey) with the
  history of any one series, as data. CMAs now carry the current 30- and 15-year figures in
  `market.rates`. Through MCP this is the `mortgage_rates` tool, and assistants are told to use it for
  rate questions and payment illustrations instead of quoting a rate from memory.
  The MCP server also gained ready-made prompts (a "What can Ruuster do?" tour plus hottest leads, lead
  story, listing engagement, CMA, weekly summary, mortgage rates and seller report) and offers the tour
  when a conversation opens with a general question.
- **v1.6** — `GET /brand`: your brokerage's name, logo, phone, website and the colors and fonts your
  Ruuster site is styled with, so reports built from the API (or by an assistant through MCP) carry your
  brand. The `seller_report` MCP tool includes it.
- **v1.5** — MCP server. Add `https://mcp.ruuster.com` to Claude, ChatGPT or any assistant that supports remote MCP servers,
  sign in with your owner or admin email and API key, and every read call plus Run a CMA is available
  as a tool, with composed tools for seller reports, lead stories, hot leads and listing lookups. See
  [Use with AI assistants (MCP)](https://help.ruuster.com/api/mcp).
- **v1.4** — CMAs. `POST /cma` runs a comparative market analysis for any home in your MLSs (by
  address, MLS number or id): subject profile, sold comps with rule-based dollar adjustments, active,
  pending and expired competition, market conditions, a value conclusion and a seller net sheet, all
  computed from MLS records. `GET /cma` and `GET /cma/{cmaId}` read stored analyses for 90 days.
  200 CMAs per brokerage per day by default. See [CMAs](https://help.ruuster.com/api/cma).
- **v1.3** — Any listing can be described, one at a time. Events, the event feed and a lead's activity
  now name every listing a lead engaged with (MLS number, MLS, address), not only yours.
  `GET /properties/{propertyId}` answers for any listing by id and returns `photos` (the full gallery,
  up to 50). New `GET /properties/lookup?mlsRecordId=` resolves an MLS number to any listing in your
  MLSs (a lookup call). `GET /properties/{propertyId}/engagement?scope=any` returns your own leads'
  views, unique leads, favorites and tour requests on any one listing. Property objects carry
  `ownedByYou`. Bulk calls still cover your own inventory only.
- **v1.2** — `GET /properties/{propertyId}/viewers` takes `scope=any` to ask about one listing that isn't yours (still your own leads, one listing per call), and returns `property.ownedByYou`.
- **v1.1** — `GET /leads/activity` (your most active leads in a period) and `GET /properties/{propertyId}/viewers`
  (your leads who viewed, saved or toured a listing).

**Planned** (not available yet; dates aren't promised):
- `compare=previous`, `changedSince` and `ETag` caching.
- `previousPropertyIds` for re-listed properties.

Breaking changes are announced here at least 90 days ahead. Ruuster may change, suspend or discontinue
the API at any time without notice.
