---
title: "Integrate Custom CRM with Dialer"
description: "Integrate your custom CRM with Symbo's dialer service."
url: https://help.symbo.ai/en/articles/7231965-integrate-custom-crm-with-dialer
collection: "Dialer"
updated: 2026-11-08
language: en
---

# Integrate Custom CRM with Dialer

Integrate your custom CRM with Symbo's dialer service.

**Overview**

The purpose of this API documentation is to help you integrate your custom CRM with Symbo's dialer service. If you have any questions please reach out to [team@symbo.ai](mailto:team@symbo.ai).

**Authentication**

Symbo uses HMAC Validation to help you authenticate requests made to your application. When a webhook is added, you will be provided with a webhook\_secret. Each request from symbo will include its signature via the X-Hmac-Signature header. All that's left is to validate that the signature we sent you matches your webhook secret. Here is an example of how to compare the X-Hmac-Signature to your computed hash:

```javascript
const crypto = require("crypto")
const signature = '' // Signature from X-Hmac-Signature
const requestBodyString = '' // Stringified body from Symbo request const secret = "abcdefg" // Your webhook_secret 
const hash = crypto.createHmac("sha256", secret)
  .update(requestBodyString).digest("hex") if(hash === signature) console.log('Request verified!')
```

**Accounts & Users**

Webhooks are set up at the Symbo Account level. Webhook requests will contain the user\_id of the user whose action initiated the request.

## **Custom CRM Contact Lookup on Dial**

**Description**

To display custom CRM data in Symbo when a number is dialed, you can create an endpoint for Symbo to query when a call is initiated. When a user calls a number, a GET request will be made to your custom endpoint with the _number_ param in the query string in E164 format. Provide your custom endpoint to [team@symbo.ai](mailto:team@symbo.ai) to set up this integration.

```javascript
GET https://your-custom.com/endpoint?number=+18005551212
```

A successful match should include a 200 status code and the following body (replacing your data values). If no match is found, return a 404 status code.

**Successful response body**

```javascript
{ 
  external_id: "12345", 
  first_name: "Sally", 
  last_name: "Sample", 
  work_email: "email@address.com", 
  personal_email: "personal.email@test.com", 
  work_phone: "+18005551212", 
  mobile_phone: "+18005551213", 
  home_phone: "+18005551214", 
  other_phone: "+18005551215", 
  address_city: "Salt Lake City", 
  address_country: "US", 
  address_state: "UT", 
  address_street: "123 Main", 
  address_street_2: "Ste 100", 
  address_zip: "84010", 
  linkedin_url: "https://linkedin.com/in/sallysample", 
  facebook_url: "https://facebook.com/sallysample", 
  personal_note_1: "This is a personal note", 
  time_zone: "America/Denver", 
  title: "Sales Manager", 
  website_url_1: "https://sample.com", 
  account: { 
    external_id: "9876",
    name: "Sample Company", 
    website_url: "https://sample.com", 
    industry: "Technology"
  }
}
```

**Required response body params**

-   external\_id (the unique contact id in your CRM)
    
-   first\_name
    
-   account.name && account.external\_id (account name and external\_id only required if an account is included in response)
    

## **Call Activity Webhook**

**Description**

Symbo can send a webhook to your application with a Call object when a call is completed or updated. Make sure to store the call id in order to receive updates to the call object. Provide your POST webhook endpoint to [team@symbo.ai](mailto:team@symbo.ai) to set up this integration.

**Events**

<table style="min-width: 75px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><td colspan="1" rowspan="1"><p class="no-margin" style="text-align: left;">call.created</p></td><td colspan="1" rowspan="1"><p class="no-margin" style="text-align: left;"></p></td><td colspan="1" rowspan="1"><p class="no-margin" style="text-align: left;">This event occurs immediately after a call is completed.<br>​</p></td></tr><tr><td colspan="1" rowspan="1"><p class="no-margin" style="text-align: left;">call.updated</p></td><td colspan="1" rowspan="1"><p class="no-margin" style="text-align: left;"></p></td><td colspan="1" rowspan="1"><p class="no-margin" style="text-align: left;">This event occurs when a user updates a call with a disposition or note and when a call recording or transcription becomes available.</p></td></tr></tbody></table>

**Example webhook body**

```javascript
{ 
  id: "ecc25304-ad56-4f73-b75c-77f3165c6c65", 
  object: "Call", 
  description: "call.created", 
  user_id: "35904adb-e732-4ee7-a450-a87dfbe8a7f5", 
  created_at: "023-01-11T20:19:40.000Z", 
  data: { 
    prospect: { 
      id: "f0111f41-53c5-4d39-bfa1-447caa17b732", 
      external_id: "12345", 
      external_source: "custom_crm", 
      first_name: "Sally", 
      full_name: "Sally Sample", 
      last_name: "Sample", 
      linkedin_url: "http://www.linkedin.com/in/sallysample", 
      title: "Sales Manager", 
    }, 
    id: "2dc92583-0376-469b-9909-3a020b75d777", 
    answered_at: "2023-01-11T20:19:25.000Z", 
    call_disposition: "answered_positive", 
    completed_at: "2023-01-11T20:19:29.000Z", 
    created_at: "2023-01-11T20:19:25.000Z", 
    dialed_at: "2023-01-11T20:19:25.000Z", 
    direction: "outbound", 
    from: "+19897189159", 
    from_formatted: "+1 989 718 9159", 
    note: "User entered call note", 
    recording_url: "https://symbo.ai/recording/2dc92583-0376-469b-9909-3a020b75d777", 
    should_record_call: "record", 
    state: "completed", 
    state_changed_at: "2023-01-11T20:19:29.000Z", 
    to: "+15178626434", 
    to_formatted: "+1 517 862 6434", 
    transcription: "Rep Name:<br>This is a test.<br><br>Prospect:<br>Hey.<br><br>", 
    transcription_completed_at: "2022-10-21T17:35:20.000Z",
    total_talk_time_millis: 1399, 
    total_conversation_duration_millis: 2170, 
    rep_talk_time_millis: 830, 
    prospect_talk_time_millis: 569, 
    rep_overall_sentiment: 0, 
    prospect_overall_sentiment: 0, 
    rep_words_per_minute: 72, 
    prospect_words_per_minute: 105, 
    total_silence_time_millis: 0, 
    updated_at: "2022-10-21T17:35:20.000Z", 
  } 
}
```

  
​
