Sending Leads In
Push leads into ABC Sales AI from your own systems (forms, CRMs, landing pages) with the lead intake endpoint:
POST /v1/webhooks/leads
Inbound vs outbound
This is the inbound path: you send leads to ABC Sales AI. It is different from Webhooks, which is the outbound path where ABC Sales AI notifies your system about events.
Request
curl -X POST "https://api.abcsalesbot.com/v1/webhooks/leads" \
-H "Authorization: Bearer $ABC_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Jane Doe",
"email": "jane@example.com",
"phone": "+60123456789",
"id": "your-external-id-123",
"source": "landing-page",
"tags": ["pricing-page"],
"timezone": "Asia/Kuala_Lumpur",
"locale": "en",
"currency": "MYR",
"custom_fields": { "plan_interest": "scale" }
}'
Fields
| Field | Required | Notes |
|---|---|---|
name | Yes | 2 to 100 characters. |
email | No | |
phone | No | Up to 50 characters. Unparseable numbers are kept raw and tagged for review rather than rejected. |
id | No | Your external lead ID (up to 50 chars). Used as the upsert key, so resending the same id updates the existing lead instead of creating a duplicate. |
naver_line_id | No | LINE user ID, used as a lookup/upsert identifier for LINE-channel leads. Takes precedence over phone when both are supplied. |
source | No | Free-text source label. |
tags | No | Array of strings. |
timezone, locale, currency | No | |
custom_fields | No | Arbitrary JSON object. |
automations, user_assignments | No | Subscribe the lead to automations / assign users on creation. See the API Reference. |
Response
The endpoint processes leads asynchronously and returns 202 Accepted once the payload is queued (it may return 200/201 when processed synchronously). The lead is created or updated out of band.
Because id is an upsert key, sending the same external id again is safe and idempotent.
Rate limit
This endpoint is rate limited to 300 requests per minute per company. On exceed it returns 429 with a Retry-After header. See Rate Limits.