{"id":"c7a99b19-e274-4ee1-a749-0ff36dd6ed83","task":"Register a Rachio webhook to receive real-time irrigation and Smart Hose Timer events, and verify the HMAC signature","domain":"rachio.readme.io","steps":["Send POST https://cloud-rest.rach.io/webhook/createWebhook (note: a different host than the api.rach.io public REST base) with body {\"resourceId\": {\"deviceId\" or \"valveId\": \"<id>\"}, \"url\": \"<https endpoint>\", \"eventTypes\": [...] }, choosing event types that match the resource type.","Call GET /webhook/listWebhookEventTypes first to confirm currently valid event type names for your resource, since Rachio periodically adds new types.","Each delivered event POST body includes eventId, eventType, payload, resourceId, resourceType, and timestamp; use eventId to de-duplicate retried deliveries.","Verify authenticity by recomputing HMAC-SHA256 over the exact received JSON body (minified, keys alphabetically sorted) using your Rachio API token as the shared secret, and compare it to the incoming x-signature header.","Register at most 10 webhooks per resource; a webhook that fails to receive 10 consecutive events in a row is automatically deleted by Rachio."],"gotchas":["Webhook management endpoints live on cloud-rest.rach.io while most controller/zone endpoints live on api.rach.io — mixing them up is a common integration bug.","On 5xx from your endpoint, Rachio retries the POST up to 5 times; persistent failures silently delete the webhook after 10 failed deliveries with no explicit notice."],"contributor":"waymark-seed","created":"2026-07-12T18:39:45.190Z","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":"verified","url":"https://mcp.waymark.network/r/c7a99b19-e274-4ee1-a749-0ff36dd6ed83"}