Sync floor plans to BuilderTREND, Salesforce, HubSpot, Zapier, or any webhook-enabled system. Real-time notifications + REST API access for custom integrations.
In the Builder → CRM Integration panel, add your webhook URL and generate a signing secret.
Select which events to receive: plan downloaded, shared, client attached, etc.
Click 'Send Test Webhook' to verify your endpoint receives and validates signatures.
Enable webhooks. Every download/share will now POST to your CRM in real-time.
Every webhook includes an X-Floorpln-Signature header with an HMAC-SHA256 signature. Verify this on your receiving server to ensure authenticity.
// Node.js verification example
const crypto = require('crypto');
function verifySignature(payload, signature, secret) {
const hmac = crypto.createHmac('sha256', secret);
hmac.update(payload, 'utf8');
const expected = `sha256=${hmac.digest('hex')}`;
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(signature)
);
}
// In your webhook handler:
app.post('/webhook', (req, res) => {
const signature = req.headers['x-floorpln-signature'];
const payload = JSON.stringify(req.body);
if (!verifySignature(payload, signature, process.env.FLOORPLN_SECRET)) {
return res.status(401).send('Invalid signature');
}
// Signature valid — process the webhook
console.log('Event:', req.body.event);
res.sendStatus(200);
});{
"deliveryId": "dlv_abc123...", // Unique delivery ID (idempotency key)
"event": "plan.downloaded", // Event type
"timestamp": "2026-02-27T10:30:00Z", // ISO 8601 UTC
"apiVersion": "2026-02-27", // API version for breaking changes
"plan": {
"id": "plan_xyz789",
"shareUrl": "https://www.floorpln.com/share/plan_xyz789",
"input": {
"squareFeet": 2200,
"bedrooms": 4,
"bathrooms": 2.5,
"homeStyle": "craftsman",
"stories": 1,
"garage": true
},
"building": {
"exteriorWidth": 52, // feet
"exteriorLength": 44
},
"rooms": [
{
"id": "living",
"type": "living",
"name": "Great Room",
"x": 10,
"y": 15,
"width": 20,
"height": 14,
"sqft": 280
},
// ... more rooms
]
},
"client": { // Optional — only if captured
"name": "John & Sarah Smith",
"email": "john@email.com",
"phone": "419-555-1234",
"lotNumber": "Lot 42",
"community": "Maple Ridge Phase 2",
"budget": "350k_500k",
"notes": "Wants open concept, craftsman style",
"source": "model_home" // Lead source
},
"builder": { // Optional — from branding settings
"companyName": "Lincoln Custom Homes",
"agentName": "Jane Builder",
"agentEmail": "jane@lincolnhomes.com"
}
}plan.generatedNew floor plan created (fires on every regeneration)
plan.downloadedPDF, PNG, or CAD file downloaded
plan.sharedShare link created and copied to clipboard
plan.emailedShare link emailed to client
plan.viewedSomeone opens a shared plan link
client.attachedClient info captured and saved with a plan
test.pingTest webhook (verify your endpoint configuration)
Query plan records programmatically. Requires an API key configured in your Vercel environment variables.
Pass your API key via Authorization: Bearer YOUR_API_KEY header or ?api_key=YOUR_API_KEY query parameter.
Environment Variable: Set FLOORPLN_API_KEY in your Vercel project settings. Supports comma-separated keys for multiple integrations.
/api/v1/plansList all plan records (paginated, filterable)
GET /api/v1/plans?page=1&limit=25&event=downloaded&search=craftsman
Authorization: Bearer flpn_abc123...
Response:
{
"ok": true,
"records": [
{
"id": "plan_xyz789",
"storedAt": "2026-02-27T10:30:00Z",
"event": "downloaded",
"shareUrl": "https://www.floorpln.com/share/plan_xyz789",
"plan": { ... },
"client": { ... },
"builder": { ... }
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 142,
"hasMore": true
}
}page — Page number (default: 1)limit — Records per page (1-100, default: 25)event — Filter by event type (downloaded, shared, emailed)search — Search plan style, client name, lot number, communitysince — ISO timestamp, only records after this date/api/v1/plans/:idGet a single plan record by ID
GET /api/v1/plans/plan_xyz789
Authorization: Bearer flpn_abc123...
Response:
{
"ok": true,
"record": {
"id": "plan_xyz789",
"storedAt": "2026-02-27T10:30:00Z",
"event": "downloaded",
"shareUrl": "https://www.floorpln.com/share/plan_xyz789",
"plan": { ... },
"client": { ... },
"builder": { ... }
}
}/api/webhook/testSend a test webhook to verify your endpoint
POST /api/webhook/test
Content-Type: application/json
{
"targetUrl": "https://hooks.zapier.com/...",
"secret": "whsec_abc123...",
"builderName": "Lincoln Custom Homes"
}
Response:
{
"ok": true,
"message": "Test webhook delivered successfully (HTTP 200, 245ms)"
}Use 'Webhooks by Zapier' to trigger workflows when plans are downloaded or shared.
HTTP module to receive Floorpln webhooks and route to 1000+ apps.
POST to BuilderTREND API on client.attached event to create leads automatically.
Use Process Builder + Apex to insert floor plans as attachments on Opportunity records.
Create contacts and attach plan share links via HubSpot Workflows API.
Any system with HTTPS webhook support — verify signatures and parse JSON payload.
30 webhooks/minute per builder. Retry logic with exponential backoff (3 attempts over 5 minutes). 5-second timeout per delivery.
60 reads/minute per API key. 64KB max payload size. Plans are logged server-side for 30 days (configurable).
Use deliveryId as an idempotency key. Duplicate deliveries (retries) have the same ID.