HubSpot
Point it at a workflow webhook trigger, or at the automation tool you already run in front of your CRM. The contact, the company and the write-up are all in the body.
Integrations
A qualified lead that only exists in our dashboard is a lead nobody acts on. Tell the agent where yours should land and it posts it there, signed, and retries until it arrives.
Point it at a workflow webhook trigger, or at the automation tool you already run in front of your CRM. The contact, the company and the write-up are all in the body.
An inbound endpoint or a flow. Same JSON as everywhere else — there is no per-CRM app to install, approve and keep alive.
Catch the hook, map the fields once, then fan the lead out to whatever else is on their list. Most teams start here and never leave.
A channel message with the headline, the qualification read, the next step and a link to the call. A wall of JSON is not a notification.
Any HTTPS endpoint. Check the signature, read the body, do whatever you like with it. That is the whole integration.
Booking a slot sends the prospect a confirmation carrying a real calendar invite and the room link, without you wiring anything up.
There is no app to install in your CRM on purpose. One signed contract works everywhere and needs no per-vendor maintenance; a native integration is worth building when a customer's workflow actually needs one, not before.
Three events
A call is booked
A call finished
A lead qualified
The payload
The contact, the meeting with a link back to the call, and — once the agent has written it up — the outcome, the next step, the qualification read, the objections it heard and the questions it could not answer.
This sample is generated by the same function that builds the real request, so it cannot drift from what actually arrives.
POST your endpoint
200 expected{
"id": "0198c0de-0000-4000-8000-000000000001",
"event": "lead.qualified",
"sentAt": "2026-08-19T15:00:00.000Z",
"project": {
"id": "0198c0de-0000-4000-8000-000000000002",
"name": "Fleet Cloud"
},
"contact": {
"name": "Dana Meyer",
"email": "dana@initech.test",
"companyName": "Initech",
"website": "https://initech.test"
},
"meeting": {
"id": "0198c0de-0000-4000-8000-000000000003",
"scheduledAt": "2026-08-19T14:00:00.000Z",
"durationMinutes": 30,
"status": "completed",
"useCase": "We run 40 robots",
"url": "https://app.27agents.com/app/meetings/0198c0de-0000-4000-8000-000000000003"
},
"summary": {
"headline": "Initech blocked on SOC 2",
"narrative": "Dana liked the reporting and asked for the audit report.",
"outcome": "qualified",
"nextStep": "Send the SOC 2 report",
"qualification": {
"budget": null,
"authority": "Dana signs up to 50k",
"need": "Manual reporting takes a week",
"timing": null,
"verdict": "Real need"
},
"objections": [
{
"kind": "security",
"detail": "No SOC 2 listed",
"raisedBy": "Dana Meyer"
}
],
"unansweredQuestions": [
"Are you SOC 2 certified?"
]
}
}What we promise the receiver
Each endpoint gets its own secret, shown once. Every request carries the timestamp and an HMAC over the timestamp and body together, so a captured delivery cannot be replayed at leisure.
The delivery is written to an outbox in the same transaction as the booking itself, then retried at 1, 5 and 25 minutes, 2 hours and 10 hours. Your CRM being down for an afternoon does not lose a lead.
The delivery id is stable across retries, so a receiver can drop a repeat. The body is composed at send time, so a retry an hour later carries the write-up that did not exist when the call ended.
The host is resolved and checked against private, loopback and reserved ranges before every request, not only when you save it, and redirects are not followed.
From startups, for startups


Peter Orban
Founder of 27agents
Try it live
Book a slot, tell it what you run, and it will talk you through the destination that fits.