Push leads to Streamsynq from any system.
If your CRM, lead source, or custom Zapier flow can fire HTTP, you can push leads to Streamsynq. The AI dispatches voice + SMS within 60 seconds of receiving a valid payload.
Endpoint
Find your user_idin Streamsynq → Settings → API. It’s a UUID that scopes the lead to your account.
Headers
If you set WEBHOOK_SIGNING_SECRET in your account, every payload must include a valid X-Streamsynq-Signature header — the HMAC-SHA256 hex digest of the raw request body using your shared secret. We verify with constant-time comparison.
Body schema
{
"source": "realtor_com" | "zillow" | "facebook"
| "google_ads" | "idx" | "manual" | "other",
"source_lead_id": "string (max 255, optional)",
"name": "string (max 255, optional)",
"email": "string (RFC-valid, optional)",
"phone": "string (E.164 format, optional)",
"property_address": "string (max 500, optional)",
"property_mls_number": "string (max 100, optional)",
"property_price": number (optional),
"inquiry_message": "string (max 5000, optional)",
"buyer_or_seller": "buyer" | "seller" | "unknown",
"timeline": "string (max 100, optional)",
"metadata": { "any": "key-values you want stored" }
}Validation via Zod. Invalid payloads return 400 with the field-level errors.
Sample request
curl -X POST 'https://streamsynq.io/api/webhooks/lead?user_id=YOUR-UUID' \
-H 'Content-Type: application/json' \
-H 'X-Streamsynq-Signature: ABC123...' \
-d '{
"source": "realtor_com",
"name": "Aiden Park",
"email": "aiden.park@gmail.com",
"phone": "+18135552001",
"property_address": "4521 Bayshore Blvd, Tampa FL 33611",
"inquiry_message": "Saw your listing — wondering about HOA fees",
"buyer_or_seller": "buyer",
"timeline": "0-30d"
}'Response
200 OK
{
"ok": true,
"lead_id": "uuid-here",
"orchestrator_action": "call_initiated" | "skipped",
"orchestrator_reason": "no_phone_number" | null
}Errors
- 400Missing or invalid user_id, malformed JSON, or schema validation failure.
- 401Invalid X-Streamsynq-Signature when WEBHOOK_SIGNING_SECRET is configured.
- 429Reserved for future rate-limit responses. We don't currently throttle the lead webhook — but you should still build retry logic in case we add limits or hit upstream provider limits.
- 500Internal error. We log every 500 to Sentry — if you see one consistently, email support@streamsynq.io with the request ID from the response.
Retry policy
We recommend retrying on 5xx responses with exponential backoff (1s, 2s, 4s, 8s, 16s) up to 5 attempts. Use the source_lead_id field to ensure idempotency — duplicate posts of the same source_lead_id return the existing lead instead of creating a new one.
Need a custom integration?
We’ll build a custom adapter for your CRM if you bring us the customer.
Email us →