PlatformAIIntegrationsCompareCase studiesPricingFAQDevelopers
Developers

Build on
Acreonix.

A REST API and webhook system that lets you push leads from portals, query your portfolio, and receive real-time events from your property data — no screen-scraping, no manual exports.

Copy the full API spec as plain text — paste straight into Claude, ChatGPT, or your IDE AI.
Getting started

Quick Start

Three steps to your first Acreonix API call.

Step 1 — Get your API key

Sign in to the platform, go to Settings → API & Integrations, and generate a key. Each key is scoped to your organisation. Store it somewhere safe — it won't be shown again.

Step 2 — Make your first call

Ingest a lead from an external form or portal:

curl
curl -X POST https://platform.acreonix.co.uk/api/v1/leads \
  -H 'Authorization: Bearer ak_live_••••••••' \
  -H 'Content-Type: application/json' \
  -d '{
    "name":    "Sarah Ahmed",
    "phone":   "+971501234567",
    "email":   "sarah@example.com",
    "source":  "property-finder",
    "message": "Looking for 2-bed in Marina, AED 120K budget"
  }'

Step 3 — Receive data

A successful response returns the new lead ID and the lead's current status in your pipeline.

Response 201
{
  "id":        "lead_8f4a…",
  "status":    "new",
  "created_at":"2026-08-24T09:12:00Z"
}

Authentication

All requests must include a valid API key in the Authorization header as a Bearer token.

Header
Authorization: Bearer ak_live_••••••••
Keys beginning with ak_test_ are sandbox keys — leads and events are siloed from your live data. Use ak_live_ keys in production.

Keys are managed under Settings → API & Integrations. You can create multiple keys with different labels (e.g. one per portal integration) and revoke them individually.


Errors & rate limits

All errors return a JSON body with error and message fields.

StatusMeaning
200 / 201Success
400Bad request — missing or invalid parameters. Check message for detail.
401Invalid or missing API key.
403Your plan does not include API access. Upgrade to Professional+.
404Resource not found.
422Validation failed — one or more fields failed schema validation.
429Rate limit exceeded. Default: 120 requests per minute per key.
500Server error. Retry with exponential back-off.

Rate limits are applied per API key. The response headers X-RateLimit-Remaining and X-RateLimit-Reset tell you how many calls are left in the current window and when it resets (Unix timestamp).


REST API

POST /api/v1/leads

POST   https://platform.acreonix.co.uk/api/v1/leads

Ingest a lead into your Acreonix pipeline. Use this to push enquiries from property portals (Property Finder, Bayut, Rightmove), your own website forms, or any other external source. The lead is created with status new and immediately becomes available to your AI agent for qualification.

Request body

FieldTypeRequiredDescription
namestringrequiredLead's full name.
phonestringrequiredPhone in E.164 format (e.g. +971501234567).
emailstringoptionalEmail address.
sourcestringoptionalOrigin of the lead. Suggested values: property-finder, bayut, rightmove, website, whatsapp, manual.
messagestringoptionalThe enquiry text or first message from the lead.
property_refstringoptionalYour internal property reference (BRN, listing ID, etc.) the lead enquired about.
metadataobjectoptionalAny additional key-value pairs to store on the lead record (e.g. portal ad ID, UTM parameters).

Examples

JavaScript
const res = await fetch('https://platform.acreonix.co.uk/api/v1/leads', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.ACREONIX_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    name:       'Sarah Ahmed',
    phone:      '+971501234567',
    email:      'sarah@example.com',
    source:     'property-finder',
    message:    'Looking for 2-bed in Marina, AED 120K budget',
    property_ref: 'MRN-1204',
  }),
});
const lead = await res.json();
console.log(lead.id); // lead_8f4a…
Python
import requests, os

res = requests.post(
    "https://platform.acreonix.co.uk/api/v1/leads",
    headers={
        "Authorization": f"Bearer {os.environ['ACREONIX_API_KEY']}",
        "Content-Type": "application/json",
    },
    json={
        "name":     "Sarah Ahmed",
        "phone":    "+971501234567",
        "source":   "property-finder",
        "message":  "Looking for 2-bed in Marina, AED 120K budget",
    },
)
print(res.json()["id"])

GET /api/v1/properties

GET   https://platform.acreonix.co.uk/api/v1/properties

Returns a paginated list of properties in your organisation's portfolio. Useful for syncing your live inventory to a portal feed, a website, or an external reporting tool.

Query parameters

ParamTypeDescription
statusstringFilter by status: available, occupied, maintenance, off_market.
typestringProperty type: residential, commercial.
limitintegerResults per page, max 100. Default 50.
offsetintegerPagination offset. Default 0.

Example response

JSON
{
  "total": 229,
  "limit": 50,
  "offset": 0,
  "data": [
    {
      "id":        "prop_a1b2…",
      "ref":       "MRN-1204",
      "name":      "Marina Gate II · 1204",
      "type":      "residential",
      "status":    "occupied",
      "bedrooms":  2,
      "area":      "JBR, Dubai",
      "rent_aed":  142000,
      "created_at":"2026-01-15T08:00:00Z"
    }
  ]
}
curl
curl -G https://platform.acreonix.co.uk/api/v1/properties \
  -H 'Authorization: Bearer ak_live_••••••••' \
  --data-urlencode 'status=available' \
  --data-urlencode 'limit=25'

Webhooks

Overview

Acreonix can push real-time event notifications to any HTTPS endpoint you control. Configure your webhook URL under Settings → API & Integrations → Webhooks.

How it works

When an event occurs (a new lead, a viewing booked, a lease expiring), Acreonix sends a POST request to your endpoint with a JSON body describing the event. Your endpoint should respond with 200 OK within 10 seconds. Failures are retried up to 5 times with exponential back-off.

Verifying the signature

Every webhook request includes an X-Acreonix-Signature header — a HMAC-SHA256 hex digest of the raw request body, signed with your webhook secret (visible in Settings).

Node.js verification
const crypto = require('crypto');

function verifyWebhook(rawBody, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signature)
  );
}
Always verify the signature before processing a webhook payload. Reject any request that fails verification with a 401.

Event reference

Each event payload has a top-level event string and a data object containing the relevant record.

lead.created
A new lead was added — via the API, a WhatsApp message, or manually. data.lead contains the full lead record.
lead.qualified
The AI agent completed qualification. data.lead.score and data.lead.tags are now populated.
viewing.booked
A viewing was confirmed. data.viewing includes the scheduled time, property ID and agent assigned.
lease.expiring
A lease is approaching its end date (fired at 90, 60 and 30 days). data.lease.days_remaining tells you how close it is.
payment.overdue
A scheduled payment passed its due date unpaid. data.payment includes the tenant, amount and days overdue.
maintenance.raised
A new maintenance ticket was opened. data.ticket includes the property, description and urgency level.

Resources

Website integration

If you have your own property website or a client microsite, you can pipe enquiry form submissions directly into Acreonix — no portal middleware, no manual entry. The lead appears in the CRM instantly and your AI agent begins qualification automatically.

Drop-in contact form

Copy the snippet below into any HTML page. Replace ak_live_•••••••• with your API key and optionally set property_ref to the listing the form is on.

HTML — enquiry form
<!-- Acreonix lead capture form -->
<form id="acx-form">
  <input name="name"  placeholder="Full name"  required />
  <input name="phone" placeholder="Phone"      required />
  <input name="email" placeholder="Email"               />
  <textarea name="message" placeholder="Message"></textarea>
  <button type="submit">Send enquiry</button>
</form>

<script>
document.getElementById('acx-form').addEventListener('submit', async e => {
  e.preventDefault();
  const data = Object.fromEntries(new FormData(e.target));
  const res = await fetch('https://platform.acreonix.co.uk/api/v1/leads', {
    method: 'POST',
    headers: {
      'Authorization': 'Bearer ak_live_••••••••',
      'Content-Type':  'application/json',
    },
    body: JSON.stringify({
      name:         data.name,
      phone:        data.phone,
      email:        data.email,
      source:       'website',
      message:      data.message,
      property_ref: 'OPTIONAL-LISTING-REF',
    }),
  });
  if (res.ok) alert('Thanks — we\'ll be in touch shortly.');
});
</script>
Keep your API key server-side in production. For client-side forms, use a thin server proxy (a Next.js API route, Netlify Function, or similar) so the key is never exposed in page source.

WordPress & Webflow

There is no official plugin yet — use the snippet above via a custom HTML widget (Webflow) or the Code Snippets plugin (WordPress). The endpoint is CORS-friendly for requests from any domain when your key is valid.

Server-side proxy (recommended)

The safest pattern: your website collects the form, your server forwards it to Acreonix. Your key stays private and you can add server-side validation before forwarding.

Next.js API route
// pages/api/enquiry.js  (or app/api/enquiry/route.js)
export default async function handler(req, res) {
  if (req.method !== 'POST') return res.status(405).end();
  const fwd = await fetch('https://platform.acreonix.co.uk/api/v1/leads', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.ACREONIX_API_KEY}`,
      'Content-Type':  'application/json',
    },
    body: JSON.stringify(req.body),
  });
  const data = await fwd.json();
  res.status(fwd.status).json(data);
}

Tracking UTM & ad parameters

Pass any UTM or portal ad parameters in the metadata field. They are stored on the lead and visible in the CRM — useful for attributing which ad or campaign drove the enquiry.

JavaScript — UTM capture
const params = new URLSearchParams(window.location.search);
const metadata = {
  utm_source:   params.get('utm_source'),
  utm_campaign: params.get('utm_campaign'),
  utm_medium:   params.get('utm_medium'),
  ref_url:      window.location.href,
};
// Include in your fetch body:
body: JSON.stringify({ name, phone, email, source: 'website', metadata })

Resources

SDKs & examples

Official SDKs are in progress. In the meantime, the API follows REST conventions and works with any HTTP client. Here's a minimal Property Finder webhook bridge as a starting point:

Node.js — PF lead bridge
// Receives leads from Property Finder's webhook
// and forwards them into Acreonix.
app.post('/pf-webhook', async (req, res) => {
  const { lead } = req.body;
  await fetch('https://platform.acreonix.co.uk/api/v1/leads', {
    method:  'POST',
    headers: {
      'Authorization': `Bearer ${process.env.ACREONIX_API_KEY}`,
      'Content-Type':  'application/json',
    },
    body: JSON.stringify({
      name:    lead.name,
      phone:   lead.mobile,
      email:   lead.email,
      source:  'property-finder',
      message: lead.message,
    }),
  });
  res.sendStatus(200);
});

Support

For API access, integration questions or to request a higher rate limit, email sales@acreonix.co.uk with the subject "API Integration".

Enterprise plans include a dedicated integration engineer who can help you build and maintain your Acreonix connection.