Diagnose and fix Customer.io common errors. Use when troubleshooting API errors, delivery issues, or integration problems with Customer.io. Trigger with phrases like "customer.io error", "customer.io not working", "debug customer.io", "customer.io issue".
/plugin marketplace add jeremylongshore/claude-code-plugins-plus-skills/plugin install customerio-pack@claude-code-plugins-plusThis skill is limited to using the following tools:
Diagnose and resolve common Customer.io integration errors, delivery issues, and API problems.
{
"meta": {
"error": "Unauthorized"
}
}
Cause: Invalid Site ID or API Key Solution:
# Verify environment variables
echo "Site ID: ${CUSTOMERIO_SITE_ID:0:8}..."
echo "API Key: ${CUSTOMERIO_API_KEY:0:8}..."
Cause: API key doesn't have required permissions Solution: Generate new API key with correct scope (Track vs App API)
{
"meta": {
"error": "identifier is required"
}
}
Cause: Missing or empty user ID Solution:
// Wrong
await client.identify('', { email: 'user@example.com' });
// Correct
await client.identify('user-123', { email: 'user@example.com' });
{
"meta": {
"error": "timestamp must be a valid unix timestamp"
}
}
Cause: Using milliseconds instead of seconds Solution:
// Wrong
{ created_at: Date.now() } // 1704067200000
// Correct
{ created_at: Math.floor(Date.now() / 1000) } // 1704067200
Cause: Malformed email address Solution:
// Validate email before sending
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailRegex.test(email)) {
throw new Error('Invalid email format');
}
{
"meta": {
"error": "Rate limit exceeded"
}
}
Cause: Exceeded API rate limits Solution:
// Implement exponential backoff
async function withBackoff(fn: () => Promise<any>, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
} catch (error: any) {
if (error.status === 429 && i < maxRetries - 1) {
const delay = Math.pow(2, i) * 1000;
await new Promise(r => setTimeout(r, delay));
continue;
}
throw error;
}
}
}
Diagnostic steps:
# Check user exists via API
curl -X GET "https://track.customer.io/api/v1/customers/user-123" \
-u "$CUSTOMERIO_SITE_ID:$CUSTOMERIO_API_KEY"
Cause: Event name mismatch or missing attributes Solution:
// Check exact event name in dashboard
// Event names are case-sensitive
await client.track(userId, {
name: 'signed_up', // Must match exactly
data: { source: 'web' }
});
Cause: Missing or incorrect attributes Solution:
// Wrong - SDK not initialized
const client = new TrackClient(undefined, undefined);
// Correct - Check env vars exist
if (!process.env.CUSTOMERIO_SITE_ID) {
throw new Error('CUSTOMERIO_SITE_ID not set');
}
# Handle network errors
import customerio
from customerio.errors import CustomerIOError
try:
cio.identify(id='user-123', email='user@example.com')
except CustomerIOError as e:
print(f"Customer.io error: {e}")
except ConnectionError as e:
print(f"Network error: {e}")
curl -X POST "https://track.customer.io/api/v1/customers/test-user" \
-u "$CUSTOMERIO_SITE_ID:$CUSTOMERIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com"}' \
-w "\nHTTP Status: %{http_code}\n"
curl -X POST "https://track.customer.io/api/v1/customers/test-user/events" \
-u "$CUSTOMERIO_SITE_ID:$CUSTOMERIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"test_event","data":{"test":true}}'
| Error Code | Meaning | Action |
|---|---|---|
| 400 | Bad Request | Check request format and data |
| 401 | Unauthorized | Verify API credentials |
| 403 | Forbidden | Check API key permissions |
| 404 | Not Found | Verify endpoint URL |
| 429 | Rate Limited | Implement backoff |
| 500 | Server Error | Retry with backoff |
After resolving errors, proceed to customerio-debug-bundle to create comprehensive debug reports.
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.