fathom-webhooks-events

Configure Fathom webhooks for real-time meeting notifications. Use when setting up automated meeting processing, receiving real-time transcripts, or triggering workflows when meetings complete. Trigger with phrases like "fathom webhook", "fathom notifications", "fathom real-time", "fathom event handler".

Allowed Tools

ReadWriteEditBash(curl:*)

Provided by Plugin

fathom-pack

Claude Code skill pack for Fathom (18 skills)

saas packs v1.6.0
View Plugin

Installation

This skill is included in the fathom-pack plugin:

/plugin install fathom-pack@claude-code-plugins-plus

Click to copy

Instructions

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.

Ready to use fathom-pack?