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.
Three steps to your first Acreonix API call.
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.
Ingest a lead from an external form or portal:
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" }'
A successful response returns the new lead ID and the lead's current status in your pipeline.
{
"id": "lead_8f4a…",
"status": "new",
"created_at":"2026-08-24T09:12:00Z"
}
All requests must include a valid API key in the Authorization header as a Bearer token.
Authorization: Bearer ak_live_••••••••
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.
All errors return a JSON body with error and message fields.
| Status | Meaning |
|---|---|
| 200 / 201 | Success |
| 400 | Bad request — missing or invalid parameters. Check message for detail. |
| 401 | Invalid or missing API key. |
| 403 | Your plan does not include API access. Upgrade to Professional+. |
| 404 | Resource not found. |
| 422 | Validation failed — one or more fields failed schema validation. |
| 429 | Rate limit exceeded. Default: 120 requests per minute per key. |
| 500 | Server 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).
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.
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | required | Lead's full name. |
| phone | string | required | Phone in E.164 format (e.g. +971501234567). |
string | optional | Email address. | |
| source | string | optional | Origin of the lead. Suggested values: property-finder, bayut, rightmove, website, whatsapp, manual. |
| message | string | optional | The enquiry text or first message from the lead. |
| property_ref | string | optional | Your internal property reference (BRN, listing ID, etc.) the lead enquired about. |
| metadata | object | optional | Any additional key-value pairs to store on the lead record (e.g. portal ad ID, UTM parameters). |
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…
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"])
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.
| Param | Type | Description |
|---|---|---|
| status | string | Filter by status: available, occupied, maintenance, off_market. |
| type | string | Property type: residential, commercial. |
| limit | integer | Results per page, max 100. Default 50. |
| offset | integer | Pagination offset. Default 0. |
{
"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 -G https://platform.acreonix.co.uk/api/v1/properties \ -H 'Authorization: Bearer ak_live_••••••••' \ --data-urlencode 'status=available' \ --data-urlencode 'limit=25'
Acreonix can push real-time event notifications to any HTTPS endpoint you control. Configure your webhook URL under Settings → API & Integrations → Webhooks.
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.
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).
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) ); }
Each event payload has a top-level event string and a data object containing the relevant record.
data.lead contains the full lead record.data.lead.score and data.lead.tags are now populated.data.viewing includes the scheduled time, property ID and agent assigned.data.lease.days_remaining tells you how close it is.data.payment includes the tenant, amount and days overdue.data.ticket includes the property, description and urgency level.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.
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.
<!-- 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>
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.
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.
// 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); }
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.
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 })
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:
// 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); });
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.