REST API

REST API

Sistemele dumneavoastră citesc catalogul Realton și CRM-ul și scriu clienți, note, sarcini și etape ale tranzacțiilor, în numele persoanei care a creat cheia.

Abonamentul Agency

Primii pași

  1. În Realton, titularul sau un administrator deschide Setări › API și MCP, bifează REST API și alege Creați o cheie. Copiați-o imediat: este afișată o singură dată.
  2. Păstrați-o pe server, într-o variabilă de mediu:
    export REALTON_API_KEY="rtk_live_…"
  3. Faceți primul apel:
    curl "https://realton.ai/api/v1/projects?place=Dubai&beds=2&limit=5" \
      -H "Authorization: Bearer $REALTON_API_KEY"

Cu ajutorul unui AI

Astăzi, cele mai multe integrări le scrie un AI. Dați-i aceste două adrese și sarcina în câteva cuvinte; restul îl citește singur.

Un prompt de copiat, cu parantezele completate:
Vreau să conectez [site-ul meu / CRM-ul meu / sistemul meu] la REST API-ul Realton.
Citește mai întâi rezumatul: https://realton.ai/docs/api.md
Documentul OpenAPI complet: https://realton.ai/docs/openapi.json
Tehnologiile mele: [de exemplu, Next.js pe Vercel].
Ce vreau: [de exemplu, să afișez pe site proiectele Realton din Dubai, actualizate o dată pe zi].
Cheia API este în variabila de mediu REALTON_API_KEY. Nu-mi cere niciodată cheia și nu o scrie niciodată în cod.

Nu lipiți niciodată cheia într-o conversație. Setați chiar dumneavoastră REALTON_API_KEY pe server și spuneți-i AI-ului doar numele variabilei.

Regulile

Cheia

Fiecare apel trimite cheia în antetul Authorization. O cheie dă acces la REST API doar dacă la creare a fost bifat REST API și doar cât timp spațiul de lucru are abonamentul Agency.

Authorization: Bearer rtk_live_…

În numele cui acționează un apel

Un apel acționează în numele membrului care a creat cheia, cu ce vede acesta: un agent, pe propriii clienți; titularul sau un administrator, pe cei ai agenției. Când membrul părăsește spațiul de lucru, cheia nu mai funcționează.

Limite

Până la 120 de apeluri pe minut pentru fiecare cheie. Peste această limită, răspunsul este 429 cu RATE_LIMITED și retryAfterSec: așteptați numărul indicat de secunde și apelați din nou.

Paginare

GET /projects întoarce până la 100 de proiecte o dată: limit spune câte, offset de unde se începe, iar total câte sunt în total.

Identificatori

Cheia unui proiect vine din GET /projects, id-ul unui client din GET /clients, iar id-ul unei tranzacții din fișa clientului, GET /clients/{id}, în deals[].id.

Nimic nu ajunge la client

Niciun apel nu trimite ceva unui client: POST /brochures întoarce un link pe care îl trimite agentul. Prețurile sunt cele ale dezvoltatorului, în moneda dezvoltatorului.

Refuzuri

Un refuz este un JSON cu un code stabil. Decideți după cod, niciodată după mesaj.

{ "code": "plan_required" }
StatusCodCe înseamnă
401key_requiredLipsește antetul Authorization cu o cheie.
401key_invalidCheia este necunoscută sau a fost revocată.
403key_scopeCheia nu dă acces la REST API. Creați una cu REST API bifat.
403plan_requiredSpațiul de lucru nu mai are abonamentul Agency.
403key_member_gonePersoana care a creat cheia a părăsit spațiul de lucru. Creați o cheie nouă.
404not_foundNu a fost găsit sau acest membru nu are acces la el.
429RATE_LIMITEDPrea multe apeluri în acest minut. Așteptați retryAfterSec secunde.
400place_unknown, whatsapp_invalid, …Un câmp în afara intervalului sau o valoare care nu este permisă. Codul îl numește.

Referință

Fiecare apel, cu câmpurile lui și un exemplu, ca în documentul OpenAPI.

Adresa de bază
https://realton.ai/api/v1

Catalog

GET/projectsSearch the catalog

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

Parametri

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

Răspuns 200

NumeTipCe este
totalobligatoriuintegerHow many projects fit, across all pages.
offsetobligatoriuintegerThe offset of this page.
catalogDateobligatoriustringThe day the catalog was last built, YYYY-MM-DD.
projectsobligatoriuarray

Fiecare dintre ele

NumeTipCe este
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.
Exemplu
{
  "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

NumeTipCe este
keyobligatoriu
în cale
stringThe project key from GET /projects.
lang
în interogare
en | heThe language of names, plans and amenities.

Răspuns 200

NumeTipCe este
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"

Clienți

GET/clientsYour clients

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

Parametri

NumeTipCe este
q
în interogare
string ≤ 80A name, a number or an email to look for.

Răspuns 200

NumeTipCe este
clientsobligatoriuarray

Fiecare dintre ele

NumeTipCe este
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.

Corp

NumeTipCe este
nameobligatoriustring ≤ 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…
Exemplu
{
  "name": "Elena Petrova",
  "whatsapp": "+971505550147",
  "language": "ru"
}

Răspuns 201

NumeTipCe este
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

NumeTipCe este
idobligatoriu
în cale
stringThe client id from GET /clients.
lang
în interogare
en | heThe language of place names.

Răspuns 200

NumeTipCe este
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

NumeTipCe este
idobligatoriu
în cale
stringThe client id.

Corp

NumeTipCe este
textobligatoriustring ≤ 4000The note.
Exemplu
{
  "text": "Wants a sea view, budget AED 2M, moving in 2028."
}

Răspuns 201

NumeTipCe este
idobligatoriustringThe 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."}'

Sarcini

GET/tasksYour tasks

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

Parametri

NumeTipCe este
scope
în interogare
open | overdue | today | upcoming | someday | doneopen is every task not done.

Răspuns 200

NumeTipCe este
tasksobligatoriuarray
countsobligatoriuobjectHow many tasks in overdue, today, upcoming, someday and done.

Fiecare dintre ele

NumeTipCe este
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.

Corp

NumeTipCe este
titleobligatoriustring ≤ 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.
Exemplu
{
  "title": "Call Elena about Soma Residences",
  "dueAt": "2026-10-25T11:00:00+04:00",
  "dueKind": "AT",
  "clientId": "cm2x8k1qz0001abcdeffghijk"
}

Răspuns 201

NumeTipCe este
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"}'

Tranzacții

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

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

Parametri

NumeTipCe este
idobligatoriu
în cale
stringThe deal id.

Corp

NumeTipCe este
stageobligatoriuNEW | CONTACTED | VIEWING | EOI | BOOKED | WON | LOSTThe new stage.
lostReasonstring ≤ 200Why it was lost; read only with LOST.
Exemplu
{
  "stage": "VIEWING"
}

Răspuns 200

NumeTipCe este
okobligatoriuboolean
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"}'

Broșuri

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.

Corp

NumeTipCe este
projectobligatoriustringThe project key.
clientIdstringThe client it is for: their opens show on their card.
langobligatoriuen | heThe language of the brochure.
Exemplu
{
  "project": "studio:soma-residences",
  "clientId": "cm2x8k1qz0001abcdeffghijk",
  "lang": "en"
}

Răspuns 201

NumeTipCe este
idobligatoriustringThe link id.
urlobligatoriustringThe address to send: it opens the brochure in the agency's brand.
projectobligatoriustringThe project name.
langobligatoriustringThe language of the brochure.
clientobligatoriustring | nullThe client's name, when it is for one.
Exemplu
{
  "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"}'