Skip to main content

Generate an API Key

Get your Fathom API Key

Head to the API Access section of your User Settings and generate an API key.
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.

List recent meetings

List the 10 most recent meetings recorded by you or shared to your team.
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.
Example response
{
"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="
}

Get next 10 meetings

Use the next_cursor from the previous response to get the next page of meetings.
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, pagination is handled automatically - no need to manage cursors manually. See SDK Pagination for examples.

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 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 endpoint. OAuth apps must use this approach since they can’t use include_transcript or include_summary.

Next steps

Now that you you’ve made your first API calls, time to go deeper:
I