REST API

REST API

Ваші системи читають каталог Realton і вашу CRM, а записують клієнтів, нотатки, завдання й етапи угод від імені людини, яка створила ключ.

Тариф Agency

Швидкий старт

  1. У Realton власник або адміністратор відкриває Налаштування › API і MCP, ставить позначку REST API і натискає Створити ключ. Скопіюйте його відразу: його покажуть лише один раз.
  2. Зберігайте його на сервері, у змінній середовища:
    export REALTON_API_KEY="rtk_live_…"
  3. Зробіть перший запит:
    curl "https://realton.ai/api/v1/projects?place=Dubai&beds=2&limit=5" \
      -H "Authorization: Bearer $REALTON_API_KEY"

Інтеграція за допомогою ШІ

Сьогодні більшість інтеграцій пише ШІ. Дайте йому ці дві адреси й опишіть завдання кількома словами, решту він прочитає сам.

Запит, який можна скопіювати, заповнивши дужки:
Я хочу підключити [мій сайт / мою CRM / мою систему] до REST API Realton.
Спочатку прочитай короткий опис: https://realton.ai/docs/api.md
Повний документ OpenAPI: https://realton.ai/docs/openapi.json
Мій стек: [наприклад, Next.js на Vercel].
Що мені потрібно: [наприклад, показувати на моєму сайті проєкти Realton у Дубаї й оновлювати їх раз на день].
Ключ API лежить у змінній середовища REALTON_API_KEY. Ніколи не питай у мене ключ і ніколи не записуй його в код.

Ніколи не вставляйте ключ у чат. Задайте REALTON_API_KEY на сервері самі, а ШІ повідомте лише назву змінної.

Правила

Ключ

Кожен запит надсилає ключ у заголовку Authorization. Ключ відкриває REST API, лише якщо під час створення було позначено REST API, і лише поки робочий простір на тарифі Agency.

Authorization: Bearer rtk_live_…

Від чийого імені діє запит

Запит діє від імені учасника, який створив ключ, і бачить те саме, що й він: агент своїх клієнтів, власник або адміністратор клієнтів агентства. Коли цей учасник залишає робочий простір, ключ перестає працювати.

Обмеження

До 120 запитів на хвилину на один ключ. Понад це відповідь буде 429 з RATE_LIMITED і retryAfterSec: зачекайте вказану кількість секунд і повторіть запит.

Сторінки

GET /projects повертає до 100 проєктів за раз: limit задає кількість, offset місце початку, а total показує, скільки їх усього.

Ідентифікатори

Ключ проєкту береться з GET /projects, id клієнта з GET /clients, а id угоди з картки клієнта, GET /clients/{id}, у deals[].id.

Клієнтам нічого не надсилається

Жоден запит нічого не надсилає клієнту: POST /brochures повертає посилання, яке надсилає агент. Ціни ті, що вказав забудовник, у його валюті.

Відмови

Відмова приходить як JSON зі сталим code. Орієнтуйтеся на код, а не на текст повідомлення.

{ "code": "plan_required" }
СтатусКодЩо означає
401key_requiredНемає заголовка Authorization із ключем.
401key_invalidКлюч невідомий або його відкликано.
403key_scopeКлюч не відкриває REST API. Створіть ключ із позначкою REST API.
403plan_requiredРобочий простір більше не на тарифі Agency.
403key_member_goneЛюдина, яка створила ключ, залишила робочий простір. Створіть новий ключ.
404not_foundНе знайдено, або цьому учаснику це не доступно.
429RATE_LIMITEDЗабагато запитів за цю хвилину. Зачекайте retryAfterSec секунд.
400place_unknown, whatsapp_invalid, …Поле поза допустимим діапазоном або недопустиме значення. Код називає поле.

Довідник

Кожен запит із полями й прикладом, як у документі OpenAPI.

Базова адреса
https://realton.ai/api/v1

Каталог

GET/projectsSearch the catalog

Projects that fit, newest first, with their price from. Up to 100 a page.

Параметри

НазваТипЩо це
q
у запиті
string ≤ 120Words of a project's or a developer's name.
place
у запиті
string ≤ 80A city or an emirate, by name or slug: Dubai, Batumi, Limassol.
area
у запиті
string ≤ 80An area, by name or slug: Dubai Islands, JVC.
beds
у запиті
integer 0–9Bedrooms: 0 is a studio, 4 is four and more.
maxPrice
у запиті
numberThe most the client would pay, in currency.
currency
у запиті
stringThe currency of maxPrice.
handoverBy
у запиті
integer 2025–2045The latest handover year.
lang
у запиті
en | heThe language of place and area names.
limit
у запиті
integer 1–100How many projects in this page.
offset
у запиті
integerHow many to skip: the next page starts at offset + limit.

Відповідь 200

НазваТипЩо це
totalобов’язковоintegerHow many projects fit, across all pages.
offsetобов’язковоintegerThe offset of this page.
catalogDateобов’язковоstringThe day the catalog was last built, YYYY-MM-DD.
projectsобов’язковоarray

Кожен із них

НазваТипЩо це
keystringThe project key, for GET /projects/{key} and POST /brochures.
namestringThe project's name.
developerstring | nullThe developer's name.
marketae | cy | ge | om | saae, cy, ge, om or sa.
placestring | nullThe city or emirate.
areastring | nullThe area.
stageOFF_PLAN | UNDER_CONSTRUCTION | READYOFF_PLAN, UNDER_CONSTRUCTION or READY.
handoverstring | nullWhen it is handed over, as the developer says it: Q4 2028.
priceFromnumber | nullThe lowest price, in currency.
currencystringThe developer's currency: AED, EUR, USD, OMR, SAR.
bedroomsarrayThe bedroom counts it has; 0 is a studio.
commissionPctnumber | nullThe agent's commission, in percent.
photostring | nullA photo of it.
Приклад
{
  "total": 312,
  "offset": 0,
  "catalogDate": "2026-10-24",
  "projects": [
    {
      "key": "studio:soma-residences",
      "name": "Soma Residences",
      "developer": "Origami Properties",
      "market": "ae",
      "place": "Dubai",
      "area": "Dubai Islands",
      "stage": "OFF_PLAN",
      "handover": "Q4 2028",
      "priceFrom": 1670000,
      "currency": "AED",
      "bedrooms": [
        1,
        2,
        3
      ],
      "commissionPct": 5,
      "photo": "https://…/soma-residences.avif"
    }
  ]
}
curl
curl -X GET "https://realton.ai/api/v1/projects" \
  -H "Authorization: Bearer $REALTON_API_KEY"
GET/projects/{key}One project in full

Unit types with sizes and prices, payment plans, amenities, the gallery and what is nearby.

Параметри

НазваТипЩо це
keyобов’язково
у шляху
stringThe project key from GET /projects.
lang
у запиті
en | heThe language of names, plans and amenities.

Відповідь 200

НазваТипЩо це
entryobjectIts catalog line: the same figures as GET /projects, with title for the name and slugs for place and area.
placeNamestring | nullThe city or emirate.
areaNamestring | nullThe area.
unitTypesarrayEach unit type: label, beds, available (from the inventory), sizeSqft, sizeSqm, priceFrom, currency, pricePerArea, areaUnit.
plansarrayPayment plans: each with its steps (label, timing, percent, phase) and its share before and after handover.
dldPctnumber | nullDubai's registration fee on booking, in percent; null elsewhere.
amenitiesarrayWhat the project offers.
galleryobjectcount, and images with their url.
nearbyarrayPlaces near it: category, name, km.
curl
curl -X GET "https://realton.ai/api/v1/projects/{key}" \
  -H "Authorization: Bearer $REALTON_API_KEY"

Клієнти

GET/clientsYour clients

An agent's own clients; an owner's or an admin's, the agency's. Last active first.

Параметри

НазваТипЩо це
q
у запиті
string ≤ 80A name, a number or an email to look for.

Відповідь 200

НазваТипЩо це
clientsобов’язковоarray

Кожен із них

НазваТипЩо це
idstringThe client id.
namestring | nullTheir name.
whatsappstring | nullTheir number.
emailstring | nullTheir email.
languagestring | nullThe language they speak.
sourcestringWhere they came from.
stageNEW | CONTACTED | VIEWING | EOI | BOOKED | WON | LOSTThe stage of their most advanced open deal.
projectstring | nullThe project of that deal.
lastActivityAtstringThe last thing that happened with them, ISO date-time.
ownerUserIdstringThe member they belong to.
openTasksintegerTheir open tasks.
curl
curl -X GET "https://realton.ai/api/v1/clients" \
  -H "Authorization: Bearer $REALTON_API_KEY"
POST/clientsA new client

A name and at least one way to reach them is the usual; a name alone is accepted.

Тіло запиту

НазваТипЩо це
nameобов’язковоstring ≤ 120Their full name.
whatsappstring ≤ 30A number with its country code, +971 50 555 0147.
emailstring ≤ 200An email address.
languagestring ≤ 5The language they speak, a two-letter code: en, ar, he, ru…
Приклад
{
  "name": "Elena Petrova",
  "whatsapp": "+971505550147",
  "language": "ru"
}

Відповідь 201

НазваТипЩо це
idstringThe client id.
namestring | nullTheir name.
languagestring | nullThe language they speak.
whatsappstring | nullTheir number, E.164.
emailstring | nullTheir email.
ownerUserIdstringThe member they belong to.
updatedAtstringISO date-time.
curl
curl -X POST "https://realton.ai/api/v1/clients" \
  -H "Authorization: Bearer $REALTON_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Elena Petrova","whatsapp":"+971505550147","language":"ru"}'
GET/clients/{id}A client's card

Their details, what they are looking for, and their deals with each deal's id for PATCH /deals/{id}.

Параметри

НазваТипЩо це
idобов’язково
у шляху
stringThe client id from GET /clients.
lang
у запиті
en | heThe language of place names.

Відповідь 200

НазваТипЩо це
idstringThe client id.
namestring | nullTheir name.
whatsappstring | nullTheir number.
emailstring | nullTheir email.
languagestring | nullThe language they speak.
requirementsobjectWhat they are looking for: places, bedrooms, budget, handover.
ownerNamestring | nullThe member they belong to.
dealsarrayTheir deals: id, stage, projectKey, projectTitle, beds, unitLabel, price, currency, commissionPct, commission, lostReason.
curl
curl -X GET "https://realton.ai/api/v1/clients/{id}" \
  -H "Authorization: Bearer $REALTON_API_KEY"
POST/clients/{id}/notesA note on a client's card

Free text on the client's timeline, as the member.

Параметри

НазваТипЩо це
idобов’язково
у шляху
stringThe client id.

Тіло запиту

НазваТипЩо це
textобов’язковоstring ≤ 4000The note.
Приклад
{
  "text": "Wants a sea view, budget AED 2M, moving in 2028."
}

Відповідь 201

НазваТипЩо це
idобов’язковоstringThe note id.
curl
curl -X POST "https://realton.ai/api/v1/clients/{id}/notes" \
  -H "Authorization: Bearer $REALTON_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Wants a sea view, budget AED 2M, moving in 2028."}'

Завдання

GET/tasksYour tasks

The member's own tasks, with how many there are in each scope.

Параметри

НазваТипЩо це
scope
у запиті
open | overdue | today | upcoming | someday | doneopen is every task not done.

Відповідь 200

НазваТипЩо це
tasksобов’язковоarray
countsобов’язковоobjectHow many tasks in overdue, today, upcoming, someday and done.

Кожен із них

НазваТипЩо це
idstringThe task id.
titlestringWhat to do.
notestring | nullMore words about it.
dueAtstring | nullWhen, ISO date-time.
dueKindAT | DAY | NONEAT, DAY or NONE.
doneAtstring | nullWhen it was done.
scopeoverdue | today | upcoming | someday | doneWhere it stands now, in the member's time zone.
contactobject | nullThe client it is for: id and name.
dealIdstring | nullThe deal it belongs to.
curl
curl -X GET "https://realton.ai/api/v1/tasks" \
  -H "Authorization: Bearer $REALTON_API_KEY"
POST/tasksA new task

A task at a time, on a day, or with no date; for a client when clientId is given.

Тіло запиту

НазваТипЩо це
titleобов’язковоstring ≤ 200What to do.
notestring ≤ 2000More words about it.
dueAtstring ≤ 40When: an ISO date-time with its offset, 2026-10-25T11:00:00+04:00. With dueKind DAY, any time on that day.
dueKindAT | DAY | NONEAT for a time, DAY for a whole day, NONE for no date.
clientIdstringThe client the task is for.
Приклад
{
  "title": "Call Elena about Soma Residences",
  "dueAt": "2026-10-25T11:00:00+04:00",
  "dueKind": "AT",
  "clientId": "cm2x8k1qz0001abcdeffghijk"
}

Відповідь 201

НазваТипЩо це
idstringThe task id.
titlestringWhat to do.
notestring | nullMore words about it.
dueAtstring | nullWhen, ISO date-time.
dueKindAT | DAY | NONEAT, DAY or NONE.
doneAtstring | nullWhen it was done.
scopeoverdue | today | upcoming | someday | doneWhere it stands now, in the member's time zone.
contactobject | nullThe client it is for: id and name.
dealIdstring | nullThe deal it belongs to.
curl
curl -X POST "https://realton.ai/api/v1/tasks" \
  -H "Authorization: Bearer $REALTON_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Call Elena about Soma Residences","dueAt":"2026-10-25T11:00:00+04:00","dueKind":"AT","clientId":"cm2x8k1qz0001abcdeffghijk"}'

Угоди

PATCH/deals/{id}Move a deal's stage

A deal's id is on its client's card (GET /clients/{id}, deals[].id).

Параметри

НазваТипЩо це
idобов’язково
у шляху
stringThe deal id.

Тіло запиту

НазваТипЩо це
stageобов’язковоNEW | CONTACTED | VIEWING | EOI | BOOKED | WON | LOSTThe new stage.
lostReasonstring ≤ 200Why it was lost; read only with LOST.
Приклад
{
  "stage": "VIEWING"
}

Відповідь 200

НазваТипЩо це
okобов’язковоboolean
curl
curl -X PATCH "https://realton.ai/api/v1/deals/{id}" \
  -H "Authorization: Bearer $REALTON_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"stage":"VIEWING"}'

Брошури

POST/brochuresA brochure link

A brochure of a project in your brand, with open tracking, for the agent to send. Realton does not send it.

Тіло запиту

НазваТипЩо це
projectобов’язковоstringThe project key.
clientIdstringThe client it is for: their opens show on their card.
langобов’язковоen | heThe language of the brochure.
Приклад
{
  "project": "studio:soma-residences",
  "clientId": "cm2x8k1qz0001abcdeffghijk",
  "lang": "en"
}

Відповідь 201

НазваТипЩо це
idобов’язковоstringThe link id.
urlобов’язковоstringThe address to send: it opens the brochure in the agency's brand.
projectобов’язковоstringThe project name.
langобов’язковоstringThe language of the brochure.
clientобов’язковоstring | nullThe client's name, when it is for one.
Приклад
{
  "id": "cm2x9p0aa0002abcdeffghijk",
  "url": "https://realton.ai/b/Hk3…",
  "project": "Soma Residences",
  "lang": "en",
  "client": "Elena Petrova"
}
curl
curl -X POST "https://realton.ai/api/v1/brochures" \
  -H "Authorization: Bearer $REALTON_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"project":"studio:soma-residences","clientId":"cm2x8k1qz0001abcdeffghijk","lang":"en"}'