Generic Webhook Integration
Receive events from any external service with configurable HMAC signature verification. This integration allows you to trigger Raikoo workflows from services like GitHub, Stripe, Shopify, and custom applications.
What You Can Build
- CI/CD automation: Trigger workflows when code is pushed or PRs are created
- Payment processing: Handle Stripe payment events and update your systems
- E-commerce automation: Process Shopify orders and inventory updates
- Custom integrations: Connect any service that supports webhooks
Prerequisites
Before setting up webhook integration, you will need:
- The external service configured to send webhooks
- The webhook secret or signing key from the external service (if using signature verification)
- Admin access to your Raikoo organization
Setup Steps
Step 1: Create a Connection in Raikoo
- Navigate to your organization in Raikoo
- Click Connections in the left navigation
- Click Create Connection
- Configure the connection:
- Name: Give it a descriptive name (e.g., "GitHub Webhooks")
- Description: Optional description
- Platform: Select Generic Webhook
- Go to the Credentials tab
- Select a Webhook Preset or configure custom settings:
Available Presets
| Preset | HMAC Header | Algorithm | Description |
|---|---|---|---|
| GitHub | x-hub-signature-256 |
SHA-256 | GitHub webhook events (push, PR, issues) |
| Stripe | stripe-signature |
SHA-256 | Stripe payment and subscription events |
| Zapier | x-zapier-signature |
SHA-256 | Zapier automation webhooks |
| Linear | linear-signature |
SHA-256 | Linear issue and project events |
| Slack | x-slack-signature |
SHA-256 | Slack Events API webhooks |
| Shopify | x-shopify-hmac-sha256 |
SHA-256 | Shopify store events |
| Custom | Configurable | Configurable | Custom webhook format |
- If using the Custom preset, configure:
- HMAC Header: The HTTP header containing the signature
- HMAC Algorithm: SHA-256 or SHA-1
- Webhook Secret: The secret key for signature verification
- Click Save
Step 2: Create an Integration (Trigger)
- Navigate to Integrations in the left navigation
- Click Create Trigger
- Configure the trigger:
- Name: A descriptive name (e.g., "GitHub PR Handler")
- Description: What this trigger does
- External Connection: Select the webhook connection you created
- Go to the Execution tab:
- Execution Mode: Choose "Workflow" (recommended for webhooks)
- Project: Select the project containing your workflow
- Workflow: Select the workflow to execute
- Authentication Mode: Configure how executions are authenticated
- Click Save
Step 3: Configure the External Service
- In Raikoo, go to the Webhook tab of your trigger
- Copy the Webhook URL and Webhook Secret
- In your external service (GitHub, Stripe, etc.):
- Navigate to webhook settings
- Add a new webhook
- Paste the Raikoo webhook URL
- Enter the secret (if prompted)
- Select the events you want to receive
- Save the webhook configuration
Platform-Specific Setup
GitHub Webhooks
- Go to your repository or organization settings
- Click Webhooks > Add webhook
- Configure:
- Payload URL: Your Raikoo webhook URL
- Content type:
application/json - Secret: Your webhook secret from Raikoo
- SSL verification: Enable
- Events: Select which events to receive
- Click Add webhook
Stripe Webhooks
- Go to the Stripe Dashboard
- Click Add endpoint
- Configure:
- Endpoint URL: Your Raikoo webhook URL
- Events: Select events to receive
- After creation, reveal and copy the Signing secret
- Add the signing secret to your Raikoo connection
Shopify Webhooks
- Go to your Shopify admin panel
- Navigate to Settings > Notifications > Webhooks
- Click Create webhook
- Configure:
- Event: Select the event type
- Format: JSON
- URL: Your Raikoo webhook URL
- Note the webhook secret shown (use it in Raikoo)
Webhook Payload in Workflows
When a webhook triggers a workflow, the entire payload is available:
| Parameter | Description |
|---|---|
TRIGGER_PLATFORM |
Always "webhook" |
TRIGGER_CONNECTION_ID |
The connection ID |
Additionally, any parameters you send in your webhook payload's parameters object are available directly:
Accessing Payload Data
In your webhook request, send parameters in a structured format:
{
"parameters": {
"action": "opened",
"repository": "my-repo",
"title": "Fix bug"
}
}
These are then available in your workflow:
{{WorkflowParameters.action}}
{{WorkflowParameters.repository}}
{{WorkflowParameters.title}}
Signature Verification
Raikoo uses timing-safe HMAC verification to validate webhook signatures:
- Extract Signature: The signature is read from the configured header
- Compute Expected: HMAC is computed using your secret and the raw request body
- Compare: Signatures are compared using timing-safe comparison to prevent attacks
- Validate: Requests with invalid signatures are rejected
Supported Signature Formats
| Format | Example | Notes |
|---|---|---|
| Prefixed | sha256=abc123... |
GitHub style |
| Raw | abc123... |
Plain hex hash |
| Versioned | v1=abc123... |
Stripe style |
Testing Webhooks
Without Signature Verification
For development, you can leave the webhook secret empty. This allows any request to be processed without verification.
Warning: Only do this in development environments. Always use signature verification in production.
Using ngrok for Local Testing
- Install ngrok
- Start your local Raikoo instance
- Run:
ngrok http 3000 - Use the ngrok URL as your webhook endpoint
- Test webhooks from your external service
Manual Testing with curl
# Without signature
curl -X POST https://your-raikoo-domain/api/triggers/{webhookId} \
-H "Content-Type: application/json" \
-d '{"event": "test", "data": {"message": "Hello"}}'
# With signature (GitHub style)
curl -X POST https://your-raikoo-domain/api/triggers/{webhookId} \
-H "Content-Type: application/json" \
-H "x-hub-signature-256: sha256=<computed-signature>" \
-d '{"event": "test"}'
Troubleshooting
Webhook Not Triggering
- Verify the webhook URL is correct in the external service
- Check that your trigger is set to Active
- Review webhook delivery logs in the external service
- Ensure the external service can reach your Raikoo instance
Signature Verification Failed
- Verify the correct preset is selected for your service
- Check that the webhook secret matches in both Raikoo and the external service
- Ensure the secret does not have extra whitespace
- For custom setups, verify the HMAC header name is correct
Payload Not Parsing
- Ensure the external service sends
Content-Type: application/json - Check that the payload is valid JSON
- Verify the payload path (if configured) exists in the request
Workflows Not Executing
- Check that a workflow is selected in the trigger's Execution tab
- Verify the workflow has a compatible starting point
- Review workflow execution logs for errors
Best Practices
- Always use signature verification in production environments
- Use dedicated secrets: Generate unique secrets for each webhook source
- Monitor webhook deliveries: Check external service logs for failures
- Implement idempotency: Design workflows to handle duplicate webhooks safely
- Keep secrets secure: Store webhook secrets only in Raikoo, not in code
Payload Path Extraction
For webhooks that nest the actual payload inside a wrapper, you can specify a Payload Path:
// Original webhook payload
{
"wrapper": {
"metadata": { "timestamp": "..." },
"data": {
"event": "order.created",
"order": { ... }
}
}
}
// With payloadPath = "wrapper.data"
// Your workflow receives:
{
"event": "order.created",
"order": { ... }
}
Configure this in the connection's Credentials tab under advanced settings.
Next Steps
- Create workflows to process webhook events
- Set up email triggers for email-based automation
- Configure Slack integration for notification delivery