# Table of Contents - [Api overview - Fathom API](#api-overview-fathom-api) - [SDK Introduction - Fathom API](#sdk-introduction-fathom-api) - [Introduction - Fathom API](#introduction-fathom-api) - [List meetings - Fathom API](#list-meetings-fathom-api) - [πŸ’‘ Get Inspired - Fathom API](#-get-inspired-fathom-api) - [TypeScript Installation - Fathom API](#typescript-installation-fathom-api) - [OAuth - Fathom API](#oauth-fathom-api) - [Python Installation - Fathom API](#python-installation-fathom-api) - [Available Methods - Fathom API](#available-methods-fathom-api) - [Pagination - Fathom API](#pagination-fathom-api) - [Advanced Configuration - Fathom API](#advanced-configuration-fathom-api) - [SDK Maturity - Fathom API](#sdk-maturity-fathom-api) - [Authentication - Fathom API](#authentication-fathom-api) - [Filtering - Fathom API](#filtering-fathom-api) - [TypeScript SDK Changes - Fathom API](#typescript-sdk-changes-fathom-api) - [Error Handling - Fathom API](#error-handling-fathom-api) - [Python SDK Changes - Fathom API](#python-sdk-changes-fathom-api) - [Quickstart - Fathom API](#quickstart-fathom-api) - [Building with OAuth - Fathom API](#building-with-oauth-fathom-api) - [Webhooks - Fathom API](#webhooks-fathom-api) - [Get summary - Fathom API](#get-summary-fathom-api) - [Pylon - Fathom API](#pylon-fathom-api) - [Twine - Fathom API](#twine-fathom-api) - [Get transcript - Fathom API](#get-transcript-fathom-api) - [New meeting content ready - Fathom API](#new-meeting-content-ready-fathom-api) - [Create a webhook - Fathom API](#create-a-webhook-fathom-api) - [Page Not Found](#page-not-found) - [List teams - Fathom API](#list-teams-fathom-api) - [Delete a webhook - Fathom API](#delete-a-webhook-fathom-api) - [List team members - Fathom API](#list-team-members-fathom-api) --- # Api overview - Fathom API [Skip to main content](https://developers.fathom.ai/api-overview#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... Ctrl K Search... Navigation [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Authentication](https://developers.fathom.ai/api-overview#authentication) * [Rate limiting](https://developers.fathom.ai/api-overview#rate-limiting) * [Global rate limits](https://developers.fathom.ai/api-overview#global-rate-limits) This documentation describes Fathom’s REST API. [​](https://developers.fathom.ai/api-overview#authentication) Authentication ------------------------------------------------------------------------------- All REST API resources are authenticated with API keys generated via the Fathom website’s settings area. [​](https://developers.fathom.ai/api-overview#rate-limiting) Rate limiting ----------------------------------------------------------------------------- We use several rate limiting strategies to ensure the availability of our APIs. Rate-limited calls to our APIs return a 429 status code. Calls to our APIs include headers indicating the current rate limit status. ### [​](https://developers.fathom.ai/api-overview#global-rate-limits) Global rate limits Authenticated requests are subject to a global limit. This is the maximum number of calls that your account can make to the API per minute. Endpoints subject to rate limits may return the headers below. | Header | Description | | --- | --- | | `RateLimit-Limit` | The maximum number of requests allowed in a time window | | `RateLimit-Remaining` | The number of requests remaining in the current time window | | `RateLimit-Reset` | The time remaining in the current time window | Currently, you are able to make a maximum of 60 calls to the API in a 60 second window. [List meetings](https://developers.fathom.ai/api-reference/meetings/list-meetings) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # SDK Introduction - Fathom API [Skip to main content](https://developers.fathom.ai/sdks#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... Ctrl K Search... Navigation Getting Started SDK Introduction [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Choose Your SDK](https://developers.fathom.ai/sdks#choose-your-sdk) [​](https://developers.fathom.ai/sdks#choose-your-sdk) Choose Your SDK ------------------------------------------------------------------------- Get started in minutes with our official SDKs. They handle authentication, pagination, error handling, and all the complex stuff so you can focus on building amazing integrations. [TypeScript SDK\ --------------\ \ Full type safety, async/await support, and tree-shaking for optimal bundle sizes.\ \ Get Started](https://developers.fathom.ai/sdks/typescript-installation) [Python SDK\ ----------\ \ Built with Pydantic for validation and supports both sync and async operations.\ \ Get Started](https://developers.fathom.ai/sdks/python-installation) [TypeScript Installation](https://developers.fathom.ai/sdks/typescript-installation) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # Introduction - Fathom API [Skip to main content](https://developers.fathom.ai/#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... Ctrl K Search... Navigation Getting started Introduction [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Getting Started](https://developers.fathom.ai/#getting-started) * [Integrate with Fathom](https://developers.fathom.ai/#integrate-with-fathom) * [Need inspiration?](https://developers.fathom.ai/#need-inspiration%3F) Building a **public OAuth app** (for other Fathom users to install)? [Start here](https://developers.fathom.ai/oauth) instead. [​](https://developers.fathom.ai/#getting-started) Getting Started --------------------------------------------------------------------- [Quickstart Guide\ ----------------\ \ Generate an API key and make your first call in minutes.](https://developers.fathom.ai/quickstart) [API docs\ --------\ \ See all available endpoints and methods.](https://developers.fathom.ai/api-overview) [Webhooks\ --------\ \ Set up a webhook for your meetings.](https://developers.fathom.ai/webhooks) [SDKs\ ----\ \ Use our Typescript or Python SDK.](https://developers.fathom.ai/sdks) [​](https://developers.fathom.ai/#integrate-with-fathom) Integrate with Fathom --------------------------------------------------------------------------------- [OAuth\ -----\ \ Build a Fathom integration that other users can install.](https://developers.fathom.ai/oauth) [​](https://developers.fathom.ai/#need-inspiration%3F) Need inspiration? --------------------------------------------------------------------------- [Examples\ --------\ \ See what others have built with Fathom’s API.](https://developers.fathom.ai/inspiration) [Quickstart](https://developers.fathom.ai/quickstart) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # List meetings - Fathom API [Skip to main content](https://developers.fathom.ai/api-reference/meetings/list-meetings#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Meetings List meetings [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) List meetings cURL Copy curl --request GET \ --url https://api.fathom.ai/external/v1/meetings \ --header 'X-Api-Key: ' 200 400 401 429 Copy { "limit": 1, "next_cursor": "eyJwYWdlX251bSI6Mn0=", "items": [\ {\ "title": "Quarterly Business Review",\ "meeting_title": "QBR 2025 Q1",\ "recording_id": 123456789,\ "url": "https://fathom.video/xyz123",\ "share_url": "https://fathom.video/share/xyz123",\ "created_at": "2025-03-01T17:01:30Z",\ "scheduled_start_time": "2025-03-01T16:00:00Z",\ "scheduled_end_time": "2025-03-01T17:00:00Z",\ "recording_start_time": "2025-03-01T16:01:12Z",\ "recording_end_time": "2025-03-01T17:00:55Z",\ "calendar_invitees_domains_type": "one_or_more_external",\ "transcript_language": "en",\ "transcript": [\ {\ "speaker": {\ "display_name": "Alice Johnson",\ "matched_calendar_invitee_email": "alice.johnson@acme.com"\ },\ "text": "Let's revisit the budget allocations.",\ "timestamp": "00:05:32"\ }\ ],\ "default_summary": {\ "template_name": "general",\ "markdown_formatted": "## Summary\nWe reviewed Q1 OKRs, identified budget risks, and agreed to revisit projections next month.\n"\ },\ "action_items": [\ {\ "description": "Email revised proposal to client",\ "user_generated": false,\ "completed": false,\ "recording_timestamp": "00:10:45",\ "recording_playback_url": "https://fathom.video/xyz123#t=645",\ "assignee": {\ "name": "Alice Johnson",\ "email": "alice.johnson@acme.com",\ "team": "Marketing"\ }\ }\ ],\ "calendar_invitees": [\ {\ "name": "Alice Johnson",\ "matched_speaker_display_name": "Alice Johnson",\ "email": "alice.johnson@acme.com",\ "email_domain": "acme.com",\ "is_external": false\ }\ ],\ "recorded_by": {\ "name": "Alice Johnson",\ "email": "alice.johnson@acme.com",\ "email_domain": "acme.com",\ "team": "Marketing"\ },\ "crm_matches": {\ "contacts": [\ {\ "name": "Jane Smith",\ "email": "jane.smith@client.com",\ "record_url": "https://app.hubspot.com/contacts/123"\ }\ ],\ "companies": [\ {\ "name": "Acme Corp",\ "record_url": "https://app.hubspot.com/companies/456"\ }\ ],\ "deals": [\ {\ "name": "Q1 Renewal",\ "amount": 50000,\ "record_url": "https://app.hubspot.com/deals/789"\ }\ ],\ "error": "no CRM connected"\ }\ }\ ] } GET / meetings Try it List meetings cURL Copy curl --request GET \ --url https://api.fathom.ai/external/v1/meetings \ --header 'X-Api-Key: ' 200 400 401 429 Copy { "limit": 1, "next_cursor": "eyJwYWdlX251bSI6Mn0=", "items": [\ {\ "title": "Quarterly Business Review",\ "meeting_title": "QBR 2025 Q1",\ "recording_id": 123456789,\ "url": "https://fathom.video/xyz123",\ "share_url": "https://fathom.video/share/xyz123",\ "created_at": "2025-03-01T17:01:30Z",\ "scheduled_start_time": "2025-03-01T16:00:00Z",\ "scheduled_end_time": "2025-03-01T17:00:00Z",\ "recording_start_time": "2025-03-01T16:01:12Z",\ "recording_end_time": "2025-03-01T17:00:55Z",\ "calendar_invitees_domains_type": "one_or_more_external",\ "transcript_language": "en",\ "transcript": [\ {\ "speaker": {\ "display_name": "Alice Johnson",\ "matched_calendar_invitee_email": "alice.johnson@acme.com"\ },\ "text": "Let's revisit the budget allocations.",\ "timestamp": "00:05:32"\ }\ ],\ "default_summary": {\ "template_name": "general",\ "markdown_formatted": "## Summary\nWe reviewed Q1 OKRs, identified budget risks, and agreed to revisit projections next month.\n"\ },\ "action_items": [\ {\ "description": "Email revised proposal to client",\ "user_generated": false,\ "completed": false,\ "recording_timestamp": "00:10:45",\ "recording_playback_url": "https://fathom.video/xyz123#t=645",\ "assignee": {\ "name": "Alice Johnson",\ "email": "alice.johnson@acme.com",\ "team": "Marketing"\ }\ }\ ],\ "calendar_invitees": [\ {\ "name": "Alice Johnson",\ "matched_speaker_display_name": "Alice Johnson",\ "email": "alice.johnson@acme.com",\ "email_domain": "acme.com",\ "is_external": false\ }\ ],\ "recorded_by": {\ "name": "Alice Johnson",\ "email": "alice.johnson@acme.com",\ "email_domain": "acme.com",\ "team": "Marketing"\ },\ "crm_matches": {\ "contacts": [\ {\ "name": "Jane Smith",\ "email": "jane.smith@client.com",\ "record_url": "https://app.hubspot.com/contacts/123"\ }\ ],\ "companies": [\ {\ "name": "Acme Corp",\ "record_url": "https://app.hubspot.com/companies/456"\ }\ ],\ "deals": [\ {\ "name": "Q1 Renewal",\ "amount": 50000,\ "record_url": "https://app.hubspot.com/deals/789"\ }\ ],\ "error": "no CRM connected"\ }\ }\ ] } #### Authorizations ApiKeyAuthBearerAuth [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#authorization-x-api-key) X-Api-Key string header required Include your API key in the `X-Api-Key` header of every request. #### Query Parameters [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-calendar-invitees) calendar\_invitees\[\] string\[\] Email address of calendar\_invitees to filter by. Pass the parameter once per value, e.g. `calendar_invitees[]=cfo@acme.com&calendar_invitees[]=legal@acme.com`. Returns meetings where any of the given email addresses appear in the calendar\_invitees list. Example: ["cfo@acme.com", "legal@acme.com"] [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-calendar-invitees-domains) calendar\_invitees\_domains\[\] string\[\] Domains of the companies to filter by. Exact match. Pass the parameter once per value, e.g. `calendar_invitees_domains[]=acme.com&calendar_invitees_domains[]=client.com`. Returns meetings where any of the given company domains appear in the meeting. Example: ["acme.com", "client.com"] [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-calendar-invitees-domains-type) calendar\_invitees\_domains\_type enum default:all Filter by whether calendar invitee list includes external email domains. Available options: `all`, `only_internal`, `one_or_more_external` [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-created-after) created\_after string Filter to meetings with created\_at after this timestamp, e.g. `created_after=2025-01-01T00:00:00Z`. [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-created-before) created\_before string Filter to meetings with created\_at before this timestamp, e.g. `created_before=2025-01-01T00:00:00Z`. [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-cursor) cursor string Cursor for pagination. [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-include-action-items) include\_action\_items boolean default:false Include the action items for each meeting. [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-include-crm-matches) include\_crm\_matches boolean default:false Include CRM matches for each meeting. Only returns data from your or your team's linked CRM. [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-include-summary) include\_summary boolean default:false Include the summary for each meeting. Unavailable for OAuth connected apps (use /recordings instead). [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-include-transcript) include\_transcript boolean default:false Include the transcript for each meeting. Unavailable for OAuth connected apps (use /recordings instead). [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-meeting-type) meeting\_type enum deprecated Filter by meeting type. Available options: `all`, `internal`, `external` [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-recorded-by) recorded\_by\[\] string\[\] Email addresses of users who recorded meetings. Pass the parameter once per value, e.g. `recorded_by[]=ceo@acme.com&recorded_by[]=pm@acme.com`. Returns meetings recorded by any of the specified users. Example: ["ceo@acme.com", "pm@acme.com"] [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#parameter-teams) teams\[\] string\[\] Team names to filter by. Pass the parameter once per value, e.g. `teams[]=Sales&teams[]=Engineering`. Returns meetings that belong to any of the specified teams. Example: ["Sales", "Engineering"] #### Response 200 application/json Paginated list of meetings. [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#response-limit) limit integer | null required Example: `1` [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#response-next-cursor) next\_cursor string | null required Example: `"eyJwYWdlX251bSI6Mn0="` [​](https://developers.fathom.ai/api-reference/meetings/list-meetings#response-items) items object\[\] required Show child attributes [Api overview](https://developers.fathom.ai/api-overview) [Get summary](https://developers.fathom.ai/api-reference/recordings/get-summary) ⌘I --- # πŸ’‘ Get Inspired - Fathom API [Skip to main content](https://developers.fathom.ai/inspiration#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... Ctrl K Search... Navigation Inspiration πŸ’‘ Get Inspired [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) Want to showcase your own Fathom integration? [Tell us about it!](mailto:api@fathom.video) [Pylon](https://developers.fathom.ai/inspiration/pylon) Ctrl+I Assistant Responses are generated using AI and may contain mistakes. --- # TypeScript Installation - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/typescript-installation#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Installation & Auth TypeScript Installation [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [How to Install](https://developers.fathom.ai/sdks/typescript-installation#how-to-install) * [Requirements](https://developers.fathom.ai/sdks/typescript-installation#requirements) * [Module Systems](https://developers.fathom.ai/sdks/typescript-installation#module-systems) * [Quick Start](https://developers.fathom.ai/sdks/typescript-installation#quick-start) * [Standalone Functions](https://developers.fathom.ai/sdks/typescript-installation#standalone-functions) * [Available Standalone Functions](https://developers.fathom.ai/sdks/typescript-installation#available-standalone-functions) * [Tree Shaking](https://developers.fathom.ai/sdks/typescript-installation#tree-shaking) * [Version Management](https://developers.fathom.ai/sdks/typescript-installation#version-management) [​](https://developers.fathom.ai/sdks/typescript-installation#how-to-install) How to Install ----------------------------------------------------------------------------------------------- npm yarn pnpm Copy npm install fathom-typescript This package is published with CommonJS and ES Modules (ESM) support. [​](https://developers.fathom.ai/sdks/typescript-installation#requirements) Requirements ------------------------------------------------------------------------------------------- For supported JavaScript runtimes, please consult the [RUNTIMES.md](https://github.com/fathom/fathom-typescript/blob/main/RUNTIMES.md) file in the SDK repository. [​](https://developers.fathom.ai/sdks/typescript-installation#module-systems) Module Systems ----------------------------------------------------------------------------------------------- The SDK supports both CommonJS and ES Modules: ES Modules (Recommended) CommonJS Copy import { Fathom } from 'fathom-typescript'; [​](https://developers.fathom.ai/sdks/typescript-installation#quick-start) Quick Start ----------------------------------------------------------------------------------------- After installation, you can quickly test your setup: Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); const result = await fathom.listMeetings({}); console.log(result); [​](https://developers.fathom.ai/sdks/typescript-installation#standalone-functions) Standalone Functions ----------------------------------------------------------------------------------------------------------- All SDK methods are available as standalone functions, ideal for applications where bundle size is a concern: Copy import { listMeetings } from 'fathom-typescript'; const result = await listMeetings({ security: { apiKeyAuth: "YOUR_API_KEY" } }); for await (const page of result) { console.log(page); } ### [​](https://developers.fathom.ai/sdks/typescript-installation#available-standalone-functions) Available Standalone Functions * `listMeetings` - List meetings * `listTeams` - List teams * `listTeamMembers` - List team members * `createWebhook` - Create a webhook * `deleteWebhook` - Delete a webhook ### [​](https://developers.fathom.ai/sdks/typescript-installation#tree-shaking) Tree Shaking When using a bundler, unused functionality will be excluded from the final bundle: Copy // Only listMeetings will be included in the bundle import { listMeetings } from 'fathom-typescript'; // This won't be included if not used // import { createWebhook } from 'fathom-typescript'; [​](https://developers.fathom.ai/sdks/typescript-installation#version-management) Version Management ------------------------------------------------------------------------------------------------------- This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage to a specific package version: Copy { "dependencies": { "fathom-typescript": "0.0.30" } } [SDK Introduction](https://developers.fathom.ai/sdks) [Python Installation](https://developers.fathom.ai/sdks/python-installation) ⌘I --- # OAuth - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/oauth#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Installation & Auth OAuth [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [OAuth Authentication](https://developers.fathom.ai/sdks/oauth#oauth-authentication) * [Step 1: Get Authorization URL](https://developers.fathom.ai/sdks/oauth#step-1%3A-get-authorization-url) * [Step 2: Handle OAuth Callback](https://developers.fathom.ai/sdks/oauth#step-2%3A-handle-oauth-callback) * [Step 3: Token Management & Persistence](https://developers.fathom.ai/sdks/oauth#step-3%3A-token-management-%26-persistence) * [Example: Python persistent store (SQLite)](https://developers.fathom.ai/sdks/oauth#example%3A-python-persistent-store-sqlite) * [Further examples](https://developers.fathom.ai/sdks/oauth#further-examples) * [Common Mistakes](https://developers.fathom.ai/sdks/oauth#common-mistakes) * [Manual Token Exchange (Optional)](https://developers.fathom.ai/sdks/oauth#manual-token-exchange-optional) * [OAuth Handler Examples](https://developers.fathom.ai/sdks/oauth#oauth-handler-examples) * [OAuth Scopes](https://developers.fathom.ai/sdks/oauth#oauth-scopes) [​](https://developers.fathom.ai/sdks/oauth#oauth-authentication) OAuth Authentication ----------------------------------------------------------------------------------------- OAuth users need to register an app with us before using this feature. Visit our [OAuth Setup Guide](https://developers.fathom.ai/oauth) to get your client credentials and configure your redirect URL. Both TypeScript and Python SDKs support OAuth 2.0 authentication for building integrations that can be installed by multiple Fathom accounts. * * * ### [​](https://developers.fathom.ai/sdks/oauth#step-1%3A-get-authorization-url) Step 1: Get Authorization URL Using the `Client ID` and `Client Secret` you received when registering your app, generate an authorization URL that users will visit to grant your app access: TypeScript Python Copy import { Fathom } from 'fathom-typescript'; const url = Fathom.getAuthorizationUrl({ clientId: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET', redirectUri: 'https://your_redirect_url', scope: 'public_api', state: 'randomState123', }); // Redirect user to this URL console.log(url); ### [​](https://developers.fathom.ai/sdks/oauth#step-2%3A-handle-oauth-callback) Step 2: Handle OAuth Callback After the user authorizes your app, they’ll be redirected back to your redirect URI with an authorization code. Use this code to exchange it for access tokens: TypeScript Python Copy import { Fathom } from 'fathom-typescript'; // User gets redirected here with code const tokenStore = Fathom.newTokenStore(); // demo only β€” use persistent store in production const fathom = new Fathom({ security: Fathom.withAuthorization({ clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", code: "AUTHORIZATION_CODE_FROM_CALLBACK", redirectUri: "https://your_redirect_url", tokenStore }), }); // Now you can make requests and the SDK will refresh tokens as needed const result = await fathom.listMeetings({}); newTokenStore() is an in-memory store β€” great for demos and quick starts. For production, you’ll want a persistent TokenStore so users only need to install once. ### [​](https://developers.fathom.ai/sdks/oauth#step-3%3A-token-management-%26-persistence) Step 3: Token Management & Persistence For production, you’ll want to implement your own `TokenStore` that persists tokens to a database, cache, or file. The SDK will automatically call your `set()` when new tokens are issued, and `get()` when it needs to reuse or refresh them. #### [​](https://developers.fathom.ai/sdks/oauth#example%3A-python-persistent-store-sqlite) Example: Python persistent store (SQLite) This SQLite example is meant as a simple demo. In production, you’ll want to plug in whatever storage makes sense for your stack (e.g. Postgres, Redis, cloud secret store). Copy import sqlite3 from fathom_python import Fathom class SQLiteTokenStore(Fathom.TokenStore): def __init__(self, db_path="tokens.db"): self.db_path = db_path self._init_db() def _init_db(self): conn = sqlite3.connect(self.db_path) conn.execute(""" CREATE TABLE IF NOT EXISTS fathom_tokens ( id INTEGER PRIMARY KEY, token TEXT, refresh_token TEXT, expires INTEGER ) """) conn.commit() conn.close() def get(self): conn = sqlite3.connect(self.db_path) row = conn.execute("SELECT token, refresh_token, expires FROM fathom_tokens WHERE id = 1").fetchone() conn.close() return {"token": row[0], "refresh_token": row[1], "expires": row[2]} if row else None def set(self, token, refresh_token, expires): conn = sqlite3.connect(self.db_path) conn.execute(""" INSERT INTO fathom_tokens (id, token, refresh_token, expires) VALUES (1, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET token=excluded.token, refresh_token=excluded.refresh_token, expires=excluded.expires """, (token, refresh_token, expires)) conn.commit() conn.close() **Usage:** Copy token_store = SQLiteTokenStore() fathom = Fathom(security=Fathom.with_authorization( client_id, client_secret, authorization_code, redirect_uri, token_store )) #### [​](https://developers.fathom.ai/sdks/oauth#further-examples) Further examples For a real-world production example, see [how Pylon implemented OAuth and token storage](https://developers.fathom.ai/inspiration/pylon) as part of their Fathom integration. ### [​](https://developers.fathom.ai/sdks/oauth#common-mistakes) Common Mistakes * **Calling `tokenStore.get()` too early** Nothing will be there yet β€” tokens are only written after the SDK exchanges the authorization code. * **Assuming tokens never expire** Access tokens are short-lived. Always persist the refresh token and let the SDK refresh automatically. * **Using `newTokenStore()` in production** It’s an in-memory store for demos only. Use a persistent store (database, Redis, file, etc.) so tokens survive restarts. ### [​](https://developers.fathom.ai/sdks/oauth#manual-token-exchange-optional) Manual Token Exchange (Optional) If you prefer to handle the token exchange yourself (or to debug), you can call the OAuth token endpoint directly. The SDK handles token exchange and refresh automatically. You only need this section if you’re debugging or implementing your own flow. **Exchange authorization code for tokens:** Copy curl -X POST https://fathom.video/external/v1/oauth2/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=authorization_code" \ -d "code=AUTH_CODE" \ -d "client_id=YOUR_CLIENT_ID" \ -d "client_secret=YOUR_CLIENT_SECRET" \ -d "redirect_uri=YOUR_REDIRECT_URI" This returns a JSON object with both an `access_token` and a `refresh_token`. **Refresh an expired access token:** Copy curl -X POST https://fathom.video/external/v1/oauth2/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=refresh_token" \ -d "refresh_token=YOUR_REFRESH_TOKEN" \ -d "client_id=YOUR_CLIENT_ID" \ -d "client_secret=YOUR_CLIENT_SECRET" Use the new `access_token` in API requests. Your `refresh_token` stays valid until the user revokes access. ### [​](https://developers.fathom.ai/sdks/oauth#oauth-handler-examples) OAuth Handler Examples Complete OAuth flow implementations for web frameworks: Express.js Flask Copy import express from 'express'; import { Fathom } from 'fathom-typescript'; const app = express(); // OAuth initiation endpoint app.get('/auth/fathom', (req, res) => { const authUrl = Fathom.getAuthorizationUrl({ clientId: process.env.FATHOM_CLIENT_ID!, clientSecret: process.env.FATHOM_CLIENT_SECRET!, redirectUri: 'https://your-app.com/auth/fathom/callback', scope: 'public_api', state: 'random_state_string', }); res.redirect(authUrl); }); // OAuth callback endpoint app.get('/auth/fathom/callback', async (req, res) => { const { code, state } = req.query; if (!code || typeof code !== 'string') { return res.status(400).send('Authorization code required'); } try { const tokenStore = Fathom.newTokenStore(); const fathom = new Fathom({ security: Fathom.withAuthorization({ clientId: process.env.FATHOM_CLIENT_ID!, clientSecret: process.env.FATHOM_CLIENT_SECRET!, code, redirectUri: 'https://your-app.com/auth/fathom/callback', tokenStore }), }); // Test the connection const meetings = await fathom.listMeetings({}); res.json({ success: true, meetingsCount: meetings.items?.length || 0 }); } catch (error) { console.error('OAuth error:', error); res.status(500).send('OAuth authentication failed'); } }); app.listen(3000, () => { console.log('Server running on port 3000'); }); ### [​](https://developers.fathom.ai/sdks/oauth#oauth-scopes) OAuth Scopes Currently, the only available scope is: * `public_api` β€” Access to the Fathom API [Authentication](https://developers.fathom.ai/sdks/authentication) [Available Methods](https://developers.fathom.ai/sdks/available-methods) ⌘I --- # Python Installation - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/python-installation#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Installation & Auth Python Installation [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [How to Install](https://developers.fathom.ai/sdks/python-installation#how-to-install) * [Requirements](https://developers.fathom.ai/sdks/python-installation#requirements) * [Module Systems](https://developers.fathom.ai/sdks/python-installation#module-systems) * [IDE Support](https://developers.fathom.ai/sdks/python-installation#ide-support) * [Alternative Installation Methods](https://developers.fathom.ai/sdks/python-installation#alternative-installation-methods) * [Shell and Script Usage with uv](https://developers.fathom.ai/sdks/python-installation#shell-and-script-usage-with-uv) * [Quick Start](https://developers.fathom.ai/sdks/python-installation#quick-start) * [Version Management](https://developers.fathom.ai/sdks/python-installation#version-management) [​](https://developers.fathom.ai/sdks/python-installation#how-to-install) How to Install ------------------------------------------------------------------------------------------- pip poetry uv Copy pip install fathom-python [​](https://developers.fathom.ai/sdks/python-installation#requirements) Requirements --------------------------------------------------------------------------------------- The Python SDK supports Python 3.9+ and works with most modern Python environments. [​](https://developers.fathom.ai/sdks/python-installation#module-systems) Module Systems ------------------------------------------------------------------------------------------- The Python SDK works with standard Python import syntax: Copy from fathom_python import models, Fathom [​](https://developers.fathom.ai/sdks/python-installation#ide-support) IDE Support ------------------------------------------------------------------------------------- For PyCharm users, install the [PyCharm Pydantic Plugin](https://docs.pydantic.dev/latest/integrations/pycharm/) for better integration with Pydantic models. [​](https://developers.fathom.ai/sdks/python-installation#alternative-installation-methods) Alternative Installation Methods ------------------------------------------------------------------------------------------------------------------------------- ### [​](https://developers.fathom.ai/sdks/python-installation#shell-and-script-usage-with-uv) Shell and Script Usage with `uv` You can use this SDK in a Python shell with [uv](https://docs.astral.sh/uv/) and the `uvx` command: Shell usage Standalone script Copy uvx --from fathom-python python Once that is saved to a file, you can run it with `uv run script.py` where `script.py` can be replaced with the actual file name. [​](https://developers.fathom.ai/sdks/python-installation#quick-start) Quick Start ------------------------------------------------------------------------------------- After installation, you can quickly test your setup: Copy from fathom_python import models, Fathom with Fathom( security=models.Security( api_key_auth="YOUR_API_KEY", ), ) as fathom: result = fathom.list_meetings() print(result) [​](https://developers.fathom.ai/sdks/python-installation#version-management) Version Management --------------------------------------------------------------------------------------------------- This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage to a specific package version: Copy pip install fathom-python==0.0.30 Or with poetry: Copy poetry add fathom-python@0.0.30 [TypeScript Installation](https://developers.fathom.ai/sdks/typescript-installation) [Authentication](https://developers.fathom.ai/sdks/authentication) ⌘I --- # Available Methods - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/available-methods#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Using the SDK Available Methods [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Available Methods](https://developers.fathom.ai/sdks/available-methods#available-methods) * [Core Methods](https://developers.fathom.ai/sdks/available-methods#core-methods) * [Quick Examples](https://developers.fathom.ai/sdks/available-methods#quick-examples) [​](https://developers.fathom.ai/sdks/available-methods#available-methods) Available Methods ----------------------------------------------------------------------------------------------- Both TypeScript and Python SDKs support all Fathom API operations. ### [​](https://developers.fathom.ai/sdks/available-methods#core-methods) Core Methods | TypeScript | Python | Description | | --- | --- | --- | | `listMeetings()` | `list_meetings()` | List meetings with filtering and pagination | | `listTeams()` | `list_teams()` | List teams accessible to the user | | `listTeamMembers()` | `list_team_members()` | List members of a specific team | | `createWebhook()` | `create_webhook()` | Create webhook for real-time notifications | | `deleteWebhook()` | `delete_webhook()` | Delete an existing webhook | ### [​](https://developers.fathom.ai/sdks/available-methods#quick-examples) Quick Examples TypeScript Python Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); // List meetings with filtering const meetings = await fathom.listMeetings({ calendarInvitees: [\ "cfo@acme.com",\ "legal@acme.com",\ ], calendarInviteesDomains: [\ "acme.com",\ "client.com",\ ], recordedBy: [\ "ceo@acme.com",\ "pm@acme.com",\ ], teams: [\ "Sales",\ "Engineering",\ ], }); // List teams const teams = await fathom.listTeams({}); // Create webhook const webhook = await fathom.createWebhook({ destinationUrl: "https://your-app.com/webhook", includeTranscript: true, includeCrmMatches: true }); For complete parameter documentation including types, examples, and detailed descriptions, see [API Reference](https://developers.fathom.ai/api-reference/meetings/list-meetings) . [OAuth](https://developers.fathom.ai/sdks/oauth) [Filtering](https://developers.fathom.ai/sdks/filtering) ⌘I --- # Pagination - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/pagination#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Using the SDK Pagination [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Pagination](https://developers.fathom.ai/sdks/pagination#pagination) * [Basic Pagination](https://developers.fathom.ai/sdks/pagination#basic-pagination) * [Processing All Data](https://developers.fathom.ai/sdks/pagination#processing-all-data) * [Pagination Best Practices](https://developers.fathom.ai/sdks/pagination#pagination-best-practices) [​](https://developers.fathom.ai/sdks/pagination#pagination) Pagination -------------------------------------------------------------------------- Both TypeScript and Python SDKs handle pagination automatically. The SDKs return paginated responses that you can iterate through to access all data. ### [​](https://developers.fathom.ai/sdks/pagination#basic-pagination) Basic Pagination TypeScript Python Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); const result = await fathom.listMeetings({}); for await (const page of result) { console.log(page); } ### [​](https://developers.fathom.ai/sdks/pagination#processing-all-data) Processing All Data Here’s how to collect all data from paginated responses: TypeScript Python Copy import { Fathom } from 'fathom-typescript'; async function getAllMeetings() { const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); const result = await fathom.listMeetings({}); const allMeetings: any[] = []; for await (const page of result) { if (page.items) { allMeetings.push(...page.items); } } console.log(`Total meetings: ${allMeetings.length}`); return allMeetings; } ### [​](https://developers.fathom.ai/sdks/pagination#pagination-best-practices) Pagination Best Practices 1. **Use async iteration (TypeScript)**: The `for await...of` syntax is the recommended way to handle pagination 2. **Use while loops (Python)**: The `while res is not None` pattern is the standard approach 3. **Process incrementally**: For large datasets, consider processing each page as it comes rather than collecting all data in memory 4. **Handle errors**: Wrap pagination in try-catch blocks for robust error handling (see [Error Handling](https://developers.fathom.ai/sdks/error-handling) ) 5. **Respect rate limits**: The SDK handles [rate limiting](https://developers.fathom.ai/api-overview#rate-limiting) automatically, but be mindful of API usage [Filtering](https://developers.fathom.ai/sdks/filtering) [Error Handling](https://developers.fathom.ai/sdks/error-handling) ⌘I --- # Advanced Configuration - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/advanced-configuration#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Using the SDK Advanced Configuration [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Advanced Configuration](https://developers.fathom.ai/sdks/advanced-configuration#advanced-configuration) * [Server Selection](https://developers.fathom.ai/sdks/advanced-configuration#server-selection) * [Custom HTTP Client](https://developers.fathom.ai/sdks/advanced-configuration#custom-http-client) * [Standalone Functions (TypeScript Only)](https://developers.fathom.ai/sdks/advanced-configuration#standalone-functions-typescript-only) * [Available Standalone Functions](https://developers.fathom.ai/sdks/advanced-configuration#available-standalone-functions) * [Retries (Python Only)](https://developers.fathom.ai/sdks/advanced-configuration#retries-python-only) * [Resource Management (Python Only)](https://developers.fathom.ai/sdks/advanced-configuration#resource-management-python-only) * [Debugging](https://developers.fathom.ai/sdks/advanced-configuration#debugging) * [Configuration Best Practices](https://developers.fathom.ai/sdks/advanced-configuration#configuration-best-practices) [​](https://developers.fathom.ai/sdks/advanced-configuration#advanced-configuration) Advanced Configuration -------------------------------------------------------------------------------------------------------------- Configure your SDK for production use with custom settings, debugging, and optimization. ### [​](https://developers.fathom.ai/sdks/advanced-configuration#server-selection) Server Selection Override the default server URL when needed: TypeScript Python Copy import { Fathom } from "fathom"; const fathom = new Fathom({ serverUrl: "https://api.fathom.ai/external/v1", security: { apiKeyAuth: "YOUR_API_KEY" } }); ### [​](https://developers.fathom.ai/sdks/advanced-configuration#custom-http-client) Custom HTTP Client Customize headers and other HTTP client settings: TypeScript Python Copy import { Fathom } from "fathom"; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); ### [​](https://developers.fathom.ai/sdks/advanced-configuration#standalone-functions-typescript-only) Standalone Functions (TypeScript Only) Use standalone functions for bundle size optimization: Copy import { listMeetings } from "fathom"; const result = await listMeetings({ security: { apiKeyAuth: "YOUR_API_KEY" } }); for await (const page of result) { console.log(page); } #### [​](https://developers.fathom.ai/sdks/advanced-configuration#available-standalone-functions) Available Standalone Functions * `createWebhook` - Create a webhook * `deleteWebhook` - Delete a webhook * `listMeetings` - List meetings * `listTeamMembers` - List team members * `listTeams` - List teams ### [​](https://developers.fathom.ai/sdks/advanced-configuration#retries-python-only) Retries (Python Only) Configure retry strategies for production reliability: Copy from fathom_python import Fathom, models from fathom_python.utils import BackoffStrategy, RetryConfig import os with Fathom( retry_config=RetryConfig("backoff", BackoffStrategy(1, 50, 1.1, 100), False), security=models.Security( api_key_auth=os.getenv("FATHOM_API_KEY_AUTH", ""), ), ) as fathom: res = fathom.list_meetings() while res is not None: res = res.next() ### [​](https://developers.fathom.ai/sdks/advanced-configuration#resource-management-python-only) Resource Management (Python Only) Use context managers for proper resource cleanup: Copy from fathom_python import Fathom, models import os def main(): with Fathom( security=models.Security( api_key_auth=os.getenv("FATHOM_API_KEY_AUTH", ""), ), ) as fathom: # Rest of application here... ### [​](https://developers.fathom.ai/sdks/advanced-configuration#debugging) Debugging Enable debug logging during development: TypeScript Python Copy import { Fathom } from "fathom"; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); // Manual debug logging console.log('Making API request...'); const result = await fathom.listMeetings({}); console.log('Response received:', result); ### [​](https://developers.fathom.ai/sdks/advanced-configuration#configuration-best-practices) Configuration Best Practices 1. **Use environment variables** for sensitive configuration 2. **Implement proper error handling** with try-catch blocks 3. **Use context managers (Python)** for resource cleanup 4. **Configure timeouts** appropriate for your use case 5. **Enable debugging** during development 6. **Use standalone functions (TypeScript)** for bundle optimization 7. **Configure retries** for production reliability [Error Handling](https://developers.fathom.ai/sdks/error-handling) [TypeScript SDK Changes](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes) ⌘I --- # SDK Maturity - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Breaking Changes SDK Maturity [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [SDK Maturity](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#sdk-maturity) * [Beta Status](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#beta-status) * [Version Management](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#version-management) * [TypeScript SDK](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#typescript-sdk) * [Python SDK](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#python-sdk) [​](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#sdk-maturity) SDK Maturity ------------------------------------------------------------------------------------------------- Both TypeScript and Python SDKs are currently in beta, and there may be breaking changes between versions without a major version update. ### [​](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#beta-status) Beta Status Our SDKs are currently in beta, which means: * **Active development**: We’re actively improving and adding features * **Breaking changes**: There may be breaking changes between versions * **Feedback welcome**: We encourage feedback and bug reports * **Production ready**: The SDKs are stable enough for production use ### [​](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#version-management) Version Management We recommend pinning usage to a specific package version to avoid breaking changes unless you are intentionally looking for the latest version. #### [​](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#typescript-sdk) TypeScript SDK Copy { "dependencies": { "fathom-typescript": "0.0.30" } } #### [​](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#python-sdk) Python SDK Copy pip install fathom-python==0.0.30 Or in `requirements.txt`: Copy fathom-python==0.0.30 [Python SDK Changes](https://developers.fathom.ai/sdks/breaking-changes/python-changes) ⌘I --- # Authentication - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/authentication#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Installation & Auth Authentication [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [API Key Authentication](https://developers.fathom.ai/sdks/authentication#api-key-authentication) * [Bearer Token Authentication](https://developers.fathom.ai/sdks/authentication#bearer-token-authentication) * [Security Schemes](https://developers.fathom.ai/sdks/authentication#security-schemes) * [Security Best Practices](https://developers.fathom.ai/sdks/authentication#security-best-practices) [​](https://developers.fathom.ai/sdks/authentication#api-key-authentication) API Key Authentication ------------------------------------------------------------------------------------------------------ TypeScript Python Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { apiKeyAuth: process.env.FATHOM_API_KEY_AUTH || "" } }); [​](https://developers.fathom.ai/sdks/authentication#bearer-token-authentication) Bearer Token Authentication ---------------------------------------------------------------------------------------------------------------- TypeScript Python Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { bearerAuth: "YOUR_BEARER_TOKEN" } }); [​](https://developers.fathom.ai/sdks/authentication#security-schemes) Security Schemes ------------------------------------------------------------------------------------------ | Name | Type | Environment Variable | | --- | --- | --- | | `apiKeyAuth` | apiKey | `FATHOM_API_KEY_AUTH` | | `bearerAuth` | http | `FATHOM_BEARER_AUTH` | | `tokenRequestStandalone` | http | `FATHOM_TOKEN_REQUEST_STANDALONE` | [​](https://developers.fathom.ai/sdks/authentication#security-best-practices) Security Best Practices -------------------------------------------------------------------------------------------------------- * Use environment variables for credentials * Use OAuth for multi-user integrations * Rotate API keys regularly * Monitor API usage [Python Installation](https://developers.fathom.ai/sdks/python-installation) [OAuth](https://developers.fathom.ai/sdks/oauth) ⌘I --- # Filtering - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/filtering#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Using the SDK Filtering [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Filtering Data](https://developers.fathom.ai/sdks/filtering#filtering-data) * [Basic Filtering](https://developers.fathom.ai/sdks/filtering#basic-filtering) * [Filter by Meeting Type](https://developers.fathom.ai/sdks/filtering#filter-by-meeting-type) * [Include Transcript Data](https://developers.fathom.ai/sdks/filtering#include-transcript-data) * [Combining Multiple Filters](https://developers.fathom.ai/sdks/filtering#combining-multiple-filters) * [TypeScript Type Safety](https://developers.fathom.ai/sdks/filtering#typescript-type-safety) [​](https://developers.fathom.ai/sdks/filtering#filtering-data) Filtering Data --------------------------------------------------------------------------------- Both TypeScript and Python SDKs provide powerful filtering capabilities for retrieving specific data from the Fathom API. ### [​](https://developers.fathom.ai/sdks/filtering#basic-filtering) Basic Filtering Start with simple single filters: TypeScript Python Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); // Filter by team only const result = await fathom.listMeetings({ teams: ["Sales"] }); for await (const page of result) { console.log(page); } ### [​](https://developers.fathom.ai/sdks/filtering#filter-by-meeting-type) Filter by Meeting Type TypeScript Python Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); async function getExternalMeetings() { const result = await fathom.listMeetings({ meetingType: "external" }); for await (const page of result) { console.log(page); } } ### [​](https://developers.fathom.ai/sdks/filtering#include-transcript-data) Include Transcript Data TypeScript Python Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); async function getMeetingsWithTranscripts() { const result = await fathom.listMeetings({ includeTranscript: true }); for await (const page of result) { for (const meeting of page.items || []) { console.log(`Meeting: ${meeting.title}`); if (meeting.transcript) { console.log(`Transcript: ${meeting.transcript}`); } } } } ### [​](https://developers.fathom.ai/sdks/filtering#combining-multiple-filters) Combining Multiple Filters Combine multiple filters for precise queries: TypeScript Python Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); async function getFilteredMeetings() { const result = await fathom.listMeetings({ calendarInvitees: [\ "cfo@acme.com",\ "legal@acme.com",\ ], calendarInviteesDomains: [\ "acme.com",\ "client.com",\ ], recordedBy: [\ "ceo@acme.com",\ "pm@acme.com",\ ], teams: [\ "Sales",\ "Engineering",\ ], meetingType: "external", includeTranscript: true, includeCrmMatches: true }); for await (const page of result) { for (const meeting of page.items || []) { console.log(`Meeting: ${meeting.title}`); console.log(`Recorded by: ${meeting.recordedBy?.name}`); if (meeting.crmMatches) { console.log(`CRM matches: ${meeting.crmMatches}`); } } } } ### [​](https://developers.fathom.ai/sdks/filtering#typescript-type-safety) TypeScript Type Safety The TypeScript SDK provides full type safety for filter parameters: Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); // TypeScript will provide autocomplete and type checking async function typedFiltering() { const result = await fathom.listMeetings({ // TypeScript will suggest available options meetingType: "external", // βœ… Valid // meetingType: "invalid" // ❌ TypeScript error includeTranscript: true, includeCrmMatches: false }); for await (const page of result) { // TypeScript knows the structure of the response console.log(`Page has ${page.items?.length || 0} meetings`); } } For complete parameter documentation including types, examples, and detailed descriptions, see the [API Reference](https://developers.fathom.ai/api-reference/meetings/list-meetings) . [Available Methods](https://developers.fathom.ai/sdks/available-methods) [Pagination](https://developers.fathom.ai/sdks/pagination) ⌘I --- # TypeScript SDK Changes - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Breaking Changes TypeScript SDK Changes [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [TypeScript SDK Breaking Changes](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#typescript-sdk-breaking-changes) * [Client Class Name Change](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#client-class-name-change) * [Old Syntax](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#old-syntax) * [New Syntax](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#new-syntax) * [API Key Authentication Syntax](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#api-key-authentication-syntax) * [Old Syntax](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#old-syntax-2) * [New Syntax](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#new-syntax-2) * [OAuth Support](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#oauth-support) * [Migration Guide](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#migration-guide) * [Backward Compatibility](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#backward-compatibility) * [Version Pinning](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#version-pinning) * [What’s New in 0.0.30](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#what%E2%80%99s-new-in-0-0-30) [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#typescript-sdk-breaking-changes) TypeScript SDK Breaking Changes --------------------------------------------------------------------------------------------------------------------------------------------- Version 0.0.30 introduces breaking changes for the TypeScript SDK. Older versions continue to work but don’t support OAuth. ### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#client-class-name-change) Client Class Name Change The client is now called `Fathom` instead of `FathomApi`. #### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#old-syntax) Old Syntax Copy import { FathomApi } from 'fathom-typescript'; const fathom = new FathomApi("apikey"); #### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#new-syntax) New Syntax Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({security: {apiKeyAuth: "apikey"}}); ### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#api-key-authentication-syntax) API Key Authentication Syntax The API key authentication syntax has changed to support the new security model. #### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#old-syntax-2) Old Syntax Copy import { FathomApi } from 'fathom-typescript'; const fathom = new FathomApi("your_api_key"); #### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#new-syntax-2) New Syntax Copy import { Fathom } from 'fathom-typescript'; const fathom = new Fathom({ security: { apiKeyAuth: "your_api_key" } }); ### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#oauth-support) OAuth Support Version 0.0.30 adds OAuth support, which requires the new client structure: Copy import { Fathom } from 'fathom-typescript'; // OAuth authorization URL generation const url = Fathom.getAuthorizationUrl({ clientId: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET', redirectUri: 'https://your_redirect_url', scope: 'public_api', state: 'randomState123', }); // OAuth client initialization const tokenStore = Fathom.newTokenStore(); const fathom = new Fathom({ security: Fathom.withAuthorization({ clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", code: "AUTHORIZATION_CODE_FROM_CALLBACK", redirectUri: "https://your_redirect_url", tokenStore: tokenStore }), }); ### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#migration-guide) Migration Guide To migrate from an older version to 0.0.30: 1. **Update imports**: Copy // Old import { FathomApi } from 'fathom-typescript'; // New import { Fathom } from 'fathom-typescript'; 2. **Update client initialization**: Copy // Old const fathom = new FathomApi("your_api_key"); // New const fathom = new Fathom({ security: { apiKeyAuth: "your_api_key" } }); 3. **Update method calls** (if any method signatures changed): Copy // Method calls remain the same const result = await fathom.listMeetings({}); ### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#backward-compatibility) Backward Compatibility Older versions of the SDK continue to work with API key authentication, but they don’t support OAuth features. If you need to maintain compatibility with older code while adding OAuth support, you can: 1. **Pin to the old version** for existing applications 2. **Create a new integration** using version 0.0.30 for OAuth features 3. **Gradually migrate** existing code to the new syntax ### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#version-pinning) Version Pinning We recommend pinning to a specific version to avoid unexpected breaking changes: Copy { "dependencies": { "fathom-typescript": "0.0.30" } } ### [​](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#what%E2%80%99s-new-in-0-0-30) What’s New in 0.0.30 * βœ… OAuth 2.0 support * βœ… Improved security model * βœ… Better TypeScript types * βœ… Enhanced error handling * βœ… Standalone functions for bundle optimization * βœ… Async iteration for pagination [Advanced Configuration](https://developers.fathom.ai/sdks/advanced-configuration) [Python SDK Changes](https://developers.fathom.ai/sdks/breaking-changes/python-changes) ⌘I --- # Error Handling - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/error-handling#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Using the SDK Error Handling [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Error Handling](https://developers.fathom.ai/sdks/error-handling#error-handling) * [Basic Error Handling](https://developers.fathom.ai/sdks/error-handling#basic-error-handling) * [Handle Specific Status Codes](https://developers.fathom.ai/sdks/error-handling#handle-specific-status-codes) * [Error Classes](https://developers.fathom.ai/sdks/error-handling#error-classes) [​](https://developers.fathom.ai/sdks/error-handling#error-handling) Error Handling -------------------------------------------------------------------------------------- Both TypeScript and Python SDKs provide comprehensive error handling capabilities. The base error class is `FathomError` for both SDKs. ### [​](https://developers.fathom.ai/sdks/error-handling#basic-error-handling) Basic Error Handling TypeScript Python Copy import { Fathom } from 'fathom-typescript'; import * as errors from 'fathom-typescript/models/errors'; const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); try { const result = await fathom.listMeetings({}); for await (const page of result) { console.log(page); } } catch (error) { if (error instanceof errors.FathomError) { console.log(error.message); console.log(error.statusCode); console.log(error.body); console.log(error.headers); } } ### [​](https://developers.fathom.ai/sdks/error-handling#handle-specific-status-codes) Handle Specific Status Codes TypeScript Python Copy import { Fathom } from 'fathom-typescript'; import * as errors from 'fathom-typescript/models/errors'; async function handleSpecificErrors() { const fathom = new Fathom({ security: { apiKeyAuth: "YOUR_API_KEY" } }); try { const result = await fathom.listMeetings({}); return result; } catch (error) { if (error instanceof errors.FathomError) { switch (error.statusCode) { case 401: console.log("Authentication failed. Check your API key."); break; case 403: console.log("Access forbidden. Check your permissions."); break; case 404: console.log("Resource not found."); break; case 429: console.log("Rate limit exceeded. Try again later."); break; default: if (error.statusCode >= 500) { console.log("Server error. Try again later."); } else { console.log(`Unexpected error: ${error.message}`); } } } return null; } } ### [​](https://developers.fathom.ai/sdks/error-handling#error-classes) Error Classes **Primary error:** * `FathomError`: The base class for HTTP error responses. **Network errors (TypeScript):** * `ConnectionError`: HTTP client was unable to make a request to a server. * `RequestTimeoutError`: HTTP request timed out due to an AbortSignal signal. * `RequestAbortedError`: HTTP request was aborted by the client. * `InvalidRequestError`: Any input used to create a request is invalid. * `UnexpectedClientError`: Unrecognised or unexpected error. **Network errors (Python):** * `httpx.RequestError`: Base class for request errors. * `httpx.ConnectError`: HTTP client was unable to make a request to a server. * `httpx.TimeoutException`: HTTP request timed out. **Inherit from `FathomError`:** * `ResponseValidationError`: Type mismatch between the response data and the expected model structure. [Pagination](https://developers.fathom.ai/sdks/pagination) [Advanced Configuration](https://developers.fathom.ai/sdks/advanced-configuration) ⌘I --- # Python SDK Changes - Fathom API [Skip to main content](https://developers.fathom.ai/sdks/breaking-changes/python-changes#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Breaking Changes Python SDK Changes [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Python SDK Breaking Changes](https://developers.fathom.ai/sdks/breaking-changes/python-changes#python-sdk-breaking-changes) * [API Key Authentication Syntax](https://developers.fathom.ai/sdks/breaking-changes/python-changes#api-key-authentication-syntax) * [Old Syntax](https://developers.fathom.ai/sdks/breaking-changes/python-changes#old-syntax) * [New Syntax](https://developers.fathom.ai/sdks/breaking-changes/python-changes#new-syntax) * [OAuth Support](https://developers.fathom.ai/sdks/breaking-changes/python-changes#oauth-support) * [Migration Guide](https://developers.fathom.ai/sdks/breaking-changes/python-changes#migration-guide) * [Context Manager Usage](https://developers.fathom.ai/sdks/breaking-changes/python-changes#context-manager-usage) * [Old Usage](https://developers.fathom.ai/sdks/breaking-changes/python-changes#old-usage) * [New Usage (Recommended)](https://developers.fathom.ai/sdks/breaking-changes/python-changes#new-usage-recommended) * [Asynchronous Support](https://developers.fathom.ai/sdks/breaking-changes/python-changes#asynchronous-support) * [Backward Compatibility](https://developers.fathom.ai/sdks/breaking-changes/python-changes#backward-compatibility) * [Version Pinning](https://developers.fathom.ai/sdks/breaking-changes/python-changes#version-pinning) * [pip](https://developers.fathom.ai/sdks/breaking-changes/python-changes#pip) * [requirements.txt](https://developers.fathom.ai/sdks/breaking-changes/python-changes#requirements-txt) * [pyproject.toml (Poetry)](https://developers.fathom.ai/sdks/breaking-changes/python-changes#pyproject-toml-poetry) * [What’s New in 0.0.30](https://developers.fathom.ai/sdks/breaking-changes/python-changes#what%E2%80%99s-new-in-0-0-30) * [Environment Variables](https://developers.fathom.ai/sdks/breaking-changes/python-changes#environment-variables) * [Error Handling Improvements](https://developers.fathom.ai/sdks/breaking-changes/python-changes#error-handling-improvements) [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#python-sdk-breaking-changes) Python SDK Breaking Changes --------------------------------------------------------------------------------------------------------------------------------- Version 0.0.30 introduces breaking changes for the Python SDK. Older versions continue to work but don’t support OAuth. ### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#api-key-authentication-syntax) API Key Authentication Syntax The API key authentication syntax has changed to support the new security model. #### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#old-syntax) Old Syntax Copy from fathom_python import Fathom fathom = Fathom("your_api_key") #### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#new-syntax) New Syntax Copy from fathom_python import models, Fathom fathom = Fathom(security=models.Security(api_key_auth="your_api_key")) ### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#oauth-support) OAuth Support Version 0.0.30 adds OAuth support, which requires the new client structure: Copy from fathom_python import Fathom # OAuth authorization URL generation url = Fathom.get_authorization_url( "YOUR_CLIENT_ID", # client ID "your_redirect_url", "public_api", # required scope "randomState123" ) # OAuth client initialization token_store = Fathom.new_token_store() fathom = Fathom(security=Fathom.with_authorization( "YOUR_CLIENT_ID", # client_id "YOUR_CLIENT_SECRET", # client_secret "AUTHORIZATION_CODE_FROM_CALLBACK", # code 'your_redirect_uri', token_store )) ### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#migration-guide) Migration Guide To migrate from an older version to 0.0.30: 1. **Update imports**: Copy # Old from fathom_python import Fathom # New from fathom_python import models, Fathom 2. **Update client initialization**: Copy # Old fathom = Fathom("your_api_key") # New fathom = Fathom(security=models.Security(api_key_auth="your_api_key")) 3. **Update method calls** (if any method signatures changed): Copy # Method calls remain the same result = fathom.list_meetings() ### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#context-manager-usage) Context Manager Usage The new version encourages the use of context managers for proper resource management: #### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#old-usage) Old Usage Copy from fathom_python import Fathom fathom = Fathom("your_api_key") result = fathom.list_meetings() print(result) #### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#new-usage-recommended) New Usage (Recommended) Copy from fathom_python import models, Fathom with Fathom( security=models.Security( api_key_auth="your_api_key", ), ) as fathom: result = fathom.list_meetings() print(result) ### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#asynchronous-support) Asynchronous Support Version 0.0.30 includes improved asynchronous support: Copy import asyncio from fathom_python import models, Fathom async def main(): async with Fathom( security=models.Security( api_key_auth="your_api_key", ), ) as fathom: result = await fathom.list_meetings_async() print(result) asyncio.run(main()) ### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#backward-compatibility) Backward Compatibility Older versions of the SDK continue to work with API key authentication, but they don’t support OAuth features. If you need to maintain compatibility with older code while adding OAuth support, you can: 1. **Pin to the old version** for existing applications 2. **Create a new integration** using version 0.0.30 for OAuth features 3. **Gradually migrate** existing code to the new syntax ### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#version-pinning) Version Pinning We recommend pinning to a specific version to avoid unexpected breaking changes: #### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#pip) pip Copy pip install fathom-python==0.0.30 #### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#requirements-txt) requirements.txt Copy fathom-python==0.0.30 #### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#pyproject-toml-poetry) pyproject.toml (Poetry) Copy [tool.poetry.dependencies] fathom-python = "0.0.30" ### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#what%E2%80%99s-new-in-0-0-30) What’s New in 0.0.30 * βœ… OAuth 2.0 support * βœ… Improved security model * βœ… Better Pydantic integration * βœ… Enhanced error handling * βœ… Context manager support * βœ… Asynchronous operations * βœ… Resource management improvements * βœ… Better type hints ### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#environment-variables) Environment Variables The new version supports environment variables for configuration: Copy import os from fathom_python import models, Fathom with Fathom( security=models.Security( api_key_auth=os.getenv("FATHOM_API_KEY_AUTH", ""), ), ) as fathom: result = fathom.list_meetings() print(result) ### [​](https://developers.fathom.ai/sdks/breaking-changes/python-changes#error-handling-improvements) Error Handling Improvements The new version includes better error handling with specific error types: Copy from fathom_python import Fathom, errors, models with Fathom( security=models.Security( api_key_auth="your_api_key", ), ) as fathom: try: result = fathom.list_meetings() print(result) except errors.FathomError as e: print(f"API Error: {e.message}") except errors.ResponseValidationError as e: print(f"Validation Error: {e.message}") [TypeScript SDK Changes](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes) [SDK Maturity](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity) ⌘I --- # Quickstart - Fathom API [Skip to main content](https://developers.fathom.ai/quickstart#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Getting started Quickstart [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Generate an API Key](https://developers.fathom.ai/quickstart#generate-an-api-key) * [List recent meetings](https://developers.fathom.ai/quickstart#list-recent-meetings) * [Get next 10 meetings](https://developers.fathom.ai/quickstart#get-next-10-meetings) * [Find specific meetings and get their transcripts](https://developers.fathom.ai/quickstart#find-specific-meetings-and-get-their-transcripts) * [Next steps](https://developers.fathom.ai/quickstart#next-steps) [​](https://developers.fathom.ai/quickstart#generate-an-api-key) Generate an API Key --------------------------------------------------------------------------------------- [Get your Fathom API Key\ -----------------------\ \ Head to the API Access section of your User Settings and generate an API key.\ \ User Settings](https://fathom.video/customize#api-access-header) API keys are created at the user level. This means your key can only access meetings recorded by you, or those shared to your Team. If you’re an Admin, your API key does _not_ provide access to other users’ unshared meetings. [​](https://developers.fathom.ai/quickstart#list-recent-meetings) List recent meetings ----------------------------------------------------------------------------------------- List the 10 most recent meetings recorded by you or shared to your team. cURL Python TypeScript Copy curl https://api.fathom.ai/external/v1/meetings \ -H "X-Api-Key: YOUR_API_KEY" Replace `YOUR_API_KEY` with the API key you generated above. Here's an example response Example response Copy { "items": [\ {\ "title": "Quarterly Business Review",\ "meeting_title": "QBR 2025 Q1",\ "url": "https://fathom.video/xyz123",\ "share_url": "https://fathom.video/share/xyz123",\ "created_at": "2025-03-01T17:01:30Z",\ "scheduled_start_time": "2025-03-01T16:00:00Z",\ "scheduled_end_time": "2025-03-01T17:00:00Z",\ "recording_start_time": "2025-03-01T16:01:12Z",\ "recording_end_time": "2025-03-01T17:00:55Z",\ "meeting_type": "internal",\ "transcript_language": "en",\ "calendar_invitees": [\ {\ "is_external": false,\ "name": "Alice Johnson",\ "email": "alice.johnson@acme.com"\ }\ ],\ "recorded_by": {\ "name": "Alice Johnson",\ "email": "alice.johnson@acme.com",\ "team": "Marketing"\ },\ "transcript": [\ {\ "speaker": {\ "display_name": "Alice Johnson",\ "matched_calendar_invitee_email": "alice.johnson@acme.com"\ },\ "text": "Let's revisit the budget allocations.",\ "timestamp": "00:05:32"\ }\ ],\ "default_summary": {\ "template_name": "general",\ "markdown_formatted": "## Summary\nWe reviewed Q1 OKRs, identified budget risks, and agreed to revisit projections next month.\n"\ },\ "action_items": [\ {\ "description": "Email revised proposal to client",\ "user_generated": false,\ "completed": false,\ "recording_timestamp": "00:10:45",\ "recording_playback_url": "https://fathom.video/xyz123#t=645",\ "assignee": {\ "name": "Alice Johnson",\ "email": "alice.johnson@acme.com",\ "team": "Marketing"\ }\ }\ ],\ "crm_matches": {\ "contacts": [\ {\ "name": "Jane Smith",\ "email": "jane.smith@client.com",\ "record_url": "https://app.hubspot.com/contacts/123"\ }\ ],\ "companies": [\ {\ "name": "Acme Corp",\ "record_url": "https://app.hubspot.com/companies/456"\ }\ ],\ "deals": [\ {\ "name": "Q1 Renewal",\ "amount": 50000,\ "record_url": "https://app.hubspot.com/deals/789"\ }\ ],\ "error": "no CRM connected"\ }\ }\ ], "limit": 1, "next_cursor": "eyJwYWdlX251bSI6Mn0=" } [​](https://developers.fathom.ai/quickstart#get-next-10-meetings) Get next 10 meetings ----------------------------------------------------------------------------------------- Use the `next_cursor` from the previous response to get the next page of meetings. bash python TypeScript Copy curl https://api.fathom.ai/external/v1/meetings \ -H "X-Api-Key: YOUR_API_KEY" \ -d cursor=CURSOR_FROM_PREVIOUS_RESPONSE If you’re using our [TypeScript or Python SDKs](https://developers.fathom.ai/sdks) , pagination is handled automatically - no need to manage cursors manually. See [SDK Pagination](https://developers.fathom.ai/sdks/pagination) for examples. [​](https://developers.fathom.ai/quickstart#find-specific-meetings-and-get-their-transcripts) Find specific meetings and get their transcripts ------------------------------------------------------------------------------------------------------------------------------------------------- Let’s say you met with `john.doe@client.com` a couple times during August and want to pull those transcripts. Use filters to return just those meetings. cURL Python TypeScript Copy curl https://api.fathom.ai/external/v1/meetings \ -H "X-Api-Key: YOUR_API_KEY" \ -d include_transcript=true \ -d recorded_by[]=me@mydomain.com \ -d calendar_invitees[]=john.doe@client.com \ -d created_after=2024-08-01T00:00:00Z \ -d created_before=2024-09-01T00:00:00Z # include_transcript=true: get transcripts in the response # recorded_by[]=me@mydomain.com: meetings you recorded # calendar_invitees[]: with this participant # created_after/before: August date range You can also fetch transcripts separately using the [/recordings/{recording\_id}/transcript](https://developers.fathom.ai/api-reference/recordings/get-transcript) endpoint. **OAuth apps** must use this approach since they can’t use `include_transcript` or `include_summary`. [​](https://developers.fathom.ai/quickstart#next-steps) Next steps --------------------------------------------------------------------- Now that you you’ve made your first API calls, time to go deeper: [API documentation\ -----------------\ \ See all available endpoints and methods](https://developers.fathom.ai/api-overview) [Webhooks\ --------\ \ Set up a webhook](https://developers.fathom.ai/webhooks) [SDKs\ ----\ \ Use our Typescript or Python SDK](https://developers.fathom.ai/sdks) [OAuth\ -----\ \ Build a Fathom integration with OAuth](https://developers.fathom.ai/oauth) [Introduction](https://developers.fathom.ai/) [Webhooks](https://developers.fathom.ai/webhooks) ⌘I --- # Building with OAuth - Fathom API [Skip to main content](https://developers.fathom.ai/oauth#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Getting started Building with OAuth [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [Connect your app to Fathom](https://developers.fathom.ai/oauth#connect-your-app-to-fathom) * [Step 1: Register your app](https://developers.fathom.ai/oauth#step-1%3A-register-your-app) * [Step 2: Configure OAuth Authentication](https://developers.fathom.ai/oauth#step-2%3A-configure-oauth-authentication) [​](https://developers.fathom.ai/oauth#connect-your-app-to-fathom) Connect your app to Fathom ------------------------------------------------------------------------------------------------ If you’re developing a public app that you wish to integrate with Fathom, you should build it using OAuth. OAuth apps are eligible for promotion by Fathom (should you wish) and may also be included in our future App Marketplace. They are subject to review to ensure the best experience for all users. [​](https://developers.fathom.ai/oauth#step-1%3A-register-your-app) Step 1: Register your app ------------------------------------------------------------------------------------------------ [Register an OAuth App\ ---------------------\ \ Configure your redirects and receive your OAuth credentials. (2 mins)\ \ Get Started](https://fathom.video/marketplace_applications/new) [​](https://developers.fathom.ai/oauth#step-2%3A-configure-oauth-authentication) Step 2: Configure OAuth Authentication -------------------------------------------------------------------------------------------------------------------------- Once you have your OAuth credentials, [set up authentication](https://developers.fathom.ai/sdks/oauth) using our SDK. [Webhooks](https://developers.fathom.ai/webhooks) ⌘I --- # Webhooks - Fathom API [Skip to main content](https://developers.fathom.ai/webhooks#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Getting started Webhooks [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [About Webhooks in Fathom](https://developers.fathom.ai/webhooks#about-webhooks-in-fathom) * [Create a webhook](https://developers.fathom.ai/webhooks#create-a-webhook) * [Option 1 - in Settings](https://developers.fathom.ai/webhooks#option-1-in-settings) * [Option 2 - via API](https://developers.fathom.ai/webhooks#option-2-via-api) * [Test Your Webhook](https://developers.fathom.ai/webhooks#test-your-webhook) * [Verifying Webhooks](https://developers.fathom.ai/webhooks#verifying-webhooks) * [How to verify a webhook](https://developers.fathom.ai/webhooks#how-to-verify-a-webhook) * [Method 1 - SDK](https://developers.fathom.ai/webhooks#method-1-sdk) * [Method 2 - Without the SDK](https://developers.fathom.ai/webhooks#method-2-without-the-sdk) [​](https://developers.fathom.ai/webhooks#about-webhooks-in-fathom) About Webhooks in Fathom ----------------------------------------------------------------------------------------------- Webhooks will send your meeting data (optionally including the summary, transcript, and action items) to a URL of your choice. Webhooks can be set to fire after your own meetings and/or meetings that have been shared with you. Configure these triggers in your [Settings](https://fathom.video/customize#api-access-header) , or when generating a webhook [via API](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#body-triggered-for) . [​](https://developers.fathom.ai/webhooks#create-a-webhook) Create a webhook ------------------------------------------------------------------------------- There are two ways to create a webhook: #### [​](https://developers.fathom.ai/webhooks#option-1-in-settings) Option 1 - in Settings Webhooks can be configured in the [**API Access**](https://fathom.video/customize#api-access-header) section of your **User Settings**.[How to create a webhook in Settings:\ ------------------------------------\ \ * Generate an API key, then go to **Manage** > **Add Webhook**\ * Enter a Destination URL\ * Select which new recordings should trigger webhooks\ * Select what data to include in the payload\ \ Go to Settings](https://fathom.video/customize#api-access-header) #### [​](https://developers.fathom.ai/webhooks#option-2-via-api) Option 2 - via API You also have the option of creating and deleting webhooks with an API call. [API docs: Create a webhook](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook) . Be sure the check the response body to confirm the webhook was created as expected. Webhooks created via API will also appear in your Settings. [​](https://developers.fathom.ai/webhooks#test-your-webhook) Test Your Webhook --------------------------------------------------------------------------------- To ensure your webhook is working as expected, you can record a brief, 2-minute meeting. Shortly after the meeting ends, your Destination URL should receive a webhook event. For details on the webhook’s payload, see our [API docs](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready) . **Coming soon:** send a test payload from your Settings page [​](https://developers.fathom.ai/webhooks#verifying-webhooks) Verifying Webhooks ----------------------------------------------------------------------------------- Webhook verification helps ensure that incoming requests to your endpoint are from Fathom and haven’t been altered. Each webhook request sent from Fathom includes a signature in the request headers, which you can use to confirm the authenticity of the payload. To test webhooks locally or during development, you can skip verificationβ€”but don’t forget to add it back in before going live. ### [​](https://developers.fathom.ai/webhooks#how-to-verify-a-webhook) How to verify a webhook #### [​](https://developers.fathom.ai/webhooks#method-1-sdk) Method 1 - SDK If you’re [using our SDK](https://developers.fathom.ai/sdk) , you can use the `verify_webhook` helper. Simply call: Typescript Python Copy client.verifyWebhook(webhook_secret, request.headers, request.body) `webhook_secret` – Provided when you create the webhook (either in Settings or via the API). `request.headers` – The HTTP headers from the incoming request, which include the signature Fathom sends. `request.body` – The raw string body of the POST request. #### [​](https://developers.fathom.ai/webhooks#method-2-without-the-sdk) Method 2 - Without the SDK You can also verify incoming webhooks yourself using basic tools available in most programming languages. Every webhook payload from Fathom includes a `webhook-signature` in the header, with a version prefix and a base64-encoded value. Example: `"v1,BKQR1BIFjiNPdfpqM3+FH/YckKhX7WIq4/KK6Cc5aDY="` [View in docs](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#parameter-webhook-signature) To verify the request: 1. Take the portion of the `webhook-signature` header after the comma (this may include multiple space-delimited signatures) 2. Use your `webhook_secret` to hash the request body with HMAC SHA-256 (be sure to use the **raw** body, before any JSON parsing) 3. Base64-encode your hash and compare it to each of the provided signatures 4. If any one matches, the webhook is valid. Example: TypeScript Python Copy const crypto = require('crypto') function verifyWebhook(secret, headers, rawBody) { const [version, signatureBlock] = headers['webhook-signature'].split(',') const expected = crypto .createHmac('sha256', secret) .update(rawBody, 'utf8') .digest('base64') const signatures = signatureBlock.split(' ') return signatures.includes(expected) } [Quickstart](https://developers.fathom.ai/quickstart) [Building with OAuth](https://developers.fathom.ai/oauth) ⌘I --- # Get summary - Fathom API [Skip to main content](https://developers.fathom.ai/api-reference/recordings/get-summary#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Recordings Get summary [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) Get summary cURL Copy curl --request GET \ --url https://api.fathom.ai/external/v1/recordings/{recording_id}/summary \ --header 'X-Api-Key: ' 200 400 401 429 Copy { "summary": { "template_name": "general", "markdown_formatted": "## Summary\nWe reviewed Q1 OKRs, identified budget risks, and agreed to revisit projections next month.\n" } } GET / recordings / {recording\_id} / summary Try it Get summary cURL Copy curl --request GET \ --url https://api.fathom.ai/external/v1/recordings/{recording_id}/summary \ --header 'X-Api-Key: ' 200 400 401 429 Copy { "summary": { "template_name": "general", "markdown_formatted": "## Summary\nWe reviewed Q1 OKRs, identified budget risks, and agreed to revisit projections next month.\n" } } #### Authorizations ApiKeyAuthBearerAuth [​](https://developers.fathom.ai/api-reference/recordings/get-summary#authorization-x-api-key) X-Api-Key string header required Include your API key in the `X-Api-Key` header of every request. #### Path Parameters [​](https://developers.fathom.ai/api-reference/recordings/get-summary#parameter-recording-id) recording\_id integer required The ID of the meeting recording to fetch the call summary for. Example: `123456789` #### Query Parameters [​](https://developers.fathom.ai/api-reference/recordings/get-summary#parameter-destination-url) destination\_url string Destination URL for where we'll POST the call summary. If not sent, this endpoint will return the data directly. Example: `"https://example.com/destination"` #### Response 200 application/json Either the destination URL for where we'll POST the call summary, or the summary for the recording. * Option 1 * Option 2 [​](https://developers.fathom.ai/api-reference/recordings/get-summary#response-summary) summary object required Show child attributes [List meetings](https://developers.fathom.ai/api-reference/meetings/list-meetings) [Get transcript](https://developers.fathom.ai/api-reference/recordings/get-transcript) ⌘I --- # Pylon - Fathom API [Skip to main content](https://developers.fathom.ai/inspiration/pylon#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Inspiration Pylon [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [How it works](https://developers.fathom.ai/inspiration/pylon#how-it-works) * [Example setup](https://developers.fathom.ai/inspiration/pylon#example-setup) * [OAuth Token Exchange](https://developers.fathom.ai/inspiration/pylon#oauth-token-exchange) * [Webhook Setup](https://developers.fathom.ai/inspiration/pylon#webhook-setup) * [Fetching Meeting Data](https://developers.fathom.ai/inspiration/pylon#fetching-meeting-data) * [Why it matters](https://developers.fathom.ai/inspiration/pylon#why-it-matters) [Pylon](https://www.usepylon.com/?utm_source=fathom&utm_medium=referral&utm_campaign=integration-comarketing) is the AI-native support platform built for B2B. They help modern businesses handle support tickets efficiently and understand what’s going on with their customers. They built [a Fathom integration](https://docs.usepylon.com/pylon-docs/integrations/call-recording/fathom) to bring meeting insights directly into their customer support and success workflows. > β€œWith Fathom connected, our customers get enriched account notebooks that combine call data with data from Slack, email, etc. They also get AI-powered tasks auto-created from them and tracked in Pylon based on what was discussed on their call. Finally, their support team can now also harness all the knowledge across their collective Fathom calls to answer customer questions with Pylon’s AI copilot.” > β€” Advith Chelikani, CTO, Pylon ![Pylon Screenshot](https://mintcdn.com/fathom-e4df0608/6o825NnlNj3O49Hb/images/pylon.png?w=2500&fit=max&auto=format&n=6o825NnlNj3O49Hb&q=85&s=ff05e01b5981d3beffb96c09fdcc6eae) * * * [​](https://developers.fathom.ai/inspiration/pylon#how-it-works) How it works -------------------------------------------------------------------------------- 1. **Customer connects via OAuth** β€” Pylon uses Fathom’s OAuth to let each customer securely link their account. 2. **Webhook fires** β€” when a meeting is completed, Fathom sends Pylon the meeting metadata. 3. **Data processed** β€” Pylon requests transcript and meeting metadata from Fathom. 4. **Data enriched** β€” Pylon uses Fathom data to enrich customer records and power AI workflows inside the platform. * * * [​](https://developers.fathom.ai/inspiration/pylon#example-setup) Example setup ---------------------------------------------------------------------------------- Below is a simplified version of how Pylon wired things up: ### [​](https://developers.fathom.ai/inspiration/pylon#oauth-token-exchange) OAuth Token Exchange go Copy func (c *Controller) HandleFathomOAuth(w http.ResponseWriter, req *http.Request) { code := req.FormValue("code") data := url.Values{} data.Set("grant_type", "authorization_code") data.Set("code", code) data.Add("client_id", c.config.FathomClientID) data.Add("client_secret", c.config.FathomClientSecret) data.Add("redirect_uri", c.config.CallbackUrl()+"/fathom/oauth-callback") tokenReq, _ := http.NewRequest(http.MethodPost, "https://fathom.video/external/v1/oauth2/token", strings.NewReader(data.Encode())) tokenReq.Header.Add("Content-Type", "application/x-www-form-urlencoded") resp, _ := c.httpClient.Do(tokenReq) var tokenResp FathomTokenResponse json.NewDecoder(resp.Body).Decode(&tokenResp) // Store encrypted tokens org.AppSettings.FathomTokenEncrypted = c.tokenCrypter.EncryptTokenString(tokenResp.AccessToken) org.AppSettings.FathomRefreshTokenEncrypted = c.tokenCrypter.EncryptTokenString(tokenResp.RefreshToken) } ### [​](https://developers.fathom.ai/inspiration/pylon#webhook-setup) Webhook Setup go Copy // Create webhook for receiving events func (c *Impl) CreateWebhook(ctx context.Context, input *fathomtypes.CreateWebhookInput) (*fathomtypes.CreateWebhookResponse, error) { url := "https://fathom.video/external/v1/webhooks" jsonBody, _ := json.Marshal(input) req, _ := http.NewRequest(http.MethodPost, url, bytes.NewReader(jsonBody)) req.Header.Set("Content-Type", "application/json") req.Header.Set("Authorization", "Bearer "+c.apiKey) resp, _ := c.httpClient.Do(req) defer resp.Body.Close() var webhookResp fathomtypes.CreateWebhookResponse json.NewDecoder(resp.Body).Decode(&webhookResp) return &webhookResp, nil } ### [​](https://developers.fathom.ai/inspiration/pylon#fetching-meeting-data) Fetching Meeting Data Copy // Get meetings with transcripts from Fathom API func (c *Impl) GetTranscripts(ctx context.Context, input *GetTranscriptsInput) ([]*fathomtypes.Meeting, string, error) { baseURL := "https://fathom.video/external/v1/meetings" parsedURL, _ := url.Parse(baseURL) query := url.Values{} if input.IncludeTranscript { query.Add("include_transcript", "true") } if input.Cursor != "" { query.Add("cursor", input.Cursor) } query.Add("limit", strconv.Itoa(input.Limit)) parsedURL.RawQuery = query.Encode() req, _ := http.NewRequest(http.MethodGet, parsedURL.String(), nil) req.Header.Add("Authorization", "Bearer "+c.apiKey) resp, _ := c.httpClient.Do(req) defer resp.Body.Close() var response fathomtypes.GetMeetingsResponse json.NewDecoder(resp.Body).Decode(&response) meetings := make([]*fathomtypes.Meeting, len(response.Items)) for i, meeting := range response.Items { meetings[i] = &meeting } return meetings, *response.NextCursor, nil } [​](https://developers.fathom.ai/inspiration/pylon#why-it-matters) Why it matters ------------------------------------------------------------------------------------ With the Pylon + Fathom integration, support and success teams can: * Build account notebooks that combine calls, Slack, email, and more * Auto-generate AI-powered tasks directly from customer conversations * Use tools like Ask AI and Issue Copilot with call recordings as a knowledge source πŸ‘‰ [Learn more about Pylon](https://www.usepylon.com/?utm_source=fathom&utm_medium=referral&utm_campaign=integration-comarketing) . [πŸ’‘ Get Inspired](https://developers.fathom.ai/inspiration) [Twine](https://developers.fathom.ai/inspiration/twine) ⌘I --- # Twine - Fathom API [Skip to main content](https://developers.fathom.ai/inspiration/twine#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Inspiration Twine [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) On this page * [How it works](https://developers.fathom.ai/inspiration/twine#how-it-works) * [Example setup](https://developers.fathom.ai/inspiration/twine#example-setup) * [OAuth Token Exchange](https://developers.fathom.ai/inspiration/twine#oauth-token-exchange) * [Fetching Meetings](https://developers.fathom.ai/inspiration/twine#fetching-meetings) * [Why it matters](https://developers.fathom.ai/inspiration/twine#why-it-matters) [Twine](https://twine.com/) is _β€œthe easiest way to turn customer conversations into intelligence that drives growth.”_ By connecting directly to Fathom, Twine analyzes every sales, customer success, and support call to uncover product gaps, deal blockers, churn risks, competitor mentions, and customer loveβ€”all automatically. The two tools work in tandem. As Dee Kulkarni, CTO of The Martec, describes it: > β€œThe entry point is **Twine**, and then I end up going into **Fathom** to dive deeper on our most useful calls.” This workflow gives product teams the high-level patterns, revenue context, and the nuanced details they need to make informed decisions. ![Twine Screenshot](https://mintcdn.com/fathom-e4df0608/ejkom8Ldz3qkbiGg/images/twine.png?w=2500&fit=max&auto=format&n=ejkom8Ldz3qkbiGg&q=85&s=577ad98d681b9c932178f5f910ca6747) * * * [​](https://developers.fathom.ai/inspiration/twine#how-it-works) How it works -------------------------------------------------------------------------------- 1. **Customer connects via OAuth** β€” Twine uses Fathom’s OAuth to let each customer securely link their Fathom account. 2. **Periodic sync** β€” Twine regularly fetches new meetings from Fathom’s API based on the user’s filters and settings. 3. **Data processed** β€” Twine requests transcripts and meeting metadata for each new meeting. 4. **Data enriched** β€” Twine uses Fathom data to power AI-driven customer intelligence. * * * [​](https://developers.fathom.ai/inspiration/twine#example-setup) Example setup ---------------------------------------------------------------------------------- Below is a simplified version of how Twine build their integration: ### [​](https://developers.fathom.ai/inspiration/twine#oauth-token-exchange) OAuth Token Exchange TypeScript Copy // Exchange OAuth authorization code for access token const api = ky.extend({ prefixUrl: "https://api.fathom.ai/external/v1", }); export const exchangeOAuthCodeForToken = async ( code: string, redirectUri: string ) => { const res = await api .post("oauth2/token", { body: new URLSearchParams({ grant_type: "authorization_code", code, redirect_uri: redirectUri, client_id: config.FATHOM_CLIENT_ID, client_secret: config.FATHOM_CLIENT_SECRET, }), }) .json(); return zOAuthTokenResponse.parse(res); }; Twine then stores the response in their secure encrypted store for each organization and handles token refresh during periodic syncs. ### [​](https://developers.fathom.ai/inspiration/twine#fetching-meetings) Fetching Meetings TypeScript Copy // Fetch meetings with filters and pagination support export const listMeetings = async ( auth: EncryptedAuth, params: { cursor?: string, createdAfter: Date, createdBefore: Date, } ) => { const res = await api .get("meetings", { headers: authHeaders(auth), searchParams: { created_after: params.createdAfter.toISOString(), created_before: params.createdBefore.toISOString(), ...(params.cursor !== undefined ? { cursor: params.cursor } : undefined), }, }) .json(); return z .object({ limit: z.number().nullish(), items: z.array( z.object({ title: z.string(), url: z.string(), recording_id: z.number(), recording_start_time: z.string().datetime(), recording_end_time: z.string().datetime(), calendar_invitees: z.array( z.object({ name: z.string(), email: z.string(), is_external: z.boolean(), }) ), }) ), next_cursor: z.string().nullish(), }) .parse(res); }; Twine uses the calendar invitees to apply various filters to decide which call transcripts to import. [​](https://developers.fathom.ai/inspiration/twine#why-it-matters) Why it matters ------------------------------------------------------------------------------------ With a Fathom and Twine integration, GTM and product teams can automatically get: 1. **Insights from GTM conversations shared with product teams** Twine transforms every Fathom-recorded call into decision-ready insights, so Product teams can finally tap into Sales and CS conversations without sifting through transcripts. 2. **Curated intelligence where you work** Instead of dashboards or noise, Twine delivers role-specific signals straight from Fathom calls into Slack or email β€” while there’s still time to act. 3. **Always-on, revenue-tied clarity** Twine’s purpose-built AI connects the dots across customer calls, competitors, and accounts, surfacing insights tied directly to revenue β€” not just generic meeting notes. πŸ‘‰ [Learn more about Twine](https://twine.com/) . [Pylon](https://developers.fathom.ai/inspiration/pylon) ⌘I --- # Get transcript - Fathom API [Skip to main content](https://developers.fathom.ai/api-reference/recordings/get-transcript#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Recordings Get transcript [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) Get transcript cURL Copy curl --request GET \ --url https://api.fathom.ai/external/v1/recordings/{recording_id}/transcript \ --header 'X-Api-Key: ' 200 400 401 429 Copy { "transcript": [\ {\ "speaker": {\ "display_name": "Alice Johnson",\ "matched_calendar_invitee_email": "alice.johnson@acme.com"\ },\ "text": "Let's revisit the budget allocations.",\ "timestamp": "00:05:32"\ }\ ] } GET / recordings / {recording\_id} / transcript Try it Get transcript cURL Copy curl --request GET \ --url https://api.fathom.ai/external/v1/recordings/{recording_id}/transcript \ --header 'X-Api-Key: ' 200 400 401 429 Copy { "transcript": [\ {\ "speaker": {\ "display_name": "Alice Johnson",\ "matched_calendar_invitee_email": "alice.johnson@acme.com"\ },\ "text": "Let's revisit the budget allocations.",\ "timestamp": "00:05:32"\ }\ ] } #### Authorizations ApiKeyAuthBearerAuth [​](https://developers.fathom.ai/api-reference/recordings/get-transcript#authorization-x-api-key) X-Api-Key string header required Include your API key in the `X-Api-Key` header of every request. #### Path Parameters [​](https://developers.fathom.ai/api-reference/recordings/get-transcript#parameter-recording-id) recording\_id integer required The ID of the meeting recording to fetch the transcript for. Example: `123456789` #### Query Parameters [​](https://developers.fathom.ai/api-reference/recordings/get-transcript#parameter-destination-url) destination\_url string Destination URL for where we'll POST the transcript. If not sent, this endpoint will return the data directly. Example: `"https://example.com/destination"` #### Response 200 application/json Either the destination URL for where we'll POST the transcript, or the transcript for the recording as an array. * Option 1 * Option 2 [​](https://developers.fathom.ai/api-reference/recordings/get-transcript#response-transcript) transcript object\[\] required Show child attributes [Get summary](https://developers.fathom.ai/api-reference/recordings/get-summary) [List teams](https://developers.fathom.ai/api-reference/teams/list-teams) ⌘I --- # New meeting content ready - Fathom API [Skip to main content](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Webhook Payloads New meeting content ready [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) Example Request Body Copy { "title": "Quarterly Business Review", "meeting_title": "QBR 2025 Q1", "url": "https://fathom.video/xyz123", "share_url": "https://fathom.video/share/xyz123", "created_at": "2025-03-01T17:01:30Z", "scheduled_start_time": "2025-03-01T16:00:00Z", "scheduled_end_time": "2025-03-01T17:00:00Z", "recording_start_time": "2025-03-01T16:01:12Z", "recording_end_time": "2025-03-01T17:00:55Z", "calendar_invitees_domains_type": "one_or_more_external", "transcript": [\ {\ "speaker": {\ "display_name": "Jane Doe",\ "matched_calendar_invitee_email": "jane.doe@acme.com"\ },\ "text": "Let's revisit the budget allocations.",\ "timestamp": "00:05:32"\ },\ {\ "speaker": {\ "display_name": "John Smith",\ "matched_calendar_invitee_email": "john.smith@client.com"\ },\ "text": "I agree, we need to adjust our projections.",\ "timestamp": "00:05:40"\ }\ ], "default_summary": { "template_name": "general", "markdown_formatted": "## Summary\nWe reviewed Q1 OKRs, identified budget risks, and agreed to revisit projections next month.\n" }, "action_items": [\ {\ "description": "Email revised proposal to client",\ "user_generated": false,\ "completed": false,\ "recording_timestamp": "00:10:45",\ "recording_playback_url": "https://fathom.video/xyz123#t=645",\ "assignee": {\ "name": "Jane Doe",\ "email": "jane.doe@acme.com",\ "team": "Marketing"\ }\ }\ ], "calendar_invitees": [\ {\ "name": "Alice Johnson",\ "matched_speaker_display_name": "Alice Johnson",\ "email": "alice.johnson@acme.com",\ "is_external": false,\ "email_domain": "acme.com"\ },\ {\ "name": "Jane Doe",\ "matched_speaker_display_name": "Jane Doe",\ "email": "jane.doe@acme.com",\ "is_external": false,\ "email_domain": "acme.com"\ },\ {\ "name": "John Smith",\ "matched_speaker_display_name": "John Smith",\ "email": "john.smith@client.com",\ "is_external": true,\ "email_domain": "client.com"\ }\ ], "recorded_by": { "name": "Alice Johnson", "email": "alice.johnson@acme.com", "team": "Customer Success", "email_domain": "acme.com" }, "crm_matches": { "contacts": [\ {\ "name": "John Smith",\ "email": "john.smith@client.com",\ "record_url": "https://app.hubspot.com/contacts/123"\ }\ ], "companies": [\ {\ "name": "Acme Corp",\ "record_url": "https://app.hubspot.com/companies/456"\ }\ ], "deals": [\ {\ "name": "Q1 Renewal",\ "amount": 50000,\ "record_url": "https://app.hubspot.com/deals/789"\ }\ ] } } WEBHOOK newMeeting Example Request Body Copy { "title": "Quarterly Business Review", "meeting_title": "QBR 2025 Q1", "url": "https://fathom.video/xyz123", "share_url": "https://fathom.video/share/xyz123", "created_at": "2025-03-01T17:01:30Z", "scheduled_start_time": "2025-03-01T16:00:00Z", "scheduled_end_time": "2025-03-01T17:00:00Z", "recording_start_time": "2025-03-01T16:01:12Z", "recording_end_time": "2025-03-01T17:00:55Z", "calendar_invitees_domains_type": "one_or_more_external", "transcript": [\ {\ "speaker": {\ "display_name": "Jane Doe",\ "matched_calendar_invitee_email": "jane.doe@acme.com"\ },\ "text": "Let's revisit the budget allocations.",\ "timestamp": "00:05:32"\ },\ {\ "speaker": {\ "display_name": "John Smith",\ "matched_calendar_invitee_email": "john.smith@client.com"\ },\ "text": "I agree, we need to adjust our projections.",\ "timestamp": "00:05:40"\ }\ ], "default_summary": { "template_name": "general", "markdown_formatted": "## Summary\nWe reviewed Q1 OKRs, identified budget risks, and agreed to revisit projections next month.\n" }, "action_items": [\ {\ "description": "Email revised proposal to client",\ "user_generated": false,\ "completed": false,\ "recording_timestamp": "00:10:45",\ "recording_playback_url": "https://fathom.video/xyz123#t=645",\ "assignee": {\ "name": "Jane Doe",\ "email": "jane.doe@acme.com",\ "team": "Marketing"\ }\ }\ ], "calendar_invitees": [\ {\ "name": "Alice Johnson",\ "matched_speaker_display_name": "Alice Johnson",\ "email": "alice.johnson@acme.com",\ "is_external": false,\ "email_domain": "acme.com"\ },\ {\ "name": "Jane Doe",\ "matched_speaker_display_name": "Jane Doe",\ "email": "jane.doe@acme.com",\ "is_external": false,\ "email_domain": "acme.com"\ },\ {\ "name": "John Smith",\ "matched_speaker_display_name": "John Smith",\ "email": "john.smith@client.com",\ "is_external": true,\ "email_domain": "client.com"\ }\ ], "recorded_by": { "name": "Alice Johnson", "email": "alice.johnson@acme.com", "team": "Customer Success", "email_domain": "acme.com" }, "crm_matches": { "contacts": [\ {\ "name": "John Smith",\ "email": "john.smith@client.com",\ "record_url": "https://app.hubspot.com/contacts/123"\ }\ ], "companies": [\ {\ "name": "Acme Corp",\ "record_url": "https://app.hubspot.com/companies/456"\ }\ ], "deals": [\ {\ "name": "Q1 Renewal",\ "amount": 50000,\ "record_url": "https://app.hubspot.com/deals/789"\ }\ ] } } #### Headers [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#parameter-webhook-id) webhook-id string required Unique message identifier for the webhook message. This identifier is unique across all messages, but will be the same when the same webhook is being resent (e.g. due to a previous failure). Example: `"msg_2x2zwLOcWaRTzsLK8KtbQt1FTk9"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#parameter-webhook-timestamp) webhook-timestamp integer required Timestamp in seconds since epoch. Example: `1712345678` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#parameter-webhook-signature) webhook-signature string required Signature with version prefix and base64-encoded value. Format is `,`. Multiple signatures may be space-delimited (e.g. `v1,RmF0aG9t v2,QVBJ`). [How to verify webhook signatures.](https://developers.fathom.ai/webhooks#verifying-webhooks) Example: `"v1,BKQR1BIFjiNPdfpqM3+FH/YckKhX7WIq4/KK6Cc5aDY="` #### Body application/json [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-title) title string required Example: `"Quarterly Business Review"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-meeting-title) meeting\_title string | null required Calendar event title. Example: `"QBR 2025 Q1"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-recording-id) recording\_id integer required The ID of the meeting recording. Example: `123456789` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-url) url string required Example: `"https://fathom.video/xyz123"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-share-url) share\_url string required Example: `"https://fathom.video/share/xyz123"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-created-at) created\_at string required Example: `"2025-03-01T17:01:30Z"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-scheduled-start-time) scheduled\_start\_time string required Example: `"2025-03-01T16:00:00Z"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-scheduled-end-time) scheduled\_end\_time string required Example: `"2025-03-01T17:00:00Z"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-recording-start-time) recording\_start\_time string required Example: `"2025-03-01T16:01:12Z"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-recording-end-time) recording\_end\_time string required Example: `"2025-03-01T17:00:55Z"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-calendar-invitees-domains-type) calendar\_invitees\_domains\_type enum required Available options: `only_internal`, `one_or_more_external` Example: `"one_or_more_external"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-transcript-language) transcript\_language string required Example: `"en"` [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-calendar-invitees) calendar\_invitees object\[\] required Show child attributes [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-recorded-by) recorded\_by object required Show child attributes [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-transcript) transcript object\[\] | null Show child attributes [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-default-summary) default\_summary object Show child attributes [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-action-items) action\_items object\[\] | null Show child attributes [​](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready#body-crm-matches) crm\_matches object | null CRM data linked to the meeting. Only returns data from your or your team's linked CRM. If no CRM is connected for the workspace, the `error` field will be populated. Show child attributes #### Response 200 Return any 2xx code to acknowledge receipt. [Delete a webhook](https://developers.fathom.ai/api-reference/webhooks/delete-a-webhook) ⌘I --- # Create a webhook - Fathom API [Skip to main content](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Webhooks Create a webhook [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) Create a webhook cURL Copy curl --request POST \ --url https://api.fathom.ai/external/v1/webhooks \ --header 'Content-Type: application/json' \ --header 'X-Api-Key: ' \ --data '{ "destination_url": "https://example.com/webhook", "include_action_items": true, "include_crm_matches": true, "include_summary": true, "include_transcript": true, "triggered_for": [\ "my_recordings",\ "my_shared_with_team_recordings",\ "shared_with_me_external_recordings"\ ] }' 201 400 401 429 Copy { "id": "ikEoQ4bVoq4JYUmc", "url": "https://example.com/webhook", "secret": "whsec_x6EV6NIAAz3ldclszNJTwrow", "created_at": "2025-06-30T10:40:46Z", "include_transcript": true, "include_crm_matches": true, "include_summary": true, "include_action_items": true, "triggered_for": [\ "my_recordings",\ "my_shared_with_team_recordings",\ "shared_external_recordings"\ ] } POST / webhooks Try it Create a webhook cURL Copy curl --request POST \ --url https://api.fathom.ai/external/v1/webhooks \ --header 'Content-Type: application/json' \ --header 'X-Api-Key: ' \ --data '{ "destination_url": "https://example.com/webhook", "include_action_items": true, "include_crm_matches": true, "include_summary": true, "include_transcript": true, "triggered_for": [\ "my_recordings",\ "my_shared_with_team_recordings",\ "shared_with_me_external_recordings"\ ] }' 201 400 401 429 Copy { "id": "ikEoQ4bVoq4JYUmc", "url": "https://example.com/webhook", "secret": "whsec_x6EV6NIAAz3ldclszNJTwrow", "created_at": "2025-06-30T10:40:46Z", "include_transcript": true, "include_crm_matches": true, "include_summary": true, "include_action_items": true, "triggered_for": [\ "my_recordings",\ "my_shared_with_team_recordings",\ "shared_external_recordings"\ ] } #### Authorizations ApiKeyAuthBearerAuth [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#authorization-x-api-key) X-Api-Key string header required Include your API key in the `X-Api-Key` header of every request. #### Body application/json [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#body-destination-url) destination\_url string required The URL to send the webhook to. Example: `"https://example.com/webhook"` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#body-triggered-for) triggered\_for enum\[\] required You must send at least one of the following types of recordings to trigger on. * `my_recordings`: Your private recordings, as well as those you've shared with individuals. (On Team Plans, this excludes recordings you've shared with any teams.) * `shared_external_recordings`: Recordings shared with you by other users. (For Team Plans, this does not include recordings shared by other users on your Team Plan.) * `my_shared_with_team_recordings`: (Team Plans only). All recordings that you have shared with other teams (e.g. Marketing or Sales). Recordings you've shared with individuals but not with teams are not included. * `shared_team_recordings`: (Team Plans only) All recordings you can access from other users on your Team Plan, whether shared with you individually or with your team. Show child attributes Example: [ "my_recordings", "my_shared_with_team_recordings", "shared_with_me_external_recordings"] [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#body-include-action-items) include\_action\_items boolean default:false Include the action items for each meeting. Example: `true` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#body-include-crm-matches) include\_crm\_matches boolean default:false Include CRM matches for each meeting. Only returns data from your or your team's linked CRM. Example: `true` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#body-include-summary) include\_summary boolean default:false Include the summary for each meeting. Example: `true` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#body-include-transcript) include\_transcript boolean default:false Include the transcript for each meeting. Example: `true` #### Response 201 application/json The created webhook. [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#response-id) id string required Example: `"ikEoQ4bVoq4JYUmc"` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#response-url) url string required Example: `"https://example.com/webhook"` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#response-secret) secret string required The secret used to verify the webhook signature. Example: `"whsec_x6EV6NIAAz3ldclszNJTwrow"` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#response-created-at) created\_at string required The date and time the webhook was created in ISO 8601 format. Example: `"2025-06-30T10:40:46Z"` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#response-include-transcript) include\_transcript boolean required Example: `true` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#response-include-crm-matches) include\_crm\_matches boolean required Example: `true` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#response-include-summary) include\_summary boolean required Example: `true` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#response-include-action-items) include\_action\_items boolean required Example: `true` [​](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook#response-triggered-for) triggered\_for enum\[\] required Show child attributes Example: [ "my_recordings", "my_shared_with_team_recordings", "shared_external_recordings"] [List team members](https://developers.fathom.ai/api-reference/team-members/list-team-members) [Delete a webhook](https://developers.fathom.ai/api-reference/webhooks/delete-a-webhook) ⌘I --- # Page Not Found [Skip to main content](https://developers.fathom.ai/sdk#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Page Not Found [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) 404 Page Not Found ============== We couldn't find the page. Maybe you were looking for one of these pages below? [SDK Maturity](https://developers.fathom.ai/sdks/breaking-changes/sdk-maturity#sdk-maturity) [TypeScript SDK Changes](https://developers.fathom.ai/sdks/breaking-changes/typescript-changes#) [SDK Introduction](https://developers.fathom.ai/sdks/index#) ⌘I --- # List teams - Fathom API [Skip to main content](https://developers.fathom.ai/api-reference/teams/list-teams#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Teams List teams [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) List teams cURL Copy curl --request GET \ --url https://api.fathom.ai/external/v1/teams \ --header 'X-Api-Key: ' 200 400 401 429 Copy { "limit": 123, "next_cursor": "", "items": [\ {\ "name": "Sales",\ "created_at": "2023-11-10T12:00:00Z"\ }\ ] } GET / teams Try it List teams cURL Copy curl --request GET \ --url https://api.fathom.ai/external/v1/teams \ --header 'X-Api-Key: ' 200 400 401 429 Copy { "limit": 123, "next_cursor": "", "items": [\ {\ "name": "Sales",\ "created_at": "2023-11-10T12:00:00Z"\ }\ ] } #### Authorizations ApiKeyAuthBearerAuth [​](https://developers.fathom.ai/api-reference/teams/list-teams#authorization-x-api-key) X-Api-Key string header required Include your API key in the `X-Api-Key` header of every request. #### Query Parameters [​](https://developers.fathom.ai/api-reference/teams/list-teams#parameter-cursor) cursor string Cursor for pagination. #### Response 200 application/json Paginated list of teams. [​](https://developers.fathom.ai/api-reference/teams/list-teams#response-limit) limit integer required [​](https://developers.fathom.ai/api-reference/teams/list-teams#response-next-cursor) next\_cursor string | null required [​](https://developers.fathom.ai/api-reference/teams/list-teams#response-items) items object\[\] required Show child attributes [Get transcript](https://developers.fathom.ai/api-reference/recordings/get-transcript) [List team members](https://developers.fathom.ai/api-reference/team-members/list-team-members) ⌘I --- # Delete a webhook - Fathom API [Skip to main content](https://developers.fathom.ai/api-reference/webhooks/delete-a-webhook#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Webhooks Delete a webhook [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) Delete a webhook cURL Copy curl --request DELETE \ --url https://api.fathom.ai/external/v1/webhooks/{id} \ --header 'X-Api-Key: ' DELETE / webhooks / {id} Try it Delete a webhook cURL Copy curl --request DELETE \ --url https://api.fathom.ai/external/v1/webhooks/{id} \ --header 'X-Api-Key: ' #### Authorizations ApiKeyAuthBearerAuth [​](https://developers.fathom.ai/api-reference/webhooks/delete-a-webhook#authorization-x-api-key) X-Api-Key string header required Include your API key in the `X-Api-Key` header of every request. #### Path Parameters [​](https://developers.fathom.ai/api-reference/webhooks/delete-a-webhook#parameter-id) id string required The ID of the webhook to delete. #### Response 204 The webhook was deleted successfully. [Create a webhook](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook) [New meeting content ready](https://developers.fathom.ai/api-reference/webhook-payloads/new-meeting-content-ready) ⌘I --- # List team members - Fathom API [Skip to main content](https://developers.fathom.ai/api-reference/team-members/list-team-members#content-area) [Fathom API home page![light logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/blacklogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=0bcb3214b43ee48b36d667838d2ce9d2)![dark logo](https://mintcdn.com/fathom-e4df0608/fpW1q81hxUkk93dq/logo/whitelogo.png?fit=max&auto=format&n=fpW1q81hxUkk93dq&q=85&s=7ec9aca099533e9b45cbc89f18daf880)](https://developers.fathom.ai/) Search... ⌘K Search... Navigation Team Members List team members [Guides](https://developers.fathom.ai/) [API docs](https://developers.fathom.ai/api-overview) [SDK Docs](https://developers.fathom.ai/sdks) [Inspiration](https://developers.fathom.ai/inspiration) List team members cURL Copy curl --request GET \ --url https://api.fathom.ai/external/v1/team_members \ --header 'X-Api-Key: ' 200 400 401 429 Copy { "limit": 123, "next_cursor": "", "items": [\ {\ "name": "Bob Lee",\ "email": "bob.lee@acme.com",\ "created_at": "2024-06-01T08:30:00Z"\ }\ ] } GET / team\_members Try it List team members cURL Copy curl --request GET \ --url https://api.fathom.ai/external/v1/team_members \ --header 'X-Api-Key: ' 200 400 401 429 Copy { "limit": 123, "next_cursor": "", "items": [\ {\ "name": "Bob Lee",\ "email": "bob.lee@acme.com",\ "created_at": "2024-06-01T08:30:00Z"\ }\ ] } #### Authorizations ApiKeyAuthBearerAuth [​](https://developers.fathom.ai/api-reference/team-members/list-team-members#authorization-x-api-key) X-Api-Key string header required Include your API key in the `X-Api-Key` header of every request. #### Query Parameters [​](https://developers.fathom.ai/api-reference/team-members/list-team-members#parameter-cursor) cursor string Cursor for pagination. [​](https://developers.fathom.ai/api-reference/team-members/list-team-members#parameter-team) team string Team name to filter by. #### Response 200 application/json Paginated list of team members. [​](https://developers.fathom.ai/api-reference/team-members/list-team-members#response-limit) limit integer required [​](https://developers.fathom.ai/api-reference/team-members/list-team-members#response-next-cursor) next\_cursor string | null required [​](https://developers.fathom.ai/api-reference/team-members/list-team-members#response-items) items object\[\] required Show child attributes [List teams](https://developers.fathom.ai/api-reference/teams/list-teams) [Create a webhook](https://developers.fathom.ai/api-reference/webhooks/create-a-webhook) ⌘I ---