Reallyo Listings API
Send your rental and sale listings to Reallyo from your own systems or an AI agent; Reallyo publishes them to the listing portals. Paid plans only.
For AI agents (MCP):
REST: OpenAPI 3.1 · Agent summary: llms.txt
https://listings-api.reallyo.com/mcp with header Authorization: Bearer rly_live_…REST: OpenAPI 3.1 · Agent summary: llms.txt
How it works
- Identify each unit by your id (
external_id). Sending it again updates the same listing — retries are safe. - Every listing is checked first. Problems come back per field, with what to send instead.
- Accepted listings go live within about a minute; photos are copied to our CDN first.
- Live listings count towards your plan. Over the limit a listing is held and goes live by itself when a slot frees up.
- When a unit is let, set
statusto"rented". To sync your whole inventory, use bulk withmode: "replace".
Example
curl -X PUT https://listings-api.reallyo.com/v1/listings/UNIT-12B \
-H "Authorization: Bearer $REALLYO_API_KEY" -H "Content-Type: application/json" \
-d '{"status":"available","offer_type":"rent","price":2450,"bedrooms":2,"bathrooms":1,
"description":"Bright two-bedroom with in-unit laundry, two blocks from the subway…",
"address":{"street_number":"222","street":"East 39th Street","unit":"12B",
"city":"New York","state_code":"NY","postcode":"10016"},
"available_from":"2026-11-01","pets":{"cats":true},
"photos":[{"url":"https://example.com/12b/living-room.jpg"}]}'Endpoints
GET /v1/me | Plan limit, live listings, free slots |
PUT /v1/listings/{external_id} | Create or replace |
PATCH /v1/listings/{external_id} | Change some fields, e.g. {"status":"rented"} |
GET /v1/listings/{external_id} | State, checks and what to do next |
GET /v1/listings | Your API listings (?state=, ?after=) |
DELETE /v1/listings/{external_id} | Take down |
POST /v1/listings/validate | Check without storing |
POST /v1/listings/bulk | Up to 250 at once; mode: "replace" marks the rest rented |
Listing fields
status | "available" | "coming_soon" | "pending" | "rented" | "sold" | "draft" | "available" goes live on the portals (counts towards your plan limit). "rented"/"sold" take it off the market; "draft" keeps it private. default "available" |
offer_type | "rent" | "sale" | default "rent" |
title | string | Optional. Generated from the address and size when omitted. |
description | string | The listing text renters see. Required for "available". default "" |
address required | object | The property address. US only. |
address.street_number | string | House or building number, e.g. "222". default "" |
address.street required | string | Street name, e.g. "East 39th Street". |
address.unit | string | Apartment or unit, e.g. "16B". Empty for a whole house. default "" |
address.city required | string | |
address.state_code required | string | Two-letter US state code, e.g. "NY". |
address.postcode required | string | US ZIP code. |
address.neighborhood | string | default "" |
address.hide_street_number | boolean | Publish the street without the house number. realtor.com and apartments.com refuse such listings. default false |
latitude | number | |
longitude | number | |
price | number | Monthly rent (rent) or asking price (sale), in USD. Required for "available". |
bedrooms | integer | 0 for a studio. |
bathrooms | number | Half baths as .5, e.g. 1.5. |
square_feet | integer | |
property_type | "apartment" | "assisted living" | "barn" | "bungalow" | "cabin" | "castle" | "co-op" | "condo" | "cottage" | "detached house" | "duplex" | "farm" | "flat" | "fourplex" | "high-rise" | "house" | "houseboat" | "land" | "loft" | "maisonette" | "manufactured" | "mid-rise" | "mobile" | "multi-family home" | "penthouse" | "semi-detached house" | "senior housing" | "single-family home" | "studio" | "terraced house" | "townhouse" | "triplex" | "villa" | "windmill" | default "apartment" |
year_built | integer | |
available_from | string | string | "now", or the date the property becomes available. default "now" |
lease_term | "1_year" | "6_months" | "monthly" | "rent_to_own" | "variable" | Rentals only. default "1_year" |
pets | object | Rentals only. Which pets are allowed. default {"cats":false,"small_dogs":false,"large_dogs":false} |
pets.cats | boolean | default false |
pets.small_dogs | boolean | default false |
pets.large_dogs | boolean | default false |
furnished | boolean | Rentals only. default false |
smoking_allowed | boolean | Rentals only. default false |
utilities_included | array | Rentals only. default [] |
photos | array | In display order; the first is the cover. At least one is required for "available". We copy each photo to our CDN — your URL only has to work when you send it. default [] |
photos[].url required | string | A publicly reachable JPEG, PNG, GIF or WebP, up to 15 MB. |
photos[].caption | string | default "" |
videos | array | YouTube, Vimeo or Wistia links. Others are dropped. default [] |
mls_number | string | default "" |
syndicate | boolean | Send to the listing portals when live. false keeps it on Reallyo only. default true |
States
rejected | Failed checks; nothing published. Fix checks.errors and resend. |
queued | Accepted, publishing. |
held | Accepted, but your plan's live limit is reached. |
live | Published and sent to portals. |
saved | On Reallyo with a non-live status. |
parked | Rented/sold/draft and never live — stored only. |
failed | Publishing failed (usually a photo URL); see message. |
removed | Taken down. |
Questions: support@reallyo.com