Repository navigation
REOP 1.4.0 (2026-10-22)
Consolidation release. Every 1.3.0 structure, enum and name is retained; the changes below are additions, loosenings and deprecations. Migration guide: migrations/1.3.0-to-1.4.0.md.
Documents and versioning
- New
ProjectDocument { protocol, project, developer?, developers? }: the single-project document an API exchanges.RealEstateCatalogis unchanged and remains the feed format. - New
InventoryUpdate { protocol, projectId, updates[] }: a partial, idempotent delta of unit availability for ERP / CRM synchronisation. protocol.versionis now required on every document.protocol.generator(free text naming the producer) andprotocol.defaultLocaleadded;protocol.domaindeprecated in favour ofgenerator.extensionsobject allowed on every entity for vendor data; unknown properties MUST be preserved by intermediaries.- One canonical JSON Schema per version (
schema/<version>/reop.schema.json, draft 2020-12); the OpenAPI document is generated from it.versions.jsonindexes releases;vocabularies/*.jsonpublish the controlled values with labels.
Shared objects
Idis any non-empty text without leading or trailing whitespace (1.3.0 had no constraint; rc.1 limited ids to ASCII, which rejected producers' own unit codes such asB+,C1/C2or Hebrew unit names). Prefixes stay a recommendation for generated ids.- New
MediaAsset(url, type, mimeType, fileName, title, alt, caption, width, height, sizeBytes, previewUrl, role),FileAsset(+ format),ImageAsset. The 1.3.0 gallery item{ type, url }is a validMediaAsset. - New
Experience(type, provider, url, embed, previewUrl, floors[], providerData) for virtual tours, dollhouses, 3D models, 360 video, AR. Vendor neutral;3destateandmatterportlisted as known providers. - New
PriceRange { min, max },UnitSpecs,UnitFeatures,GreenCertification,Reservation,UnitLinks. Money.currencyaccepts any ISO 4217 code (was ILS / USD / EUR).SocialInfoaddstelegramand allows additional networks asname: url.Location:countryCoderequired whencoordinatesare given.
Marketing
marketing.logois anImageAsset({ url, alt? }). The 1.3.0{ square, landscape }pair is deprecated (upgrade:url = square, elselandscape).- Project
marketing.logos[]: credited logos (developer, partner, architect, bank) withtitleandrole. marketing.gallery[]items areMediaAssets; unit models and buildings may carry galleries (multiple images per unit type).- New
marketing.floorPlans[](FileAssetwithpreviewUrl,format,title,role) on project, building, floor and unit model.layoutImageandblueprintdeprecated. - New
marketing.experiences[]on project, building and unit model; newmarketing.documents[]with roles (brochure, priceList, specification, legal).brochurePdfkept. - New
marketing.priceRangeon project and unit model. - Marketing members are now declared per entity (
DeveloperMarketing,ProjectMarketing,BuildingMarketing,FloorMarketing,UnitModelMarketing,UnitMarketing); members that do not apply to an entity are deprecated there (for examplestartingPriceon a developer).
Project, status, payment plan, legal, amenities, interests
status.startDate,status.completionDateadded.paymentPlan.totalPriceadded; installments gainid,title(localized label),amount,dueDate,milestone,description.phasekeeps its 1.3.0 meaning as a machine key; recommended keys invocabularies/paymentPhases.json.- Amenities:
nameremains the 1.3.0 key; a custom amenity (key outside the vocabulary) MUST carrylabel;categoryadded. - Interests:
id,coordinates,showOnMap,descriptionadded;typeis open with the 1.3.0 values as the recommended vocabulary.
Unit models
specs.roomsadded: the advertised habitable-room count under the market's convention (seevocabularies/roomCountConventions.json).specs.bedroomskeeps its literal meaning. The two are independent facts; producers store what the source states and never derive one from the other.specs.storageAreaSqm,specs.parkingSpaces,specs.totalAreaSqmadded.features { orientation[], view, tags[] }added at unit-model level (same object as inventory units).availability(available | last_units | sold_out) added with the derivation rule from inventory: only units with statusavailablecount.
Buildings
floorsAboveGround,floorsBelowGround,yearConstructed,architect,architectureStyle,constructionMaterials[],greenCertifications[]added.Floor.numberrequired (as the 1.3.0 YAML already stated).
Inventory
statusaddsonHoldandbooked(transitions documented invocabularies/unitStatuses.json). Onlyavailableis buyer-available.floorNumber,statusUpdatedAt,priceUpdatedAt,specsandfeaturesoverrides,marketing(unit media),reservation { until, reference },externalIdsadded.- Link integrity rules:
links.modelIdMUST reference a unit model;buildingId/floorIdMUST reference existing ids when given; unit ids unique within a project.
Repository
examples/reorganised per version; 1.4.0 examples include must-fail cases underexamples/1.4.0/invalid/.tools/validate.mjs,tools/build-openapi.mjs,tools/build-vocabularies.mjs,tools/check-vocabularies.mjs; GitHub Actions workflow validates every push and pull request.- README and CONTRIBUTING rewritten for 1.4.0 and the versioning policy.
Schema: schema/1.4.0/reop.schema.json (draft 2020-12). OpenAPI: specifications/reop-1.4.0.yaml. Migration guide: migrations/1.3.0-to-1.4.0.md. Index: versions.json.