REST API

A REST API

Seus sistemas leem o catálogo do Realton e o seu CRM e gravam clientes, notas, tarefas e etapas de negócios, em nome de quem criou a chave.

Plano Agency

Primeiros passos

  1. No Realton, um proprietário ou um administrador abre Configurações › API e MCP, marca REST API e escolhe Criar chave. Copie na hora: ela só aparece uma vez.
  2. Guarde-a no seu servidor, numa variável de ambiente:
    export REALTON_API_KEY="rtk_live_…"
  3. Faça sua primeira chamada:
    curl "https://realton.ai/api/v1/projects?place=Dubai&beds=2&limit=5" \
      -H "Authorization: Bearer $REALTON_API_KEY"

Construindo com uma IA

Hoje, a maioria das integrações é escrita por uma IA. Passe a ela estes dois endereços e a tarefa em poucas palavras; ela lê o resto sozinha.

Um prompt para copiar, com os colchetes preenchidos:
Quero conectar [meu site / meu CRM / meu sistema] à REST API do Realton.
Leia primeiro o resumo: https://realton.ai/docs/api.md
O documento OpenAPI completo: https://realton.ai/docs/openapi.json
Minha stack: [por exemplo, Next.js na Vercel].
O que eu quero: [por exemplo, mostrar no meu site os projetos do Realton em Dubai, atualizados uma vez por dia].
A chave de API está na variável de ambiente REALTON_API_KEY. Nunca me peça a chave e nunca a escreva no código.

Nunca cole a chave numa conversa. Defina pessoalmente a REALTON_API_KEY no servidor e diga à IA apenas o nome dela.

As regras

A chave

Toda chamada envia a chave no cabeçalho Authorization. Uma chave só libera a REST API se REST API foi marcado na criação, e só enquanto o espaço de trabalho estiver no Agency.

Authorization: Bearer rtk_live_…

Em nome de quem a chamada age

Uma chamada age em nome do membro que criou a chave, com o que ele pode ver: um corretor, os próprios clientes; um proprietário ou um administrador, os da imobiliária. Quando esse membro sai do espaço de trabalho, a chave para de funcionar.

Limites

Até 120 chamadas por minuto por chave. Acima disso, a resposta é 429 com RATE_LIMITED e retryAfterSec: aguarde esse número de segundos e chame de novo.

Paginação

GET /projects retorna até 100 projetos por vez: limit diz quantos, offset onde começar e total quantos existem ao todo.

IDs

A chave de um projeto vem de GET /projects, o id de um cliente de GET /clients e o id de um negócio da ficha do cliente, GET /clients/{id}, em deals[].id.

Nada vai para um cliente

Nenhuma chamada envia nada a um cliente: POST /brochures retorna um link para o corretor enviar. Os preços são os da própria incorporadora, na moeda dela.

Recusas

Uma recusa é um JSON com um code estável. Trate pelo código, nunca pela mensagem.

{ "code": "plan_required" }
Status HTTPCódigoO que significa
401key_requiredNão há cabeçalho Authorization com uma chave.
401key_invalidA chave é desconhecida ou foi revogada.
403key_scopeA chave não libera a REST API. Crie uma com REST API marcado.
403plan_requiredO espaço de trabalho não está mais no Agency.
403key_member_goneA pessoa que criou a chave saiu do espaço de trabalho. Crie uma nova chave.
404not_foundNão encontrado, ou fora do que este membro pode ver.
429RATE_LIMITEDChamadas demais neste minuto. Aguarde retryAfterSec segundos.
400place_unknown, whatsapp_invalid, …Um campo fora do intervalo ou um valor inválido. O código diz qual.

Referência

Cada chamada com seus campos e um exemplo, como no documento OpenAPI.

Endereço 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

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

Resposta 200

NomeTipoO que é
totalobrigatóriointegerHow many projects fit, across all pages.
offsetobrigatóriointegerThe offset of this page.
catalogDateobrigatóriostringThe day the catalog was last built, YYYY-MM-DD.
projectsobrigatórioarray

Cada um deles

NomeTipoO que é
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.
Exemplo
{
  "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

NomeTipoO que é
keyobrigatório
no caminho
stringThe project key from GET /projects.
lang
na query string
en | heThe language of names, plans and amenities.

Resposta 200

NomeTipoO que é
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

NomeTipoO que é
q
na query string
string ≤ 80A name, a number or an email to look for.

Resposta 200

NomeTipoO que é
clientsobrigatórioarray

Cada um deles

NomeTipoO que é
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.

Corpo

NomeTipoO que é
nameobrigatóriostring ≤ 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…
Exemplo
{
  "name": "Elena Petrova",
  "whatsapp": "+971505550147",
  "language": "ru"
}

Resposta 201

NomeTipoO que é
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

NomeTipoO que é
idobrigatório
no caminho
stringThe client id from GET /clients.
lang
na query string
en | heThe language of place names.

Resposta 200

NomeTipoO que é
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

NomeTipoO que é
idobrigatório
no caminho
stringThe client id.

Corpo

NomeTipoO que é
textobrigatóriostring ≤ 4000The note.
Exemplo
{
  "text": "Wants a sea view, budget AED 2M, moving in 2028."
}

Resposta 201

NomeTipoO que é
idobrigatóriostringThe 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."}'

Tarefas

GET/tasksYour tasks

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

Parâmetros

NomeTipoO que é
scope
na query string
open | overdue | today | upcoming | someday | doneopen is every task not done.

Resposta 200

NomeTipoO que é
tasksobrigatórioarray
countsobrigatórioobjectHow many tasks in overdue, today, upcoming, someday and done.

Cada um deles

NomeTipoO que é
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.

Corpo

NomeTipoO que é
titleobrigatóriostring ≤ 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.
Exemplo
{
  "title": "Call Elena about Soma Residences",
  "dueAt": "2026-10-25T11:00:00+04:00",
  "dueKind": "AT",
  "clientId": "cm2x8k1qz0001abcdeffghijk"
}

Resposta 201

NomeTipoO que é
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"}'

Negócios

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

NomeTipoO que é
idobrigatório
no caminho
stringThe deal id.

Corpo

NomeTipoO que é
stageobrigatórioNEW | CONTACTED | VIEWING | EOI | BOOKED | WON | LOSTThe new stage.
lostReasonstring ≤ 200Why it was lost; read only with LOST.
Exemplo
{
  "stage": "VIEWING"
}

Resposta 200

NomeTipoO que é
okobrigatórioboolean
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"}'

Folhetos

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.

Corpo

NomeTipoO que é
projectobrigatóriostringThe project key.
clientIdstringThe client it is for: their opens show on their card.
langobrigatórioen | heThe language of the brochure.
Exemplo
{
  "project": "studio:soma-residences",
  "clientId": "cm2x8k1qz0001abcdeffghijk",
  "lang": "en"
}

Resposta 201

NomeTipoO que é
idobrigatóriostringThe link id.
urlobrigatóriostringThe address to send: it opens the brochure in the agency's brand.
projectobrigatóriostringThe project name.
langobrigatóriostringThe language of the brochure.
clientobrigatóriostring | nullThe client's name, when it is for one.
Exemplo
{
  "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"}'