> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.athenaintel.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.athenaintel.com/_mcp/server.

# Get meeting by ID

GET https://api.athenaintel.com/api/v0/meetings/{asset_id}

Retrieve a single meeting by its asset ID, including status, AI summary, participants, and the asset IDs of its downloadable artifacts (recording, transcripts, chat). Meetings captured since September 2026 store their artifacts on the meeting itself, so those IDs are null for them; use the download endpoint, which serves both shapes.

Reference: https://docs.athenaintel.com/api-reference/meetings/get

## Authentication

- `X-API-KEY` header (required) — API Key authentication via header

## Request

### Path parameters

- `asset_id` (string, required) — Unique identifier of the meeting asset to retrieve

## Response

### 200

Successful Response

- `created_at` (datetime, required) — Timestamp when the meeting asset was created (ISO 8601)
- `id` (string, required) — Unique identifier of the meeting asset (e.g., 'asset_abc123')
- `updated_at` (datetime, required) — Timestamp when the meeting asset was last updated (ISO 8601)
- `ai_summary` (string, optional, nullable) — AI-generated summary of the meeting
- `artifacts` (MeetingArtifactsOut, optional) — Downloadable artifacts (recording, transcripts, chat)
- `created_by_id` (string, optional, nullable) — Unique identifier of the user who created this meeting
- `meeting_url` (string, optional, nullable) — URL of the original meeting (e.g., Zoom/Meet/Teams link)
- `participants` (list of MeetingParticipantOut, optional) — Best-effort list of meeting participants/attendees
- `status` (string, optional, nullable) — Processing status of the meeting (e.g., 'completed')
- `title` (string, optional, nullable) — Title of the meeting
- `workspace_id` (string, optional, nullable) — Unique identifier of the workspace this meeting belongs to

## Errors

### 401 Unauthorized Error

Unauthorized

- `message` (string, required)

### 404 Not Found Error

Not Found

- `message` (string, required)

### 422 Unprocessable Entity Error

Validation Error

- `detail` (list of ValidationError, optional)

## Types

### MeetingArtifactsOut

Legacy asset IDs of the downloadable artifacts attached to a meeting. Meetings captured since September 2026 are a single asset: their recording, transcript and chat are stored on the meeting itself, so every ID here is null for them and the artifacts are downloaded through the meeting download endpoint (`GET /meetings/{asset_id}/download`), which serves both shapes. Older meetings keep their child assets and their IDs.

- `chat_asset_id` (string, optional, nullable) — Asset ID of the in-meeting chat transcript (JSON) for meetings captured before September 2026; null for newer meetings, whose chat is downloaded via the meeting download endpoint
- `formatted_transcript_asset_id` (string, optional, nullable) — Asset ID of the formatted meeting transcript (JSON) for meetings captured before September 2026; null for newer meetings
- `recording_asset_id` (string, optional, nullable) — Asset ID of the meeting video recording (MP4) for meetings captured before September 2026; null for newer meetings, whose recording is downloaded via the meeting download endpoint
- `transcript_asset_id` (string, optional, nullable) — Asset ID of the raw meeting transcript (JSON) for meetings captured before September 2026; null for newer meetings, whose transcript is downloaded via the meeting download endpoint

### MeetingParticipantOut

A participant/attendee of a meeting.

- `email` (string, optional, nullable) — Email address of the participant, when known
- `name` (string, optional, nullable) — Display name of the participant, when known

### ValidationError

- `loc` (list of ValidationErrorLocItems, required)
- `msg` (string, required)
- `type` (string, required)
- `ctx` (ValidationErrorCtx, optional)
- `input` (any, optional)

### ValidationErrorLocItems

### ValidationErrorCtx

## Examples

**Response**

```json
{
  "created_at": "2024-01-15T09:30:00Z",
  "id": "string",
  "updated_at": "2024-01-15T09:30:00Z",
  "ai_summary": "string",
  "artifacts": {
    "chat_asset_id": "string",
    "formatted_transcript_asset_id": "string",
    "recording_asset_id": "string",
    "transcript_asset_id": "string"
  },
  "created_by_id": "string",
  "meeting_url": "string",
  "participants": [
    {
      "email": "string",
      "name": "string"
    }
  ],
  "status": "string",
  "title": "string",
  "workspace_id": "string"
}
```

**SDK Code**

```python
import requests

url = "https://api.athenaintel.com/api/v0/meetings/asset_id"

headers = {"X-API-KEY": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.athenaintel.com/api/v0/meetings/asset_id';
const options = {method: 'GET', headers: {'X-API-KEY': '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.athenaintel.com/api/v0/meetings/asset_id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-API-KEY", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.athenaintel.com/api/v0/meetings/asset_id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.athenaintel.com/api/v0/meetings/asset_id")
  .header("X-API-KEY", "<apiKey>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.athenaintel.com/api/v0/meetings/asset_id', [
  'headers' => [
    'X-API-KEY' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.athenaintel.com/api/v0/meetings/asset_id");
var request = new RestRequest(Method.GET);
request.AddHeader("X-API-KEY", "<apiKey>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["X-API-KEY": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.athenaintel.com/api/v0/meetings/asset_id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```