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"

البناء بمساعدة الذكاء الاصطناعي

معظم عمليات الربط اليوم يكتبها الذكاء الاصطناعي. أعطه هذين العنوانين والمهمة في كلمات قليلة، وسيقرأ الباقي بنفسه.

نص جاهز للنسخ، بعد ملء ما بين الأقواس:
أريد ربط [موقعي / نظام CRM الخاص بي / نظامي] بواجهة REST API الخاصة بـ Realton.
اقرأ الملخص أولًا: https://realton.ai/docs/api.md
وثيقة OpenAPI الكاملة: https://realton.ai/docs/openapi.json
التقنيات التي أستخدمها: [مثلًا Next.js على Vercel].
ما أريده: [مثلًا عرض مشاريع Realton في دبي على موقعي، مع تحديثها مرة يوميًا].
مفتاح API موجود في متغير البيئة REALTON_API_KEY. لا تطلب مني المفتاح أبدًا، ولا تكتبه في الشيفرة أبدًا.

لا تلصق المفتاح في أي محادثة أبدًا. اضبط REALTON_API_KEY على الخادم بنفسك، ولا تخبر الذكاء الاصطناعي إلا باسمه.

القواعد

المفتاح

كل طلب يرسل المفتاح في الترويسة Authorization. لا يتيح المفتاح الوصول إلى REST API إلا إذا حُدد REST API عند إنشائه، وطالما بقيت مساحة العمل على باقة Agency.

Authorization: Bearer rtk_live_…

باسم من يعمل الطلب

يعمل الطلب باسم العضو الذي أنشأ المفتاح، وبما يراه هذا العضو: الوسيط يرى عملاءه، والمالك أو المشرف يرى عملاء الوكالة. عندما يغادر هذا العضو مساحة العمل، يتوقف المفتاح.

الحدود

حتى 120 طلبًا في الدقيقة لكل مفتاح. إن تجاوزتها، يكون الرد 429 مع RATE_LIMITED وretryAfterSec: انتظر عدد الثواني هذا ثم أعد الطلب.

الصفحات

يعيد GET /projects حتى 100 مشروع في كل مرة: يحدد limit العدد، وoffset نقطة البداية، وtotal العدد الإجمالي.

المعرّفات

مفتاح المشروع يأتي من GET /projects، ومعرّف العميل من GET /clients، ومعرّف الصفقة من بطاقة العميل، 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"}'