Skip to content

REOP 1.4.0

Latest

Choose a tag to compare

@Interjet Interjet released this 23 Oct 12:43
· 5 commits to main since this release
78bbf91

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. RealEstateCatalog is unchanged and remains the feed format.
  • New InventoryUpdate { protocol, projectId, updates[] }: a partial, idempotent delta of unit availability for ERP / CRM synchronisation.
  • protocol.version is now required on every document. protocol.generator (free text naming the producer) and protocol.defaultLocale added; protocol.domain deprecated in favour of generator.
  • extensions object 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.json indexes releases; vocabularies/*.json publish the controlled values with labels.

Shared objects

  • Id is 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 as B+, C1/C2 or 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 valid MediaAsset.
  • New Experience (type, provider, url, embed, previewUrl, floors[], providerData) for virtual tours, dollhouses, 3D models, 360 video, AR. Vendor neutral; 3destate and matterport listed as known providers.
  • New PriceRange { min, max }, UnitSpecs, UnitFeatures, GreenCertification, Reservation, UnitLinks.
  • Money.currency accepts any ISO 4217 code (was ILS / USD / EUR).
  • SocialInfo adds telegram and allows additional networks as name: url.
  • Location: countryCode required when coordinates are given.

Marketing

  • marketing.logo is an ImageAsset ({ url, alt? }). The 1.3.0 { square, landscape } pair is deprecated (upgrade: url = square, else landscape).
  • Project marketing.logos[]: credited logos (developer, partner, architect, bank) with title and role.
  • marketing.gallery[] items are MediaAssets; unit models and buildings may carry galleries (multiple images per unit type).
  • New marketing.floorPlans[] (FileAsset with previewUrl, format, title, role) on project, building, floor and unit model. layoutImage and blueprint deprecated.
  • New marketing.experiences[] on project, building and unit model; new marketing.documents[] with roles (brochure, priceList, specification, legal). brochurePdf kept.
  • New marketing.priceRange on 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 example startingPrice on a developer).

Project, status, payment plan, legal, amenities, interests

  • status.startDate, status.completionDate added.
  • paymentPlan.totalPrice added; installments gain id, title (localized label), amount, dueDate, milestone, description. phase keeps its 1.3.0 meaning as a machine key; recommended keys in vocabularies/paymentPhases.json.
  • Amenities: name remains the 1.3.0 key; a custom amenity (key outside the vocabulary) MUST carry label; category added.
  • Interests: id, coordinates, showOnMap, description added; type is open with the 1.3.0 values as the recommended vocabulary.

Unit models

  • specs.rooms added: the advertised habitable-room count under the market's convention (see vocabularies/roomCountConventions.json). specs.bedrooms keeps 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.totalAreaSqm added.
  • 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 status available count.

Buildings

  • floorsAboveGround, floorsBelowGround, yearConstructed, architect, architectureStyle, constructionMaterials[], greenCertifications[] added. Floor.number required (as the 1.3.0 YAML already stated).

Inventory

  • status adds onHold and booked (transitions documented in vocabularies/unitStatuses.json). Only available is buyer-available.
  • floorNumber, statusUpdatedAt, priceUpdatedAt, specs and features overrides, marketing (unit media), reservation { until, reference }, externalIds added.
  • Link integrity rules: links.modelId MUST reference a unit model; buildingId / floorId MUST reference existing ids when given; unit ids unique within a project.

Repository

  • examples/ reorganised per version; 1.4.0 examples include must-fail cases under examples/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.