Inbound Webhooks
Receive events from external systems in real time. When a payment is processed in Stripe or a commit is pushed to GitHub, webhooks deliver the event to SchemaBounce instantly.
Unlike SaaS connectors that poll on a schedule, webhooks push events as they occur. Delivery lands within 1 to 5 seconds of the change in the source app.
Supported Webhook Sources
| Platform | Event Types | Signature Header |
|---|---|---|
| Stripe | payment_intent.*, charge.*, customer.* | Stripe-Signature |
| GitHub | push, pull_request, issues, release | X-Hub-Signature-256 |
| Shopify | orders/*, products/*, customers/* | X-Shopify-Hmac-SHA256 |
| HubSpot | contact.*, deal.*, company.* | X-HubSpot-Signature-v3 |
| Salesforce | Outbound Messages, Platform Events | X-Salesforce-Signature |
| Zendesk | ticket.*, user.*, organization.* | X-Zendesk-Webhook-Signature |
| Slack | message.*, reaction.*, file.* | X-Slack-Signature |
| Intercom | conversation.*, user.*, contact.* | X-Hub-Signature |
| Twilio | message.*, call.*, recording.* | X-Twilio-Signature |
| SendGrid | delivered, opened, clicked, bounced | X-Twilio-Email-Event-Webhook-Signature |
Webhook URL Format
Each webhook source has a unique URL that you configure in the external platform:
https://stream.schemabounce.com/webhooks/{connector}/{token}
Examples:
https://stream.schemabounce.com/webhooks/stripe/wht_abc123xyz
https://stream.schemabounce.com/webhooks/github/wht_def456uvw
https://stream.schemabounce.com/webhooks/shopify/wht_ghi789rst
Webhook tokens are created in your workspace settings. Each token identifies your workspace and can be revoked at any time.
Event Payload Format
Single Event
{
"id": "evt_unique_id",
"type": "insert",
"source_id": "stripe_prod",
"source_type": "webhook",
"object_type": "payment_intent",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"id": "pi_123abc",
"amount": 2000,
"currency": "usd",
"status": "succeeded"
},
"metadata": {
"webhook_id": "we_xyz789"
}
}
Batch Events (up to 1000)
{
"events": [
{ "id": "evt_1", "type": "insert", "...": "..." },
{ "id": "evt_2", "type": "update", "...": "..." }
]
}
Security and Signature Validation
SchemaBounce validates webhook signatures to make sure events are authentic and haven't been tampered with in transit.
HMAC-SHA256 validation: each platform signs webhooks with a shared secret. SchemaBounce recomputes the signature and compares it using constant-time comparison.
Replay protection: the X-Webhook-Timestamp header is validated to be within 5 minutes, preventing replay attacks with old payloads.
Python Signature Verification Example
import hmac
import hashlib
def verify_webhook(payload: bytes, signature: str, secret: str) -> bool:
expected = hmac.new(
secret.encode(),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(f"sha256={expected}", signature)
Rate Limits by Plan
| Plan | Requests/sec | Events/request | Max Payload |
|---|---|---|---|
| Starter | 100 | 100 | 1 MB |
| Team | 500 | 500 | 5 MB |
| Scale | 2,000 | 1,000 | 10 MB |
| Enterprise | Custom | Custom | Custom |
Response Codes
| Code | Status | Meaning |
|---|---|---|
| 202 | Accepted | Event(s) accepted and queued for processing |
| 400 | Bad Request | Invalid payload format |
| 401 | Unauthorized | Invalid API key or signature |
| 404 | Not Found | Route ID not found or paused |
| 429 | Rate Limited | Too many requests, retry with backoff |
| 503 | Service Unavailable | Event processing temporarily unavailable |
Best Practices
- Use batch endpoints: send multiple events per request to reduce overhead.
- Implement retries: use exponential backoff for 429 and 503 responses.
- Include idempotency keys: add event IDs to prevent duplicate processing.
- Rotate secrets regularly: update webhook secrets every 90 days.
- Monitor webhook health: track delivery success rates and latency.
Related
- SaaS Connectors: pair webhooks with a scheduled OAuth sync for full record history plus real-time updates.
- Database CDC: the lowest-latency option when the source is your own database.
- Outbox Pattern: a transactional alternative to CDC for databases without log access.
- Connector Reference: the full catalog of connectors, several of which also support webhooks.
- Direct Pull: query-based syncing for managed databases.
- Pipeline overview and how the pipeline works.
- Filters and transforms for shaping webhook events before they reach a sink.
- Troubleshooting if webhook deliveries are failing or delayed.
- Read what CDC is for how push-based webhooks compare to log-based change capture.