Browse the docs
Connect your CRM
Dialing
Managing the team
Developers
Docs / Dialing
Speed-to-lead webhook
Send new leads from HubSpot, Salesforce, Zoho, Pipedrive, Zapier or Make to the front of a running campaign in seconds.
The faster you call a new lead, the more likely they pick up. The inbound webhook puts a brand-new lead at the front of a running campaign, so the next free agent calls it — usually within seconds of the form being submitted.
The endpoint
Every campaign has its own URL and token. Find both on the campaign's page (Campaigns → your campaign → Inbound leads).
POST https://nitrodialer.com/api/webhooks/inbound?campaign=8f0b5c2e-6c1a-4f43-9d7e-2b8c1f0a9e11
X-NitroDialer-Token: 3f9c1d0b7a2e4c5d8e9f0a1b2c3d4e5f
Content-Type: application/jsonIf your tool can't set headers, put the token in the URL instead: &token=…. Treat the token like a password — anyone with it can add leads to that campaign. Form-encoded bodies work as well as JSON.
Two ways to send a lead
1. Send the record id and let NitroDialer fetch it
If the lead already exists in your connected CRM, send just its id and object. NitroDialer reads the record from the CRM, so the lead is linked and call notes are written back.
{ "record_id": "51234", "object": "contacts" }Objects: contacts (HubSpot), Lead or Contact (Salesforce), Leads or Contacts (Zoho CRM), persons (Pipedrive).
2. Send the lead's details
Send the fields directly. Use NitroDialer's names or your CRM's own field names — these are all accepted:
| Lead field | Accepted names |
|---|---|
| First name | first_name, First_Name, firstname, FirstName |
| Last name | last_name, Last_Name, lastname, LastName, name |
| Company | company, Company, Account_Name, org_name |
email, Email | |
| Phone | phone, Phone |
| Mobile | mobile, Mobile, mobilephone, MobilePhone |
| Other phone | other_phone, Other_Phone, OtherPhone |
| City | city, City |
| State or province | region, state, State, province |
| Postal code | postal_code, Zip_Code, zip, PostalCode, postalcode |
| CRM record id | record_id, crm_record_id, id, objectId, Id |
| CRM object | object, crm_object, module |
| Owner | owner_id, Owner_Id, hubspot_owner_id, OwnerId |
| Express consent | consent, Consent, express_consent — true, yes or 1 |
| Lead source | lead_source, Lead_Source, LeadSource, hs_analytics_source |
At least one phone number is required. If a phone number is present, the fields are used as sent even when a record id is included; the record id then links the lead to the CRM.
Response
{ "inserted": 1, "updated": 0, "skipped_no_phone": 0 }Sending the same record id again updates the lead's details instead of adding a duplicate, so retries are safe. Each new lead also fires a lead.created webhook.
| Status | Meaning |
|---|---|
| 200 | Accepted (check the counts) |
| 401 | Unknown campaign or wrong token |
| 404 | record_id mode: the record wasn't found in the CRM |
HubSpot workflows
- Create a contact-based workflow. Enrolment trigger: Contact is created (or a form submission).
- Add the action Send a webhook, method POST, URL as above with
&token=…at the end. - HubSpot sends the contact's id as
objectId. Add a body that includes the object:
{ "objectId": "{{ contact.hs_object_id }}", "object": "contacts" }If you leave out object, NitroDialer uses the campaign's own record type, then the CRM's default (contacts for HubSpot). Including it keeps the request unambiguous.
Salesforce Flow
- Create a record-triggered flow on Lead, A record is created, optimised for Actions and related records.
- Add an HTTP callout action (or an Apex action) that POSTs to the URL above with the header
X-NitroDialer-Token. - Send the record id and object:
{ "record_id": "{!$Record.Id}", "object": "Lead" }Add https://nitrodialer.com as a Named Credential or Remote Site first.
Zoho CRM Deluge
Create a workflow rule on Leads (on create) that runs this function, with argument leadId = Leads → Lead Id:
body = Map();
body.put("record_id", leadId);
body.put("object", "Leads");
resp = invokeurl
[
url: "https://nitrodialer.com/api/webhooks/inbound?campaign=YOUR_CAMPAIGN_ID"
type: POST
parameters: body.toString()
headers: {"Content-Type":"application/json","X-NitroDialer-Token":"YOUR_TOKEN"}
];
info resp;Pipedrive automations
- In Automations, create an automation with the trigger Person created.
- Add the action Send webhook (or use Zapier/Make if your plan doesn't include webhook actions).
- POST to the URL above with
&token=…and send:
{ "record_id": "[Person ID]", "object": "persons" }Zapier and Make
Use Webhooks by Zapier → POST or Make's HTTP → Make a request:
- URL: the campaign URL with
&token=… - Payload type: JSON
- Data: map your form fields to
first_name,last_name,mobile,email,region, andconsentif your form collects it.
curl -X POST "https://nitrodialer.com/api/webhooks/inbound?campaign=YOUR_CAMPAIGN_ID" \
-H "X-NitroDialer-Token: YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"first_name":"Daniel","last_name":"Okafor","mobile":"512-555-0142","region":"TX","consent":"yes"}'