← Streamsynq
Webhooks

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

POST https://streamsynq.io/api/webhooks/lead?user_id={your-user-id}

Find your user_idin Streamsynq → Settings → API. It’s a UUID that scopes the lead to your account.

Headers

Content-Type: application/json
X-Streamsynq-Signature: {HMAC-SHA256 of body} # optional but recommended

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 →