REST API

La REST API

I Suoi sistemi leggono il catalogo di Realton e il Suo CRM, e scrivono clienti, note, attività e fasi delle trattative, a nome della persona che ha creato la chiave.

Piano Agency

Per iniziare

  1. In Realton, un proprietario o un amministratore apre Impostazioni › API e MCP, spunta REST API e sceglie Crea una chiave. La copi subito: viene mostrata una sola volta.
  2. La tenga sul Suo server, in una variabile d’ambiente:
    export REALTON_API_KEY="rtk_live_…"
  3. Faccia la prima chiamata:
    curl "https://realton.ai/api/v1/projects?place=Dubai&beds=2&limit=5" \
      -H "Authorization: Bearer $REALTON_API_KEY"

Svilupparla con un’AI

Oggi la maggior parte delle integrazioni la scrive un’AI. Le dia questi due indirizzi e il compito in poche parole; il resto lo legge da sola.

Un prompt da copiare, con le parti tra parentesi compilate:
Voglio collegare [il mio sito / il mio CRM / il mio sistema] alla REST API di Realton.
Leggi prima la guida sintetica: https://realton.ai/docs/api.md
Il documento OpenAPI completo: https://realton.ai/docs/openapi.json
Il mio stack: [ad esempio, Next.js su Vercel].
Cosa voglio: [ad esempio, mostrare sul mio sito i progetti di Realton a Dubai, aggiornati una volta al giorno].
La chiave API è nella variabile d’ambiente REALTON_API_KEY. Non chiedermi mai la chiave e non scriverla mai nel codice.

Non incolli mai la chiave in una chat. Imposti Lei REALTON_API_KEY sul server e all’AI dica solo il nome della variabile.

Le regole

La chiave

Ogni chiamata invia la chiave nell’header Authorization. Una chiave dà accesso alla REST API solo se alla creazione è stato spuntato REST API, e solo finché lo spazio di lavoro ha il piano Agency.

Authorization: Bearer rtk_live_…

A nome di chi agisce una chiamata

Una chiamata agisce come il membro che ha creato la chiave, con ciò che può vedere: un agente i propri clienti, un proprietario o un amministratore quelli dell’agenzia. Quando quel membro lascia lo spazio di lavoro, la chiave smette di funzionare.

Limiti

Fino a 120 chiamate al minuto per chiave. Oltre, la risposta è 429 con RATE_LIMITED e retryAfterSec: attenda quei secondi e chiami di nuovo.

Pagine

GET /projects restituisce fino a 100 progetti alla volta: limit indica quanti, offset da dove partire e total quanti sono in tutto.

Id

La chiave di un progetto arriva da GET /projects, l’id di un cliente da GET /clients e l’id di una trattativa dalla scheda del cliente, GET /clients/{id}, in deals[].id.

Nulla arriva ai clienti

Nessuna chiamata invia qualcosa a un cliente: POST /brochures restituisce un link che l’agente invia. I prezzi sono quelli del costruttore, nella valuta del costruttore.

Richieste rifiutate

Una richiesta rifiutata riceve un JSON con un code stabile. Si basi sul codice, mai sul messaggio.

{ "code": "plan_required" }
StatoCodiceCosa significa
401key_requiredManca l’header Authorization con una chiave.
401key_invalidLa chiave è sconosciuta o è stata revocata.
403key_scopeLa chiave non dà accesso alla REST API. Ne crei una con REST API spuntato.
403plan_requiredLo spazio di lavoro non ha più il piano Agency.
403key_member_goneLa persona che ha creato la chiave ha lasciato lo spazio di lavoro. Crei una nuova chiave.
404not_foundNon trovato, oppure non visibile a questo membro.
429RATE_LIMITEDTroppe chiamate in questo minuto. Attenda retryAfterSec secondi.
400place_unknown, whatsapp_invalid, …Un campo fuori intervallo o un valore non valido. Il codice lo indica.

Riferimento

Ogni chiamata con i suoi campi e un esempio, come nel documento OpenAPI.

Indirizzo di base
https://realton.ai/api/v1

Catalogo

GET/projectsSearch the catalog

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

Parametri

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

Risposta 200

NomeTipoCos’è
totalobbligatoriointegerHow many projects fit, across all pages.
offsetobbligatoriointegerThe offset of this page.
catalogDateobbligatoriostringThe day the catalog was last built, YYYY-MM-DD.
projectsobbligatorioarray

Ciascuno

NomeTipoCos’è
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.
Esempio
{
  "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.

Parametri

NomeTipoCos’è
keyobbligatorio
nel percorso
stringThe project key from GET /projects.
lang
nella query
en | heThe language of names, plans and amenities.

Risposta 200

NomeTipoCos’è
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"

Clienti

GET/clientsYour clients

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

Parametri

NomeTipoCos’è
q
nella query
string ≤ 80A name, a number or an email to look for.

Risposta 200

NomeTipoCos’è
clientsobbligatorioarray

Ciascuno

NomeTipoCos’è
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

NomeTipoCos’è
nameobbligatoriostring ≤ 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…
Esempio
{
  "name": "Elena Petrova",
  "whatsapp": "+971505550147",
  "language": "ru"
}

Risposta 201

NomeTipoCos’è
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}.

Parametri

NomeTipoCos’è
idobbligatorio
nel percorso
stringThe client id from GET /clients.
lang
nella query
en | heThe language of place names.

Risposta 200

NomeTipoCos’è
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.

Parametri

NomeTipoCos’è
idobbligatorio
nel percorso
stringThe client id.

Corpo

NomeTipoCos’è
textobbligatoriostring ≤ 4000The note.
Esempio
{
  "text": "Wants a sea view, budget AED 2M, moving in 2028."
}

Risposta 201

NomeTipoCos’è
idobbligatoriostringThe 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."}'

Attività

GET/tasksYour tasks

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

Parametri

NomeTipoCos’è
scope
nella query
open | overdue | today | upcoming | someday | doneopen is every task not done.

Risposta 200

NomeTipoCos’è
tasksobbligatorioarray
countsobbligatorioobjectHow many tasks in overdue, today, upcoming, someday and done.

Ciascuno

NomeTipoCos’è
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

NomeTipoCos’è
titleobbligatoriostring ≤ 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.
Esempio
{
  "title": "Call Elena about Soma Residences",
  "dueAt": "2026-10-25T11:00:00+04:00",
  "dueKind": "AT",
  "clientId": "cm2x8k1qz0001abcdeffghijk"
}

Risposta 201

NomeTipoCos’è
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"}'

Trattative

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

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

Parametri

NomeTipoCos’è
idobbligatorio
nel percorso
stringThe deal id.

Corpo

NomeTipoCos’è
stageobbligatorioNEW | CONTACTED | VIEWING | EOI | BOOKED | WON | LOSTThe new stage.
lostReasonstring ≤ 200Why it was lost; read only with LOST.
Esempio
{
  "stage": "VIEWING"
}

Risposta 200

NomeTipoCos’è
okobbligatorioboolean
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"}'

Brochure

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

NomeTipoCos’è
projectobbligatoriostringThe project key.
clientIdstringThe client it is for: their opens show on their card.
langobbligatorioen | heThe language of the brochure.
Esempio
{
  "project": "studio:soma-residences",
  "clientId": "cm2x8k1qz0001abcdeffghijk",
  "lang": "en"
}

Risposta 201

NomeTipoCos’è
idobbligatoriostringThe link id.
urlobbligatoriostringThe address to send: it opens the brochure in the agency's brand.
projectobbligatoriostringThe project name.
langobbligatoriostringThe language of the brochure.
clientobbligatoriostring | nullThe client's name, when it is for one.
Esempio
{
  "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"}'