REST API

De REST API

Uw systemen lezen de catalogus van Realton en uw CRM, en schrijven klanten, notities, taken en dealfases weg, namens degene die de sleutel heeft gemaakt.

Agency-abonnement

Snel aan de slag

  1. In Realton opent een eigenaar of beheerder Instellingen › API en MCP, vinkt REST API aan en kiest Sleutel maken. Kopieer hem meteen: hij wordt maar één keer getoond.
  2. Bewaar hem op uw server, in een omgevingsvariabele:
    export REALTON_API_KEY="rtk_live_…"
  3. Doe uw eerste aanroep:
    curl "https://realton.ai/api/v1/projects?place=Dubai&beds=2&limit=5" \
      -H "Authorization: Bearer $REALTON_API_KEY"

Bouwen met een AI

De meeste integraties worden tegenwoordig door een AI geschreven. Geef hem deze twee adressen en de taak in een paar woorden; de rest leest hij zelf.

Een prompt om te kopiëren, met de haakjes ingevuld:
Ik wil [mijn website / mijn CRM / mijn systeem] koppelen aan de REST API van Realton.
Lees eerst de briefing: https://realton.ai/docs/api.md
Het volledige OpenAPI-document: https://realton.ai/docs/openapi.json
Mijn stack: [bijvoorbeeld Next.js op Vercel].
Wat ik wil: [bijvoorbeeld de projecten van Realton in Dubai op mijn site tonen, één keer per dag vernieuwd].
De API-sleutel staat in de omgevingsvariabele REALTON_API_KEY. Vraag mij nooit om de sleutel en zet hem nooit in de code.

Plak de sleutel nooit in een chat. Stel REALTON_API_KEY zelf in op de server en geef de AI alleen de naam ervan.

De regels

De sleutel

Elke aanroep stuurt de sleutel mee in de header Authorization. Een sleutel geeft alleen toegang tot de REST API als REST API was aangevinkt toen hij werd gemaakt, en alleen zolang de werkruimte het Agency-abonnement heeft.

Authorization: Bearer rtk_live_…

Namens wie een aanroep handelt

Een aanroep handelt namens het lid dat de sleutel heeft gemaakt, met wat dat lid mag zien: een makelaar de eigen klanten, een eigenaar of beheerder die van het kantoor. Verlaat dat lid de werkruimte, dan stopt de sleutel.

Limieten

Maximaal 120 aanroepen per minuut per sleutel. Daarboven is het antwoord 429 met RATE_LIMITED en retryAfterSec: wacht zoveel seconden en roep dan opnieuw aan.

Pagina's

GET /projects geeft maximaal 100 projecten tegelijk: limit zegt hoeveel, offset waar te beginnen, en total hoeveel er in totaal zijn.

Id's

Een projectsleutel komt uit GET /projects, een klant-id uit GET /clients, en een deal-id uit de klantkaart, GET /clients/{id}, in deals[].id.

Er gaat niets naar een klant

Geen enkele aanroep stuurt iets naar een klant: POST /brochures geeft een link terug die de makelaar zelf verstuurt. Prijzen zijn die van de ontwikkelaar, in de valuta van de ontwikkelaar.

Weigeringen

Een weigering is JSON met een vaste code. Ga uit van de code, nooit van de melding.

{ "code": "plan_required" }
StatusCodeBetekenis
401key_requiredGeen header Authorization met een sleutel.
401key_invalidDe sleutel is onbekend of ingetrokken.
403key_scopeDe sleutel geeft geen toegang tot de REST API. Maak er een met REST API aangevinkt.
403plan_requiredDe werkruimte heeft geen Agency-abonnement meer.
403key_member_goneDegene die de sleutel maakte, heeft de werkruimte verlaten. Maak een nieuwe sleutel.
404not_foundNiet gevonden, of niet zichtbaar voor dit lid.
429RATE_LIMITEDTe veel aanroepen deze minuut. Wacht retryAfterSec seconden.
400place_unknown, whatsapp_invalid, …Een veld buiten bereik of een ongeldige waarde. De code noemt het veld.

Referentie

Elke aanroep met de velden en een voorbeeld, zoals in het OpenAPI-document.

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

Catalogus

GET/projectsSearch the catalog

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

Parameters

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

Antwoord 200

NaamTypeWat het is
totalverplichtintegerHow many projects fit, across all pages.
offsetverplichtintegerThe offset of this page.
catalogDateverplichtstringThe day the catalog was last built, YYYY-MM-DD.
projectsverplichtarray

Elk ervan

NaamTypeWat het is
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.
Voorbeeld
{
  "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.

Parameters

NaamTypeWat het is
keyverplicht
in het pad
stringThe project key from GET /projects.
lang
in de query
en | heThe language of names, plans and amenities.

Antwoord 200

NaamTypeWat het is
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"

Klanten

GET/clientsYour clients

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

Parameters

NaamTypeWat het is
q
in de query
string ≤ 80A name, a number or an email to look for.

Antwoord 200

NaamTypeWat het is
clientsverplichtarray

Elk ervan

NaamTypeWat het is
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

NaamTypeWat het is
nameverplichtstring ≤ 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…
Voorbeeld
{
  "name": "Elena Petrova",
  "whatsapp": "+971505550147",
  "language": "ru"
}

Antwoord 201

NaamTypeWat het is
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}.

Parameters

NaamTypeWat het is
idverplicht
in het pad
stringThe client id from GET /clients.
lang
in de query
en | heThe language of place names.

Antwoord 200

NaamTypeWat het is
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.

Parameters

NaamTypeWat het is
idverplicht
in het pad
stringThe client id.

Body

NaamTypeWat het is
textverplichtstring ≤ 4000The note.
Voorbeeld
{
  "text": "Wants a sea view, budget AED 2M, moving in 2028."
}

Antwoord 201

NaamTypeWat het is
idverplichtstringThe 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."}'

Taken

GET/tasksYour tasks

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

Parameters

NaamTypeWat het is
scope
in de query
open | overdue | today | upcoming | someday | doneopen is every task not done.

Antwoord 200

NaamTypeWat het is
tasksverplichtarray
countsverplichtobjectHow many tasks in overdue, today, upcoming, someday and done.

Elk ervan

NaamTypeWat het is
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

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

Antwoord 201

NaamTypeWat het is
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).

Parameters

NaamTypeWat het is
idverplicht
in het pad
stringThe deal id.

Body

NaamTypeWat het is
stageverplichtNEW | CONTACTED | VIEWING | EOI | BOOKED | WON | LOSTThe new stage.
lostReasonstring ≤ 200Why it was lost; read only with LOST.
Voorbeeld
{
  "stage": "VIEWING"
}

Antwoord 200

NaamTypeWat het is
okverplichtboolean
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"}'

Brochures

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

NaamTypeWat het is
projectverplichtstringThe project key.
clientIdstringThe client it is for: their opens show on their card.
langverplichten | heThe language of the brochure.
Voorbeeld
{
  "project": "studio:soma-residences",
  "clientId": "cm2x8k1qz0001abcdeffghijk",
  "lang": "en"
}

Antwoord 201

NaamTypeWat het is
idverplichtstringThe link id.
urlverplichtstringThe address to send: it opens the brochure in the agency's brand.
projectverplichtstringThe project name.
langverplichtstringThe language of the brochure.
clientverplichtstring | nullThe client's name, when it is for one.
Voorbeeld
{
  "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"}'