REST API

REST API

Państwa systemy czytają katalog Realton i dane z CRM, a zapisują klientów, notatki, zadania i etapy transakcji, w imieniu osoby, która utworzyła klucz.

Pakiet Agency

Szybki start

  1. W Realton właściciel lub administrator otwiera Ustawienia › API i MCP, zaznacza REST API i wybiera Utwórz klucz. Klucz trzeba od razu skopiować: jest pokazywany tylko raz.
  2. Klucz należy trzymać na serwerze, w zmiennej środowiskowej:
    export REALTON_API_KEY="rtk_live_…"
  3. Pierwsze wywołanie:
    curl "https://realton.ai/api/v1/projects?place=Dubai&beds=2&limit=5" \
      -H "Authorization: Bearer $REALTON_API_KEY"

Integracja z pomocą AI

Większość integracji pisze dziś AI. Wystarczy podać jej te dwa adresy i w kilku słowach opisać zadanie, resztę przeczyta sama.

Prompt do skopiowania, z uzupełnionymi nawiasami:
Chcę połączyć [moją stronę / mój CRM / mój system] z REST API Realton.
Najpierw przeczytaj opis: https://realton.ai/docs/api.md
Pełny dokument OpenAPI: https://realton.ai/docs/openapi.json
Mój stos technologiczny: [na przykład Next.js na Vercel].
Czego potrzebuję: [na przykład pokazywać na mojej stronie projekty Realton w Dubaju, odświeżane raz dziennie].
Klucz API jest w zmiennej środowiskowej REALTON_API_KEY. Nigdy nie proś mnie o klucz i nigdy nie wpisuj go do kodu.

Klucza nigdy nie wkleja się do czatu. Zmienną REALTON_API_KEY trzeba ustawić na serwerze samodzielnie, a AI podać tylko jej nazwę.

Zasady

Klucz

Każde wywołanie wysyła klucz w nagłówku Authorization. Klucz otwiera REST API tylko wtedy, gdy przy jego tworzeniu zaznaczono REST API, i tylko dopóki przestrzeń robocza jest w pakiecie Agency.

Authorization: Bearer rtk_live_…

W czyim imieniu działa wywołanie

Wywołanie działa w imieniu członka zespołu, który utworzył klucz, i widzi to co on: agent własnych klientów, właściciel lub administrator klientów agencji. Gdy ta osoba opuści przestrzeń roboczą, klucz przestaje działać.

Limity

Do 120 wywołań na minutę na klucz. Powyżej odpowiedzią jest 429 z RATE_LIMITED i retryAfterSec: trzeba odczekać tyle sekund i wywołać ponownie.

Stronicowanie

GET /projects zwraca do 100 projektów naraz: limit określa ile, offset od którego zacząć, a total podaje, ile jest ich łącznie.

Identyfikatory

Klucz projektu pochodzi z GET /projects, id klienta z GET /clients, a id transakcji z karty klienta, GET /clients/{id}, w polu deals[].id.

Nic nie trafia do klienta

Żadne wywołanie niczego nie wysyła klientowi: POST /brochures zwraca link, który wysyła agent. Ceny są cenami dewelopera, w walucie dewelopera.

Odmowy

Odmowa to JSON ze stałym polem code. Należy rozróżniać odmowy po kodzie, nigdy po treści komunikatu.

{ "code": "plan_required" }
StatusKodCo oznacza
401key_requiredBrak nagłówka Authorization z kluczem.
401key_invalidKlucz jest nieznany albo został unieważniony.
403key_scopeKlucz nie otwiera REST API. Trzeba utworzyć klucz z zaznaczonym REST API.
403plan_requiredPrzestrzeń robocza nie jest już w pakiecie Agency.
403key_member_goneOsoba, która utworzyła klucz, opuściła przestrzeń roboczą. Trzeba utworzyć nowy klucz.
404not_foundNie znaleziono albo ten członek zespołu nie ma do tego dostępu.
429RATE_LIMITEDZbyt wiele wywołań w tej minucie. Trzeba odczekać retryAfterSec sekund.
400place_unknown, whatsapp_invalid, …Pole poza zakresem albo nieprawidłowa wartość. Kod wskazuje, które.

Dokumentacja wywołań

Każde wywołanie z polami i przykładem, tak jak w dokumencie OpenAPI.

Adres bazowy
https://realton.ai/api/v1

Katalog

GET/projectsSearch the catalog

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

Parametry

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

Odpowiedź 200

NazwaTypCo to jest
totalwymaganeintegerHow many projects fit, across all pages.
offsetwymaganeintegerThe offset of this page.
catalogDatewymaganestringThe day the catalog was last built, YYYY-MM-DD.
projectswymaganearray

Każdy z nich

NazwaTypCo to jest
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.
Przykład
{
  "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.

Parametry

NazwaTypCo to jest
keywymagane
w ścieżce
stringThe project key from GET /projects.
lang
w zapytaniu
en | heThe language of names, plans and amenities.

Odpowiedź 200

NazwaTypCo to jest
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"

Klienci

GET/clientsYour clients

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

Parametry

NazwaTypCo to jest
q
w zapytaniu
string ≤ 80A name, a number or an email to look for.

Odpowiedź 200

NazwaTypCo to jest
clientswymaganearray

Każdy z nich

NazwaTypCo to jest
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.

Treść żądania

NazwaTypCo to jest
namewymaganestring ≤ 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…
Przykład
{
  "name": "Elena Petrova",
  "whatsapp": "+971505550147",
  "language": "ru"
}

Odpowiedź 201

NazwaTypCo to jest
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}.

Parametry

NazwaTypCo to jest
idwymagane
w ścieżce
stringThe client id from GET /clients.
lang
w zapytaniu
en | heThe language of place names.

Odpowiedź 200

NazwaTypCo to jest
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.

Parametry

NazwaTypCo to jest
idwymagane
w ścieżce
stringThe client id.

Treść żądania

NazwaTypCo to jest
textwymaganestring ≤ 4000The note.
Przykład
{
  "text": "Wants a sea view, budget AED 2M, moving in 2028."
}

Odpowiedź 201

NazwaTypCo to jest
idwymaganestringThe 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."}'

Zadania

GET/tasksYour tasks

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

Parametry

NazwaTypCo to jest
scope
w zapytaniu
open | overdue | today | upcoming | someday | doneopen is every task not done.

Odpowiedź 200

NazwaTypCo to jest
taskswymaganearray
countswymaganeobjectHow many tasks in overdue, today, upcoming, someday and done.

Każdy z nich

NazwaTypCo to jest
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.

Treść żądania

NazwaTypCo to jest
titlewymaganestring ≤ 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.
Przykład
{
  "title": "Call Elena about Soma Residences",
  "dueAt": "2026-10-25T11:00:00+04:00",
  "dueKind": "AT",
  "clientId": "cm2x8k1qz0001abcdeffghijk"
}

Odpowiedź 201

NazwaTypCo to jest
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"}'

Transakcje

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

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

Parametry

NazwaTypCo to jest
idwymagane
w ścieżce
stringThe deal id.

Treść żądania

NazwaTypCo to jest
stagewymaganeNEW | CONTACTED | VIEWING | EOI | BOOKED | WON | LOSTThe new stage.
lostReasonstring ≤ 200Why it was lost; read only with LOST.
Przykład
{
  "stage": "VIEWING"
}

Odpowiedź 200

NazwaTypCo to jest
okwymaganeboolean
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"}'

Broszury

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.

Treść żądania

NazwaTypCo to jest
projectwymaganestringThe project key.
clientIdstringThe client it is for: their opens show on their card.
langwymaganeen | heThe language of the brochure.
Przykład
{
  "project": "studio:soma-residences",
  "clientId": "cm2x8k1qz0001abcdeffghijk",
  "lang": "en"
}

Odpowiedź 201

NazwaTypCo to jest
idwymaganestringThe link id.
urlwymaganestringThe address to send: it opens the brochure in the agency's brand.
projectwymaganestringThe project name.
langwymaganestringThe language of the brochure.
clientwymaganestring | nullThe client's name, when it is for one.
Przykład
{
  "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"}'