Skip to content
Skillv1.0.0

fathom-security-basics

Secure Fathom API keys and handle meeting data privacy. Trigger with phrases like "fathom security", "fathom api key safety", "fathom privacy".

by jeremylongshore(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from jeremylongshore/tons-of-skills-marketplace (skills/.curated/fathom-security-basics/SKILL.md). Install upstream with npx skills add jeremylongshore/tons-of-skills-marketplace --skill fathom-security-basics. Copyright stays with the author (MIT).

Fathom Security Basics

Prerequisites

  • A current recording/data classification, consent policy, scoped identity/secrets, and incident owner.

Instructions

  1. Apply least-privilege roles and approved recording/transcript access settings.
  2. Keep credentials in the secret manager and meeting content out of logs and test fixtures.
  3. Validate integrations and sharing controls with synthetic records before broad rollout.
  4. Revoke access and follow the incident process on suspected exposure.

Output

  • A controlled Fathom deployment with data/consent safeguards, scoped credentials, access review, and incident path.

Examples

Verify a development role can access only its synthetic meeting record and cannot retrieve production content, then record the redacted result and review date. If a token, recording, transcript, or participant data is exposed, contain/revoke first and follow the data incident process.

Overview

Fathom records and transcribes meetings, producing transcripts and action items that contain participant PII (names, emails, spoken content), confidential business decisions, and potentially sensitive negotiations. API keys are per-user and grant access to all meetings the user recorded or that were shared to their team. Protect recording consent workflows, transcript storage, and any analytics pipeline touching meeting content.

API Key Management

function createFathomClient(): { apiKey: string; baseUrl: string } {
  const apiKey = process.env.FATHOM_API_KEY;
  if (!apiKey) {
    throw new Error("Missing FATHOM_API_KEY — store in secrets manager, never in code");
  }
  // Fathom keys are per-user — never share across team members
  console.log("Fathom client initialized (key hash:", apiKey.slice(-4), ")");
  return { apiKey, baseUrl: "https://api.fathom.video/v1" };
}

Webhook Signature Verification

import crypto from "crypto";
import { Request, Response, NextFunction } from "express";

function verifyFathomWebhook(req: Request, res: Response, next: NextFunction): void {
  const signature = req.headers["x-fathom-signature"] as string;
  const secret = process.env.FATHOM_WEBHOOK_SECRET!;
  const expected = crypto.createHmac("sha256", secret).update(req.body).digest("hex");
  if (!signature || !crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
    res.status(401).send("Invalid signature");
    return;
  }
  next();
}

Input Validation

import { z } from "zod";

const MeetingQuerySchema = z.object({
  meeting_id: z.string().uuid(),
  include_transcript: z.boolean().default(false),
  date_from: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
  date_to: z.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
  participant_email: z.string().email().optional(),
});

function validateMeetingQuery(data: unknown) {
  return MeetingQuerySchema.parse(data);
}

Data Protection

const FATHOM_PII_FIELDS = ["participant_email", "participant_name", "phone_number", "transcript_text"];

function redactFathomLog(record: Record<string, unknown>): Record<string, unknown> {
  const redacted = { ...record };
  for (const field of FATHOM_PII_FIELDS) {
    if (field in redacted) redacted[field] = "[REDACTED]";
  }
  // Also scrub emails from transcript snippets
  if (typeof redacted.summary === "string") {
    redacted.summary = (redacted.summary as string).replace(/[\w.+-]+@[\w-]+\.[\w.-]+/g, "[REDACTED_EMAIL]");
  }
  return redacted;
}

Security Checklist

  • API key stored in secrets manager, never in code
  • Meeting recordings and transcripts encrypted at rest
  • PII redacted in non-production environments
  • Webhook endpoints use HTTPS with signature verification
  • Access logs track per-user API key usage
  • Recording consent verified before processing transcripts
  • Transcript data retention policy enforced
  • Action items containing confidential terms scrubbed before export

Error Handling

Vulnerability Risk Mitigation
Leaked API key Access to all user meetings and transcripts Secrets manager + key regeneration
Unredacted transcripts in logs Participant PII exposure Field-level redaction pipeline
Missing recording consent Legal liability under two-party consent laws Consent verification before processing
Unencrypted transcript storage Bulk meeting data breach Encryption at rest + access controls
Overly broad meeting sharing Confidential content exposed to wrong teams Per-meeting permission scoping

Resources

Next Steps

See fathom-prod-checklist.

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/jeremylongshore-tons-of-skills-marketplace-fathom-securi-d6581c/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

jeremylongshore-tons-of-skills-marketplace-fathom-securi-d6581c.ocm.jsonjson
{
  "ocm": "1",
  "id": "jeremylongshore-tons-of-skills-marketplace-fathom-securi-d6581c",
  "kind": "skill",
  "name": "fathom-security-basics",
  "description": "Secure Fathom API keys and handle meeting data privacy. Trigger with phrases like \"fathom security\", \"fathom api key safety\", \"fathom privacy\".",
  "publisher": "jeremylongshore",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "coding"
    ],
    "tags": [
      "skill-md",
      "saas",
      "meeting-intelligence",
      "ai-notes",
      "fathom",
      "skills-sh"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "Secure Fathom API keys and handle meeting data privacy. Trigger with phrases like \"fathom security\", \"fathom api key safety\", \"fathom privacy\"."
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "skills.sh",
      "repository": "https://github.com/jeremylongshore/tons-of-skills-marketplace",
      "path": "skills/.curated/fathom-security-basics/SKILL.md",
      "ref": "HEAD",
      "url": "https://github.com/jeremylongshore/tons-of-skills-marketplace/blob/HEAD/skills/.curated/fathom-security-basics/SKILL.md",
      "key": "jeremylongshore/tons-of-skills-marketplace/skills/.curated/fathom-security-basics/SKILL.md"
    },
    "compatibility": "Designed for Claude Code",
    "allowed_tools": [
      "Read,",
      "Write,",
      "Edit,",
      "Grep"
    ],
    "license": "MIT"
  },
  "instructions": "# Fathom Security Basics\n\n## Prerequisites\n\n- A current recording/data classification, consent policy, scoped identity/secrets, and incident owner.\n\n## Instructions\n\n1. Apply least-privilege roles and approved recording/transcript access settings.\n2. Keep credentials in the secret manager and meeting content out of logs and test fixtures.\n3. Validate integrations and sharing controls with synthetic records before broad rollout.\n4. Revoke access and follow the incident process on suspected exposure.\n\n## Output\n\n- A controlled Fathom deployment with data/consent safeguards, scoped credentials, a",
  "cost": {
    "context_tokens": 1194
  }
}

Fetch it by URL: GET /api/v1/registry/jeremylongshore-tons-of-skills-marketplace-fathom-securi-d6581c/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.