Webhooks overview
Webhooks are how external systems notify Sprio that something happened, so Sprio can react — most commonly, placing an outbound call.
Contract
- URL:
https://api.voice-up.sprio.ai/api/webhooks/{provider}/{connectionId}— one URL per connection, provided when you set up the integration. - Method:
POST, JSON body (shape depends on the source system — see Events). - Auth: a per-connection secret token in a custom header (see Authentication). LeadSquared and Zoho each carry this token differently on their side, but Sprio's validation is the same principle for both: a mismatched or missing token is rejected before any processing happens.
- Response: Sprio always responds
200 OKquickly once the request is authenticated, before doing any real work — so your system doesn't see slow responses or timeouts as failures. Actual lead processing (dedup checks, owner-gate, call placement) happens asynchronously after the response is sent, via a bounded-concurrency queue — this is deliberate: a bulk lead import or mass reassignment can produce hundreds of events in a short window, and Sprio processes them without blocking the webhook response or overloading the database. - No retries from Sprio's side: if Sprio's async processing fails after
the
200was sent, the source system is not notified and does not resend. Failures are logged and surfaced on your Sprio dashboard's integration activity log — check there, not your CRM's own delivery log, to see the real outcome.
How each source keeps its registration alive
The two supported sources behave differently here, and it matters for troubleshooting "calls just stopped" reports:
| Source | Registration model | What can silently fail |
|---|---|---|
| LeadSquared | Persists once, no expiry — registered via their native Webhook.svc/Create API | Auto-disabled after 10 consecutive delivery failures (LeadSquared-side) |
| Zoho CRM | A watch channel that expires (armed for 6 days, auto-renewed) | Zoho has, in practice, reported a channel as active while silently delivering nothing — a periodic health check catches this independently of the channel's own reported status |
If a client reports "leads stopped triggering calls" and nothing changed on the Sprio side, check the provider's delivery/channel health first — both failure modes above originate on the CRM side, not in Sprio's processing.
Supported sources today
| Source | Events | Direction | Status |
|---|---|---|---|
| LeadSquared | New lead, owner reassignment | Inbound | Live |
| Zoho CRM | Lead created or updated | Inbound | Live |
See Events for per-event payload shapes, and Testing for how to send test events safely.