# Real estate API

> Published properties with filters and visit requests.

Published properties with filters and visit requests.

| Field | Value |
| --- | --- |
| Base URL | `https://fina.do/api/real-estate/v1` |
| Authentication | `X-Real-Estate-App-Key` (+ customer bearer token to list or cancel own visits) |
| OpenAPI 3.1 | [/api/real-estate/v1/openapi.json](https://fina.do/api/real-estate/v1/openapi.json) |
| Built for | Property listing apps and websites |

Shared rules (app key, envelope, /config, delivery quotes): [Storefront APIs](https://fina.do/developers/storefront-apis.md).

### Endpoints

Base URL: `https://fina.do/api/real-estate/v1`

| Method | Path | Summary | Auth |
| --- | --- | --- | --- |
| GET | `/config` | Get app configuration, business identity (business.vr: FinaVr \| null, the office tour), filter facets (including virtual_tours: true when any published property has a 360 tour), agents.enabled (true when at least one agent is visible) location.default_center ({ lat, lng } centroid of the published coordinates, or null) and the currencies. currency is the business currency (kept for compatibility); currencies is [{ code, symbol, minor_unit }] with the business currency first and every other currency used by a published property (format each price with ITS currency_code); facets.currencies lists the codes present in published properties; facets.price_range_minor is { rent, sale } normalized to the business currency with the latest rate of each currency (a currency without a rate is taken as is), and facets.price_range_minor_by_currency is the raw { USD: { rent, sale }, DOP: { rent, sale } } per currency (null when no price) | App key |
| GET | `/catalog` | List published properties with filters (including agent_id and has_virtual_tour=true\|1; any other value is INVALID_REQUEST), sorting and cursor pagination. Prices may come in different currencies: min_price_minor/max_price_minor and sort=price_asc\|price_desc compare prices NORMALIZED to the business currency using the latest exchange rate of each currency (a currency without a rate is compared as is, unconverted). Each item carries currency_code, rent_price_minor/sale_price_minor in that currency and converted ({ currency_code: business currency, rent_price_minor, sale_price_minor, rate_as_of: YYYY-MM-DD } \| null; null when the property is already in the business currency or has no rate). Each item carries has_virtual_tour (boolean), has_vr (boolean, Fina VR tour or AR model) and agent { id, name, photo_url } \| null. With lat+lng every item also carries distance_m (integer meters, haversine to the published coordinate: the rounded one when the location is approximate; null without coordinates) | App key |
| GET | `/properties/{id}` | Get a published property with gallery, features, location, nearby_places (kind + distance_m, ordered by distance), virtual_tour ({ url, provider: simple_virtual_tour } \| null, url is the 360 viewer to embed in a WebView; kept for compatibility), vr (FinaVr \| null: the same tour plus kind/cover/title and the AR model) its agent (full Agent object, or null to fall back to the business contact), currency_code with rent_price_minor/sale_price_minor in that currency, and converted ({ currency_code: business currency, rent_price_minor, sale_price_minor, rate_as_of } \| null) | App key |
| GET | `/agents` | List the visible agents of the business, ordered by name: { agents: [{ id, name, photo_url, title, languages, properties_count }] } | App key |
| GET | `/agents/{id}` | Get one visible agent (Agent schema). A missing, non-public, inactive or foreign agent answers 404 AGENT_NOT_FOUND | App key |
| GET | `/visit-requests` | List the signed-in customer visit requests, each with the agent { id, name, photo_url, phone, whatsapp_phone } \| null that will contact the customer | Customer token |
| POST | `/visit-requests` | Create a visit request (guest, or signed in when the business requires it) | App key |
| DELETE | `/me` | Delete the signed-in customer account for this business. Returns { deleted, login_removed, pending_visits_kept } | Customer token |
| POST | `/visit-requests/{id}/cancel` | Cancel a visit request of the signed-in customer | Customer token |

Source: https://fina.do/developers#api-real-estate