Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Um comando direto ignora o prompt de revisão. Verifique a origem antes de executá-lo.
Instruções da origem · Visualização somente leitura
name
miro-webhooks-events
description
Implement Miro REST API v2 webhooks with board subscriptions, event handling,
and signature verification for real-time board change notifications.
Trigger with phrases like "miro webhook", "miro events",
"miro board subscription", "miro real-time", "miro notifications".
allowed-tools
Read, Write, Edit, Bash(curl:*)
version
1.7.0
license
MIT
author
Jeremy Longshore <jeremy@intentsolutions.io>
tags
["saas","miro","webhooks","events"]
compatibility
Designed for Claude Code
Miro Webhooks & Events
Overview
Receive real-time notifications when items on a Miro board change. Miro uses board subscriptions via the /v2-experimental/webhooks/board_subscriptions endpoint. All board item types are supported except tags, connectors, and comments.
Prerequisites
Access token with boards:read scope
HTTPS endpoint accessible from the internet
Webhook signing secret (generated when creating subscription)
// List subscriptions// GET https://api.miro.com/v2-experimental/webhooks/board_subscriptionsconst list = awaitmiroFetch('/v2-experimental/webhooks/board_subscriptions');
// Get a specific subscription// GET https://api.miro.com/v2-experimental/webhooks/board_subscriptions/{subscription_id}const sub = awaitmiroFetch(`/v2-experimental/webhooks/board_subscriptions/${subId}`);
// Update subscription (enable/disable)// PATCH https://api.miro.com/v2-experimental/webhooks/board_subscriptions/{subscription_id}awaitmiroFetch(`/v2-experimental/webhooks/board_subscriptions/${subId}`, 'PATCH', {
status: 'disabled',
});
// Delete subscription// DELETE https://api.miro.com/v2-experimental/webhooks/board_subscriptions/{subscription_id}awaitmiroFetch(`/v2-experimental/webhooks/board_subscriptions/${subId}`, 'DELETE');
Event Payload Structure
When a board item is created, updated, or deleted, Miro sends a POST request to your callback URL:
Miro may deliver the same event multiple times. Prevent duplicate processing:
import { Redis } from'ioredis';
const redis = newRedis(process.env.REDIS_URL);
asyncfunctionprocessOnce(eventId: string, handler: () => Promise<void>): Promise<void> {
const key = `miro:webhook:${eventId}`;
// SET NX with TTL — returns 'OK' only if key was newly setconst result = await redis.set(key, '1', 'EX', 86400 * 7, 'NX'); // 7 days TTLif (result !== 'OK') {
console.log(`Duplicate event ${eventId} — skipping`);
return;
}
awaithandler();
}
Webhook Testing
# Test with ngrok for local development
ngrok http 3000
# Register https://your-ngrok.ngrok-free.app/webhooks/miro as callback URL# Manually test your endpoint
curl -X POST http://localhost:3000/webhooks/miro \
-H "Content-Type: application/json" \
-H "X-Miro-Signature: $(echo -n '{"event":"board_subscription_changed","type":"create","boardId":"test","item":{"id":"123","type":"sticky_note"}}' | openssl dgst -sha256 -hmac "$MIRO_WEBHOOK_SECRET" | awk '{print $2}')" \
-d '{"event":"board_subscription_changed","type":"create","boardId":"test","item":{"id":"123","type":"sticky_note"}}'# Use Pipedream for webhook debugging# See: https://developers.miro.com/docs/set-up-a-test-endpoint-for-webhooks
Instructions
Use the ordered procedures and code samples in this guide as a sequence: begin with the prerequisites, apply the configuration or operational step for the target environment, then perform the documented validation or cleanup before proceeding. Keep credentials in the documented secret store; never hard-code them in source.
Output
Following this guide produces the Miro integration outcome for its topic—configuration, validation evidence, operational recovery, or a documented migration result. Record command output and relevant identifiers so a failed step is traceable.
Examples
Start with the smallest applicable command or code example in the relevant section, using a dedicated test board and non-production credentials. Confirm the expected response or validation result before applying the pattern to production.