REST API

La REST API

Sus sistemas leen el catálogo de Realton y su CRM, y registran clientes, notas, tareas y etapas de operaciones, en nombre de quien creó la clave.

Plan Agency

Inicio rápido

  1. En Realton, un propietario o un administrador abre Configuración › API y MCP, marca REST API y elige Crear una clave. Cópiela enseguida: solo se muestra una vez.
  2. Guárdela en su servidor, en una variable de entorno:
    export REALTON_API_KEY="rtk_live_…"
  3. Haga su primera llamada:
    curl "https://realton.ai/api/v1/projects?place=Dubai&beds=2&limit=5" \
      -H "Authorization: Bearer $REALTON_API_KEY"

Construirlo con una IA

Hoy la mayoría de las integraciones las escribe una IA. Dele estas dos direcciones y la tarea en pocas palabras; el resto lo lee por su cuenta.

Un prompt para copiar, con los corchetes completados:
Quiero conectar [mi sitio web / mi CRM / mi sistema] a la REST API de Realton.
Lea primero la guía breve: https://realton.ai/docs/api.md
El documento OpenAPI completo: https://realton.ai/docs/openapi.json
Mi stack: [por ejemplo, Next.js en Vercel].
Lo que quiero: [por ejemplo, mostrar en mi web los proyectos de Realton en Dubái, actualizados una vez al día].
La clave de la API está en la variable de entorno REALTON_API_KEY. No me pida nunca la clave y no la escriba nunca en el código.

Nunca pegue la clave en un chat. Defina usted REALTON_API_KEY en el servidor y dígale a la IA solo su nombre.

Las reglas

La clave

Cada llamada envía la clave en la cabecera Authorization. Una clave da acceso a la REST API solo si se marcó REST API al crearla, y solo mientras el espacio de trabajo esté en Agency.

Authorization: Bearer rtk_live_…

En nombre de quién actúa una llamada

Una llamada actúa en nombre del miembro que creó la clave, con lo que ese miembro puede ver: un agente, sus propios clientes; un propietario o un administrador, los de la agencia. Cuando ese miembro deja el espacio de trabajo, la clave deja de funcionar.

Límites

Hasta 120 llamadas por minuto y clave. Por encima, la respuesta es 429 con RATE_LIMITED y retryAfterSec: espere esos segundos y vuelva a llamar.

Páginas

GET /projects devuelve hasta 100 proyectos cada vez: limit indica cuántos, offset desde dónde empezar y total cuántos hay en total.

Identificadores

La clave de un proyecto sale de GET /projects, el id de un cliente de GET /clients y el id de una operación de la ficha del cliente, GET /clients/{id}, en deals[].id.

Nada llega a un cliente

Ninguna llamada envía nada a un cliente: POST /brochures devuelve un enlace para que el agente lo envíe. Los precios son los del desarrollador, en su moneda.

Rechazos

Un rechazo es un JSON con un code estable. Decida según el código, nunca según el mensaje.

{ "code": "plan_required" }
EstadoCódigoQué significa
401key_requiredNo hay cabecera Authorization con una clave.
401key_invalidLa clave no existe o se ha revocado.
403key_scopeLa clave no da acceso a la REST API. Cree una con REST API marcado.
403plan_requiredEl espacio de trabajo ya no está en Agency.
403key_member_goneLa persona que creó la clave ha dejado el espacio de trabajo. Cree una clave nueva.
404not_foundNo se ha encontrado, o este miembro no tiene acceso.
429RATE_LIMITEDDemasiadas llamadas en este minuto. Espere retryAfterSec segundos.
400place_unknown, whatsapp_invalid, …Un campo fuera de rango o un valor no válido. El código indica cuál.

Referencia

Cada llamada con sus campos y un ejemplo, como en el documento OpenAPI.

Dirección base
https://realton.ai/api/v1

Catálogo

GET/projectsSearch the catalog

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

Parámetros

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

Respuesta 200

NombreTipoQué es
totalobligatoriointegerHow many projects fit, across all pages.
offsetobligatoriointegerThe offset of this page.
catalogDateobligatoriostringThe day the catalog was last built, YYYY-MM-DD.
projectsobligatorioarray

Cada uno

NombreTipoQué es
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.
Ejemplo
{
  "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.

Parámetros

NombreTipoQué es
keyobligatorio
en la ruta
stringThe project key from GET /projects.
lang
en la consulta
en | heThe language of names, plans and amenities.

Respuesta 200

NombreTipoQué es
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"

Clientes

GET/clientsYour clients

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

Parámetros

NombreTipoQué es
q
en la consulta
string ≤ 80A name, a number or an email to look for.

Respuesta 200

NombreTipoQué es
clientsobligatorioarray

Cada uno

NombreTipoQué es
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.

Cuerpo

NombreTipoQué es
nameobligatoriostring ≤ 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…
Ejemplo
{
  "name": "Elena Petrova",
  "whatsapp": "+971505550147",
  "language": "ru"
}

Respuesta 201

NombreTipoQué es
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}.

Parámetros

NombreTipoQué es
idobligatorio
en la ruta
stringThe client id from GET /clients.
lang
en la consulta
en | heThe language of place names.

Respuesta 200

NombreTipoQué es
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.

Parámetros

NombreTipoQué es
idobligatorio
en la ruta
stringThe client id.

Cuerpo

NombreTipoQué es
textobligatoriostring ≤ 4000The note.
Ejemplo
{
  "text": "Wants a sea view, budget AED 2M, moving in 2028."
}

Respuesta 201

NombreTipoQué es
idobligatoriostringThe 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."}'

Tareas

GET/tasksYour tasks

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

Parámetros

NombreTipoQué es
scope
en la consulta
open | overdue | today | upcoming | someday | doneopen is every task not done.

Respuesta 200

NombreTipoQué es
tasksobligatorioarray
countsobligatorioobjectHow many tasks in overdue, today, upcoming, someday and done.

Cada uno

NombreTipoQué es
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.

Cuerpo

NombreTipoQué es
titleobligatoriostring ≤ 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.
Ejemplo
{
  "title": "Call Elena about Soma Residences",
  "dueAt": "2026-10-25T11:00:00+04:00",
  "dueKind": "AT",
  "clientId": "cm2x8k1qz0001abcdeffghijk"
}

Respuesta 201

NombreTipoQué es
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"}'

Operaciones

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

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

Parámetros

NombreTipoQué es
idobligatorio
en la ruta
stringThe deal id.

Cuerpo

NombreTipoQué es
stageobligatorioNEW | CONTACTED | VIEWING | EOI | BOOKED | WON | LOSTThe new stage.
lostReasonstring ≤ 200Why it was lost; read only with LOST.
Ejemplo
{
  "stage": "VIEWING"
}

Respuesta 200

NombreTipoQué es
okobligatorioboolean
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"}'

Folletos

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.

Cuerpo

NombreTipoQué es
projectobligatoriostringThe project key.
clientIdstringThe client it is for: their opens show on their card.
langobligatorioen | heThe language of the brochure.
Ejemplo
{
  "project": "studio:soma-residences",
  "clientId": "cm2x8k1qz0001abcdeffghijk",
  "lang": "en"
}

Respuesta 201

NombreTipoQué es
idobligatoriostringThe link id.
urlobligatoriostringThe address to send: it opens the brochure in the agency's brand.
projectobligatoriostringThe project name.
langobligatoriostringThe language of the brochure.
clientobligatoriostring | nullThe client's name, when it is for one.
Ejemplo
{
  "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"}'