Skip to content

Custom Lead Webhook

Tenant-scoped inbound webhooks for Zapier, Make, websites, and form plugins.

Overview

Each workspace can create one or more webhook endpoints under Leads → Integrations → Webhooks.

ItemDetail
Permissionleads.manage_integrations
Modulemodule:leads
Drivercustom_webhook (CustomWebhookDriver)
IngressPOST /webhooks/leads/custom/{uuid}
AuthAuthorization: Bearer <api_key> or X-SaleOS-Key or HMAC via X-SaleOS-Signature + X-SaleOS-Timestamp
Default sourceTenant-editable (default_source, factory default Webhook)
Payload overrideBody field source overrides the endpoint default when non-empty
Module gateIngress rejects when tenant lacks active module:leads
Body limit64 KB

Secrets are returned once on create/rotate. List APIs return has_api_key / has_signing_secret only.

HMAC signing

text
X-SaleOS-Timestamp: <unix_seconds>
X-SaleOS-Signature: hex(hmac_sha256("{timestamp}.{rawBody}", signing_secret))

Timestamp must be within ±5 minutes of server time.

Payload

json
{
  "name": "Ada Lovelace",
  "email": "ada@example.com",
  "phone": "+1-555-0100",
  "company": "Analytical Engines",
  "job_title": "Mathematician",
  "source": "Optional override",
  "external_id": "zapier-row-123",
  "utm_source": "google",
  "custom_fields": { "budget": "10k" }
}

name is required (or full_name). Unknown keys fold into custom_fields.

Responses

StatusMeaning
201 + "status":"created"Lead created
200 + "status":"skipped"Duplicate / already processed (external_id or email/phone)
401Invalid credentials
404Unknown or inactive endpoint
422Validation error

Management API

  • GET/POST /api/tenant/v1/leads/integrations/webhooks
  • PUT /api/tenant/v1/leads/integrations/webhooks/{id}
  • POST .../rotate
  • DELETE .../{id}

Official documentation for the SaleOS SaaS Platform.