customerio-webhooks-events
Facilitates handling of Customer.io webhooks for processing delivery events and callbacks, enhancing email marketing automation.
Install this skill
Security score
The customerio-webhooks-events skill was audited on Feb 21, 2026 and we found 72 security issues across 4 threat categories. Review the findings below before installing.
Categories Tested
Security Issues
Template literal with variable interpolation in command context
| 133 | console.log(`Processing event: ${event.metric}`, event.event_id); |
Template literal with variable interpolation in command context
| 155 | console.log(`Unhandled event type: ${event.metric}`); |
Template literal with variable interpolation in command context
| 161 | console.log(`Email delivered to ${event.data.email_address}`); |
Template literal with variable interpolation in command context
| 166 | console.log(`Email opened by ${event.data.customer_id}`); |
Template literal with variable interpolation in command context
| 171 | console.log(`Link clicked: ${event.data.link}`); |
Template literal with variable interpolation in command context
| 176 | console.log(`Email bounced for ${event.data.email_address}`); |
Template literal with variable interpolation in command context
| 181 | console.log(`Spam complaint from ${event.data.email_address}`); |
Template literal with variable interpolation in command context
| 186 | console.log(`User unsubscribed: ${event.data.customer_id}`); |
Template literal with variable interpolation in command context
| 244 | console.log(`Processing ${event.metric} event:`, event.event_id); |
Template literal with variable interpolation in command context
| 261 | console.log(`Job ${job.id} completed`); |
Template literal with variable interpolation in command context
| 265 | console.error(`Job ${job?.id} failed:`, err); |
Template literal with variable interpolation in command context
| 284 | `https://api.customer.io/v1/metrics/email/${period}`, |
Template literal with variable interpolation in command context
| 287 | 'Authorization': `Bearer ${process.env.CUSTOMERIO_APP_API_KEY}` |
Template literal with variable interpolation in command context
| 298 | `https://api.customer.io/v1/campaigns/${campaignId}/metrics`, |
Template literal with variable interpolation in command context
| 301 | 'Authorization': `Bearer ${process.env.CUSTOMERIO_APP_API_KEY}` |
Webhook reference - potential data exfiltration
| 2 | name: customerio-webhooks-events |
Webhook reference - potential data exfiltration
| 4 | Implement Customer.io webhook handling. |
Webhook reference - potential data exfiltration
| 7 | Trigger with phrases like "customer.io webhook", "customer.io events", |
Webhook reference - potential data exfiltration
| 15 | # Customer.io Webhooks & Events |
Webhook reference - potential data exfiltration
| 18 | Implement webhook handling for Customer.io events including email delivery, opens, clicks, and bounces. |
Webhook reference - potential data exfiltration
| 21 | - Public endpoint for webhooks |
Webhook reference - potential data exfiltration
| 22 | - Webhook signing secret from Customer.io |
Webhook reference - potential data exfiltration
| 27 | ### Step 1: Webhook Event Types |
Webhook reference - potential data exfiltration
| 29 | // types/customerio-webhooks.ts |
Webhook reference - potential data exfiltration
| 30 | export type WebhookEventType = |
Webhook reference - potential data exfiltration
| 49 | export interface WebhookEvent { |
Webhook reference - potential data exfiltration
| 73 | export interface WebhookPayload { |
Webhook reference - potential data exfiltration
| 74 | events: WebhookEvent[]; |
Webhook reference - potential data exfiltration
| 78 | ### Step 2: Webhook Handler with Signature Verification |
Webhook reference - potential data exfiltration
| 80 | // lib/webhook-handler.ts |
Webhook reference - potential data exfiltration
| 83 | import type { WebhookPayload, WebhookEvent } from '../types/customerio-webhooks'; |
Webhook reference - potential data exfiltration
| 85 | export class CustomerIOWebhookHandler { |
Webhook reference - potential data exfiltration
| 115 | const webhookPayload: WebhookPayload = req.body; |
Webhook reference - potential data exfiltration
| 118 | await this.processEvents(webhookPayload.events); |
Webhook reference - potential data exfiltration
| 119 | res.status(200).json({ processed: webhookPayload.events.length }); |
Webhook reference - potential data exfiltration
| 121 | console.error('Webhook processing error:', error); |
Webhook reference - potential data exfiltration
| 126 | async processEvents(events: WebhookEvent[]): Promise<void> { |
Webhook reference - potential data exfiltration
| 132 | async processEvent(event: WebhookEvent): Promise<void> { |
Webhook reference - potential data exfiltration
| 159 | async onEmailDelivered(event: WebhookEvent): Promise<void> { |
Webhook reference - potential data exfiltration
| 164 | async onEmailOpened(event: WebhookEvent): Promise<void> { |
Webhook reference - potential data exfiltration
| 169 | async onEmailClicked(event: WebhookEvent): Promise<void> { |
Webhook reference - potential data exfiltration
| 174 | async onEmailBounced(event: WebhookEvent): Promise<void> { |
Webhook reference - potential data exfiltration
| 179 | async onEmailComplained(event: WebhookEvent): Promise<void> { |
Webhook reference - potential data exfiltration
| 184 | async onEmailUnsubscribed(event: WebhookEvent): Promise<void> { |
Webhook reference - potential data exfiltration
| 193 | // routes/webhooks.ts |
Webhook reference - potential data exfiltration
| 195 | import { CustomerIOWebhookHandler } from '../lib/webhook-handler'; |
Webhook reference - potential data exfiltration
| 198 | const webhookHandler = new CustomerIOWebhookHandler( |
Webhook reference - potential data exfiltration
| 199 | process.env.CUSTOMERIO_WEBHOOK_SECRET! |
Webhook reference - potential data exfiltration
| 208 | await webhookHandler.handleRequest(req, res); |
Webhook reference - potential data exfiltration
| 216 | // lib/webhook-queue.ts |
Webhook reference - potential data exfiltration
| 219 | import type { WebhookEvent } from '../types/customerio-webhooks'; |
Webhook reference - potential data exfiltration
| 223 | // Queue for webhook events |
Webhook reference - potential data exfiltration
| 224 | const webhookQueue = new Queue('customerio-webhooks', { connection }); |
Webhook reference - potential data exfiltration
| 227 | export async function queueWebhookEvent(event: WebhookEvent): Promise<void> { |
Webhook reference - potential data exfiltration
| 228 | await webhookQueue.add(event.metric, event, { |
Webhook reference - potential data exfiltration
| 241 | 'customerio-webhooks', |
Webhook reference - potential data exfiltration
| 243 | const event: WebhookEvent = job.data; |
Webhook reference - potential data exfiltration
| 314 | import type { WebhookEvent } from '../types/customerio-webhooks'; |
Webhook reference - potential data exfiltration
| 320 | export async function streamToBigQuery(events: WebhookEvent[]): Promise<void> { |
Webhook reference - potential data exfiltration
| 337 | - Webhook event type definitions |
Webhook reference - potential data exfiltration
| 347 | | Invalid signature | Verify webhook secret matches | |
Webhook reference - potential data exfiltration
| 352 | - [Webhooks Documentation](https://customer.io/docs/webhooks/) |
Webhook reference - potential data exfiltration
| 356 | After webhook setup, proceed to `customerio-performance-tuning` for optimization. |
Access to .env file
| 199 | process.env.CUSTOMERIO_WEBHOOK_SECRET! |
Access to .env file
| 221 | const connection = new Redis(process.env.REDIS_URL!); |
Access to .env file
| 274 | const apiClient = new APIClient(process.env.CUSTOMERIO_APP_API_KEY!, { |
Access to .env file
| 287 | 'Authorization': `Bearer ${process.env.CUSTOMERIO_APP_API_KEY}` |
Access to .env file
| 301 | 'Authorization': `Bearer ${process.env.CUSTOMERIO_APP_API_KEY}` |
External URL reference
| 284 | `https://api.customer.io/v1/metrics/email/${period}`, |
External URL reference
| 298 | `https://api.customer.io/v1/campaigns/${campaignId}/metrics`, |
External URL reference
| 352 | - [Webhooks Documentation](https://customer.io/docs/webhooks/) |
External URL reference
| 353 | - [Reporting API](https://customer.io/docs/api/app/) |