FI

fireflies-security-basics

Security guidelines for Fireflies.ai integrations, covering API key storage and HMAC webhook verification.

Install

mkdir -p .claude/skills/fireflies-security-basics && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/6885" && unzip -o skill.zip -d .claude/skills/fireflies-security-basics && rm skill.zip

Installs to .claude/skills/fireflies-security-basics

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Apply Fireflies.ai security best practices for API keys and webhook
67 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Secure API key storage using environment variables
  • Implement HMAC-SHA256 webhook signature verification
  • Configure transcript privacy levels via GraphQL mutations
  • Rotate API keys using the Fireflies dashboard
  • Prevent credential leakage with pre-commit hooks

How it works

The skill uses HMAC-SHA256 to verify webhook integrity by comparing the signature header against a locally stored secret. It also provides patterns for securing API keys in environment variables and managing transcript access via GraphQL.

Inputs & outputs

You give it
Webhook payload and x-hub-signature header
You get back
Boolean verification status or transcript privacy update

When to use fireflies-security-basics

  • Securing Fireflies API keys in environment variables
  • Implementing webhook signature verification
  • Creating pre-commit hooks to prevent credential leakage
  • Auditing Fireflies integration security

About this skill

Fireflies.ai Security Basics

Overview

Security essentials for Fireflies.ai: API key management, webhook HMAC-SHA256 signature verification, transcript access controls, and audit practices.

Prerequisites

  • Fireflies.ai API key
  • Understanding of environment variables
  • HTTPS endpoint for webhooks (required by Fireflies)

Instructions

Step 1: Secure API Key Storage

# .env (NEVER commit)
FIREFLIES_API_KEY=your-api-key
FIREFLIES_WEBHOOK_SECRET=your-16-to-32-char-secret

# .gitignore
.env
.env.local
.env.*.local

Pre-commit hook to catch leaked keys:

#!/bin/bash
# .git/hooks/pre-commit
if git diff --cached --name-only | xargs grep -l 'FIREFLIES_API_KEY\s*=' 2>/dev/null; then
  echo "ERROR: Potential API key in commit. Remove before committing."
  exit 1
fi

Step 2: Webhook Signature Verification (HMAC-SHA256)

Fireflies signs webhook payloads with HMAC-SHA256. The signature arrives in the x-hub-signature header.

import crypto from "crypto";

function verifyFirefliesWebhook(
  payload: string,
  signature: string,
  secret: string
): boolean {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(payload)
    .digest("hex");

  // Timing-safe comparison prevents timing attacks
  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

// Express middleware
import express from "express";
const app = express();

app.post("/webhooks/fireflies",
  express.raw({ type: "application/json" }),
  (req, res) => {
    const signature = req.headers["x-hub-signature"] as string;
    const payload = req.body.toString();

    if (!signature || !verifyFirefliesWebhook(payload, signature, process.env.FIREFLIES_WEBHOOK_SECRET!)) {
      console.warn("Invalid webhook signature rejected");
      return res.status(401).json({ error: "Invalid signature" });
    }

    const event = JSON.parse(payload);
    console.log(`Verified webhook: ${event.eventType} for ${event.meetingId}`);
    res.status(200).json({ received: true });
  }
);

Step 3: Configure Webhook Secret

  1. Go to app.fireflies.ai/settings
  2. Select Developer settings tab
  3. Enter a 16-32 character secret or click Generate
  4. Store the secret in your environment as FIREFLIES_WEBHOOK_SECRET

Step 4: Python Webhook Verification

import hmac, hashlib, json
from flask import Flask, request, jsonify

app = Flask(__name__)

def verify_signature(payload: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(
        secret.encode(), payload, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(signature, expected)

@app.post("/webhooks/fireflies")
def handle_webhook():
    signature = request.headers.get("x-hub-signature", "")
    if not verify_signature(request.data, signature, os.environ["FIREFLIES_WEBHOOK_SECRET"]):
        return jsonify({"error": "Invalid signature"}), 401

    event = request.json
    print(f"Verified: {event['eventType']} for {event['meetingId']}")
    return jsonify({"received": True})

Step 5: Transcript Privacy Levels

Fireflies supports these privacy levels via updateMeetingPrivacy:

LevelAccess
ownerOnly meeting organizer
participantsOnly meeting participants
teammatesandparticipantsWorkspace members + participants
teammatesAll workspace members
linkAnyone with the link
// Lock a transcript to participants only
await firefliesQuery(`
  mutation($id: String!, $privacy: String!) {
    updateMeetingPrivacy(transcript_id: $id, privacy_level: $privacy)
  }
`, { id: "transcript-id", privacy: "participants" });

Step 6: API Key Rotation

set -euo pipefail
# 1. Generate new key in Fireflies dashboard (Integrations > Fireflies API)
# 2. Test new key
curl -s -X POST https://api.fireflies.ai/graphql \
  -H "Authorization: Bearer $NEW_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "{ user { email } }"}' | jq '.data.user.email'

# 3. Update environment/secret store
# 4. Verify production
# 5. Old key is automatically invalidated when new one is generated

Security Checklist

  • API key in environment variables, not code
  • .env files in .gitignore
  • Webhook signatures verified with HMAC-SHA256
  • Webhook secret is 16-32 characters
  • Transcript privacy set to participants or stricter
  • Pre-commit hook catches key leaks
  • Separate API keys for dev/staging/prod
  • HTTPS required for all webhook endpoints

Error Handling

IssueDetectionFix
Leaked API keyGit scanning, CI alertsRegenerate immediately in dashboard
Invalid webhook signature401 from your endpointVerify secret matches dashboard
Overly permissive privacyAudit transcript visibilitySet to participants default
Key rotation gapAuth failures after rotationDeploy new key before revoking old

Output

  • Secure API key storage with leak prevention
  • HMAC-SHA256 webhook signature verification
  • Privacy-controlled transcript access
  • Key rotation procedure

Resources

Next Steps

For production deployment, see fireflies-prod-checklist.

When not to use it

  • Storing API keys directly in source code
  • Using insecure HTTP endpoints for webhooks

Prerequisites

Fireflies.ai API keyUnderstanding of environment variablesHTTPS endpoint for webhooks

Limitations

  • Webhook secret must be 16-32 characters
  • HTTPS is required for all webhook endpoints

How it compares

Unlike manual security implementations, this provides specific pre-commit hook patterns and verified HMAC-SHA256 code snippets for Fireflies.ai.

Compared to similar skills

fireflies-security-basics side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
fireflies-security-basics (this skill)127dCautionIntermediate
file-uploads46moNo flagsAdvanced
graphql66moNo flagsAdvanced
vercel-webhooks-events327dCautionIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

More by jeremylongshore

View all by jeremylongshore

analyzing-logs

jeremylongshore

Analyze application logs to detect performance issues, identify error patterns, and improve stability by extracting key insights.

14123

ollama-setup

jeremylongshore

Configure auto-configure Ollama when user needs local LLM deployment, free AI alternatives, or wants to eliminate hosted API costs. Trigger phrases: "install ollama", "local AI", "free LLM", "self-hosted AI", "replace OpenAI", "no API costs". Use when appropriate context detected. Trigger with relevant phrases based on skill purpose.

1167

backtesting-trading-strategies

jeremylongshore

Backtest crypto and traditional trading strategies against historical data. Calculates performance metrics (Sharpe, Sortino, max drawdown), generates equity curves, and optimizes strategy parameters. Use when user wants to test a trading strategy, validate signals, or compare approaches. Trigger with phrases like "backtest strategy", "test trading strategy", "historical performance", "simulate trades", "optimize parameters", or "validate signals".

1071

generating-database-seed-data

jeremylongshore

Process this skill enables AI assistant to generate realistic test data and database seed scripts for development and testing environments. it uses faker libraries to create realistic data, maintains relational integrity, and allows configurable data volumes. u... Use when working with databases or data models. Trigger with phrases like 'database', 'query', or 'schema'.

1033

cursor-codebase-indexing

jeremylongshore

Execute set up and optimize Cursor codebase indexing. Triggers on "cursor index setup", "codebase indexing", "index codebase", "cursor semantic search". Use when working with cursor codebase indexing functionality. Trigger with phrases like "cursor codebase indexing", "cursor indexing", "cursor".

885

testing-mobile-apps

jeremylongshore

Execute mobile app testing on iOS and Android devices/simulators. Use when performing specialized testing. Trigger with phrases like "test mobile app", "run iOS tests", or "validate Android functionality".

810

You might also like

file-uploads

davila7

Expert at handling file uploads and cloud storage. Covers S3, Cloudflare R2, presigned URLs, multipart uploads, and image optimization. Knows how to handle large files without blocking. Use when: file upload, S3, R2, presigned URL, multipart.

438

graphql

davila7

GraphQL gives clients exactly the data they need - no more, no less. One endpoint, typed schema, introspection. But the flexibility that makes it powerful also makes it dangerous. Without proper controls, clients can craft queries that bring down your server. This skill covers schema design, resolvers, DataLoader for N+1 prevention, federation for microservices, and client integration with Apollo/urql. Key insight: GraphQL is a contract. The schema is the API documentation. Design it carefully.

624

vercel-webhooks-events

jeremylongshore

Implement Vercel webhook signature validation and event handling. Use when setting up webhook endpoints, implementing signature verification, or handling Vercel event notifications securely. Trigger with phrases like "vercel webhook", "vercel events", "vercel webhook signature", "handle vercel events", "vercel notifications".

325

identify-vault-protocol

tradingstrategy-ai

Identify an unknown vault protocol based on its smart contract address

15

exa-policy-guardrails

jeremylongshore

Implement Exa lint rules, policy enforcement, and automated guardrails. Use when setting up code quality rules for Exa integrations, implementing pre-commit hooks, or configuring CI policy checks for Exa best practices. Trigger with phrases like "exa policy", "exa lint", "exa guardrails", "exa best practices check", "exa eslint".

11

openevidence-multi-env-setup

jeremylongshore

Configure OpenEvidence across development, staging, and production environments. Use when setting up multiple environments, managing environment-specific configurations, or implementing environment promotion strategies for clinical AI applications. Trigger with phrases like "openevidence environments", "openevidence staging", "openevidence dev setup", "multi-environment openevidence".

11

Search skills

Search the agent skills registry