Skip to main content
AI/MLjeremylongshore

fathom-webhooks-events

'Configure Fathom webhooks for real-time meeting notifications.

Stars
2,267
Source
jeremylongshore/claude-code-plugins-plus-skills
Updated
2026-05-31
Slug
jeremylongshore--claude-code-plugins-plus-skills--fathom-webhooks-events
View on GitHubRaw SKILL.md

// install — copy + paste into any project

mkdir -p .claude/skills && curl -fsSL https://raw.githubusercontent.com/jeremylongshore/claude-code-plugins-plus-skills/HEAD/plugins/saas-packs/fathom-pack/skills/fathom-webhooks-events/SKILL.md -o .claude/skills/fathom-webhooks-events.md

Drops the SKILL.md into .claude/skills/fathom-webhooks-events.md. Works with Claude Code, Cursor, and any agent that loads SKILL.md files from .claude/skills/.

Fathom Webhooks & Events

Prerequisites

  • A verified callback endpoint, signature/authentication rule, idempotency store, redaction policy, and event owner.

Instructions

  1. Validate signatures before parsing payloads and acknowledge within the documented timeout.
  2. Deduplicate events using stable opaque IDs and record only necessary redacted metadata.
  3. Apply bounded retry/backoff for transient errors and quarantine malformed terminal failures.

Output

  • A signed, idempotent webhook/event flow with redacted observability, recovery ownership, and a safe replay decision path.

Error Handling

Condition Safe response
Signature fails Reject the event and investigate configuration without logging secrets/payload content.
Duplicate event arrives Return idempotent success and avoid duplicate CRM/follow-up actions.
Processing fails permanently Quarantine it with redacted metadata and fix the contract before replay.

Examples

Test a development callback using a synthetic event, verify signature, deduplication, and a bounded failure path, then record only event ID/state/result. Do not persist transcript text, meeting content, contacts, or webhook secrets in the diagnostics.

Overview

Fathom webhooks send meeting data to your URL when recordings are ready. Webhooks can include summary, transcript, and action items. Configure in Settings or via API.

Webhook Setup

Via API

curl -X POST -H "X-Api-Key: ${FATHOM_API_KEY}" \
  -H "Content-Type: application/json" \
  https://api.fathom.ai/external/v1/webhooks \
  -d '{
    "url": "https://your-app.com/webhooks/fathom",
    "include_summary": true,
    "include_transcript": true,
    "include_action_items": true,
    "fire_on_own_meetings": true,
    "fire_on_shared_meetings": false
  }'

Via Settings

Navigate to Settings > Integrations > Webhooks > Create Webhook.

Webhook Payload

{
  "type": "meeting_content_ready",
  "recording_id": "rec-abc123",
  "url": "https://fathom.video/call/abc123",
  "share_url": "https://fathom.video/share/abc123",
  "title": "Product Review Q1",
  "summary": "Discussed roadmap priorities...",
  "transcript": [...],
  "action_items": [...]
}

Webhook Handler

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/webhooks/fathom", methods=["POST"])
def fathom_webhook():
    event = request.json
    if event.get("type") == "meeting_content_ready":
        recording_id = event["recording_id"]
        summary = event.get("summary", "")
        actions = event.get("action_items", [])
        # Process meeting data
        print(f"Meeting ready: {event.get('title')} ({len(actions)} action items)")
    return jsonify({"received": True}), 200

Testing Webhooks

# Test with webhook.site
curl -X POST https://webhook.site/your-uuid \
  -H "Content-Type: application/json" \
  -d '{"type": "meeting_content_ready", "recording_id": "test"}'

# Or use ngrok for local testing
ngrok http 5000

Resources

Next Steps

For performance optimization, see fathom-performance-tuning.