Build buyer personalization into your stack
REST API, webhooks, SDKs, and revenue intelligence — so you can turn customization into your highest-margin product line.
No point tracking everything
if you can't see the revenue
ERPs count what you bought. Mellite tells you what your buyers will pay for — and automates the path from selection to recognized revenue.
ERP tracks inventory. We track buyer intent.
ERP knows what materials you ordered. Mellite knows what materials your buyers ‘want’ — and what they’re willing to pay for.
ERP reconciles accounts. We accelerate revenue.
Traditional ERP: selection → manual BOQ → finance approval → payment chase → revenue recognition (60-90 days). Mellite: selection → auto-BOQ → payment link → instant recognition (14 days).
ERP is for finance. Mellite is for growth.
Finance teams use ERP to close books. Development teams use Mellite to open revenue streams. Different users. Different outcomes.
ERP is rigid. Mellite is configurable.
Change a catalog item in ERP: 2-week change request, IT ticket, testing. In Mellite: drag-and-drop in catalog builder, instant preview, live in 5 minutes.
ERP speaks accounting. Mellite speaks buyer.
Buyers don’t understand “material master records.” They understand “Italian marble flooring — ₹450/sqft extra, pay in 3 installments.” We translate intent to revenue.
The metrics that actually matter
Traditional ERP dashboards show you inventory turns. Mellite shows you upgrade attach rates, revenue per unit, and leakage prevention — in real time.
Industry avg: 23%
“Buyers customize when the experience is visual and guided”
Industry avg: ₹8.2L
“Structured catalog + payment plans unlock higher spend”
Traditional: 60-90 days
“Digital workflow eliminates manual reconciliation”
Typical loss: 3-5% of upgrade GMV
“Auto-lock + payment integration = zero missed upgrades”
Connect your stack in hours, not months
Pre-built patterns for the tools you already use. Click any card to see real implementation code.
Accounting & Finance Sync (Tally / SAP)
Structured ledger & BOM sync. Export material selections directly to finance and procurement tools.
CRM Integration (Salesforce / HubSpot)
Auto-create leads from buyer portal signups. Sync selection progress to deal stages.
Payment Gateway (Razorpay / Stripe)
Embedded payment links in buyer portal. Auto-reconcile upgrade payments to units.
Document Generation (PDF / e-Sign)
Auto-generate handover packets, selection agreements, and BOQ documents on lock.
RESTful by design. Revenue-aware by default.
| METHOD | ENDPOINT | REVENUE IMPACT |
|---|---|---|
| POST | /api/projects | Initializes upgrade revenue tracking |
| GET | /api/projects/{id} | Revenue dashboard data source |
| POST | /api/projects/{id}/sync | Calculates revenue impact of material changes |
| GET | /api/units | Pipeline forecasting & buyer segmentation |
| POST | /api/units/{id}/lock | Triggers revenue recognition instantly |
| GET | /api/catalog/categories | Powers buyer-facing selection UI |
| POST | /api/webhooks | Enables instant downstream automation |
| GET | /api/analytics/revenue | Executive dashboard & board reporting |
Copy. Paste. Ship.
Complete, typed examples for the most common integration patterns. All code is tested against our sandbox.
1// Create a new project with BOM2const response = await fetch('/api/projects', {3 method: 'POST',4 headers: { 'Authorization': 'Bearer YOUR_TOKEN', 'Content-Type': 'application/json' },5 body: JSON.stringify({6 name: 'Skyline Towers - Phase 2',7 location: { city: 'Mumbai', pincode: '400013' },8 unitTypes: [9 { type: '2BHK', count: 48, basePrice: 8500000 },10 { type: '3BHK', count: 32, basePrice: 12500000 },11 { type: '4BHK Penthouse', count: 4, basePrice: 28000000 }12 ],13 bomTemplateId: 'bom_residential_premium_v3',14 customizationWindows: {15 flooring: { open: '2024-01-15', close: '2024-03-30' },16 kitchen: { open: '2024-02-01', close: '2024-04-15' },17 bathroom: { open: '2024-02-15', close: '2024-04-30' }18 }19 })20});2122const project = await response.json();23// { id: "proj_abc123", status: "active", bomSync: "pending", customizationUrl: "..." }1// Webhook handler for selection completions2import { verifyWebhookSignature } from '@mellite/sdk';34app.post('/webhooks/mellite', async (req, res) => {5 const signature = req.headers['x-mellite-signature'];6 const payload = req.body;78 if (!verifyWebhookSignature(payload, signature, process.env.MELLITE_WEBHOOK_SECRET)) {9 return res.status(401).send('Invalid signature');10 }1112 switch (payload.type) {13 case 'selection.completed':14 await handleSelectionComplete(payload.data);15 break;16 case 'unit.locked':17 await syncToERP(payload.data.unitId);18 break;19 case 'payment.confirmed':20 await triggerHandover(payload.data);21 break;22 }23 res.status(200).json({ received: true });24});2526async function handleSelectionComplete(data) {27 // data: { unitId, buyerId, selections, totalUpgradeValue, revenueRecognized }28 console.log(`Unit ${data.unitId}: ${data.selections.length} selections, ₹${data.totalUpgradeValue/1e5}L upgrades`);29 await updateBuyerPortal(data.buyerId, data.selections);30 await notifySiteTeam(data.unitId);31}1// Trigger BOM sync from your ERP2const syncResult = await fetch(`/api/projects/${projectId}/sync`, {3 method: 'POST',4 headers: { 'Authorization': 'Bearer YOUR_TOKEN' },5 body: JSON.stringify({6 source: 'tally',7 mode: 'incremental',8 changesSince: '2024-01-15T00:00:00Z',9 validateOnly: false10 })11});1213const { syncedItems, conflicts, revenueImpact } = await syncResult.json();14// revenueImpact: { additionalRevenue: 2450000, affectedUnits: 12, marginChange: '+2.3%' }1// Get units with real-time selection status2const units = await fetch('/api/units?projectId=proj_abc123&includeSelections=true&includeRevenue=true', {3 headers: { 'Authorization': 'Bearer YOUR_TOKEN' }4}).then(r => r.json());56/* Response:7{8 "units": [9 {10 "id": "unit_401",11 "type": "3BHK",12 "status": "customizing",13 "buyer": { "id": "buyer_789", "name": "Rahul Sharma" },14 "selections": { "completed": 18, "pending": 4, "totalValue": 2340000 },15 "revenue": { "base": 12500000, "upgrades": 2340000, "recognized": 14840000 },16 "handoverDate": "2024-12-15"17 }18 ]19}20*/1// Lock finalized selections - triggers revenue recognition2const result = await fetch('/api/units/unit_401/lock', {3 method: 'POST',4 headers: { 'Authorization': 'Bearer YOUR_TOKEN' },5 body: JSON.stringify({6 lockedBy: 'project_manager_001',7 confirmation: 'buyer_signed',8 generateHandoverPacket: true9 })10});1112const { handoverPacket, revenueRecognized, accountingEntries } = await result.json();13// revenueRecognized: 1484000014// accountingEntries: [{ account: 'Revenue - Upgrades', debit: 0, credit: 2340000 }, ...]Everything you need to integrate fast
Get sandbox access in 60 seconds
No credit card. Full API access. Sample projects pre-loaded. Start integrating today.