Skip to Content
IntegrationsGeneric Webhook

Generic Webhook

The Generic Webhook is the most powerful integration — it doesn’t assume a vendor shape at all. Point any system that can POST JSON to a URL at Splashify, define conditions on the payload, and attach actions (send template, update contact tags, delay, chain). Used for custom back-office systems, internal events from your own backend, or niche platforms that aren’t in the first-class integration list.

What makes it different from the vendor integrations

FeatureVendor integrationGeneric Webhook
Fixed slug per vendor❌ (custom)
Fixed event detection❌ (conditions)
One template per event❌ (multi-action)
Capture mode to inspect payload
Chain actions (delay + tag + send)
ALL / ANY condition matching

Setup

1. Create a connection

Splashify Pro → Integrations → Generic Webhook → Create Connection. You’ll get a unique URL:

https://apis.splashifypro.com/api/v1/webhooks/generic/<connection-id>

2. Turn on Capture Mode

Capture Mode is the secret weapon. When enabled:

  1. Fire a test request from your source system at the URL above.
  2. Splashify stores the first payload it receives and shows it to you in the connection editor.
  3. You now know the exact JSON shape — field names, nesting, types.
  4. Capture Mode auto-disables after the first payload, so production traffic doesn’t fill up storage.

3. Build workflows

Each connection can have up to 5 workflows. A workflow is conditions → actions.

Conditions (all or any must match):

OperatorBehaviour
EqualExact string match
Not equal
ContainsSubstring
Starts withPrefix
Ends withSuffix
ExistsField is present in payload
Not existsField is absent

Example conditions:

  • body.event equals user.upgraded
  • body.customer.country starts with IN
  • headers.x-source exists

Actions:

  1. Send message — pick template, map variables using {{body.field}} or {{headers.x-custom-header}} tokens, optional delay (0s / 60s / 5min / 1h).
  2. Update contact tags — adds or removes tags on the contact matched by phone. Silent no-op if contact doesn’t exist yet.

Actions chain in order — a workflow can send a template now, update a tag, and send a follow-up template after 1 hour.

4. Variable tokens

Unlike vendor integrations (which use numeric {{1}}, {{2}} keyed to a field path), Generic Webhook uses inline tokens. Inside any template variable value you can write:

  • {{body.customer.name}} — nested payload field
  • {{headers.x-event-id}} — request header (lowercased)
  • Plain text around tokens: Hi {{body.customer.first_name}}, your order {{body.order_id}} is ready

Use cases

  • Custom SaaS signup flow — Your backend fires POST /webhooks/generic/{id} when a new user signs up → Splashify sends welcome template + tags contact as new-signup.
  • Stock back-in-stock alerts — Inventory system fires when SKU crosses threshold → Splashify sends template to everyone tagged wishlist-SKU-1234. (You’d build this as a broadcast, not per-event — but the trigger could come from here.)
  • Internal ops notifications — Fire from your CI/CD on a failed deploy → Splashify pings ops team’s WhatsApp.
  • CRM that isn’t in the first-class list — If your CRM can fire webhooks (most can), use Generic Webhook instead of waiting for us to add first-class support.

Limits

  • 5 workflows per connection (hard cap; upgrade request: support)
  • Condition operators are plain string ops — no regex yet
  • Delays are discrete values (0 / 60 / 300 / 3600 seconds) — no arbitrary timestamps
  • Array indexing in paths isn’t supported (body.items[0].name won’t resolve) — use Zapier or Make as a formatting proxy if you need it

Troubleshooting

  • Payload isn’t matching my conditions. Re-enable Capture Mode, fire the request, and verify the exact field path Splashify sees.
  • Phone lookup fails for tag updates. The phone has to exist as a contact first. Either create the contact via the send-message action (which implicitly writes it) or import/sync contacts first.
  • Same webhook fires my message multiple times. Generic Webhook doesn’t have per-request idempotency like the vendor integrations. Add a content-hash condition or debounce at the sender.