Integration guide · Real Estate Guide
Follow Up Boss and Video Intros
Follow Up Boss tells you what happened to a person, an appointment or a deal. Your adapter translates that into one of the organization’s touchpoints.
How it fits together
- Follow Up BossAn appointment for a buyer consultation
- Your adapterMapping lives here
- Video Intros
first_client_meeting
Native names stay in your adapter’s mapping. Video Intros only ever sees the organization’s touchpoint.
Example mapping
| In Follow Up Boss | Kind | Video Intros touchpoint | Context |
|---|---|---|---|
An appointment for a buyer consultation | Appointment | first_client_meetingFirst Client Meeting | None |
An appointment for a showing | Appointment | showingShowing | None |
An appointment for a listing presentation | Appointment | listing_appointmentListing Appointment | None |
Your stage or deal status for an offer | Stage / deal | offer_updateOffer Update | None |
Your stage or deal milestone for under contract | Stage / deal | under_contractUnder Contract | None |
Your deal milestone for closing | Deal | closingClosing | None |
The request your adapter sends
Whatever happened in Follow Up Boss, the request is the same one every integration sends.
- Detect the changeSubscribe to Follow Up Boss’s notifications, or poll, for the records you care about.
- Look up the mappingFind the organization’s touchpoint for the native value. If there is none, do nothing.
- Build the key
follow_up_boss:deal_88:closing - Send the eventPOST /v1/touchpoint-events
- Store the event idSo you can look the event up later.
curl -X POST https://api.videointros.com/v1/touchpoint-events \
-H "Authorization: Bearer $VIDEO_INTROS_API_KEY" \
-H "Idempotency-Key: follow_up_boss:deal_88:closing" \
-H "Content-Type: application/json" \
-d '{
"touchpoint": "closing",
"occurred_at": "2026-10-05T17:40:00Z",
"member": {
"external_id": "rep_456"
},
"recipient": {
"first_name": "Andrea",
"last_name": "Smith",
"phone": "+12405550100"
},
"reference": {
"source": "follow_up_boss",
"type": "deal",
"id": "deal_88"
}
}'
const response = await fetch("https://api.videointros.com/v1/touchpoint-events", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.VIDEO_INTROS_API_KEY}`,
"Idempotency-Key": "follow_up_boss:deal_88:closing",
"Content-Type": "application/json",
},
body: JSON.stringify({
"touchpoint": "closing",
"occurred_at": "2026-10-05T17:40:00Z",
"member": {
"external_id": "rep_456"
},
"recipient": {
"first_name": "Andrea",
"last_name": "Smith",
"phone": "+12405550100"
},
"reference": {
"source": "follow_up_boss",
"type": "deal",
"id": "deal_88"
}
}),
});
const result = await response.json();
import os, requests
response = requests.post(
"https://api.videointros.com/v1/touchpoint-events",
headers={
"Authorization": f"Bearer {os.environ['VIDEO_INTROS_API_KEY']}",
"Idempotency-Key": "follow_up_boss:deal_88:closing",
},
json={
"touchpoint": "closing",
"occurred_at": "2026-10-05T17:40:00Z",
"member": {
"external_id": "rep_456",
},
"recipient": {
"first_name": "Andrea",
"last_name": "Smith",
"phone": "+12405550100",
},
"reference": {
"source": "follow_up_boss",
"type": "deal",
"id": "deal_88",
},
},
)
result = response.json()