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"

Разработка с помощью AI

Сегодня большинство интеграций пишет AI. Дайте ему эти два адреса и опишите задачу в двух словах, остальное он прочитает сам.

Промпт, который можно скопировать, заполнив скобки:
Я хочу подключить [мой сайт / мою 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 на сервере сами, а AI сообщите только имя переменной.

Правила

Ключ

Каждый запрос передаёт ключ в заголовке 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"}'