Reelly API v2.0: Getting Started
About Reelly
Reelly is a digital platform for real estate professionals, developers, and marketplaces. It provides access to a unified catalogue of real estate projects, developers, and related data through a simple and consistent API. The API is designed for integration into CRM systems, marketplaces, or partner platforms that need to display or analyze real estate information in real time.
Reelly’s API is built around read-only endpoints (GET requests only), giving partners secure and structured access to the platform’s data without altering source information.
What You’ll Achieve
- build property catalogs,
- power search and filter interfaces,
- integrate project listings into websites and CRM systems,
- fetch map-optimized markers,
- access dynamic dictionaries (countries, regions, statuses, etc.).
The API is fully read-only (GET-only).
This ensures safety, consistency, and prevents unauthorized changes.
Key Features
| Feature | Description |
|---|---|
| GET-only API | No write operations. Secure and stable. |
| Stable entities | Projects, Developers, Locations, Regions, Countries, Markers. |
| Dynamic lookup tables | Sale statuses, project statuses, languages, etc. |
| Advanced filtering & sorting | Country, region, location, developer, price range, size, status. |
| Map-optimized endpoints | /projects/markers returns lightweight marker payloads. |
| Geodata support | Polygons, LineStrings, latitude/longitude for mapping. |
Environments & Base URL
| Environment | URL |
|---|---|
| Protocol: | HTTP/1.1 (REST) |
| Production (used for all queries) | https://api-reelly.up.railway.app/api/v2/clients |
| Sandbox | Not provided |
Authentication
- Header Name:
X-API-Key - Value: Your unique API key provided by the Reelly sales team.
Your API Key is secret. Do not expose it in client-side code (frontend), do not publish it in public repositories, and do not share it with unauthorized third parties.
To obtain your API key, please contact Reelly Sales Department or your account manager. The key is unique for each client and must be included in every request header.
No IP or domain restrictions.
Authentication errors:
| Status | Reason |
|---|---|
| 401 Unauthorized | Missing API key |
| 403 Forbidden | Invalid / expired API key |
Core Entities Overview
Reelly data is organized into the following entity groups:
| Group | Endpoints |
|---|---|
| Metadata / Geodata | /countries, /regions, /projects/languages |
| Projects | /projects, /projects/id, /projects/markers |
| Developers | /developers, /developers/id/logo, /developers/logos |
| Units | /units/types |
Endpoint Overview (Short Catalogue)
Metadata / Dictionaries
| Endpoint | Purpose |
|---|---|
| GET /countries | List of countries where active projects exist. |
| GET /regions | List of regions with active projects. |
| GET /projects/statuses | List of project lifecycle statuses. |
| GET /projects/sale-statuses | List of project sale statuses. |
| GET /projects/languages | Supported languages. |
Developers
| Endpoint | Purpose |
|---|---|
| GET /developers | Full list of developers (updated structure). |
| GET /developers/logos | Lightweight list of developers + logos. |
| GET /developers/id/logo | Logo and metadata for a developer. |
Projects
| Endpoint | Purpose |
|---|---|
| GET /projects | Main endpoint: full list with extensive filtering. |
| GET /projects/id | Full detailed project card. |
| GET /projects/markers | Lightweight map-optimized project markers. |
Units
| Endpoint | Purpose |
|---|---|
| GET /units/types | List of available unit types (Apartment, Villa, etc.). |
Request Format
JSON is the primary and fully supported format, and it is used by default.
When format=xml is provided, the response is returned in XML, but the XML representation is simplified and may not reflect the full structure available in JSON.
| Field name | Type | Required | Default | Notes |
|---|---|---|---|---|
| format | string | no | json | Supported values: json, xml. JSON is the main and complete format. |
Example:
GET /projects?country=Dubai&format=json
Response Structure & Conventions
JSON Structure
Responses may include:
- primitives (string, int, float, boolean)
- arrays
- nested objects
Geodata
Projects may include:
polygon(LineString),latitude,longitude
Media
Image metadata follows a consistent structure:
{ "url": "https://...", "metadata": { "mime": "image/png", "size": 689825, "width": 500, "height": 500 }}
Pagination
Some endpoints in the Reelly Clients API use a consistent offset-based pagination model.
Pagination ensures predictable performance, stable response times, and efficient data handling for large datasets.
Clients should always use pagination when retrieving collections, especially:
- when rendering large lists (projects, markers, units),
- when syncing data to local storage,
- when building infinite-scroll or “Load more” interfaces,
- when exporting or processing datasets incrementally.
If pagination parameters are not provided, default values are applied.
The API does not return the full dataset in a single response when the result is large — instead, the client must follow the next URLs provided in the response.
Pagination Parameters
limit
| Field name | Type | Required | Default | Notes |
|---|---|---|---|---|
| limit | integer | No | 20 | Defines how many items are returned per page. Useful for controlling page size or reducing payloads. |
offset
| Field name | Type | Required | Default | Notes |
|---|---|---|---|---|
| offset | integer | No | 0 | Number of items to skip before starting the page. Works with limit to navigate through pages. |
Pagination Fields in Responses
All paginated endpoints return the same envelope:
| Field | Type | Description |
|---|---|---|
| count | integer | Total number of matching records across all pages. |
| next | string or null | Full URL for the next page, including updated offset. |
| previous | string or null | Full URL for the previous page. |
| results | array | Items for the current page. |
Example:
{ "count": 1906, "next": "https://api-reelly.up.railway.app/api/v2/clients/projects?limit=20&offset=20", "previous": null, "results": [ { "...": "..." } ]}
Typical Usage
Get the first page (default pagination)
GET /api/v2/clients/projects
Get the second page
GET /api/v2/clients/projects?limit=20&offset=20
Increase or decrease page size
GET /api/v2/clients/projects?limit=50
Jump to an arbitrary offset (example: page 10 with 20 items per page)
GET /api/v2/clients/projects?limit=20&offset=180
Behavior Notes
nextandpreviousalways contain fully constructed URLs that can be called directly.- When there is no additional data,
nextbecomesnull. - When the first page is requested,
previousis alwaysnull. - Pagination works identically across all list endpoints, including:
/projects/projects/markers/units/developers- all metadata lists
Multilingual Support
All clients/api/v2 endpoints support the language query parameter, which controls the language of text content returned in the response.
When this parameter is provided, the API returns translatable text fields and human-readable labels in the requested language. If a translation is not available for a specific field, the API falls back to English (en-us) without error.
How It Works
The language parameter affects two categories of content:
| Content Type | Description | Examples |
|---|---|---|
| Model text fields | Free-text fields stored with per-language translations in the database | overview, description, name (projects, developers, buildings, districts, regions) |
| Status & type labels | Human-readable labels derived from fixed value sets, resolved in the requested language | construction_status, sale_status, unit_type, furnishing |
Note: The
languageparameter affects only the representation of text values in the response. It does not influence filtering, sorting, pagination, currency conversion, or area unit conversion.
Fallback Behavior
Translation coverage varies by field and language. The API applies the following fallback rules:
- If a translation exists for the requested language — it is returned.
- If a translation does not exist for a specific field — the field is returned in English (
en-us). - If the
languageparameter is omitted — all content is returned in English by default. - Fallback is applied per field independently — a single response may contain some fields translated and others in English.
Supported Languages
To get the current list of supported language codes, use:
GET /api/v2/clients/projects/languages
The following languages are confirmed to return translated content:
| Code | Language | Default |
|---|---|---|
en-us | English | Yes |
ar | Arabic | No |
fr | French | No |
de | German | No |
he | Hebrew | No |
hi | Hindi | No |
it | Italian | No |
pl | Polish | No |
ru | Russian | No |
tr | Turkish | No |
zh | Chinese | No |
Note: The
/projects/languagesendpoint may return additional language codes. Only the languages listed above are confirmed to return translated content. Other codes fall back to English (en-us).
Usage Examples
Request project list with Russian localization:
GET /api/v2/clients/projects?language=ru
Request project details with German localization:
GET /api/v2/clients/projects/2211?language=de
Combined with other parameters — language is fully independent:
GET /api/v2/clients/projects?language=tr&preferred_currency=AED&limit=20
Notes
- The
languageparameter is supported across allclients/api/v2endpoints. - Always retrieve valid language codes from
/api/v2/clients/projects/languages— do not hardcode language codes in your integration. - Translation coverage is continuously expanding. Fields not yet translated fall back to English silently.
- The parameter value is case-sensitive. Use codes exactly as returned by the
/projects/languagesendpoint (e.g.,en-us, notEN-US).
Rate Limits
The Reelly API does not enforce fixed rate limits. Partners can use the API freely under normal conditions.
In cases of peak load or unusual traffic patterns, Reelly reserves the right to apply request limits on an individual basis, as agreed with the partner.
If you anticipate high request volumes, please contact your Reelly account manager in advance.
If limits are exceeded:
HTTP 429 Too Many Requests
Recommended:
- cache dictionary endpoints,
- avoid unnecessary loops,
- use pagination (recommended pattern described below).
Error Handling
Standard HTTP Codes
| Code | Meaning |
|---|---|
| 200 OK | Successful response |
| 400 Bad Request | Invalid parameters |
| 401 Unauthorized | Missing API key |
| 403 Forbidden | Invalid/expired API key |
| 404 Not Found | Resource does not exist |
| 429 Too Many Requests | Rate limit exceeded |
| 500 Internal Server Error | Platform error |
First Request: Projects List
To get started, try the Projects List endpoint — it returns the list of real estate projects available through the Reelly platform.
GET https://api.reelly.io/apiv2/clients/projectsHeaders: X-API-Key: your_api_key_here
Support and Contact
For API support, questions, or feedback:
- Email: [email protected]
- Documentation site: docs.reelly.ai
Updated 21 days ago