Allow about five minutes. Keep LeadDecide Settings open in one tab and CTM in another. You will need CTM settings access and the complete inbound webhook URL LeadDecide showed when the connection was saved.
Before you begin
Treat the full webhook URL like a password. It contains the secret that routes activity to one LeadDecide workspace. Do not put the real URL in screenshots, analytics, chat, or support tickets, and do not use the example below as your callback URL.
Example format only: https://app.leaddecide.com/api/inbound/ctm?organization=your-workspace&webhook_key=YOUR_SECRET_KEY
1. Open the webhook builder in CTM
In CTM, go to Settings > Integrations > Webhooks. Select New Webhook to open a blank webhook configuration.

2. Name it and use the End trigger
On the General tab, use a recognizable name such as LeadDecide Inbound. Set Trigger to At the end of a call/form/chat, once all data has been captured [end]. Leave Disabled off so the webhook can run after it is saved.
One End webhook is enough for calls, forms, and chats. Do not also create start, ringing, answered, or delayed-end webhooks for the same activity unless you deliberately want repeated refreshes.
CTM finishes transcribing a call a few minutes after the End webhook fires, so the transcript is usually not in that first payload. LeadDecide asks CTM for the transcript again automatically once the call is a few minutes old (and whenever a reviewer presses Refresh AI), stores it on the lead, and re-runs the AI review with it. You do not need a separate transcription webhook.
If your CTM account also logs outbound calls and LeadDecide should receive only inbound calls, use a CTM Trigger with Direction set to inbound and Run Webhook, then select Through a trigger [route] here instead of End.

3. Configure the callback and JSON body
Open the Connection tab and paste the complete URL generated by LeadDecide into Callback URL. Preserve every character, including both query parameters. Set the request method to POST, choose Log Data as the request body type, and leave Integration Format set to None. CTM sends Log Data as JSON without a custom template.
Leave integration or custom formatting, Custom Headers, Authentication, and Filter blank unless your agency has a specific reason to use them. The callback URL already contains the LeadDecide credential, and CTM sends its native signature headers automatically.

4. Save, then test once
Select Save Changes. Return to the Webhooks list and select Testonce for the new webhook. CTM's Test action sends the latest real call in the account, so that call may appear for the first time or refresh in LeadDecide. Do not keep selecting Test while you wait.
5. Verify CTM and LeadDecide
In CTM, open API Logs and inspect the test delivery. A response status of 200 or 201 confirms LeadDecide accepted it: 201 means the activity was created, while 200 usually means an existing activity was refreshed. Then open the LeadDecide inbox and confirm the latest real call appears in the intended workspace.
If the test fails, check the full callback URL first, followed by POST, Log Data, JSON, and the End trigger. A copied URL with a missing or outdated secret will not authenticate.
Optional: receive inbound text messages
CTM handles inbound text messages as a separate event. If you need them in LeadDecide, create a second webhook with the same callback and connection settings, but choose the inbound_text trigger. Keep the original End webhook for calls, forms, and chats. Do not add more call-phase webhooks, and do not use outbound_text for inbound lead capture.
Update CTM whenever the provider is reconnected
The webhook secret rotates whenever CTM is reconnected in LeadDecide, so the callback URL must be replaced in every related CTM webhook, including the optional inbound_text webhook. Save before testing again; the old URL is no longer the active credential.