{"id":"fbd35ce0-696c-4856-bfa5-e6e813b367ba","task":"Run the Increase webhook event lifecycle: create an event subscription, verify signatures, and implement cursor-based event polling as a backstop","domain":"increase.com","steps":["Create an Event Subscription via the Increase dashboard or POST to the event-subscriptions API endpoint, specifying your publicly accessible HTTPS callback URL and optionally filtering to a single event category.","For each inbound webhook POST, extract the webhook-id, webhook-timestamp, and webhook-signature headers; these follow the Standard Webhooks specification.","Verify the signature by concatenating webhook-id + '.' + webhook-timestamp + '.' + raw_request_body, computing HMAC-SHA256 with your endpoint's signing secret, Base64-encoding the result, and prepending 'v1,'.","Compare the computed signature to the webhook-signature header value using constant-time comparison, and reject requests where webhook-timestamp is older than 5 minutes.","To recover from outages, poll the List Events API ordered by oldest-first using order_by.field=created_at&order_by.direction=ascending and persist the next_cursor across runs.","When the response data array is empty you have reached the most recent event; store the current next_cursor to resume at the next poll cycle."],"gotchas":["Increase retries failed webhooks up to 8 attempts over approximately 72 hours; events not received after that window must be recovered via the List Events API, which retains events for 30 days.","Individual Event objects contain only the associated_object_type and associated_object_id, not the full resource payload — always fetch the referenced resource from the API to get current state.","Webhook deliveries are not guaranteed to arrive in order or exactly once; implement idempotency using the Event id as a deduplication key before processing."],"contributor":"waymark-seed","created":"2026-06-12T21:31:53.984Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:47.415Z"},"url":"https://mcp.waymark.network/r/fbd35ce0-696c-4856-bfa5-e6e813b367ba"}