Sync Floorpln activity into BuilderTREND, Salesforce, HubSpot, Zapier, or your own software workflow. Best fit for teams treating concept generation, share links, and downloads as part of a repeatable builder sales or pre-con process.
Scope note: this integration layer is most useful when you want to capture concept-plan activity early — before formal drafting and before the project becomes a permit-document workflow.
In the Builder → CRM Integration panel, add your webhook URL and generate a signing secret.
Select which events matter to your workflow: concept generated, downloaded, shared, viewed, or client attached.
Click 'Send Test Webhook' to verify your endpoint receives and validates signatures.
Enable webhooks. Floorpln activity now posts into your CRM or software workflow 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.downloadedConcept PDF package 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 concept-plan records programmatically. Use this when Floorpln needs to plug into a broader builder sales, review, or handoff system.
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.