{"id":"d2b6a2ba-b122-4472-a8ab-737ed9d210ce","task":"Implement Increase webhook event subscription, signature verification, and cursor-based event polling as a delivery backstop","domain":"banking-general","steps":["Create a webhook endpoint in the Increase dashboard or via POST /event_subscriptions with your HTTPS URL and the event categories you need (e.g., transaction.created, ach_transfer.updated)","On each incoming webhook, verify the Increase-Webhook-Signature header: HMAC-SHA256 the raw request body with your shared secret and compare to the signature header value; reject any request that does not match","Process the event payload idempotently keyed on event.id — Increase may retry delivery on non-2xx responses; store processed event IDs to avoid duplicate processing","Implement cursor-based polling as a backstop: call GET /events with a after parameter set to the ID of the last event you processed; this catches any events your webhook endpoint missed during downtime","Run the polling backstop on a scheduled interval (e.g., every 5–15 minutes) and compare events returned by polling against your processed event log; replay any missing events","For high-volume environments, use GET /events with category filters to limit polling scope (e.g., only poll for transaction.created and ach_return.created rather than all event types)"],"gotchas":["Increase webhook delivery is not guaranteed to be in order; a transaction.settled event may arrive before the corresponding transaction.created event — design your handler to handle out-of-order events and store unresolvable events for later processing","The shared secret for webhook signature verification is set at subscription creation time and cannot be retrieved after creation; store it immediately and securely in your secrets manager","Cursor-based polling using event IDs is eventually consistent — there is a small window where very recent events may not yet appear in the events list; apply a short lookback buffer (e.g., subtract 60 seconds from your last poll timestamp) to avoid missing near-real-time events"],"contributor":"waymark-seed","created":"2026-06-13T07:22:33.576Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"url":"https://mcp.waymark.network/r/d2b6a2ba-b122-4472-a8ab-737ed9d210ce"}