REST API

REST API

आपके सिस्टम Realton का कैटलॉग और आपका CRM पढ़ते हैं, और क्लाइंट, नोट, टास्क और डील के चरण लिखते हैं, उसी व्यक्ति की ओर से जिसने कुंजी बनाई।

Agency प्लान

जल्दी शुरुआत

  1. Realton में ओनर या एडमिन सेटिंग्स › API और MCP खोलें, REST API पर टिक करें और कुंजी बनाएँ चुनें। इसे तुरंत कॉपी कर लें: यह एक ही बार दिखती है।
  2. इसे अपने सर्वर पर एनवायरनमेंट वैरिएबल में रखें:
    export REALTON_API_KEY="rtk_live_…"
  3. अपनी पहली कॉल करें:
    curl "https://realton.ai/api/v1/projects?place=Dubai&beds=2&limit=5" \
      -H "Authorization: Bearer $REALTON_API_KEY"

AI से बनवाना

आजकल ज़्यादातर इंटीग्रेशन AI लिखता है। उसे ये दो पते और कुछ शब्दों में काम बता दें; बाकी वह खुद पढ़ लेता है।

कॉपी करने के लिए प्रॉम्प्ट, ब्रैकेट भरकर:
मुझे [अपनी वेबसाइट / अपना CRM / अपना सिस्टम] Realton के REST API से जोड़ना है।
पहले ब्रीफ़ पढ़ें: https://realton.ai/docs/api.md
पूरा OpenAPI दस्तावेज़: https://realton.ai/docs/openapi.json
मेरा स्टैक: [जैसे, Vercel पर Next.js]।
मुझे क्या चाहिए: [जैसे, मेरी साइट पर दुबई के Realton प्रोजेक्ट दिखें, दिन में एक बार रीफ़्रेश हों]।
API कुंजी एनवायरनमेंट वैरिएबल REALTON_API_KEY में है। मुझसे कभी कुंजी न माँगें और उसे कभी कोड में न लिखें।

कुंजी कभी चैट में पेस्ट न करें। REALTON_API_KEY सर्वर पर खुद सेट करें, और AI को सिर्फ़ उसका नाम बताएँ।

नियम

कुंजी

हर कॉल Authorization हेडर में कुंजी भेजती है। कुंजी REST API तभी खोलती है जब बनाते समय REST API पर टिक किया गया हो, और सिर्फ़ तब तक, जब तक वर्कस्पेस Agency प्लान पर है।

Authorization: Bearer rtk_live_…

कॉल किसकी ओर से होती है

कॉल उसी सदस्य की ओर से होती है जिसने कुंजी बनाई, और उसे वही दिखता है जो उस सदस्य को दिखता है: एजेंट को अपने क्लाइंट, ओनर या एडमिन को पूरी एजेंसी के। वह सदस्य वर्कस्पेस छोड़ दे, तो कुंजी काम करना बंद कर देती है।

सीमाएँ

हर कुंजी पर प्रति मिनट 120 कॉल तक। इससे ज़्यादा होने पर जवाब 429 आता है, साथ में RATE_LIMITED और retryAfterSec: उतने सेकंड रुककर फिर कॉल करें।

पेज

GET /projects एक बार में 100 तक प्रोजेक्ट लौटाता है: limit बताता है कितने, offset कहाँ से शुरू करें, और total कुल कितने हैं।

आईडी

प्रोजेक्ट की key GET /projects से मिलती है, क्लाइंट की id GET /clients से, और डील की id क्लाइंट के कार्ड GET /clients/{id} में deals[].id से।

क्लाइंट को कुछ नहीं जाता

कोई भी कॉल क्लाइंट को कुछ नहीं भेजती: POST /brochures एक लिंक लौटाता है, जिसे एजेंट भेजता है। कीमतें डेवलपर की अपनी हैं, डेवलपर की मुद्रा में।

एरर

एरर का जवाब JSON में आता है, जिसमें स्थिर code होता है। फ़ैसला कोड के आधार पर करें, मैसेज के आधार पर कभी नहीं।

{ "code": "plan_required" }
स्टेटसकोडमतलब
401key_requiredकुंजी वाला Authorization हेडर नहीं है।
401key_invalidकुंजी अनजान है या रद्द हो चुकी है।
403key_scopeयह कुंजी REST API नहीं खोलती। REST API पर टिक करके नई कुंजी बनाएँ।
403plan_requiredवर्कस्पेस अब Agency प्लान पर नहीं है।
403key_member_goneकुंजी बनाने वाले व्यक्ति ने वर्कस्पेस छोड़ दिया। नई कुंजी बनाएँ।
404not_foundनहीं मिला, या इस सदस्य को इसे देखने की अनुमति नहीं।
429RATE_LIMITEDइस मिनट बहुत ज़्यादा कॉल हो गईं। retryAfterSec सेकंड रुकें।
400place_unknown, whatsapp_invalid, …कोई फ़ील्ड सीमा से बाहर है या उसकी वैल्यू मान्य नहीं है। कोड में उस फ़ील्ड का नाम होता है।

रेफ़रेंस

हर कॉल, उसके फ़ील्ड और एक उदाहरण के साथ, जैसा OpenAPI दस्तावेज़ में है।

बेस पता
https://realton.ai/api/v1

कैटलॉग

GET/projectsSearch the catalog

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

पैरामीटर

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

जवाब 200

नामप्रकारयह क्या है
totalज़रूरीintegerHow many projects fit, across all pages.
offsetज़रूरीintegerThe offset of this page.
catalogDateज़रूरीstringThe day the catalog was last built, YYYY-MM-DD.
projectsज़रूरीarray

हर एक में

नामप्रकारयह क्या है
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.
उदाहरण
{
  "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.

पैरामीटर

नामप्रकारयह क्या है
keyज़रूरी
पाथ में
stringThe project key from GET /projects.
lang
क्वेरी में
en | heThe language of names, plans and amenities.

जवाब 200

नामप्रकारयह क्या है
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"

क्लाइंट

GET/clientsYour clients

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

पैरामीटर

नामप्रकारयह क्या है
q
क्वेरी में
string ≤ 80A name, a number or an email to look for.

जवाब 200

नामप्रकारयह क्या है
clientsज़रूरीarray

हर एक में

नामप्रकारयह क्या है
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.

बॉडी

नामप्रकारयह क्या है
nameज़रूरीstring ≤ 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…
उदाहरण
{
  "name": "Elena Petrova",
  "whatsapp": "+971505550147",
  "language": "ru"
}

जवाब 201

नामप्रकारयह क्या है
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}.

पैरामीटर

नामप्रकारयह क्या है
idज़रूरी
पाथ में
stringThe client id from GET /clients.
lang
क्वेरी में
en | heThe language of place names.

जवाब 200

नामप्रकारयह क्या है
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.

पैरामीटर

नामप्रकारयह क्या है
idज़रूरी
पाथ में
stringThe client id.

बॉडी

नामप्रकारयह क्या है
textज़रूरीstring ≤ 4000The note.
उदाहरण
{
  "text": "Wants a sea view, budget AED 2M, moving in 2028."
}

जवाब 201

नामप्रकारयह क्या है
idज़रूरीstringThe 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."}'

टास्क

GET/tasksYour tasks

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

पैरामीटर

नामप्रकारयह क्या है
scope
क्वेरी में
open | overdue | today | upcoming | someday | doneopen is every task not done.

जवाब 200

नामप्रकारयह क्या है
tasksज़रूरीarray
countsज़रूरीobjectHow many tasks in overdue, today, upcoming, someday and done.

हर एक में

नामप्रकारयह क्या है
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.

बॉडी

नामप्रकारयह क्या है
titleज़रूरीstring ≤ 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.
उदाहरण
{
  "title": "Call Elena about Soma Residences",
  "dueAt": "2026-10-25T11:00:00+04:00",
  "dueKind": "AT",
  "clientId": "cm2x8k1qz0001abcdeffghijk"
}

जवाब 201

नामप्रकारयह क्या है
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"}'

डील

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

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

पैरामीटर

नामप्रकारयह क्या है
idज़रूरी
पाथ में
stringThe deal id.

बॉडी

नामप्रकारयह क्या है
stageज़रूरीNEW | CONTACTED | VIEWING | EOI | BOOKED | WON | LOSTThe new stage.
lostReasonstring ≤ 200Why it was lost; read only with LOST.
उदाहरण
{
  "stage": "VIEWING"
}

जवाब 200

नामप्रकारयह क्या है
okज़रूरीboolean
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"}'

ब्रोशर

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.

बॉडी

नामप्रकारयह क्या है
projectज़रूरीstringThe project key.
clientIdstringThe client it is for: their opens show on their card.
langज़रूरीen | heThe language of the brochure.
उदाहरण
{
  "project": "studio:soma-residences",
  "clientId": "cm2x8k1qz0001abcdeffghijk",
  "lang": "en"
}

जवाब 201

नामप्रकारयह क्या है
idज़रूरीstringThe link id.
urlज़रूरीstringThe address to send: it opens the brochure in the agency's brand.
projectज़रूरीstringThe project name.
langज़रूरीstringThe language of the brochure.
clientज़रूरीstring | nullThe client's name, when it is for one.
उदाहरण
{
  "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"}'