R

REOP API

v1.1.0

Introduction

Welcome to the Real Estate Open Protocol (REOP) API v1.1.0. This API standardizes global real estate development data, featuring a decoupled inventory architecture and AI-native search capabilities.

Base URL https://api.reop.io/v1
Content-Type application/json
Protocol REOP v1.1.0

Authentication

Authentication is handled via Bearer Tokens. You must include the Authorization header in all requests.

Authorization: Bearer 

Schema Reference

The REOP Protocol v1.1.0 defines a strict schema for all entities. Use this reference to find specific field names for your payloads.

1. The Golden Record

This is a complete example of a fully populated Project object. Click to expand and view all available nodes (Legal, Marketing, Specs, etc.).

View Master JSON Structure
{
  "protocol": {
    "name": "The Real Estate Open Protocol",
    "version": "1.1.0",
    "domain": "reop.io",
    "generatedAt": "2025-11-30T16:00:00Z"
  },
  "developer": {
    "id": "dev_tlv_urban_01",
    "name": "Tel Aviv Urban Heights",
    "description": {
      "en": "A premier developer specializing in Bauhaus-preservation luxury residences.",
      "he": "יזם מוביל המתמחה במגורי יוקרה ושימור באוהאוס."
    },
    "companyDetails": {
      "legalName": "TLV Urban Heights Ltd.",
      "companyId": "515998877",
      "vatId": "IL-515998877"
    },
    "history": {
      "yearsExperience": 15,
      "projectsDelivered": 8,
      "unitsSold": 1200
    },
    "contact": {
      "email": "sales@tlv-urban.example",
      "phone": "+97235559999",
      "whatsapp": "+972509998888"
    },
    "marketing": {
      "website": "https://tlv-urban.example",
      "logo": {
        "square": "https://cdn.reop.io/dev/logo-sq.png",
        "landscape": "https://cdn.reop.io/dev/logo-wide.png"
      },
      "social": {
        "instagram": "https://instagram.com/tlv_urban",
        "linkedin": "https://linkedin.com/company/tlv-urban"
      }
    },
    "projects": [
      {
        "id": "prj_rothschild_collection",
        "name": "The Rothschild Collection",
        "description": {
          "en": "An architectural icon combining a preserved 1920s ecletic building with a modern glass tower.",
          "he": "אייקון אדריכלי המשלב מבנה לשימור משנות ה-20 עם מגדל זכוכית מודרני."
        },
        "type": "luxury",
        "status": {
          "state": "underConstruction",
          "phase": "structural_frame",
          "progressPercentage": 45,
          "handoverDate": "2027-08-30"
        },
        "location": {
          "address": "Rothschild Blvd 142",
          "city": "Tel Aviv-Yafo",
          "postalCode": "6527101",
          "countryCode": "IL",
          "coordinates": { "lat": 32.0625, "lng": 34.7766 }
        },
        "marketing": {
          "startingPrice": { "amount": 6200000, "currency": "ILS" },
          "heroImage": "https://cdn.reop.io/prj/roth142/hero.jpg",
          "projectUrl": "https://tlv-urban.example/rothschild",
          "brochurePdf": "https://cdn.reop.io/prj/roth142/brochure.pdf",
          "gallery": [
            { "type": "image", "url": "https://cdn.reop.io/prj/roth142/lobby.jpg" },
            { "type": "video", "url": "https://cdn.reop.io/prj/roth142/tour.mp4" }
          ]
        },
        "paymentPlan": {
          "currency": "ILS",
          "installments": [
             { "phase": "signing", "percentage": 15 },
             { "phase": "foundation", "percentage": 20 },
             { "phase": "completion", "percentage": 65 }
          ]
        },
        "legal": {
          "permitNumber": "TA-24-9981",
          "escrowBank": "Bank Leumi",
          "projectBankAccountId": "10-222-333444",
          "lawyer": "Goldfarb Seligman & Co."
        },
        "interests": [
          { "name": "Habima Theater", "type": "culture", "distanceMeters": 300 },
          { "name": "Rothschild Center", "type": "mall", "distanceMeters": 150 }
        ],
        "amenities": [
          { "name": "doorman", "cost": "included" },
          { "name": "pool", "cost": "common" },
          { "name": "smartHome", "cost": "included" }
        ],
        
        "unitModels": [
          {
            "id": "model_urban_2br",
            "name": "Type A - Boulevard View",
            "description": { "en": "City facing 2 bedroom apartment." },
            "specs": { 
              "bedrooms": 2, 
              "bathrooms": 2, 
              "interiorAreaSqm": 92, 
              "balconyAreaSqm": 14 
            },
            "marketing": {
              "startingPrice": { "amount": 6200000, "currency": "ILS" },
              "marketingPlan": "https://cdn.reop.io/plans/type-a-colored.jpg",
              "blueprint": "https://cdn.reop.io/plans/type-a-dwg.pdf"
            }
          },
          {
            "id": "model_sky_3br",
            "name": "Type B - Sea & City",
            "specs": { 
              "bedrooms": 3, 
              "bathrooms": 2.5, 
              "interiorAreaSqm": 125, 
              "balconyAreaSqm": 22 
            },
            "marketing": {
              "startingPrice": { "amount": 8500000, "currency": "ILS" },
              "marketingPlan": "https://cdn.reop.io/plans/type-b-colored.jpg"
            }
          }
        ],

        "buildings": [
          {
            "id": "bldg_tower_1",
            "name": "The Glass Tower",
            "numberOfFloors": 30,
            "numberOfElevators": 4,
            "marketing": {
              "startingPrice": { "amount": 6200000, "currency": "ILS" }
            },
            "floors": [
              {
                "id": "f_12",
                "number": 12,
                "name": "Lower Sky",
                "marketing": { "startingPrice": { "amount": 6250000, "currency": "ILS" } }
              }
            ]
          }
        ],

        "inventory": [
          {
            "id": "u_1201",
            "unitNumber": "1201",
            "status": "available",
            "price": { "amount": 6350000, "currency": "ILS" },
            "links": {
              "modelId": "model_urban_2br",
              "buildingId": "bldg_tower_1",
              "floorId": "f_12"
            },
            "features": {
              "orientation": ["west", "north"],
              "view": "sea_partial",
              "tags": ["smartHome", "safeRoom"]
            }
          }
        ]
      }
    ]
  }
}

2. How to Update Specific Fields

REOP supports Partial Updates via the PATCH method. You do not need to send the full object. You only need to send the path to the field you want to change.

Goal Endpoint Payload
Update Hero Image PATCH /projects/{id}
{
  "marketing": {
    "heroImage": "https://new-url.com/img.jpg"
  }
}
Update Contact Info PATCH /developers/{id}
{
  "contact": {
    "email": "new_sales@example.com",
    "whatsapp": "+97250000000"
  }
}
Update Unit Specs PATCH .../unit-models/{id}
{
  "specs": {
    "interiorAreaSqm": 105.5
  }
}

Developers

Manage the root entities of the protocol.

Method Endpoint Description
GET /developers List all developers (Paginated).
POST /developers Register a new Developer. Requires companyDetails.
GET /developers/{id} Get full developer profile.
PATCH /developers/{id} Update specific fields (logo, contact).
DEL /developers/{id} Archive a developer.

Projects

The core entity of REOP. Projects contain the full "Golden Record".

Method Endpoint Description
GET /projects List projects. Supports filtering ?city=Tel Aviv.
POST /projects Create a Project. Accepts nested JSON.
GET /projects/{id} Get the full Project JSON.
PUT /projects/{id} Full Update (Replace).
PATCH /projects/{id} Partial Update.

Nested Hierarchy

Directly manipulate sub-nodes without sending the entire project payload.

POST /projects/{id}/unit-models Add a new Unit Model (e.g., "Type A").
PATCH /projects/{id}/unit-models/{modelId} Update specs for a specific model.
POST /projects/{id}/buildings Add a new Building/Tower to a project.

Inventory Management

Manage the availability of specific units. This is decoupled from the Project structure.

Update Availability

POST /inventory/status-update

Bulk update status for one, many, or all units in a scope.

Example A: Update Specific Units

{
  "project_id": "prj_rothschild_collection",
  "scope": "specific",
  "unit_ids": ["u_1201", "u_1202"],
  "status": "sold"
}

Example B: Release a Floor

{
  "project_id": "prj_rothschild_collection",
  "scope": "filter",
  "filter": { "floor": 15 },
  "status": "available"
}

Supported Statuses: available, reserved, sold, not_for_sale, booked.

Smart Query

Flexible text-based filtering using Shortcuts and Operators. Ideal for search bars.

GET /search/query

Supported Syntax

  • Shortcuts: 1M, 500k
  • Units: sqm, sqf
  • Operators: >, <, : (Equals)
  • Amenities: +pool (Must have), -gym (Exclude)

Examples

Show all studio apartments with view to the sea q=rooms:0 +view:sea
Studios, sea view, >40 sqm q=rooms:0 +view:sea size>40sqm
Complex Location + Specs q=location:"North Tel Aviv" rooms:0 +view:sea price<1M USD

Dictionary

REOP enforces standardized naming for amenities, views, and interests. Use this dictionary to map your internal values to the protocol.

GET /meta/dictionary

View Full Reserved Keywords List
{
  "amenities": [
    "airConditioning", "heating", "centralHeating", "underfloorHeating",
    "elevator", "freightElevator", "shabbatElevator",
    "parking", "undergroundParking", "coveredParking", "robotParking", "guestParking", "evCharging",
    "storage", "bicycleStorage", "strollerRoom",
    "balcony", "terrace", "privateGarden", "roofDeck",
    "pool", "infinityPool", "heatedPool", "kidsPool", "indoorPool", "jacuzzi",
    "sauna", "steamRoom", "spa", "gym", "yogaStudio",
    "tennisCourt", "squashCourt", "basketballCourt", "paddleCourt", "runningTrack",
    "playground", "kidsClub", "gameRoom", "cinema", "library",
    "coworkingSpace", "conferenceRoom", "lounge", "partyRoom",
    "bbqArea", "outdoorKitchen",
    "doorman", "concierge", "securitySystem", "cctv", "intercom", "videoIntercom", "keylessEntry",
    "smartHome", "generator", "solarPanels", "waterTank",
    "accessibility", "wheelchairAccessible",
    "furnished", "partiallyFurnished",
    "kitchenIsland", "walkInCloset", "safeRoom", "highCeilings", "doubleGlazing",
    "parquetFlooring", "marbleFlooring", "fireplace",
    "dishwasher", "washingMachine", "dryer", "microwave", "refrigerator", "wineCellar",
    "petsAllowed", "smokingAllowed",
    "cleaningService", "laundryService", "shuttleService", "maintenanceOnSite"
  ],
  "interests": [
    "school", "kindergarten", "nursery", "university", "college", "library",
    "busStation", "trainStation", "subwayStation", "tramStation", "lightRailStation",
    "airport", "highwayAccess", "taxiStand", "bikeShare", "ferryTerminal",
    "hospital", "clinic", "pharmacy", "dentist", "veterinarian",
    "supermarket", "groceryStore", "convenienceStore", "bakery", "market",
    "mall", "shoppingCenter", "departmentStore", "outlet", "furnitureStore", "hardwareStore",
    "bank", "atm", "postOffice",
    "policeStation", "fireStation", "cityHall", "embassy",
    "synagogue", "church", "mosque", "temple", "religiousCenter",
    "park", "dogPark", "playground", "natureReserve",
    "beach", "lake", "river", "marina", "forest", "mountain",
    "gym", "sportsCenter", "swimmingPool", "stadium", "golfCourse", "skatePark",
    "restaurant", "cafe", "bar", "pub", "coffeeShop", "fastFood", "foodCourt",
    "cinema", "theater", "museum", "artGallery", "concertHall", "operaHouse",
    "zoo", "aquarium", "themePark", "bowlingAlley", "casino", "nightClub", "hotel"
  ],
  "orientations": [
    "north", "south", "east", "west",
    "northEast", "northWest", "southEast", "southWest"
  ],
  "views": [
    "sea_full", "sea_partial", "city", "park", "garden",
    "pool", "mountain", "lake", "river", "marina", "forest",
    "street", "courtyard", "golf_course", "landmark", "internal"
  ],
  "currencies": ["ILS", "USD", "EUR"]
}

Implementation Guide

Handling "Decoupled" Results:

Since REOP separates Catalog (Unit Models) from Inventory (Units), search results will have an item_type field.

item_type: "model" Generic layout (e.g., "Type A"). Price is usually startingPrice. Availability unknown.
item_type: "unit" Specific physical unit. Price is exact. Availability is known.

Example Response Object

{
  "data": [
    {
      "id": "u_1201",
      "item_type": "unit", 
      "title": "Unit 1201 - The Glass Tower",
      "price": { "amount": 6350000, "currency": "ILS" },
      "features": ["sea_view", "mamad"]
    },
    {
      "id": "model_urban_2br",
      "item_type": "model",
      "title": "Type A - Boulevard View",
      "startingPrice": { "amount": 6200000, "currency": "ILS" },
      "note": "Contact developer for specific availability."
    }
  ]
}