Is a home actually being offered?
Saving a home is not the same as listing it. Havnly only offers a home to a household once its listing is complete — a partial listing cannot be approved, so putting one in front of an adjuster would waste everybody’s time.
Every write tells you where the home stands, so you never have to guess:
{
"data": {
"id": "fd418f4e-…",
"api_external_id": "unit-4021",
"listed": false,
"missing_fields": ["description", "image_url", "available_from"],
"availability_via": []
}
}listed: true— the home is live and can be matched today.missing_fields— exactly what to send before it will be.availability_via— how availability is being kept honest once it is live:complete_profile, pluscalendar_synced,manual_blocksoravailable_dates.
The same three fields come back on GET /properties, so re-reading your
portfolio tells you the state of every home without a call per home.
The whole portfolio at once
GET /properties/readiness{
"data": {
"total": 1042,
"listed": 819,
"not_listed": 223,
"blockers": [
{ "field": "image_url", "homes": 190 },
{ "field": "available_from", "homes": 64 },
{ "field": "pet_policy", "homes": 12 }
],
"examples": [
{ "property_id": "…", "external_id": "unit-4021", "name": "…",
"missing_fields": ["image_url"] }
]
}
}blockers is ranked, so the first line is the one worth fixing first: one
mapping change that supplies image_url moves 190 homes onto the market at
once. examples gives you twenty homes to check the fix against without
paging the whole portfolio.
This is the call to run after a bulk import, and the one to watch afterwards.
A thousand homes that all save successfully and none of which is listed looks
identical to a thousand homes that are working — until a month has passed with
no bookings.
The required fields
| Field | Note |
|---|---|
address, bedrooms, bathrooms, sqft | The basics |
monthly_rate | Must be above zero |
image_url | At least one photograph |
description | Free text |
amenities | A non-empty array |
pet_policy | Say “No pets” rather than leaving it empty |
available_from | Also the simplest way to satisfy availability |
security_deposit, cleaning_fee, application_fee, pet_fee | Send 0 where they do not apply — zero is an answer, absent is not |
furnished_status | furnished, partial or unfurnished |
The commonest near-miss is a fee left out rather than set to zero. 0 makes a
home live; omitting it does not.
Testing without polluting the market
A home published with a sandbox key is marked as test data. It is a normal
home to you — it appears in your portfolio, it becomes listed once complete,
and a sandbox housing request will match it — but no real household will ever
be offered it.
So you can publish a hundred fake homes, watch listed flip, exercise the
whole flow, and not have a displaced family shown a property that does not
exist. Clean them up when you are done, or leave them; either way they stay out
of real matching.