Everything you need to get your property listings into the HAVHO app.
Your feed is a single URL that returns a snapshot of your currently live listings as JSON or XML. Both formats carry identical data. The full contract is in the feed specification; the fields are summarised further down this page.
One properties array, each listing carrying its own
agency and agent ·
a stable id per listing ·
price in ZAR · 1–21 HTTPS photoUrls ·
sourceUpdatedAt changes whenever anything changes.
If the feed shouldn't be public, require an X-API-Key header and
give us the key when you submit. We send that key on every pull; return
401 without it. Serve the feed over HTTPS only.
In your dashboard, add the feed URL. We fetch it immediately and dry-run it through the importer — you'll see the record counts, which listings are importable, and any problems, without anything being saved yet.
Our team checks the submission and connects it. From then on the feed is pulled on a schedule; your listings and removals stay in sync and appear in the HAVHO app.
If your data isn't in the HAVHO shape, submit a custom integration request instead. Describe the source — a portal export, an API, a legacy schema — and we scope a mapping for it as a separate piece of work.
Which fields are required, recommended, optional, and what they look like.
Required Recommended Optional Rentals only · every field is camelCase; send numbers as numbers, dates as ISO-8601.
| Field | Type | Example / values | |
|---|---|---|---|
| id | string | Required | "CPT-S-1842" — stable, unique, never reused |
| agent | object | Required | the responsible agent — see the Agent table |
| agency | object | Required | the owning agency — see the Agency table |
| providerId | string | Optional | leave out — set automatically from the feed |
| sourceUpdatedAt | timestamp | Optional | leave out — set automatically when the listing is stored or changes |
| status | string | Optional | leave out — everything in properties is active |
| type | string | Required | "sale" | "rent" |
| propertyType | string | Required | house, apartment, townhouse, vacant land, farm/ smallholding, commercial property, industrial property, development |
| title | string | Required | "Sea-facing apartment in Green Point" |
| price | number | Required | 4250000 — ZAR, no symbols; rent = monthly |
| description | string | Required | plain text or simple HTML |
| address | string | Required | "14 Ocean View Drive, Green Point, Cape Town" |
| suburb | string | Recommended | "Green Point" |
| city | string | Recommended | "Cape Town" |
| province | string | Recommended | "Western Cape" |
| beds | integer | Optional | 2 |
| baths | integer | Optional | 2 |
| garage | integer | Optional | 1 |
| parking | integer | Optional | 1 |
| erfSize | number | Optional | 495 — m² |
| unitSize | number | Optional | 98 — m² |
| photoUrls | array<string> | Required | 1–21 unique HTTPS URLs, display order; first is primary |
| features | array<string> | Optional | Free text, max 100 labels. Known: Pet friendly, Garden, Flatlet, Pool, Security Estate; others (e.g. Borehole) are kept as sent |
| availableNow | boolean | Rentals | true | false |
| availableFrom | date | Rentals | "2026-10-01" |
| Field | Type | Example / values | |
|---|---|---|---|
| id | string | Required | "AGY-77" — permanent, unchanged on rename |
| name | string | Required | "Atlantic Edge Properties" |
| providerId | string | Optional | leave out — set automatically |
| sourceUpdatedAt | timestamp | Optional | leave out — set automatically |
| Field | Type | Example / values | |
|---|---|---|---|
| id | string | Required | "AGT-1049" — permanent, unchanged on name/email/office change |
| fullName | string | Required | "Naledi Mokoena" |
| string | Required | "naledi@atlanticedge.co.za" | |
| phone | string | Required | "+27 82 555 0142" |
| sourceUpdatedAt | timestamp | Optional | leave out — set automatically |
| location | string | Optional | "Cape Town, Atlantic Seaboard" |
| photoUrl | HTTPS URL | Optional | "https://…/agt-1049.jpg" |
| ffcNumber | string | Optional | "FFC-2026-114829" |
Removals are automatic: a listing that is no longer in properties is removed on the next sync (only after a complete, readable pull). There is nothing to send.
Full contract with edge cases: field reference · sample-feed.json · sample-feed.xml