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
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 }'Request
Section titled “Request”| Field | Type | Required | Behavior |
|---|---|---|---|
phone | string | yes | Must contain at least 10 digits. A leading US 1 is removed; last 10 digits are stored. |
list_id | integer | conditional | Must exist inside the key’s organization. Invalid/missing values fall back to COMMS_INBOUND_LIST_ID; invalid_list if neither resolves. |
first_name, last_name | string | no | Each stored up to 60 characters. |
email | string | no | Lowercased; invalid email becomes empty rather than failing the request. |
address1 | string | no | Up to 120 characters. |
city | string | no | Up to 60 characters. |
state | string | no | Uppercased, up to 20 characters. |
postal_code | string | no | Up to 20 characters. |
source | string | no | Up to 50 characters; used in source metadata and lead.created. |
hopper | truthy value | no | Adds 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.