And schedules construction tasks by text.
REST API + webhooks that let any AI agent run the full subcontractor lifecycle — cold-call vendors, send bid requests, and schedule the framers, drywallers, and masons who never open their inbox. Text the sub: “Lot 14 framing ready Mon 7am, confirm?” — they reply “yes”, your agent parses it and PATCHes the task. Wire Twilio, Bland, or Retell. Bring your own provider. No lock-in.
Bearer token auth. JSON responses. Standard REST + webhooks. Schedule subs by text, send bid requests, track responses, push every in-app message to SMS, and ping the homebuyer the moment a milestone completes — pair with Twilio, Bland, or Retell. Works with any agent: custom-built, third-party, or Cornerstone's Foreman AI.
/api/ext/tasks/:idFramers, drywallers, masons, painters — they don't check their inbox. They live in texts. Update a task, the webhook fires with the sub's phone + dates + notes; wire it to Twilio, Bland, or Retell so the sub gets a text (or AI voice call) and can reply to confirm, decline, or reschedule. Your agent parses the reply and PATCHes the task right back — two-way scheduling, no portal login, no missed inbox.
// 1. Agent updates the task
PATCH /api/ext/tasks/t_abc123
{ "status": "ready", "startDate": "2026-05-12",
"note": "Lot 14 framing ready Mon 7am, confirm?" }
// 2. Webhook → your Twilio handler → SMS to sub
// "Lot 14 framing ready Mon 5/12 7am, confirm?"
// 3. Sub texts back: "can't, start Tuesday"
// Your agent parses + PATCHes:
PATCH /api/ext/tasks/t_abc123
{ "startDate": "2026-05-13",
"note": "Sub confirmed Tue 5/13 via SMS" }
// Two-way scheduling. No portal. No email./api/ext/bids/requestSend a scoped bid request to one or more vendors with plans, specs, and deadline. Triggers automatic 7-day follow-up reminders.
{
"vendorIds": ["v_abc123", "v_def456"],
"scope": "Plumbing",
"dueDate": "2026-05-15",
"plans": ["https://...floorplan.pdf"],
"notes": "Rough-in only, 3 units"
}/api/ext/bidsQuery all bids by status, scope, or vendor. Your agent monitors responses in real time and notifies you the moment a bid comes in.
// GET /api/ext/bids?scope=Plumbing&status=received
{
"bids": [
{
"vendor": "ABC Plumbing LLC",
"total": 18400,
"status": "received",
"lineItems": [...]
}
]
}Other platforms say “webhooks exist.” We give you 37+ named events and counting — typed payloads, HMAC signatures, delivery logs, and auto-retry. New events ship as the platform grows.
message.sentFires every time someone sends a message inside Cornerstone — PM to vendor, vendor to PM, admin to anyone. Wire to Twilio to text the recipient a preview and a deep link. Emails get buried; texts get read.
// Webhook fires → your Twilio handler
{
"event": "message.sent",
"data": {
"message": {
"subject": "[Riverside] 123 Oak St, Lot 14 — Framing",
"bodyPreview": "Hey Mike, need you on site Monday 7am
for the framing inspection...",
"hasAttachments": true
},
"sender": { "name": "John Builder", "role": "PM" },
"recipients": [{
"name": "Mike",
"phone": "+15550192",
"vendorCompanyName": "ABC Framing LLC"
}],
"home": { "address": "123 Oak Street",
"lot": "Lot 14" },
"threadUrl": "app.cornerstonepm.ai/messages?thread=thr_xyz789"
}
}
// SMS to vendor:
// "📩 New message from John (PM):
// 'Need you on site Monday 7am for the framing
// inspection. Bring the updated plans.'
// View & reply: cornerstonepm.ai/messages?..."milestone.completedFires the instant a milestone task is marked complete. Wire to Twilio, Bland, or Retell to text the homebuyer with progress + a live schedule link — your agent composes, your provider delivers.
// Webhook → your Twilio / SMS handler
{
"event": "milestone.completed",
"data": {
"milestone": { "taskName": "Framing Complete",
"phase": "Framing" },
"home": { "address": "123 Oak Street",
"buyerName": "John Smith",
"buyerPhone": "+15551234" },
"scheduleUrl": "app.cornerstonepm.ai/homes/h_lot14",
"progress": { "percentComplete": 42 }
}
}
// SMS to buyer:
// "🏠 Framing complete at 123 Oak St!
// Your home is 42% done. Track: cornerstonepm.ai/..."vendor.notification.advanceHeads-up that a vendor's task is coming up within their advance-notice window. Same smart threshold logic as Cornerstone's email cascade — if the email fires, this fires. Text the sub before they even check their inbox.
// Webhook → your Twilio handler
{
"event": "vendor.notification.advance",
"data": {
"tier": "advance",
"vendor": {
"companyName": "ABC Framing LLC",
"phone": "+15550192"
},
"home": { "address": "123 Oak Street",
"lot": "Lot 14" },
"tasks": [{
"taskName": "Rough Framing",
"newStart": "2026-05-20",
"daysUntilTask": 14,
"confirmUrl": "app.cornerstonepm.ai/api/tasks/..."
}],
"batchConfirmUrl": "app.cornerstonepm.ai/api/tasks/confirm-batch?..."
}
}
// SMS:
// "📅 Heads up — Rough Framing at 123 Oak St
// starts May 20 (14 days). Tap to confirm:
// cornerstonepm.ai/api/tasks/..."vendor.notification.reminderFinal confirmation — the task is within the vendor's lead-time window. This is the "show up Monday" text. Includes one-tap confirm link that works over SMS.
// Webhook → your Twilio handler
{
"event": "vendor.notification.reminder",
"data": {
"tier": "reminder",
"vendor": {
"companyName": "ABC Framing LLC",
"phone": "+15550192"
},
"tasks": [{
"taskName": "Rough Framing",
"newStart": "2026-05-12",
"daysUntilTask": 3,
"confirmUrl": "app.cornerstonepm.ai/api/tasks/..."
}],
"home": { "address": "123 Oak Street",
"lot": "Lot 14" }
}
}
// SMS:
// "🔔 Reminder: Rough Framing at 123 Oak St
// starts Monday (3 days). Confirm now:
// cornerstonepm.ai/api/tasks/..."vendor.notification.moved_earlierA task date just moved UP — more urgent than a regular change. Thresholds are halved so vendors get notified faster. The sub needs to know NOW that their start date changed.
// Webhook → your Twilio handler
{
"event": "vendor.notification.moved_earlier",
"data": {
"tier": "moved_earlier",
"vendor": { "companyName": "ABC Framing LLC",
"phone": "+15550192" },
"tasks": [{
"taskName": "Rough Framing",
"oldStart": "2026-05-20",
"newStart": "2026-05-15",
"daysMoved": 5,
"movedEarlier": true
}],
"home": { "address": "123 Oak Street",
"lot": "Lot 14" }
}
}
// SMS:
// "⚠️ Date moved UP: Rough Framing at 123 Oak
// moved May 20 → May 15 (5 days earlier).
// Confirm: cornerstonepm.ai/api/tasks/..."vendor.notification.postponedA task got pushed back. Vendor needs to know so they can reallocate their crew. Less urgent than moved-earlier, but still important — especially if they've already mobilized.
// Webhook → your Twilio handler
{
"event": "vendor.notification.postponed",
"data": {
"tier": "postponed",
"vendor": { "companyName": "ABC Framing LLC",
"phone": "+15550192" },
"tasks": [{
"taskName": "Rough Framing",
"oldStart": "2026-05-12",
"newStart": "2026-05-19",
"daysMoved": 7,
"movedEarlier": false
}],
"home": { "address": "123 Oak Street",
"lot": "Lot 14" }
}
}
// SMS:
// "📆 Date pushed back: Rough Framing at
// 123 Oak moved May 12 → May 19.
// cornerstonepm.ai/homes/..."vendor.invitedFires when a vendor is invited to onboard with a magic link. Includes their phone number and the one-tap setup URL — text them directly instead of hoping they check email. Link expires in 24 hours.
// Webhook fires → your Twilio handler
{
"event": "vendor.invited",
"data": {
"vendor": {
"companyName": "ABC Framing LLC",
"contactName": "Mike Johnson",
"cellPhone": "+15550192",
"officePhone": "+15550193",
"scope": "Framing"
},
"invite": {
"resetUrl": "https://app.cornerstonepm.ai/reset-password?token=abc123...",
"loginUrl": "https://app.cornerstonepm.ai/login",
"expiresAt": "2026-05-07T14:30:00.000Z"
},
"builder": { "name": "Scott Alan Homes" }
}
}
// Your SMS:
// "👋 Scott Alan Homes invited you to their
// vendor portal. Tap to set up your account:
// cornerstonepm.ai/reset-password?token=abc..."bid_request.sentFires per-vendor when a bid request goes out. Includes the unique bid portal link and Excel template URL. Text the sub their bid link — they tap once and they're looking at the plans.
// Webhook fires → your Twilio handler
{
"event": "bid_request.sent",
"data": {
"bidRequest": {
"title": "RFB -- Riverside 2400 -- May 6, 2026",
"scope": "Framing",
"deadline": "2026-05-15T00:00:00.000Z",
"floorplans": ["Riverside 2400", "Oakmont 1800"],
"templateDownloadUrl": "https://blob.vercel-storage.com/bid-templates/..."
},
"vendor": {
"companyName": "ABC Framing LLC",
"cellPhone": "+15550192"
},
"portalUrl": "https://app.cornerstonepm.ai/vendor-portal/bid/abc123...",
"builder": { "name": "Scott Alan Homes" }
}
}
// Your SMS:
// "📋 New bid request from Scott Alan Homes
// Framing — Riverside 2400, Oakmont 1800
// Due: May 15. Submit your bid:
// cornerstonepm.ai/vendor-portal/bid/abc123..."lead.createdFires when a new lead enters the pipeline — from your website, a realtor, or manual entry. Push to your CRM, text your sales team, or trigger an automated follow-up call.
// Webhook fires → your CRM / sales team Slack
{
"event": "lead.created",
"data": {
"lead": {
"name": "John Smith",
"email": "[email protected]",
"phone": "+15551234",
"preferredLocation": "Riverside Estates",
"desiredSqFt": "2400",
"leadSource": "Website",
"leadScore": 4,
"needs": ["3-car garage", "first floor master"],
"status": "NEW"
}
}
}
// Your SMS to sales team:
// "🔥 New lead: John Smith (score: 4/5)
// Looking for 2400 sqft in Riverside Estates
// Phone: 555-1234 — follow up NOW"lead.convertedFires when a lead converts to a buyer — the moment a prospect becomes a customer. Trigger a welcome text, update your CRM, or alert the sales manager.
// Webhook fires → your CRM + Twilio
{
"event": "lead.converted",
"data": {
"lead": {
"name": "John Smith",
"email": "[email protected]",
"phone": "+15551234",
"leadSource": "Website",
"status": "WON",
"convertedAt": "2026-05-06T14:30:00.000Z"
},
"buyer": {
"id": "buy_abc123",
"name": "John Smith",
"email": "[email protected]",
"phone": "+15551234"
}
}
}
// Your SMS to buyer:
// "🎉 Welcome to the Scott Alan Homes family,
// John! Your sales agent will be in touch
// shortly to start your home journey."sale.createdFires when a new home sale is entered — buyer attached, lot assigned, contract signed. Alert your team, update accounting, or text the buyer a welcome message with their portal link.
// Webhook fires → your team Slack + CRM
{
"event": "sale.created",
"data": {
"home": {
"address": "123 Oak Street",
"lot": "Lot 14",
"community": "Riverside Estates",
"floorplan": "Riverside 2400",
"contractDate": "2026-05-06",
"contractAmount": 48500000
},
"buyer": {
"name": "John Smith",
"email": "[email protected]",
"phone": "+15551234"
},
"salesAgent": { "name": "Sarah" },
"salesTasks": { "total": 9, "gateCount": 6 }
}
}
// Your SMS to buyer:
// "🏠 Congratulations John! Your new home at
// 123 Oak St is officially under contract.
// We'll keep you updated every step of the way."sale.approvedFires when the Sales Manager approves a deal — the key gate in the pipeline. Text the buyer, notify accounting, or trigger the next phase of onboarding automatically.
// Webhook fires → your Twilio + accounting
{
"event": "sale.approved",
"data": {
"home": {
"address": "123 Oak Street",
"lot": "Lot 14",
"community": "Riverside Estates",
"buyerName": "John Smith",
"buyerPhone": "+15551234",
"floorplan": "Riverside 2400",
"contractAmount": 48500000
},
"approvedBy": { "name": "Mike (Sales Manager)" },
"approvedAt": "2026-05-06T15:00:00.000Z"
}
}
// Your SMS to buyer:
// "✅ Great news, John! Your home at 123 Oak St
// has been approved. Next up: design selections!"sale.pipeline_completeFires when every sales task is complete — contract, deposit, financing, options, approvals, all done. The home is officially moving to construction. Alert the PM, PA, and purchasing team.
// Webhook fires → your team notifications
{
"event": "sale.pipeline_complete",
"data": {
"home": {
"address": "123 Oak Street",
"lot": "Lot 14",
"community": "Riverside Estates",
"buyerName": "John Smith",
"floorplan": "Riverside 2400",
"status": "IN_PROGRESS"
},
"completedTasks": 8,
"skippedTasks": 1,
"totalTasks": 9,
"readyForConstruction": true
}
}
// Your SMS to PM:
// "🚀 123 Oak St (Lot 14) — ALL sales tasks
// complete. Home is now IN_PROGRESS.
// Ready for permitting and construction."sale.cancelledFires when a sale falls through. Update your CRM, alert management, or trigger the lot-release workflow. Includes the cancel reason so downstream systems know why.
// Webhook fires → management alerts
{
"event": "sale.cancelled",
"data": {
"home": {
"address": "123 Oak Street",
"lot": "Lot 14",
"community": "Riverside Estates",
"buyerName": "John Smith",
"floorplan": "Riverside 2400"
},
"cancelReason": "Financing fell through",
"cancelledAt": "2026-05-06T16:00:00.000Z",
"cancelledBy": { "name": "Sarah (Sales)" }
}
}
// Your alert to management:
// "❌ SALE CANCELLED: 123 Oak St (Lot 14)
// Buyer: John Smith
// Reason: Financing fell through
// Lot is now available for reassignment."Different permissions for different integrations. Read-only, write-only, or full access.
Custom-built, third-party, or Cornerstone's Foreman AI. If it can make an HTTP request, it works.
Fire to your Twilio, Bland, or Retell handler the moment a task changes, a bid arrives, or a vendor responds. HMAC-signed.
Point any camera, doorbell, gate, GPS tracker, or check-in app at POST /api/ext/jobsite-events. The matching scheduled task auto-flips to In Progress. Camera-agnostic, sensor-agnostic.
Pro+ users get access to Foreman AI's complete skill definitions — the actual tool schemas that make any AI agent instantly fluent in construction workflows. One endpoint. 396+ skills. Ready to drop into any agent framework.
Think of it as a knowledge file for your AI. Point any agent at our developer docs and it instantly understands every endpoint, every workflow, every skill in Cornerstone — before you've even signed up.
app.cornerstonepm.ai/developers →/api/ext/skillsReturns all 396+ Foreman AI skill definitions in your choice of format. Drop them directly into any Claude, GPT-4, or LangChain agent to give it full construction intelligence in seconds.
Format options
?format=anthropic?format=openai?format=openapi396+ skills across 20 categories
20 categories. 396+ skills. Always shipping more.
Any AI agent — Claude, GPT-4, a custom LangChain bot — becomes a construction expert the moment you load the skill pack.
The endpoint reflects Foreman's live skill set. When we ship new skills, your agent gets them automatically. No version management.
Anthropic tools, OpenAI functions, or raw OpenAPI 3.1. Use whatever your stack already speaks.
Cornerstone PM ships a built-in Model Context Protocol (MCP) server. Generate an API key in settings, paste the ready-made config block into Claude Desktop, Cursor, or Windsurf, and your AI tool can run any of the 396+ Foreman skills directly. No code, no middleware, no server to host. Most construction software has no AI integration at all — we ship a full MCP server.
No-code on-ramp
The fastest way to connect an AI tool to Cornerstone. Paste a config block and your desktop AI app speaks construction instantly.
Full-control path
When you want to build your own agent or wire automation end-to-end, drop down to the raw REST API and webhooks.
/api/mcpIn Settings → MCP, generate an API key. Cornerstone hands you a config block formatted for Claude Desktop, Cursor, or Windsurf. Paste it into your tool's MCP settings, restart, and the agent can search, create, and manage your construction data through natural language.
claude_desktop_config.json
{
"mcpServers": {
"cornerstone": {
"url": "https://app.cornerstonepm.ai/api/mcp",
"headers": {
"Authorization": "Bearer cst_your_key_here"
}
}
}
}
// Same one-paste setup for Cursor & Windsurf.
// Your AI tool now speaks all 396+ Foreman skills.Your AI agent runs all 7 waves automatically. Cornerstone tracks every interaction, every bid, every vendor — in real time.
Your agent dials subcontractors, collects contact info, leaves voicemails, and sends texts. Every interaction recorded with full transcript.
Automated email campaign to all vendors with confirmed email addresses. Includes project specs, plans, and bid deadline.
AI reads incoming emails, extracts vendor data, and creates vendor records in Cornerstone via the REST API. Zero manual data entry.
All verified vendors receive a scoped bid request with plans attached. Triggered programmatically or from inside Cornerstone.
No response after 7 days? The system follows up automatically — by email, text, or another call — without anyone lifting a finger.
Bids flow into Cornerstone with line items. Side-by-side comparison across all vendors. Owner gets real-time notifications as bids arrive.
Winning vendors get a magic link to self-register into Cornerstone — scheduling, POs, invoices, and document requirements handled automatically.
Cornerstone's own 396+ skill construction agent. Already wired to the API. No setup required.
Learn morePoint any MCP-capable AI tool at Cornerstone's built-in MCP server. Paste a config block, connect in ~30 seconds, run all 396+ skills.
Learn moreBuild your own agent with any framework (LangChain, AutoGen, Claude, GPT-4) and connect to our REST API with a Bearer token.
Pre-built integrations with popular AI platforms. If it can make an HTTP call, it can talk to Cornerstone.
If an AI agent can make a phone call or read an email, it can now act on your Cornerstone data. Here's what builders are already building.
An AI agent reads your existing Buildertrend, JobTread, or Excel data and migrates it into Cornerstone automatically. No manual re-entry, no implementation consultant, no $25k fee. You own the process.
Bridge Cornerstone and QuickBooks, Sage, or your accounting system of choice. POs, invoices, and job costs flow both ways automatically — no double entry, no CSV exports.
Your voice agent calls roofing companies, electricians, framers — gets their email and contact info, adds them as vendors in Cornerstone automatically. 200 vendors contacted in an afternoon.
An email-scanning agent reads incoming vendor emails, extracts bid data, and logs everything in Cornerstone — no manual entry, no missed bids. Your inbox becomes an automated data pipeline.
Agent monitors your Cornerstone task completions and generates POs automatically when a scope is finished. Schedule drives purchasing — you never have to manually create a PO again.
A voice agent calls the framer who hasn't confirmed their schedule date. Records the outcome. Updates the task status. Your schedule enforces itself.
Beta limited to 100 builders · No credit card required
Stripe made it possible to build a payment system in a weekend. We're doing the same for subcontractor bidding.
Request Early Access →