back
integrations developer

api & integrations

Push leads in via API, get call results via webhooks. Connect your CRM, cloud storage, and messaging tools.

0 lists connected
webhooks active
72h recording retention

πŸ”‘ api keys & webhooks

manage per-list API keys and webhook endpoints
loading lists…

πŸ“‘ api documentation

endpoint, schema, and cURL examples
endpoint
POST https://getdylr.com/api/public/leads
headers
Content-Type: application/json
X-API-Key: <your-api-key>
body schema

      
example curl

      
βœ… Leads are deduped by phone number within your org
βœ… Existing leads get updated (merge, not overwrite)
βœ… Custom fields are visible on lead cards when dialing
βœ… Custom fields are included in AI summaries and briefs
βœ… Send a single lead or an array of leads in one request
response codes
200 β€” leads created/updated successfully
400 β€” invalid JSON body or missing required fields
401 β€” invalid or missing API key
429 β€” rate limited (max 60 req/min)

πŸ“€ webhook payload

JSON schema sent after each call

When you configure a webhook URL on a list, this payload is POSTed after each call disposition:

{
  "event": "call.completed",
  "timestamp": "2025-05-14T16:30:00Z",
  "call": {
    "id": "abc-123",
    "disposition": "Interested",
    "duration_sec": 142,
    "from_number": "+14143756757",
    "to_number": "+15551234567",
    "started_at": "...",
    "ended_at": "...",
    "notes": "...",
    "recording_url": "...",
    "transcript": "...",
    "summary": "..."
  },
  "lead": {
    "id": "lead-456",
    "name": "John Smith",
    "phone": "+15551234567",
    "company": "Acme Corp",
    "title": "VP Sales",
    "email": "john@acme.com",
    "city": "Miami",
    "state": "FL",
    "custom_fields": {
      "Revenue": "$5M",
      "Industry": "SaaS"
    }
  },
  "agent": {
    "name": "Jane Agent",
    "email": "jane@company.com"
  },
  "list": "Q2 Florida Realtors"
}
πŸ“¨ Sends: disposition, duration, lead info, custom fields, agent, recording URL
πŸ”’ Includes X-Webhook-Event: call.completed header
⚑ Delivered within seconds of disposition β€” 10s timeout

πŸŽ™οΈ call recording delivery

auto-send recordings to Salesforce, Slack, and more

Automatically send call recordings to your CRM, cloud storage, or messaging platform using webhooks.

⏱ Recordings are available in the webhook payload via call.recording_url within seconds of call end.
⚠️ Recording URLs expire after 72 hours β€” download or transfer them promptly.
1

Create a Connected App in Salesforce

Go to Setup β†’ App Manager β†’ New Connected App. Enable OAuth, add the api and refresh_token scopes. Note your Consumer Key and Secret.

2

Build a middleware endpoint

Create a small server (Node.js, Python, etc.) that receives the dylr webhook POST. This middleware will download the recording from call.recording_url and upload it to Salesforce.

3

Upload via Salesforce REST API

Use POST /services/data/vXX.0/sobjects/ContentVersion to upload the MP3 as a ContentVersion. Link it to the relevant Contact or Lead using ContentDocumentLink.

4

Set your webhook URL in dylr

Paste your middleware URL into the webhook field for each list above. dylr will POST call.completed events with the recording URL included.

πŸ’‘ Use Salesforce's Task object to log the call disposition and link the recording. Match leads by phone number using lead.phone from the payload.
1

Get a HubSpot Private App token

Go to Settings β†’ Integrations β†’ Private Apps β†’ Create. Grant scopes: crm.objects.contacts.write, files. Copy your access token.

2

Build a middleware endpoint

Create a server that receives the dylr webhook, downloads the recording MP3 from call.recording_url, then uploads it to HubSpot.

3

Upload via HubSpot Files API

Use POST /files/v3/files to upload the MP3. Then create an Engagement (call activity) via POST /crm/v3/objects/calls and attach the file.

4

Set your webhook URL in dylr

Paste your middleware URL into the webhook field above. Each call disposition will trigger a POST with full call data including the recording link.

πŸ’‘ Use lead.phone to look up the HubSpot contact via GET /crm/v3/objects/contacts/search and associate the call engagement.
1

Create a Slack App with Incoming Webhook

Go to api.slack.com/apps β†’ Create New App. Enable Incoming Webhooks and add one to your target channel. Copy the webhook URL.

2

Build a middleware endpoint

Create a server that receives the dylr webhook POST and formats a Slack message with the call summary, disposition, agent name, and a link to the recording.

3

POST to Slack's Webhook URL

Format a rich message using Slack's Block Kit: include the lead name, disposition badge, duration, and a <recording_url|πŸŽ™οΈ Listen> link.

4

Set your webhook URL in dylr

Paste your middleware URL into the webhook field above. Every completed call will trigger a notification in your Slack channel.

πŸ’‘ For a no-code option, use Zapier (see Zapier tab) to connect dylr webhooks directly to Slack without building middleware.
1

Create a Google Cloud Service Account

Go to console.cloud.google.com β†’ IAM β†’ Service Accounts β†’ Create. Download the JSON key file. Enable the Google Drive API.

2

Share a Drive folder with the Service Account

Create a folder in Google Drive for recordings. Share it with the service account email (e.g., dylr@project.iam.gserviceaccount.com).

3

Build a middleware endpoint

Create a server that receives the dylr webhook, downloads the MP3 from call.recording_url, and uploads it to Google Drive via POST /upload/drive/v3/files.

4

Set your webhook URL in dylr

Paste your middleware URL into the webhook field above. Name files using the lead name and date for easy search: {lead.name} - {timestamp}.mp3.

πŸ’‘ Create subfolders per list or per agent for better organization. Use the list and agent.name fields from the webhook payload.
1

Create a new Zap with "Webhooks by Zapier" trigger

Choose Webhooks by Zapier β†’ Catch Hook as the trigger. Zapier gives you a unique webhook URL β€” copy it.

2

Paste the Zapier URL into dylr

Set the Zapier webhook URL as the webhook for your list above. Make a test call and dispose it so Zapier receives sample data.

3

Test & map fields

In Zapier, click Test trigger. You'll see the full payload: call.recording_url, lead.name, call.disposition, etc. Map these to your action step.

4

Add your action step

Choose any destination: Google Drive (upload file from URL), Slack (send message), HubSpot (create engagement), Notion (create page), email, etc. Zapier handles the integration.

πŸ’‘ Zapier is the fastest no-code path. Use call.recording_url as a "File URL" in actions that accept file uploads β€” Zapier will download and re-upload automatically.
1

Set up an HTTPS endpoint

Create an endpoint on your server that accepts POST requests with Content-Type: application/json. Must respond with 2xx within 10 seconds.

2

Parse the webhook payload

The payload includes call.recording_url β€” a direct link to the MP3 file. Fetch it with a GET request (no auth required). The URL is valid for 72 hours.

3

Download and store the recording

Use fetch(call.recording_url) to download the MP3. Store it in your preferred location: S3, Azure Blob, local filesystem, or any cloud storage.

4

Verify with the event header

Check for X-Webhook-Event: call.completed header to validate the request is from dylr. Log the call.id to prevent duplicate processing.

πŸ’‘ The recording URL does not require authentication β€” it's a signed temporary URL. Always download within 72 hours before it expires.