Sale versus rent shapes
transaction picks the schema. Rentals carry rent and house_rules and must not carry price or the thirteen sale-only fields.
transaction picks the schema: "sale" or "rent". The two shapes share most fields (Payload v1) and differ in these:
| Sale | Rent | |
|---|---|---|
price |
required | not allowed |
rent |
not allowed | required |
house_rules |
not allowed | required ({} allowed) |
legal |
the full object | { "mandate_attested": … } only |
structure |
every field | without the seven sale-only fields |
commission |
buyer_pct, seller_pct |
landlord_pct, agency_fee_pct |
structure.heating |
the sixteen current values | the sixteen, plus the legacy electric |
The sale-only fields#
A rental must not carry price or any of these thirteen fields:
structure.roomsstructure.total_floorsstructure.year_builtstructure.building_groupstructure.conditionstructure.garagestructure.basementlegal.ownership_statuslegal.legalization_statuslegal.mortgage_eligiblelegal.exclusivelegal.broker_license_nolegal.tapija_note
Sending any of them on a rental is 422 validation_failed with unknown_field at its pointer (for example /structure/rooms): rental listings have no such columns, and a silent drop would hide a mapping bug in your software.
rent#
| Field | Type | Required | Rules |
|---|---|---|---|
amount |
number | Yes | monthly rent, 1–10,000,000 |
currency |
"EUR" | "RSD" |
Yes | |
type |
string | Yes | long_term, mid_term, short_term, room |
deposit_months |
number | No | 0–12 |
min_lease_months |
integer | No | 0–120 |
max_lease_months |
integer | No | 0–120, not below min_lease_months |
available_from |
date | No | YYYY-MM-DD |
utilities_included |
object | No | utility name → true / false, e.g. { "water": true, "heating": false } |
utilities_estimate_rsd |
integer | No | 0–100,000,000 |
owner_lives_nearby |
boolean | No | required to publish for every category except business premises |
owner_proximity |
string | No | same_apartment, same_floor, upstairs, downstairs, same_building, same_street, walking_distance; only when owner_lives_nearby is true; same_apartment only when type is room |
max_occupants |
integer | No | 1–20 |
house_rules#
Exactly the object the agency's own editor writes. Every key is optional; send {} when you have none. The keys are pets (an object with policy and optional kinds, dog_size, max_count, deposit_eur, note), smoking, guests, parties, quiet_hours, subletting, students, families, foreign_tenants, registers_residence and other; GET /vocabularies lists their values.
A complete rent listing#
{
"external_id": "REAA-22001",
"transaction": "rent",
"category": "apartment",
"state": "active",
"title": { "sr": "Dvosoban stan za izdavanje, Novi Beograd", "en": "Two-room flat to let, New Belgrade" },
"description": { "sr": "Namešten dvosoban stan u mirnom bloku, blizu prevoza i škola, dostupan od novembra." },
"rent": {
"amount": 650, "currency": "EUR", "type": "long_term", "deposit_months": 1,
"min_lease_months": 12, "max_lease_months": null, "available_from": "2026-11-01",
"utilities_included": { "water": true, "heating": false }, "utilities_estimate_rsd": 12000,
"owner_lives_nearby": false, "owner_proximity": null, "max_occupants": 4
},
"location": { "place_id": "b2c0d6a4-3f1e-4d2a-9c8b-7e6f5a4b3c2d", "address_line": "Bulevar Mihajla Pupina 10", "neighbourhood": null, "lat": null, "lng": null },
"structure": { "area_sqm": 56, "bedrooms": 1, "bathrooms": 1, "floor": 4, "levels": 1, "furnished": "furnished", "heating": "district", "elevator": true, "parking": false, "balcony": true, "terrace": false, "air_conditioning": true },
"legal": { "mandate_attested": true },
"commission": { "landlord_pct": null, "agency_fee_pct": 50 },
"amenities": ["built_in_wardrobes", "intercom"],
"attributes": {},
"photos": [
{ "url": "https://cdn.reaa.rs/listings/22001/1.jpg", "caption": null, "room_type": "living_room", "digest": null },
{ "url": "https://cdn.reaa.rs/listings/22001/2.jpg", "caption": null, "room_type": "kitchen", "digest": null },
{ "url": "https://cdn.reaa.rs/listings/22001/3.jpg", "caption": null, "room_type": "bedroom", "digest": null }
],
"video_url": null,
"virtual_tour_url": null,
"agent": { "email": "milan@agencija.rs", "name": "Milan Petrović", "phone": "+381601234567" },
"source": { "updated_at": "2026-10-12T08:00:00Z", "url": null },
"house_rules": { "smoking": "balcony_only", "parties": "not_allowed", "pets": { "policy": "on_request" } },
"digest": null
}Last updated