Integration guide · Exterior Remodeling Guide
AccuLynx and Video Intros
AccuLynx terminology never enters the Video Intros API. Your adapter reads a job’s milestone or status in AccuLynx and translates it into one of the organization’s touchpoints.
How it fits together
- AccuLynxINSPECTION_COMPLETED
- Your adapterMapping lives here
- Video Intros
inspection_findings
Native names stay in your adapter’s mapping. Video Intros only ever sees the organization’s touchpoint.
A reference mapping
| In AccuLynx | Kind | Video Intros touchpoint | Context |
|---|---|---|---|
INSPECTION_COMPLETED | Event | inspection_findingsInspection Findings / Next Steps | None |
Prospect | Milestone | claim_follow_upClaim Filed / Claim Follow-Up | None |
Adjustment Complete | Status | claim_updateClaim Update | NoneThe seeded set has no touchpoint for after the adjuster meeting; this example reports it as a claim update. |
Send For Supplement | Status | claim_updateClaim Update | None |
Waiting on supplement approval | Status | claim_updateClaim Update | None |
Emailed Quote | Status | estimate_follow_upEstimate / Proposal Follow-Up | None |
Approved | Milestone | approved_moving_forwardApproved / Moving Forward | None |
Roofing in Progress | Status | project_updateProject Update | trade = roofing |
Siding In Progress | Status | project_updateProject Update | trade = siding |
Gutters In Progress | Status | project_updateProject Update | trade = gutters |
Completed | Milestone | project_completeProject Complete / Thank You | None |
The request your adapter sends
Whatever happened in AccuLynx, the request is the same one every integration sends.
- Detect the changeSubscribe to AccuLynx’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
acculynx:job_5521:project_update:roofing - 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: acculynx:job_5521:project_update:roofing" \
-H "Content-Type: application/json" \
-d '{
"touchpoint": "project_update",
"occurred_at": "2026-10-05T17:40:00Z",
"member": {
"external_id": "rep_456"
},
"recipient": {
"first_name": "Andrea",
"last_name": "Smith",
"phone": "+12405550100"
},
"reference": {
"source": "acculynx",
"type": "job",
"id": "job_5521"
},
"context": {
"trade": "roofing"
}
}'
const response = await fetch("https://api.videointros.com/v1/touchpoint-events", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.VIDEO_INTROS_API_KEY}`,
"Idempotency-Key": "acculynx:job_5521:project_update:roofing",
"Content-Type": "application/json",
},
body: JSON.stringify({
"touchpoint": "project_update",
"occurred_at": "2026-10-05T17:40:00Z",
"member": {
"external_id": "rep_456"
},
"recipient": {
"first_name": "Andrea",
"last_name": "Smith",
"phone": "+12405550100"
},
"reference": {
"source": "acculynx",
"type": "job",
"id": "job_5521"
},
"context": {
"trade": "roofing"
}
}),
});
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": "acculynx:job_5521:project_update:roofing",
},
json={
"touchpoint": "project_update",
"occurred_at": "2026-10-05T17:40:00Z",
"member": {
"external_id": "rep_456",
},
"recipient": {
"first_name": "Andrea",
"last_name": "Smith",
"phone": "+12405550100",
},
"reference": {
"source": "acculynx",
"type": "job",
"id": "job_5521",
},
"context": {
"trade": "roofing",
},
},
)
result = response.json()