REST API

Die REST API

Ihre Systeme lesen den Katalog von Realton und Ihr CRM und schreiben Kunden, Notizen, Aufgaben und Deal-Phasen, im Namen der Person, die den Schlüssel erstellt hat.

Tarif Agency

Schnellstart

  1. In Realton öffnet der Inhaber oder ein Admin Einstellungen › API und MCP, setzt das Häkchen bei REST API und wählt Schlüssel erstellen. Kopieren Sie ihn sofort: Er wird nur einmal angezeigt.
  2. Bewahren Sie ihn auf Ihrem Server in einer Umgebungsvariablen auf:
    export REALTON_API_KEY="rtk_live_…"
  3. Ihr erster Aufruf:
    curl "https://realton.ai/api/v1/projects?place=Dubai&beds=2&limit=5" \
      -H "Authorization: Bearer $REALTON_API_KEY"

Mit einer KI entwickeln

Die meisten Integrationen schreibt heute eine KI. Geben Sie ihr diese beiden Adressen und die Aufgabe in wenigen Worten, den Rest liest sie selbst.

Ein Prompt zum Kopieren, mit ausgefüllten Klammern:
Ich möchte [meine Website / mein CRM / mein System] an die REST API von Realton anbinden.
Lies zuerst das Briefing: https://realton.ai/docs/api.md
Das vollständige OpenAPI-Dokument: https://realton.ai/docs/openapi.json
Mein Stack: [zum Beispiel Next.js auf Vercel].
Was ich möchte: [zum Beispiel die Projekte von Realton in Dubai auf meiner Website zeigen, einmal täglich aktualisiert].
Der API-Schlüssel liegt in der Umgebungsvariablen REALTON_API_KEY. Frag mich nie nach dem Schlüssel und schreib ihn nie in den Code.

Fügen Sie den Schlüssel nie in einen Chat ein. Setzen Sie REALTON_API_KEY selbst auf dem Server und nennen Sie der KI nur den Namen.

Die Regeln

Der Schlüssel

Jeder Aufruf sendet den Schlüssel im Header Authorization. Ein Schlüssel öffnet die REST API nur, wenn beim Erstellen REST API angehakt war, und nur, solange der Arbeitsbereich im Tarif Agency ist.

Authorization: Bearer rtk_live_…

In wessen Namen ein Aufruf handelt

Ein Aufruf handelt im Namen des Mitglieds, das den Schlüssel erstellt hat, mit dessen Sichtbarkeit: ein Makler mit seinen eigenen Kunden, der Inhaber oder ein Admin mit denen des Maklerbüros. Verlässt dieses Mitglied den Arbeitsbereich, funktioniert der Schlüssel nicht mehr.

Limits

Bis zu 120 Aufrufe pro Minute und Schlüssel. Darüber lautet die Antwort 429 mit RATE_LIMITED und retryAfterSec: Warten Sie so viele Sekunden und rufen Sie dann erneut auf.

Seiten

GET /projects liefert bis zu 100 Projekte auf einmal: limit gibt an, wie viele, offset, ab wo, und total, wie viele es insgesamt sind.

IDs

Einen Projektschlüssel liefert GET /projects, eine Kunden-ID GET /clients und eine Deal-ID die Kundenkarte, GET /clients/{id}, in deals[].id.

Nichts geht an Kunden

Kein Aufruf schickt etwas an einen Kunden: POST /brochures liefert einen Link, den der Makler versendet. Die Preise sind die des Bauträgers, in seiner Währung.

Ablehnungen

Eine Ablehnung ist JSON mit einem festen code. Werten Sie den Code aus, nie die Meldung.

{ "code": "plan_required" }
StatusCodeBedeutung
401key_requiredKein Authorization-Header mit Schlüssel.
401key_invalidDer Schlüssel ist unbekannt oder wurde widerrufen.
403key_scopeDer Schlüssel öffnet die REST API nicht. Erstellen Sie einen mit Häkchen bei REST API.
403plan_requiredDer Arbeitsbereich ist nicht mehr im Tarif Agency.
403key_member_goneDie Person, die den Schlüssel erstellt hat, hat den Arbeitsbereich verlassen. Erstellen Sie einen neuen Schlüssel.
404not_foundNicht gefunden, oder für dieses Mitglied nicht sichtbar.
429RATE_LIMITEDZu viele Aufrufe in dieser Minute. Warten Sie retryAfterSec Sekunden.
400place_unknown, whatsapp_invalid, …Ein Feld außerhalb des zulässigen Bereichs oder ein ungültiger Wert. Der Code nennt das Feld.

Referenz

Jeder Aufruf mit seinen Feldern und einem Beispiel, wie im OpenAPI-Dokument.

Basisadresse
https://realton.ai/api/v1

Katalog

GET/projectsSearch the catalog

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

Parameter

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

Antwort 200

NameTypBedeutung
totalPflichtintegerHow many projects fit, across all pages.
offsetPflichtintegerThe offset of this page.
catalogDatePflichtstringThe day the catalog was last built, YYYY-MM-DD.
projectsPflichtarray

Jedes Element

NameTypBedeutung
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.
Beispiel
{
  "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.

Parameter

NameTypBedeutung
keyPflicht
im Pfad
stringThe project key from GET /projects.
lang
in der Query
en | heThe language of names, plans and amenities.

Antwort 200

NameTypBedeutung
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"

Kunden

GET/clientsYour clients

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

Parameter

NameTypBedeutung
q
in der Query
string ≤ 80A name, a number or an email to look for.

Antwort 200

NameTypBedeutung
clientsPflichtarray

Jedes Element

NameTypBedeutung
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.

Body

NameTypBedeutung
namePflichtstring ≤ 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…
Beispiel
{
  "name": "Elena Petrova",
  "whatsapp": "+971505550147",
  "language": "ru"
}

Antwort 201

NameTypBedeutung
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}.

Parameter

NameTypBedeutung
idPflicht
im Pfad
stringThe client id from GET /clients.
lang
in der Query
en | heThe language of place names.

Antwort 200

NameTypBedeutung
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.

Parameter

NameTypBedeutung
idPflicht
im Pfad
stringThe client id.

Body

NameTypBedeutung
textPflichtstring ≤ 4000The note.
Beispiel
{
  "text": "Wants a sea view, budget AED 2M, moving in 2028."
}

Antwort 201

NameTypBedeutung
idPflichtstringThe 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."}'

Aufgaben

GET/tasksYour tasks

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

Parameter

NameTypBedeutung
scope
in der Query
open | overdue | today | upcoming | someday | doneopen is every task not done.

Antwort 200

NameTypBedeutung
tasksPflichtarray
countsPflichtobjectHow many tasks in overdue, today, upcoming, someday and done.

Jedes Element

NameTypBedeutung
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.

Body

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

Antwort 201

NameTypBedeutung
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"}'

Deals

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

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

Parameter

NameTypBedeutung
idPflicht
im Pfad
stringThe deal id.

Body

NameTypBedeutung
stagePflichtNEW | CONTACTED | VIEWING | EOI | BOOKED | WON | LOSTThe new stage.
lostReasonstring ≤ 200Why it was lost; read only with LOST.
Beispiel
{
  "stage": "VIEWING"
}

Antwort 200

NameTypBedeutung
okPflichtboolean
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"}'

Broschüren

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.

Body

NameTypBedeutung
projectPflichtstringThe project key.
clientIdstringThe client it is for: their opens show on their card.
langPflichten | heThe language of the brochure.
Beispiel
{
  "project": "studio:soma-residences",
  "clientId": "cm2x8k1qz0001abcdeffghijk",
  "lang": "en"
}

Antwort 201

NameTypBedeutung
idPflichtstringThe link id.
urlPflichtstringThe address to send: it opens the brochure in the agency's brand.
projectPflichtstringThe project name.
langPflichtstringThe language of the brochure.
clientPflichtstring | nullThe client's name, when it is for one.
Beispiel
{
  "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"}'