Skip to content

Create a lead

POST /hooks/lead_intake.php creates a lead or returns the newest existing lead with the same last 10 phone digits in the resolved list.

Required scope: leads:write
Content types: application/json or form data
Rate limit: 120 accepted authentication attempts per hour per API key

Terminal window
curl --fail-with-body -X POST \
"https://app.dialdozer.com/hooks/lead_intake.php" \
-H "X-Api-Key: $DIALDOZER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"first_name": "Maya",
"last_name": "Chen",
"phone": "+1 602 555 0142",
"email": "maya@example.com",
"address1": "21 W Monroe St",
"city": "Phoenix",
"state": "AZ",
"postal_code": "85003",
"list_id": 1001,
"source": "website-demo",
"hopper": true
}'
FieldTypeRequiredBehavior
phonestringyesMust contain at least 10 digits. A leading US 1 is removed; last 10 digits are stored.
list_idintegerconditionalMust exist inside the key’s organization. Invalid/missing values fall back to COMMS_INBOUND_LIST_ID; invalid_list if neither resolves.
first_name, last_namestringnoEach stored up to 60 characters.
emailstringnoLowercased; invalid email becomes empty rather than failing the request.
address1stringnoUp to 120 characters.
citystringnoUp to 60 characters.
statestringnoUppercased, up to 20 characters.
postal_codestringnoUp to 20 characters.
sourcestringnoUp to 50 characters; used in source metadata and lead.created.
hoppertruthy valuenoAdds a new, non-deduplicated lead to the campaign hopper.
{"ok":true,"lead_id":48219,"deduped":false}

A duplicate returns HTTP 200 with deduped: true. Duplicate requests do not update the existing lead, fire lead.created, or add it to the hopper.

{"ok":true,"lead_id":48219,"deduped":true}

Fresh leads sync contact channels, fire the new_lead automation trigger, and emit the outbound lead.created event. Tenant keys cannot escape their organization’s campaign/list mapping.