{"id":91069,"plugin_id":"plugin_asdk_app_6ac21c958e388191a9cb8a33f597dd70","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-11-11T13:28:45.419Z","digest":"d5851ffbcc9001ae8b07bd55eb991ffef5d441bc8f26e4768b11e5a76e7ca215","against":null,"payload":{"description":"Set up SkedCast outbound webhooks. Use when the user wants event notifications (publishing, approvals, failures) delivered to their own endpoint, or asks about webhook deliveries and failures.","included_files":[],"name":"webhooks-setup","skill_md_contents":"---\nname: webhooks-setup\ndescription: Set up SkedCast outbound webhooks. Use when the user wants event notifications (publishing, approvals, failures) delivered to their own endpoint, or asks about webhook deliveries and failures.\n---\n\n# Webhooks Setup\n\nOutbound webhooks deliver HMAC-signed event notifications to the user's own endpoint.\nAll management calls are write actions — confirm with the user first.\n\n## The workflow\n\n1. **List** existing endpoints with `list_webhooks` (URL, subscribed events, active\n   flag; the secret is masked).\n2. **Create** with `create_webhook`: give the endpoint URL and the subset of events to\n   subscribe to (full 40-event catalog — see https://skedcast.com/developers/webhooks\n   for the complete list with payload fields). The signing secret is returned ONCE —\n   tell the user to store it immediately; it is never readable again.\n3. **Test** with `test_webhook`: sends a `webhook.test` delivery and reports the\n   outcome, proving the endpoint is reachable and verifying signatures without\n   waiting for a real event. This performs a real outbound request.\n4. **Inspect** with `get_webhook` (URL, events, active state, consecutive failures,\n   when/why auto-disabled) and `list_webhook_deliveries` (per-attempt log with event\n   type, response status, error, and timing) — this is how you find out WHY an\n   endpoint stopped receiving.\n5. **Update** with `update_webhook` to change URL, event list, or active state —\n   including re-enabling an endpoint auto-disabled after repeated failures. Note: the\n   event list REPLACES the previous one, so pass the full desired set.\n6. **Rotate** the signing secret with `rotate_webhook_secret` when it may be\n   compromised. The new secret is returned once; the previous secret keeps verifying\n   for a short overlap so the user can redeploy without dropping deliveries.\n7. **Delete** with `delete_webhook` by id. Deliveries to it stop (cascade).\n\n## Notes\n\n- Webhooks are a developer feature. Keep explanations concrete: what events fire,\n  where they go, and how to verify the HMAC signature.\n- Never invent event names — refer to the catalog at\n  https://skedcast.com/developers/webhooks or the `webhooks` block in openapi.json.\n- Event naming is `object.verb`: past tense for outcomes (`post.published`),\n  present participle for in-flight states (`target.preparing`), predictive for\n  warnings (`account.token_expiring`). `post.published` / `post.failed` fire per\n  destination — prefer their `target.published` / `target.failed` twins.\n- Deliveries POST a JSON envelope `{ id, type, created, data }`, signed with Standard\n  Webhooks headers plus `X-SkedCast-Signature`. Delivery is at-least-once with\n  exponential backoff — dedupe on the payload id.\n- Key events to know: `target.published` / `target.failed` (per-destination outcomes),\n  `media.ready` / `media.failed` (asset pipeline), `account.reauth_required` (channel\n  needs reconnecting — publishing to it is paused), `approval.requested` /\n  `approval.decided`, `report.completed`, and `post.recycled` (evergreen copy created).\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}