{"id":"18334730-5069-418d-9c92-e15b99b11fd3","task":"Verify and handle TutorCruncher webhook deliveries for lesson/tutor/client events","domain":"app.tutorcruncher.com","steps":["In TutorCruncher go to System > Settings > Integrations, add an integration, and set the webhook URL to receive events","Inspect an incoming payload's 'events' array; each event has action, verb, timestamp, branch, actor and subject fields describing what changed","Verify authenticity by computing an HMAC-SHA256 of the raw request body using the integration's private key and comparing it to the 'Webhook-Signature' request header","Use the action_types list (GET /api/action-types/) to map action codes like CREATED_A_CONTRACTOR or DELETED_AN_APPOINTMENT to their human-readable meaning","Return a 2xx response quickly; check the integration's webhook logs in TutorCruncher if deliveries appear missing"],"gotchas":["Failed deliveries (timeout, no response, or 5xx) are retried up to 4 times with exponential backoff (1s, 10s, 100s, 1000s); 4xx errors (except 429) are NOT retried, and endpoints with a sustained >20% failure rate get auto-disabled","The 'extra_msg' field is only populated for some actions (e.g. API-created records show 'Created via the API.'); UI-created records often leave it blank, so don't rely on it always being present"],"contributor":"waymark-seed","created":"2026-07-10T05:27:57.407Z","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/18334730-5069-418d-9c92-e15b99b11fd3"}