# Welcome to Meetra AI API

Conversation Intelligence for the Future of Work

<figure><img src="/files/dBvF3KY2YcLZQfS7lBdH" alt=""><figcaption></figcaption></figure>

The Meetra AI Conversation Intelligence API is a modular solution that provides a comprehensive analysis of human conversation audio. This analysis includes transcripts, group dynamics, topic-oriented dynamics and communication patterns throughout the conversation. The modular design allows developers to create complete products and solutions on top of the API. \
\
The infrastructure has been built together by the founders of [Timeqube](https://timeqube.com) and [UMCS University](https://analytics.umcs.pl/) in Poland.

## The Four Layers&#x20;

Meetra AI Operates in four distinct layers of data analysis

1. **Context Layer** - Transcripts, Summaries, Key Points, Questions&#x20;
2. **Group Dynamics Layer** - Overall Sentiment, Energy, Interactions, Balance
3. **Fluctuation Layer** - Energy, Sentiment, Interaction and individual emotion changes in time
4. **Topic Overlay** - Topics, Contributors, Sentiment, Energy and Interaction Patterns for discovered topics

## Further Reading

[Meetra AI Conversation Intelligence API Building Blocks](/meetra-ai-conversation-intelligence-api-building-blocks)

[Meetra AI Conversation Intelligence API Reference](/meetra-ai-conversation-intelligence-api-reference)

[Built with Meetra AI](/built-with-meetra-ai)&#x20;

## Current Development Stage

Meetra AI is currently in the beta testing phase, with a [demo](https://docs.meetra.ai/) available for users to upload their meetings and view a sample report visualisation. We have opened the API for developers to tinker with different endpoints for free. You can apply for API access [here](https://0tc6yms7ze7.typeform.com/to/ijR0WJsK?typeform-source=meetra.ai).&#x20;


# Meetra AI Conversation Intelligence API Building Blocks

Explore the key components of Meetra AI API

\
The Conversation Intelligence 2.0 Building Blocks are designed to provide a comprehensive understanding of group dynamics, context, topics, and fluctuations within a conversation. Here's a summary of each layer and its components:

<figure><img src="/files/DAMcEQssDHZlkT7B2ue5" alt=""><figcaption></figcaption></figure>

## **Group Dynamics Layer**

* Speaker Detection: Identifies individual speakers in a conversation.
* Conversational Energy: Measures the energy level in a conversation.
* Conversational Sentiment: Analyzes the overall sentiment throughout a conversation.
* Conversational Balance: Evaluates the balance of participation among speakers.
* Interaction Mapping: Visualizes the strength of interactions between participants.

## Context Layer

* Conversation Transcripts: Provides full transcriptions of the conversation's audio content.
* Conversation Summary: Offers a concise summary of the conversation.
* Speaker Summaries: Generates summaries of each speaker's contributions.
* Key Points and Questions: Identifies and lists key points and questions raised during the conversation.
* Topics Discussed: Detects and lists topics discussed throughout the conversation.

## Topic Deep Dive

* Topic Indication: Lists topics discussed in the conversation
* Topic Energy: Measures the energy associated with specific topics.
* Topic Sentiment: Analyzes the sentiment around specific topics.
* Topic Speakers: Identifies speakers who contributed to specific topics.
* Topic Emotions: Uncovers the emotions related to particular topics.

## **Fluctuations**

* Energy Fluctuations: Tracks changes in energy levels throughout the conversation.
* Sentiment Fluctuations: Monitors shifts in sentiment during the conversation.
* Interaction Fluctuations: Observes variations in interaction strength between participants.

These building blocks work together to provide valuable insights into conversation dynamics, helping users better understand the nuances of group interactions, context, and emotions, as well as the evolution of energy and sentiment within the conversation.


# Meetra AI Conversation Intelligence API Reference

The Meetra AI API allows you to access various features and insights generated from processed meeting recordings using the Conversation Intelligence API. This documentation provides an overview of the API endpoints, their functionalities, request parameters, and response formats.

## Base URL

The base URL for accessing the Meetra AI API is&#x20;

[`http://api-test.meetra.ai:8000/docs`](http://tqai.technischools.com:8000/docs)

## API Endpoints&#x20;

These are all available endpoints. Click individual endpoint for full reference.&#x20;

### General

[User Login](/meetra-ai-conversation-intelligence-api-reference/user-login)\
Used to obtain authorisation secret for the API

[Upload Audio / Video material](/meetra-ai-conversation-intelligence-api-reference/upload-audio-video-material)\
Uploads audio/video recording of a conversation for future processing

[Speaker Detection](/meetra-ai-conversation-intelligence-api-reference/speaker-detection)\
Detects speakers and provides alias if available in the database

[Rename Speaker](/meetra-ai-conversation-intelligence-api-reference/rename-speaker)\
Renames selected speaker giving it an alias for future recognition

[Speaker Audio Quality](/meetra-ai-conversation-intelligence-api-reference/speaker-audio-quality)\
Detects speaker audio quality including internet connection issues

### Group Dynamics

[Speaker Balance Score](/meetra-ai-conversation-intelligence-api-reference/speaker-balance-score)\
Balance score for the conversation

[Individual Speaker Balance](/meetra-ai-conversation-intelligence-api-reference/individual-speaker-balance)\
Retrieves speaker talk-time balance in % for each active speaker

[Conversation Dynamics](/meetra-ai-conversation-intelligence-api-reference/conversation-dynamics)\
Energy, sentiment, interactions and speaker engagement throughout the conversation

[Sentiment Score](/meetra-ai-conversation-intelligence-api-reference/sentiment-score)\
Provides sentiment score for the conversation

[Conversation Emotions](/meetra-ai-conversation-intelligence-api-reference/conversation-emotions)\
Provides list of emotions and their strength in the conversation

[Speaker Emotions Over Time](/meetra-ai-conversation-intelligence-api-reference/speaker-emotions-over-time)\
Provides individual emotions over time in 1 minute chunks

[Conversational Energy](/meetra-ai-conversation-intelligence-api-reference/conversational-energy)\
Provides energy score for the conversation

[Interaction Score](/meetra-ai-conversation-intelligence-api-reference/interaction-score)\
Provides interaction score for the conversation

[Interaction Strength Between Speakers](/meetra-ai-conversation-intelligence-api-reference/interaction-strength-between-speakers)\
Shows interaction strength between pairs of speakers in the conversation

### Topic Overlay

[Topic Dynamics & Details](/meetra-ai-conversation-intelligence-api-reference/topic-dynamics-and-details)\
Provides energy, sentiment, speaker engagement and interaction insights into detected topics

### Context&#x20;

[Speaker Key Points](/meetra-ai-conversation-intelligence-api-reference/speaker-key-points)\
Detects emphasized key points for speakers

[Conversation Transcript](/meetra-ai-conversation-intelligence-api-reference/conversation-transcript)\
Provides full transcript with speaker ids and timestamps

[Questions Asked](/meetra-ai-conversation-intelligence-api-reference/questions-asked)\
Maps all questions asked in the conversation

[Conversation and Speaker Summaries](/meetra-ai-conversation-intelligence-api-reference/conversation-and-speaker-summaries)\
Summarizes the conversation and each speaker input

[Conversation Topics and Keywords](/meetra-ai-conversation-intelligence-api-reference/conversation-topics-and-keywords)\
Provides list of topics in the conversation in 5 minute intervals


# User Login

API endpoint for user login through the Meetra AI API.

### Endpoint

```
POST /api-login
```

### Parameters

| Name    | Type   | Description                                 |
| ------- | ------ | ------------------------------------------- |
| payload | Object | User login credentials (email and password) |

### Request Body

The request body should contain a JSON object with the following properties:

```json
{
  "email": "string",
  "password": "string"
}
```

### Responses

| HTTP Code | Description                                                |
| --------- | ---------------------------------------------------------- |
| 200       | Success. Returns a JSON response containing the JWT token. |
| 400       | Bad request. Invalid email or password.                    |

#### Success Response

**HTTP Code:** 200

**Response Body:**

```json
{
  "token": "<JWT_token>"
}
```

#### Error Response

**HTTP Code:** 400

**Response Body:**

```json
{
  "message": "Invalid email or password"
}
```

### Example

#### Request

```
POST /api-login
Content-Type: application/json

{
  "email": "example@example.com",
  "password": "password123"
}
```

#### Response

```
HTTP/1.1 200 OK
Content-Type: application/json

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
```

### Error Codes

| HTTP Code | Description                |
| --------- | -------------------------- |
| 400       | Invalid email or password. |


# Upload Audio / Video material

This endpoint allows you to upload an audio or video file, associating it with your organization.

#### Parameters

* **Authorization**: Bearer token *(header)*
* **file**: Audio or video file *(formData)*
* **organization**: Organization name *(formData)*

#### Responses

* **201 Created**: File successfully uploaded
  * Example:

    ```json
    {
      "message": "File successfully uploaded",
      "file-hash": "7faa938dfb14e7ca8129a40a7e47bb02"
    }
    ```
* **400 Bad Request**: Invalid request
  * Example:

    ```json
    {
      "message": "No file part in the request"
    }
    ```
* **401 Unauthorized**: Unauthorized access
  * Example:

    ```json
    {
      "message": "Invalid token"
    }
    ```
* **429 Too Many Requests**: Too many requests
  * Example:

    ```json
    {
      "message": "Too many requests"
    }
    ```

By utilizing this endpoint, you can easily upload audio or video files for processing and analysis, enabling you to extract valuable insights from your meetings.


# Speaker Detection

Returns a list of speakers in a meeting

This endpoint accepts `GET` requests with no request parameters.

**Endpoint**

```
GET /api/meeting/speakers HTTP/1.1
```

### Response

The response payload is a JSON object that contains a `speakers` array. Each element of the `speakers` array is an object with two properties: `alias` and `id`.

#### Response Properties

| Property | Type   | Description                           |
| -------- | ------ | ------------------------------------- |
| `alias`  | string | The alias of the speaker.             |
| `id`     | string | The unique identifier of the speaker. |

#### Example Response

```json
{
  "speakers": [
    {
      "alias": "Daniel",
      "id": "1c2ee2da-e2f6-433d-b554-248707c2491c"
    },
    {
      "alias": "Adrian",
      "id": "2d3fe3da-f3e6-444d-b555-349707b2492b"
    }
  ]
}
```

### Error Handling

If an error occurs while processing the request, the API will return a response with a status code indicating the error type and a JSON object containing an `error` property with a description of the error.

#### Example Error Response

```json
{
  "error": "Invalid request format."
}
```

***

**Note:** This documentation is for the `/api/meeting/speakers` endpoint only. For details on other endpoints, please refer to their respective documentation.


# Rename Speaker

This endpoint allows you to rename the alias of a speaker in a processed meeting recording.

**Endpoint**&#x20;

`/single-feature-api/meeting/meeting-interactions`<br>

**HTTP Method:** PUT

#### Parameters

* **Authorization**: Bearer token *(header)*
* **speaker\_id**: ID of the speaker *(query)*
* **new\_speaker\_alias**: New alias for the speaker *(query)*

#### Responses

* **200 OK**: Speaker alias successfully renamed
* **400 Bad Request**: Invalid request
* **401 Unauthorized**: Unauthorized access
* **404 Not Found**: Speaker not found

By utilizing this endpoint, you can easily update the alias of a speaker, providing more descriptive and meaningful labels to enhance the clarity and understanding of your meeting content. Aliased speaker names become available to the speaker detection engine for future uploads.&#x20;

***

<br>


# Speaker Balance Score

API endpoint to retrieve the speaker balance score of a processed meeting.

### Endpoint

```
GET /single-feature-api/meeting/balance-score
```

### Parameters

| Name          | Type   | Description                         |
| ------------- | ------ | ----------------------------------- |
| Authorization | Header | Bearer token for authentication.    |
| file-hash     | Query  | Hash of the meeting recording file. |

### Request Headers

The request should include the following header:

```
Authorization: Bearer <token>
```

### Request Query Parameters

The request should include the following query parameter:

| Name      | Type   | Required | Description                         |
| --------- | ------ | -------- | ----------------------------------- |
| file-hash | string | true     | Hash of the meeting recording file. |

### Responses

| HTTP Code | Description                                                    |
| --------- | -------------------------------------------------------------- |
| 200       | Success. Returns the meeting balance score as a JSON response. |
| 400       | Bad request. Invalid or missing parameters.                    |
| 401       | Unauthorized. Invalid or expired token.                        |
| 404       | Meeting not found.                                             |

#### Success Response

**HTTP Code:** 200

**Response Body:**

```json
{
  "balance_score": 100
}
```

#### Error Responses

**HTTP Code:** 400

**Response Body:**

```json
{
  "message": "Bad request"
}
```

**HTTP Code:** 401

**Response Body:**

```json
{
  "message": "Unauthorized"
}
```

**HTTP Code:** 404

**Response Body:**

```json
{
  "message": "Meeting not found"
}
```

### Example

#### Request

```
GET /single-feature-api/meeting/balance-score?file-hash=7faa938dfb14e7ca8129a40a7e47bb02
Authorization: Bearer <token>
```

#### Response

```
HTTP/1.1 200 OK
Content-Type: application/json

{
  "balance_score": 100
}
```

### Error Codes

| HTTP Code | Description                                 |
| --------- | ------------------------------------------- |
| 400       | Bad request. Invalid or missing parameters. |
| 401       | Unauthorized. Invalid or expired token.     |
| 404       | Meeting not found.                          |


# Topic Dynamics & Details

API endpoint to retrieve the list of dynamics around discovered topic including energy, sentiment and speakers

### Endpoint

```
GET /single-feature-api/meeting/details-by-topics
```

### Parameters

| Name            | Type   | Description                                    |
| --------------- | ------ | ---------------------------------------------- |
| Authorization   | Header | Bearer token for authentication.               |
| file-hash       | Query  | Hash of the meeting recording file.            |
| period\_seconds | Query  | Length of the period in seconds (default: 300) |

### Request Headers

The request should include the following header:

```
Authorization: Bearer <token>
```

### Request Query Parameters

The request may include the following query parameters:

| Name            | Type    | Required | Description                                     |
| --------------- | ------- | -------- | ----------------------------------------------- |
| file-hash       | string  | true     | Hash of the meeting recording file.             |
| period\_seconds | integer | false    | Length of the period in seconds (default: 300). |

### Responses

| HTTP Code | Description                                                               |
| --------- | ------------------------------------------------------------------------- |
| 200       | Success. Returns the list of details about topics in the meeting as JSON. |
| 400       | Bad request. Invalid or missing parameters.                               |
| 401       | Unauthorized. Invalid or expired token.                                   |
| 404       | Meeting not found.                                                        |

### Success Response

**HTTP Code:** 200

**Response Body:**

```json
{
  "topics": [
    {
      "topic": "topic name",
      "start": 0,
      "end": 300000,
      "speakers": [
        {
          "id": "1c2ee2da-e2f6-433d-b554-248707c2491c",
          "alias": "Daniel"
        },
        ...
      ],
      "sentiment": "Somewhat Negative",
      "emotions_score": 35,
      "energy": {
        "energy_score": 100,
        "talking_time": 0.45,
        "silence_time": 0.55,
        "interactions": {
          "nodes": [
            {
              "between": [
                "8b3c1e7b-64da-4320-b699-0dc3cff03aae",
                "1c2ee2da-e2f6-433d-b554-248707c2491c"
              ],
              "value": 100
            },
            ...
          ]
        },
        "emotions": [
          "happiness"
        ]
      },
      "interactions_score": 40,
      "involvement_score": 45
    },
    ...
  ]
}
```

### Error Responses

**HTTP Code:** 400

**Response Body:**

```json
{
  "message": "Bad request"
}
```

**HTTP Code:** 401

**Response Body:**

```json
{
  "message": "Unauthorized"
}
```

**HTTP Code:** 404

**Response Body:**

```json
{
  "message": "Meeting not found"
}
```

### Example Response

**HTTP Code:** 200

**Response Body:**

```json
{
  "topics": [
    {
      "topic": "Space Invaders",
      "start": 0,
      "end": 300000,
      "speakers": [
        {
          "id": "1c2ee2da-e2f6-433d-b554-248707c2491c",
          "alias": "Derek"
        },
        {
          "id": "8b3c1e7b-64da-4320-b699-0dc3cff03aae",
          "alias": "Marie"
        }
      ],
      "sentiment": "Somewhat Negative",
      "emotions_score": 35,
      "energy": {
        "energy_score": 100,
        "talking_time": 0.45,
        "silence_time": 0.55,
        "interactions": {
          "nodes": [
            {
              "between": [
                "8b3c1e7b-64da-4320-b699-0dc3cff03aae",
                "1c2ee2da-e2f6-433d-b554-248707c2491c"
              ],
              "value": 100
            },
            {
              "between": [
                "8b3c1e7b-64da-4320-b699-0dc3cff03aae",
                "d348a4ba-44ba-4fd3-a99a-81a7beca4ab4"
              ],
              "value": 75
            }
          ]
        },
        "emotions": [
          "happiness"
        ]
      },
      "interactions_score": 40,
      "involvement_score": 45
    },
    {
      "topic": "another topic",
      "start": 300000,
      "end": 600000,
      "speakers": [
        {
          "id": "1c2ee2da-e2f6-433d-b554-248707c2491c",
          "alias": "D"
        },
        {
          "id": "8b3c1e7b-64da-4320-b699-0dc3cff03aae",
          "alias": "M"
        },
        {
          "id": "d348a4ba-44ba-4fd3-a99a-81a7beca4ab4",
          "alias": "T"
        }
      ],
      "sentiment": "Neutral",
      "emotions_score": 50,
      "energy": {
        "energy_score": 75,
        "talking_time": 0.6,
        "silence_time": 0.4,
        "interactions": {
          "nodes": [
            {
              "between": [
                "1c2ee2da-e2f6-433d-b554-248707c2491c",
                "d348a4ba-44ba-4fd3-a99a-81a7beca4ab4"
              ],
              "value": 90
            },
            {
              "between": [
                "d348a4ba-44ba-4fd3-a99a-81a7beca4ab4",
                "8b3c1e7b-64da-4320-b699-0dc3cff03aae"
              ],
              "value": 80
            }
          ]
        },
        "emotions": [
          "neutral",
          "happiness"
        ]
     
```


# Speaker Key Points

Retrieves the list of key points stated by speakers in a processed meeting.

#### URL

```
/single-feature-api/meeting/key-points
```

#### Method

```
GET
```

#### Description

This endpoint allows you to retrieve the list of key points stated by speakers in a processed meeting. Key points are important statements or highlights made by the speakers during the meeting.

#### Parameters

* `Authorization` (header parameter, required): Bearer token for authentication.
* `file-hash` (query parameter, required): Hash of the meeting recording file.

#### Responses

* **200**: Meeting key points successfully retrieved. Returns a JSON object containing the key points stated by speakers (`Key_point_model`).
* **400**: Bad request error.
* **401**: Unauthorized error.
* **404**: Meeting not found error.
* Other possible responses are not specified.

**Key\_point\_model**

This is the JSON response schema for the successful 200 response:

```json
{
  "key_points": {
    "<speaker_id>": ["<key_point_1>", "<key_point_2>", "..."],
    ...
  }
}
```

* `key_points`: An object where the keys are the speaker IDs and the values are arrays of key points stated by each speaker.

#### Example

**Request**

```
GET /single-feature-api/meeting/key-points?file-hash=<meeting_file_hash>
```

**Response**

```json
{
  "key_points": {
    "11eb454c-68d4-40f0-b965-0074bc0e688f": ["Key point 1", "Key point 2"],
    "582fc671-5b8b-498d-a09e-bfb53145b05a": ["Key point 3"],
    "637f9221-ab4a-46bb-979e-776ba541a407": ["Key point 4", "Key point 5"],
    "b01792fb-5097-46d7-b458-1d559a9b4978": ["Key point 6"]
  }
}
```

This example response shows the key points stated by different speakers in the processed meeting. Each speaker is identified by their speaker ID, and the key points are provided as an array of strings.


# Conversation and Speaker Summaries

Retrieve the text summarization of each spokesperson in a processed meeting.

The Meetra AI API provides endpoints for generating text summaries of each spokesperson in a processed meeting recording. This documentation specifically covers the endpoints related to text summaries.

**Endpoint:**

`/single-feature-api/meeting/text-summaries`

**HTTP Method:** GET

#### Parameters

* `Authorization` (header): Bearer token required for authentication.
* `file-hash` (query): Hash of the meeting recording file.

#### Responses

| HTTP Status Code | Description                                    | Schema         |
| ---------------- | ---------------------------------------------- | -------------- |
| 200              | Meeting text summaries successfully retrieved. | Summary\_model |
| 400              | Bad request.                                   | UploadError400 |
| 401              | Unauthorized.                                  | UploadError401 |
| 404              | Meeting not found.                             | -              |

**Summary\_model (schema)**

| Property       | Type   | Description                                         |
| -------------- | ------ | --------------------------------------------------- |
| `text_summary` | object | Text summaries of each spokesperson in the meeting. |

**Example Request**

```
GET /single-feature-api/meeting/text-summaries?file-hash=abcdef1234567890
Authorization: Bearer <JWT_token>
```

**Example Response**

```json
{
  "text_summary": {
    "11eb454c-68d4-40f0-b965-0074bc0e688f": ["Summary of speaker 11eb454c-68d4-40f0-b965-0074bc0e688f"],
    "582fc671-5b8b-498d-a09e-bfb53145b05a": ["Summary of speaker 582fc671-5b8b-498d-a09e-bfb53145b05a"],
    "637f9221-ab4a-46bb-979e-776ba541a407": ["Summary of speaker 637f9221-ab4a-46bb-979e-776ba541a407"],
    "b01792fb-5097-46d7-b458-1d559a9b4978": ["Summary of speaker b01792fb-5097-46d7-b458-1d559a9b4978"],
    "Meeting summary": ["Summary of the meeting"]
  }
}
```

#### Error Responses

| HTTP Status Code | Description        | Schema         |
| ---------------- | ------------------ | -------------- |
| 400              | Bad request.       | UploadError400 |
| 401              | Unauthorized.      | UploadError401 |
| 404              | Meeting not found. | -              |

**UploadError400 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |

**UploadError401 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |


# Conversation Topics and Keywords

Retrieve the list of topics discussed in a processed meeting.

The Meetra AI API provides endpoints for retrieving information about topics discussed in a processed meeting recording.&#x20;

**Endpoint:**&#x20;

`/single-feature-api/meeting/topics`

**HTTP Method:** GET

#### Parameters

| Parameter        | Type    | Description                                               |
| ---------------- | ------- | --------------------------------------------------------- |
| `Authorization`  | string  | Bearer token for authentication.                          |
| `file-hash`      | string  | Hash of the meeting recording file.                       |
| `period_seconds` | integer | Length of the period in seconds (optional, default: 300). |

#### Request

```http
GET /single-feature-api/meeting/topics?file-hash=<file-hash>&period_seconds=<period_seconds>
Authorization: Bearer <JWT_token>
```

#### Responses

| HTTP Status Code | Description                                     | Schema        |
| ---------------- | ----------------------------------------------- | ------------- |
| 200              | Successful retrieval of topics for the meeting. | TopicsModel   |
| 400              | Bad request.                                    | ErrorResponse |
| 401              | Unauthorized.                                   | ErrorResponse |
| 404              | Meeting not found.                              | ErrorResponse |
| 500              | Internal server error.                          | ErrorResponse |

**TopicsModel (schema)**

| Property | Type  | Description                              |
| -------- | ----- | ---------------------------------------- |
| `topics` | array | List of topics discussed in the meeting. |

**TopicDetails (object)**

| Property | Type    | Description                                      |
| -------- | ------- | ------------------------------------------------ |
| `topic`  | string  | Name of the topic.                               |
| `start`  | integer | Start time of the topic segment in milliseconds. |
| `end`    | integer | End time of the topic segment in milliseconds.   |

**Example Response**

```json
{
  "topics": [
    {
      "end": 300000,
      "start": 0,
      "topic": "topic name"
    }
  ]
}
```


# Questions Asked

Retrieve the list of questions asked by speakers in a processed meeting.

The Meetra AI API provides endpoints for retrieving the list of questions asked by speakers in a processed meeting recording. This documentation specifically covers the endpoints related to questions asked.

**Endpoint**

`/single-feature-api/meeting/questions-asked`

**HTTP Method:** GET

#### Parameters

* `Authorization` (header): Bearer token required for authentication.
* `file-hash` (query): Hash of the meeting recording file.

#### Responses

| HTTP Status Code | Description                                     | Schema           |
| ---------------- | ----------------------------------------------- | ---------------- |
| 200              | Meeting questions asked successfully retrieved. | Questions\_model |
| 400              | Bad request.                                    | UploadError400   |
| 401              | Unauthorized.                                   | UploadError401   |
| 404              | Meeting not found.                              | -                |

**Questions\_model (schema)**

| Property          | Type   | Description                                          |
| ----------------- | ------ | ---------------------------------------------------- |
| `questions_asked` | object | Questions asked by each spokesperson in the meeting. |

**Example Request**

```
GET /single-feature-api/meeting/questions-asked?file-hash=abcdef1234567890
Authorization: Bearer <JWT_token>
```

**Example Response**

```json
{
  "questions_asked": {
    "11eb454c-68d4-40f0-b965-0074bc0e688f": ["Question asked by speaker 11eb454c-68d4-40f0-b965-0074bc0e688f"],
    "582fc671-5b8b-498d-a09e-bfb53145b05a": ["Question asked by speaker 582fc671-5b8b-498d-a09e-bfb53145b05a"],
    "637f9221-ab4a-46bb-979e-776ba541a407": ["Question asked by speaker 637f9221-ab4a-46bb-979e-776ba541a407"],
    "b01792fb-5097-46d7-b458-1d559a9b4978": ["Question asked by speaker b01792fb-5097-46d7-b458-1d559a9b4978"]
  }
}
```

#### Error Responses

| HTTP Status Code | Description        | Schema         |
| ---------------- | ------------------ | -------------- |
| 400              | Bad request.       | UploadError400 |
| 401              | Unauthorized.      | UploadError401 |
| 404              | Meeting not found. | -              |

**UploadError400 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |

**UploadError401 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |


# Conversation Transcript

Retrieves the transcript of a processed conversation

#### URL

```
/single-feature-api/meeting/transcription
```

#### Method

```
GET
```

#### Description

This endpoint allows you to retrieve the transcription of a processed meeting. The transcription provides a textual representation of the spoken content during the meeting.

#### Parameters

* `Authorization` (header parameter, required): Bearer token for authentication.
* `file-hash` (query parameter, required): Hash of the meeting recording file.

#### Responses

* **200**: Meeting transcription successfully retrieved. Returns a JSON object containing the meeting transcription (`Transcription_model`).
* **400**: Bad request error.
* **401**: Unauthorized error.
* **404**: Meeting not found error.
* Other possible responses are not specified.

**Transcription\_model**

This is the JSON response schema for the successful 200 response:

```json
{
  "Transcription": [
    {
      "speaker": "<speaker_id>",
      "transcription": "<transcription_text>",
      "start_timestamp": "<start_timestamp>"
    },
    ...
  ]
}
```

* `Transcription`: An array of objects representing each segment of the transcription.
  * `speaker`: The ID of the speaker who spoke the segment.
  * `transcription`: The text transcription of the spoken segment.
  * `start_timestamp`: The start timestamp of the segment.

#### Example

**Request**

```
GET /single-feature-api/meeting/transcription?file-hash=<meeting_file_hash>
```

**Response**

```json
{
  "Transcription": [
    {
      "speaker": "11eb454c-68d4-40f0-b965-0074bc0e688f",
      "transcription": "Speaker 1: Hello, everyone.",
      "start_timestamp": "00:00:10"
    },
    {
      "speaker": "637f9221-ab4a-46bb-979e-776ba541a407",
      "transcription": "Speaker 2: Good morning. How are you all doing?",
      "start_timestamp": "00:00:15"
    },
    {
      "speaker": "11eb454c-68d4-40f0-b965-0074bc0e688f",
      "transcription": "Speaker 1: I'm doing great. Thank you for asking.",
      "start_timestamp": "00:00:20"
    }
  ]
}
```

This example response shows a portion of the meeting transcription where Speaker 1 and Speaker 2 exchange greetings and have a short conversation. Each segment of the transcription includes the speaker ID, the corresponding transcription text, and the start timestamp of the segment.


# Conversation Dynamics

Retrieve the dynamics of a processed meeting sliced into given time intervals.

#### URL

```
GET /single-feature-api/meeting/meeting-dynamics
```

#### Parameters

The endpoint requires the following parameters:

* `Authorization` (header, required): Bearer token for authentication.
* `file-hash` (query parameter, required): Hash of the meeting recording file.
* `period_seconds` (query parameter, optional): Length of the period in seconds (default: 300).

#### Responses

* **200**: Meeting dynamics successfully retrieved.
* **401**: Unauthorized. Invalid or missing authentication token.
* **404**: Meeting not found. The specified meeting recording file hash does not exist.
* **400**: Bad request. The request is missing required parameters or contains invalid values.

**Success Response**

This is the JSON response for the successful 200 response:

```json
{
  "dynamics": [
    {
      "start": 0,
      "end": 300000,
      "sentiment": "Neutral",
      "energy_score": 80,
      "interactions_score": 75,
      "emotions": ["Neutral", "Happiness"]
    },
    {
      "start": 300000,
      "end": 600000,
      "sentiment": "Somewhat Positive",
      "energy_score": 65,
      "interactions_score": 60,
      "emotions": ["Neutral", "Happiness"]
    },
    ...
  ]
}
```

* `dynamics` (array): An array of meeting dynamics objects.
* `start` (integer): The start time of the period in milliseconds.
* `end` (integer): The end time of the period in milliseconds.
* `sentiment` (string): The sentiment detected for the period.
* `energy_score` (integer): The energy score for the period.
* `interactions_score` (integer): The interactions score for the period.
* `emotions` (array): An array of emotions detected in the period.

**Error Responses**

**Unauthorized (401)**

This is the JSON response for the unauthorized 401 response:

```json
{
  "message": "Unauthorized"
}
```

* `message`: Error message indicating unauthorized access due to an invalid or missing authentication token.

**Meeting Not Found (404)**

This is the JSON response for the meeting not found 404 response:

```json
{
  "message": "Meeting not found"
}
```

* `message`: Error message indicating that the specified meeting recording file hash does not exist.

**Bad Request (400)**

This is the JSON response for the bad request 400 response:

```json
{
  "message": "Bad request"
}
```

* `message`: Error message indicating a bad request due to missing required parameters or invalid parameter values.

#### Example

**Request**

```
GET /single-feature-api/meeting/meeting-dynamics?file-hash=7faa938dfb14e7ca8129a40a7e47bb02&period_seconds=600
Authorization: Bearer <JWT_token>
```

**Response**

<pre><code>HTTP/1.1 200 OK
Content-Type: application/json

{
  "dynamics": [
    {
      "start": 0,
      "end": 600000,
      "sentiment": "Neutral",
      "energy_score": 80,
      "interactions_score": 75,
      "emotions": ["Neutral", "Happiness"]
    },
    {
      "start": 600000,
      "end": 1200000,
      "sentiment": "Somewhat Positive",
      "energy_score": 65,
      "interactions_score": 60,
      "emotions": ["Neutral", "Happiness"]
    },
...
<strong>  ]
</strong>}
</code></pre>


# Conversation Emotions

The Meetra AI API provides endpoints for analyzing and extracting emotions from processed meeting recordings. This documentation specifically covers the endpoints related to meeting emotions.

**Endpoint:** `/single-feature-api/meeting/meeting-emotions`

**HTTP Method:** GET

#### Parameters

* `Authorization` (header): Bearer token required for authentication.
* `file-hash` (query): Hash of the meeting recording file.

#### Responses

| HTTP Status Code | Description                                    | Schema                  |
| ---------------- | ---------------------------------------------- | ----------------------- |
| 200              | Meeting emotions score successfully retrieved. | MeetingEmotionsResponse |
| 400              | Bad request.                                   | UploadError400          |
| 401              | Unauthorized.                                  | UploadError401          |
| 404              | Meeting not found.                             | -                       |

**MeetingEmotionsResponse (schema)**

| Property           | Type   | Description             |
| ------------------ | ------ | ----------------------- |
| `meeting_emotions` | object | Meeting emotions score. |

**MeetingEmotions (schema)**

| Property    | Type   | Description      |
| ----------- | ------ | ---------------- |
| `anger`     | number | Anger score.     |
| `disgust`   | number | Disgust score.   |
| `fear`      | number | Fear score.      |
| `happiness` | number | Happiness score. |
| `neutral`   | number | Neutral score.   |
| `not_sure`  | number | Not sure score.  |

**Example Request**

```
GET /single-feature-api/meeting/meeting-emotions?file-hash=abcdef1234567890
Authorization: Bearer <JWT_token>
```

**Example Response**

```json
{
  "meeting_emotions": {
    "anger": 32.3,
    "disgust": 17.3,
    "fear": 2.6,
    "happiness": 1,
    "neutral": 29.3,
    "not_sure": 17.5
  }
}
```

#### Error Responses

| HTTP Status Code | Description        | Schema         |
| ---------------- | ------------------ | -------------- |
| 400              | Bad request.       | UploadError400 |
| 401              | Unauthorized.      | UploadError401 |
| 404              | Meeting not found. | -              |

**UploadError400 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |

**UploadError401 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |

### Conclusion

This concludes the documentation for the Meetra AI API's meeting emotions feature. You can use this endpoint to retrieve the emotions score for a processed meeting, providing the necessary authentication and meeting recording details.


# Speaker Emotions Over Time

This endpoint allows you to retrieve a list of 1-minute chunks with emotions per speaker from a processed meeting recording.

**Endpoint:** `/single-feature-api/speaker-emotions-over-time`

**`Method:`**` ``GET`

#### Parameters

* **Authorization**: Bearer token *(header)*
* **file-hash**: Hash of the meeting recording file *(query)*

#### Responses

* **200 OK**: List of fragments with emotions successfully retrieved

  **Example Response:**

  ```json
  {
    "chunks": [
      {
        "start_ms": 0,
        "end_ms": 60000,
        "emotions": {
          "speaker_id": "string"
        }
      },
      {
        "start_ms": 60001,
        "end_ms": 120000,
        "emotions": {
          "speaker_id": "string"
        }
      }
      // More chunks...
    ]
  }
  ```
* **400 Bad Request**: Invalid request
* **401 Unauthorized**: Unauthorized access
* **404 Not Found**: Meeting not found

This endpoint provides detailed insights into the emotional dynamics of a meeting by breaking down the emotions per speaker in 1-minute chunks. The response includes the start and end times of each chunk, along with the emotions associated with each speaker during that time frame.


# Sentiment Score

Provides sentiment score for the conversation

The Meetra AI API provides endpoint for analyzing and extracting sentiment scores from processed meeting recording.

**Endpoint:**&#x20;

`/single-feature-api/meeting/meeting-sentiment`

**HTTP Method:** GET

#### Parameters

* `Authorization` (header): Bearer token required for authentication.
* `file-hash` (query): Hash of the meeting recording file.

#### Responses

| HTTP Status Code | Description                                     | Schema             |
| ---------------- | ----------------------------------------------- | ------------------ |
| 200              | Meeting sentiment score successfully retrieved. | Meeting\_sentiment |
| 400              | Bad request.                                    | UploadError400     |
| 401              | Unauthorized.                                   | UploadError401     |
| 404              | Meeting not found.                              | -                  |

**Meeting\_sentiment (schema)**

| Property          | Type    | Description                     |
| ----------------- | ------- | ------------------------------- |
| `sentiment_score` | integer | Sentiment score of the meeting. |

**Example Request**

```
GET /single-feature-api/meeting/meeting-sentiment?file-hash=abcdef1234567890
Authorization: Bearer <JWT_token>
```

**Example Response**

```json
{
  "sentiment_score": 75
}
```

#### Error Responses

| HTTP Status Code | Description        | Schema         |
| ---------------- | ------------------ | -------------- |
| 400              | Bad request.       | UploadError400 |
| 401              | Unauthorized.      | UploadError401 |
| 404              | Meeting not found. | -              |

**UploadError400 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |

**UploadError401 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |


# Conversational Energy

Retrieve Energy Score from the Conversation

The Meetra AI API provides endpoints for analyzing and extracting energy scores from processed meeting recordings. This documentation specifically covers the endpoints related to meeting energy.

**Endpoint:**

`/single-feature-api/meeting/meeting-energy`

**HTTP Method:** GET

#### Parameters

* `Authorization` (header): Bearer token required for authentication.
* `file-hash` (query): Hash of the meeting recording file.

#### Responses

| HTTP Status Code | Description                                  | Schema          |
| ---------------- | -------------------------------------------- | --------------- |
| 200              | Meeting energy score successfully retrieved. | Meeting\_energy |
| 400              | Bad request.                                 | UploadError400  |
| 401              | Unauthorized.                                | UploadError401  |
| 404              | Meeting not found.                           | -               |

**Meeting\_energy (schema)**

| Property         | Type   | Description           |
| ---------------- | ------ | --------------------- |
| `meeting_energy` | number | Meeting energy score. |

**Example Request**

```
GET /single-feature-api/meeting/meeting-energy?file-hash=abcdef1234567890
Authorization: Bearer <JWT_token>
```

**Example Response**

```json
{
  "meeting_energy": 35
}
```

#### Error Responses

| HTTP Status Code | Description        | Schema         |
| ---------------- | ------------------ | -------------- |
| 400              | Bad request.       | UploadError400 |
| 401              | Unauthorized.      | UploadError401 |
| 404              | Meeting not found. | -              |

**UploadError400 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |

**UploadError401 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |


# Interaction Score

The Meetra AI API provides endpoints for analyzing and extracting interaction scores from processed meeting recordings. This documentation specifically covers the endpoints related to meeting interaction score.

**Endpoint**

`/single-feature-api/meeting/meeting-interaction_score`

**HTTP Method:** GET

#### Parameters

* `Authorization` (header): Bearer token required for authentication.
* `file-hash` (query): Hash of the meeting recording file.

#### Responses

| HTTP Status Code | Description                                       | Schema                      |
| ---------------- | ------------------------------------------------- | --------------------------- |
| 200              | Meeting interaction score successfully retrieved. | Meeting\_interaction\_score |
| 400              | Bad request.                                      | UploadError400              |
| 401              | Unauthorized.                                     | UploadError401              |
| 404              | Meeting not found.                                | -                           |

**Meeting\_interaction\_score (schema)**

| Property                    | Type   | Description                |
| --------------------------- | ------ | -------------------------- |
| `meeting_interaction_score` | number | Meeting interaction score. |

**Example Request**

```
GET /single-feature-api/meeting/meeting-interaction_score?file-hash=abcdef1234567890
Authorization: Bearer <JWT_token>
```

**Example Response**

```json
{
  "meeting_interaction_score": 20
}
```

#### Error Responses

| HTTP Status Code | Description        | Schema         |
| ---------------- | ------------------ | -------------- |
| 400              | Bad request.       | UploadError400 |
| 401              | Unauthorized.      | UploadError401 |
| 404              | Meeting not found. | -              |

**UploadError400 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |

**UploadError401 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |


# Interaction Strength Between Speakers

The Meetra AI API provides endpoints for analyzing and extracting conversation interaction strength between pairs of speakers.&#x20;

**Endpoint**&#x20;

`/single-feature-api/meeting/meeting-interactions`

**HTTP Method:** GET

#### Parameters

* `Authorization` (header): Bearer token required for authentication.
* `file-hash` (query): Hash of the meeting recording file.

#### Responses

| HTTP Status Code | Description                                  | Schema         |
| ---------------- | -------------------------------------------- | -------------- |
| 200              | Meeting interactions successfully retrieved. | Interactions   |
| 400              | Bad request.                                 | UploadError400 |
| 401              | Unauthorized.                                | UploadError401 |
| 404              | Meeting not found.                           | -              |

**Interactions (schema)**

| Property | Type  | Description                |
| -------- | ----- | -------------------------- |
| `nodes`  | array | List of interaction nodes. |

**Node (schema)**

| Property  | Type   | Description                                        |
| --------- | ------ | -------------------------------------------------- |
| `between` | array  | Speaker IDs between whom the interaction occurred. |
| `value`   | number | The value of the interaction score.                |

**Example Request**

```
GET /single-feature-api/meeting/meeting-interactions?file-hash=abcdef1234567890
Authorization: Bearer <JWT_token>
```

**Example Response**

```json
{
  "nodes": [
    {
      "between": ["8b3c1e7b-64da-4320-b699-0dc3cff03aae", "1c2ee2da-e2f6-433d-b554-248707c2491c"],
      "value": 100
    },
    {
      "between": ["8b3c1e7b-64da-4320-b699-0dc3cff03aae", "7369d5a6-5f13-47af-8e50-d82aeb0715e0"],
      "value": 75
    },
    ...
  ]
}
```

#### Error Responses

| HTTP Status Code | Description        | Schema         |
| ---------------- | ------------------ | -------------- |
| 400              | Bad request.       | UploadError400 |
| 401              | Unauthorized.      | UploadError401 |
| 404              | Meeting not found. | -              |

**UploadError400 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |

**UploadError401 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |


# Speaker Audio Quality

Retrieve the technical setup information for a processed meeting.

The Meetra AI API provides endpoints for retrieving the technical setup information of a processed meeting recording. This documentation specifically covers the endpoints related to technical setup.

### Retrieve Technical Setup

**Endpoint**

`/single-feature-api/meeting/technical-setup`

**HTTP Method:** GET

#### Parameters

* `Authorization` (header): Bearer token required for authentication.
* `file-hash` (query): Hash of the meeting recording file.

#### Responses

| HTTP Status Code | Description                                     | Schema         |
| ---------------- | ----------------------------------------------- | -------------- |
| 200              | Meeting technical setup successfully retrieved. | TechnicalSetup |
| 400              | Bad request.                                    | UploadError400 |
| 401              | Unauthorized.                                   | UploadError401 |
| 404              | Meeting not found.                              | -              |

**TechnicalSetup (schema)**

| Property          | Type   | Description                                                  |
| ----------------- | ------ | ------------------------------------------------------------ |
| `technical_setup` | object | Technical setup information for each speaker in the meeting. |

**Example Request**

```
GET /single-feature-api/meeting/technical-setup?file-hash=abcdef1234567890
Authorization: Bearer <JWT_token>
```

**Example Response**

```json
{
  "technical_setup": {
    "11eb454c-68d4-40f0-b965-0074bc0e688f": "Average quality",
    "582fc671-5b8b-498d-a09e-bfb53145b05a": "Good quality",
    "637f9221-ab4a-46bb-979e-776ba541a407": "Average quality",
    "b01792fb-5097-46d7-b458-1d559a9b4978": "Poor quality"
  }
}
```

#### Error Responses

| HTTP Status Code | Description        | Schema         |
| ---------------- | ------------------ | -------------- |
| 400              | Bad request.       | UploadError400 |
| 401              | Unauthorized.      | UploadError401 |
| 404              | Meeting not found. | -              |

**UploadError400 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |

**UploadError401 (schema)**

| Property  | Type   | Description    |
| --------- | ------ | -------------- |
| `message` | string | Error message. |


# Individual Speaker Balance

This endpoint allows you to retrieve the list of speakers along with their speaking percentages in a processed meeting.

#### URL: `/speakers-balance`

#### Method: `GET`

#### Parameters

* **Authorization**: Bearer token *(header)*
* **file-hash**: Hash of the meeting recording file *(query)*

#### Responses

* **200 OK**: List of speakers successfully retrieved
  * Example:

    ```json
    {
      "speakers": [
        {
          "meeting_speaking_percentage": 0.0,
          "id": "string"
        }
      ]
    }
    ```
* **400 Bad Request**: Invalid request
  * Example:

    ```json
    {
      "message": "Bad request"
    }
    ```
* **401 Unauthorized**: Unauthorized access
  * Example:

    ```json
    {
      "message": "Unauthorized"
    }
    ```
* **404 Not Found**: Meeting not found
  * Example:

    ```json
    {
      "message": "Meeting not found"
    }
    ```

By utilizing this endpoint, you can obtain valuable information about the distribution of speaking percentages among the different speakers in a processed meeting.


# Built with Meetra AI

Products and Prototypes Built On Top of Meetra AI API

[NorthStar](/built-with-meetra-ai/northstar)\
Speeding Up Organisation's Cultural Transformation with deep meeting analytics


# NorthStar

Speeding Up Organisation's Cultural Transformation with deep meeting analytics

## **Introduction**

Meetra AI NorthStar is a state-of-the-art AI-based diagnostic tool designed to support team and organizational cultural transformation. Through meticulous analysis of business meeting recordings, NorthStar dives deep into the intricacies of team dynamics, leadership, and communication, providing actionable insights and recommendations.

***

## **At A Glance**

**Keywords**: #leadership #diagnostics #communication #team #management #organizationalmaturity #teamphases #culturaltransformation #self-organization #agile #ai #coaching #evaluation #report #support

**Essence**: AI that assesses team collective intelligence by analyzing meeting recordings.

***

## **Features**

* **Team Dynamics Analysis**:
  * Determine team phase according to Tuckman
  * Identify dysfunctions as per Lencioni
  * Understand team maturity and organization color using Laloux's frameworks
  * Recognize leadership styles exhibited by the meeting leader
  * Decode team conflict types through Moore’s perspective
* **Meeting Insights**:
  * Gauge meeting quality, capturing key maturity pain points
  * Benefit from detailed reports complete with actionable recommendations
* **Data Sources**:
  * Emotions and Sentiments
  * Balance and Interaction maps
  * Discussed Topics and Sentiment Fluctuation
  * Energy dynamics
  * Comprehensive Transcripts
  * Key Points, Questions, and Action Items

***

## **Advanced Data Interpretation with LLM**

Meetra AI NorthStar leverages Large Language Models (LLM) to transform the raw, anonymized data gathered by the Meetra AI Infrastructure into meaningful, actionable insights.

**Features**:

* Fully automated data interpretation
* Analysis conducted by advanced LLMs
* Comprehensive reports generated in mere hours
* Modular architecture through Meetra AI API, allowing seamless integration into various business workflows

[Example: Meeting Quality Analysis](/built-with-meetra-ai/northstar/example-meeting-quality-analysis)

***

## **Benefits**

* **Cost Efficiency**: AI-driven evaluations significantly undercut traditional consulting giants like Deloitte.
* **Time Respect**: The evaluation process is unobtrusive, ensuring workforce time is allocated towards organizational development.
* **Unearth Hidden Topics**: Address often overlooked organizational subjects, ensuring a comprehensive evaluation.
* **Crisis Management**: Equip CEOs with swift insights for proactive crisis management.
* **Consistent Insights**: Regular, AI-backed evaluations for up-to-date team effectiveness monitoring.
* **Resource-Savvy Cultural Transformation**: Facilitate cultural shifts with minimal resource engagement.

***

## **Holistic Diagnostics and Recommendations**

**Diagnostic Areas**:

* **Meeting Evaluation**: Detailed insights on structure, objectives, communication patterns, leadership dynamics, and more.
* **Team Processes**: Analyze team dynamics using principles from Lencioni, Tuckman, and Malone.
* **Leadership Assessment**: Delve into leadership styles and organizational maturity as guided by Laloux's framework.
* **Conflict Analysis**: Understand conflict dynamics using Moore's perspectives.
* **Facilitation Optimization**: Recommendations for improved facilitation methods.
* **Hot Topics and Key Contributors**: Identify pressing issues and the key personnel addressing them.
* **Team Morale**: The Team Happiness Index serves as a pulse check for team satisfaction.
* **FOMO No More**: With detailed transcripts, summaries, and action points, you're always in the loop.

**Deliverable**: Clients receive a comprehensive report segmented with targeted recommendations for tangible improvement.

***

## **Addressing Pain Points**

With remote work becoming the norm and organizations scaling rapidly, several challenges arise:

* Inconsistent team management models
* Potential inefficiencies in remote teams going unnoticed
* Limited time for individual team member engagement
* Overwhelming management topics to address

Meetra AI NorthStar is tailor-made to address these pain points, ensuring teams function optimally and organizations continue on their growth trajectory.

***

## **Run a Pilot Project With Us!**

Meetra AI NorthStar is not just a diagnostic tool. It's a partner for businesses, consultants, and coaches, offering a new paradigm in understanding team and organizational dynamics. Whether you're looking to enhance team productivity, facilitate cultural transformation, or ensure consistent team management, NorthStar is your ally.

For potential collaborations, testing, or further information, feel free to [Contact Us](/contact-us)

***


# Example: Meeting Quality Analysis

Below is a PDF report generated by Meetra AI with a superimposed LLM interpreter.

{% file src="/files/GqGKumBvkBYlLaDUq1iW" %}


# Contact Us

All questions and queries, please contact <andy@meetra.ai>


# Tech Stack and Models

[Open Source Usage in the Codebase](/tech-stack-and-models/open-source-usage-in-the-codebase)

[Project Structure](/tech-stack-and-models/project-structure)


# Project Structure

This page provides structure overview of Meetra AI code.

### /data

* **/raw** - Original, immutable data dump.
* **/processed** - Final, canonical data sets for modeling.
* **/external** - Data from third-party sources.
* **/interim** - Intermediate transformed data.
* **/profanity\_data** - Data for profanity detection model.
* **/test** - Data for unit tests.

### /db

* **db\_init.sql** - Script for initializing the database.
* **db\_stream\_init.sql** - Script for initializing streaming database.

### **/RabbitMQ**

* **advanced\_config** - Configuration file for RabbitMQ service.
* **rabbitmq.dockerfile** - Dockerfile for RabbitMQ container.

### **/gpu\_utils**

* **daemon.json** - Configuration file to force GPU usage (not used for CPU-only devices).

### **/mysql**

* **Deprecated MySQL database**

### **/tqai**

* **tqai.dockerfile** - Dockerfile for app container.
* **setup\_docker.sh** - Bash script for installing Docker & MySQL dependencies.

### /docs

* Directory for storing documentation configuration.
  * **/\_templates**
    * **layout.html** - Custom template for docs.
  * **conf.py** - Documentation configuration file.

### /models

**Audio Quality Classification (binary saved models):**

* **/audio\_lag\_detector** - Lagging audio classification.
* **/audio\_reverb\_detector** - Reverb audio classification.
* **/music\_detector** - Music vs. speech classification.

**Speech Emotion Classification (binary saved models):**

* **/speech\_neg\_emotion** - Negative emotions.
* **/speech\_neutral** - Neutral vs. non-neutral (sadness, anger, fear, disgust).
* **/speech\_pos\_emotion** - Positive emotions (calm, happiness, surprised).
* **/speech\_posneg\_emotion** - Positive vs. negative.

### /ntlk\_data

* Locally saved data for NLTK model.

### /notebooks

* Directory for storing research notebooks.

### /reports

* Directory for storing meeting reports.

### /src

* **config.py** - Script for loading settings from `config.yaml`.

### **/app**

* **Flask app structure**:
  * **/static** - Static files for app.
  * **/templates** - Templates for app.
  * **app.py** - Flask app (API, report generation, etc.).
  * **default\_settings.pkl** - Default settings for endpoint `/meeting/<meeting_id>/` (custom report generation).

### **/data**

* **Data Processing Scripts**:
  * **audio\_splitter.py** - Splits audio files into shorter fragments.
  * **audiodataframe.py** - Class for processing audio files.
  * **basedataframe.py** - Abstract base class for audio and text dataframes.
  * **textdataframe.py** - Class for processing text data.

### **/database**

* **DB Models & Scripts**:
  * **create\_database.py** - Script for creating database.
  * **/models/init.py** - DB models and methods.

### **/features**

* **fourier\_t.py** - Generates Fourier transform of audio file.
* **rolling\_emotions.py** - Calculates time-weighted moving average scores for emotions.

### /models

**Audio-Based Models:**

* **basemodel.py** - Base class for some audio models.
* **audio\_lag\_detector.py** - Detects audio lag.
* **audio\_reverb\_detector.py** - Detects audio reverb.
* **speech\_emotion\_recognition\_model.py** - Classifies emotions in audio (hybrid architecture).
* **music\_detector.py** - Detects music vs. speech.
* **diarizationmodel.py** - Speaker diarization.
* **speaker\_detection\_model.py** - Compares speaker recordings.

**Text-Based Models:**

* **speech\_to\_text.py** - Speech-to-text processing.
* **key\_point\_finder.py** - Finds key parts of speech.
* **rpunct.py** - Local source code for rpunct.
* **text\_emotion\_recognition\_model.py** - Classifies emotions from text (hybrid architecture).
* **text\_summarizer.py** - Generates text summary.
* **toxicity\_detection\_model.py** - Detects toxicity in text fragments.
* **profanitydetectionmodel.py** - Detects profanity in text fragments.
* **name\_recognition\_model.py** - Detects introductions (e.g., "Hello I’m George").
* **offensive\_lang\_detection\_model.py** - Detects offensive language in text.
* **restore\_punctuation\_model.py** - Corrects punctuation in speech-to-text output.

**Environmental Recommendations:**

* **/sensorsmodels.py** - Environmental recommendations.

### /services

**Streaming & Report Services:**

* **audio\_report\_service.py** - Service for audio meeting report generation.
* **services\_bridge.py** - Connects streaming service and audio report service.
* **meetings\_api.py** - Class for API endpoints.

### **/streaming\_service**

* **Service for streaming audio** from Timeqube Hardware Prototype to server.

### /tests

* **Unit tests directory**.

### /tools

* **GUI tool for labeling audio files**.

### /utils

* **Auxiliary Scripts**:
  * **audio/** - Audio processing utilities (e.g., `audio.py`, `audio_data.py`).
  * **check\_upsampling.py** - Checks audio upsampling from low frequency.
  * **format\_converter.py** - Converts various audio/video formats.
  * **docsutils/** - Utilities for documentation (e.g., `dictutils.py`).
  * **logging\_utils.py** - Error logger for services.
  * **nlp\_utils.py** - Extracts topics from text.
  * **reportutils.py** - Sends report/message via email.
  * **rttm\_utils.py** - Merges short RTTM files.
  * **speaker\_statistics\_model.py** - Calculates speaker statistics.
  * **textutils.py** - Processes text (e.g., splits text into statements).

### /visualization

* **Report generation and plot creation**
  * **/images** - JPG files to include in reports.
  * **/templates** - HTML templates for rendering reports.
  * **audio\_feature\_plot.py** - Plots audio features (e.g., from `AudioDataframe`) for better understanding.
  * **generate\_business\_report.py** - Generates HTML report for meetings.
  * **meeting\_visualizer.py** - Class for generating various plots based on meeting data.

### Other Files in Root

**Database Management**

* **add\_user\_to\_db.py** - Script for adding a new user to the database.
* **service\_cleanup.py** - Cleans the database and service files (e.g., reports, WAV fragment files) and creates default accounts.

**Docker & Project Setup**

* **docker-compose.yml** - Docker Compose settings.
* **requirements.txt** - External requirements for the project.
* **config.yaml** - Project configuration parameters.

**Pre-commit Hooks**

* **install\_precommit\_hooks.bash** - Script for installing pre-commit hooks requirements.
* **precommitutils.py** - Configuration for hooks.
* **pyproject.toml** - Configuration for the `interrogate` package.

**Documentation**

* **interrogate\_badge.svg** - Infographic of docstring coverage percentage.
* **show\_docs.py** - Creates and displays project documentation.


# Database Structure

## Database Schema

<figure><img src="/files/6kYTD4yAuaGDBYmkz7bd" alt=""><figcaption></figcaption></figure>

## Database Description

The database schema is structured around tables that represent different aspects of a meeting's data. Connections between records are made primarily through identifiers (IDs) such as `meeting_id`, `speaker_id`, etc.

### Fragment

Stores information about specific parts of a meeting, with fields such as:

* `speaker_id`: ID of the speaker associated with this fragment.
* `statement_id`: ID of the statement this fragment is part of.
* `meeting_id`: ID of the meeting this fragment belongs to.
* `fragment_filepath`: Path to the file containing the fragment.
* `main_file_start_point` and `main_file_end_point`: Start and end points of the fragment within the main file.
* `speech_emotions`: Detected emotions in the speech.
* `speech_to_text`: Transcription of the detected speech.
* `posneg_emotions`: Positive and negative emotions detected in the speech.
* `final_emotions`: Final emotions detected in the speech.
* `microphone_quality`: Quality of the microphone used.
* `is_reverb`: Boolean indicating if the fragment has reverb.
* `is_lagging`: Boolean indicating if the fragment is lagging.
* `is_speech`: Boolean indicating if the fragment is speech or music.

### Meeting

Captures details of a meeting, including:

* `filepath`: Path to the meeting file.
* `name`: Name of the meeting.
* `date`: Date of the meeting.
* `n_speakers_true` and `n_speakers_pred`: Ground truth and predicted number of speakers.
* `user_email`: Email of the user who uploaded the meeting.
* `organization_id`: ID of the associated organization.
* `is_processed`: Indicates if the meeting has been processed.
* `background_noise_dB`: Background noise level in decibels.
* `from_pi`: Indicates if the meeting was uploaded from a Raspberry Pi.
* `report_id`: Global unique identifier for the meeting report.

### MeetingStatistics

Contains various meeting-related statistics:

* `involvement`: Level of involvement in the meeting.
* `top_emotion(1,2,3,4)`: Top detected emotions and their values.
* `microphone_quality`: Quality of the microphone used.
* `is_in_series`: Indicates if the meeting is part of a series.
* `overall_score`: Overall meeting score.
* `meeting_vibe_score`, `technical_setup_score`, `meeting_energy_score`, `engagement_score`, `interaction_score`: Various scores representing different meeting attributes.

### SpeakerStatistics

Provides statistics for individual speakers in a meeting:

* `dominant_emotion`: Dominant emotion of the speaker.
* `relative_speaking_activity`: Relative speaking activity level.
* `speaking_time`: Total speaking time of the speaker.
* `is_upsampled`: Indicates if the audio has been upsampled.
* `is_speech`: Indicates if the speaker's audio contains speech.

### Statement

Records details of statements in a meeting:

* `text`: Text content of the statement.
* `is_speech`: Indicates if the statement was spoken.
* `fragments`: Collection of fragments making up the statement.
* `sentences`: Collection of sentences making up the statement.

### Sentence

Stores information about individual sentences within statements:

* `statement_id`: UUID of the statement the sentence belongs to.
* `n_in_statement`: Position of the sentence in the statement.
* `text`: Text content of the sentence.
* `text_emotions`: Detected emotions in the sentence text.
* `is_offensive`: Indicates if the sentence is offensive.
* `is_speech`: Indicates if the sentence was spoken.
* `toxicity`: Toxicity level detected in the sentence.
* `statement`: Reference to the parent statement.

### Organization

Represents an organization with:

* `name`: Name of the organization.
* `meetings`: List of meetings associated with the organization.


# General Audio Processing Flow

1. **Initialization**: The `AudioReportService` starts with parameters    such as the audio file path, user email, number of speakers, organization name, and whether the number of speakers is known.<br>
2. **Audio Preprocessing**:
   * **Convert to WAV Mono**: Convert the audio file to WAV format with a single audio channel.
   * **Measure Noise**: Measure the background noise level in the audio file.
   * **Noise Reduction**: Reduce background noise in the audio file.<br>
3. **Speaker Diarization and Processing**:
   * **Diarize Speakers**: Identify and segment different speakers in the audio file.
   * **Fix Speaker Names**: Standardize speaker names in the diarization output.
   * **Merge Short Files**: Merge short audio segments if necessary.
   * **Split Audio**: Split the audio file based on timestamps from the diarization output.<br>
4. **Quality Adjustments**:
   * **Adjust Decibels**: Normalize audio volume levels across segments.
   * **Speaker Matching**: Match speakers within the meeting.
   * **Speaker Tracking**: Track speakers across multiple meetings.<br>
5. **Speech Analysis**:
   * **Speech-to-Text**: Convert speech segments to text.
   * **Emotion Detection**: Detect emotions in the audio segments.
   * **Music Detection**: Identify segments containing music.
   * **Microphone Quality**: Assess the quality of the microphone used.
   * **Reverb Detection**: Detect reverb in the audio segments.
   * **Lag Detection**: Identify any lag in the speaker's audio.<br>
6. **Data Aggregation and Database Insertion**:
   * **Speaker Statistics**: Calculate statistics for each speaker.
   * **Insert Data**: Insert processed data into the database.
   * **Auto-Rename Speakers**: Automatically rename speakers based on detected names.
   * **Merge Fragments**: Merge audio fragments into cohesive statements.
   * **Punctuate Statements**: Apply punctuation and capitalization to statements.
   * **Split Statements**: Split statements into individual sentences.
   * **Text Emotions**: Detect emotions in the text of the statements.
   * **Generate Final Emotions**: Map text emotions to speech emotions.
   * **Toxicity Detection**: Detect toxic language in the transcriptions.
   * **Offensive Language Detection**: Identify offensive language in the transcriptions.<br>
7. **Report Generation and Delivery**:
   * **Generate Report Data**: Compile data for the final report.
   * **Convert to JSON**: Format the report data as JSON.
   * **Send Report**: Send the report via email or API, depending on the request source.


# Security Considerations

## Application Architecture Security

* **Authorization and Token Control**: API access is controlled through authorization and token management.
* **WAF Protection**: Cloudflare is used as a Web Application Firewall (WAF).
* **Backend Access Restriction**: The backend for the application (demo.meetra.ai) is strictly accessible only from the frontend application.
* **SSL Encryption**: Connection security is enforced through SSL encryption.

## Application Security

* **Protection Against Common Attacks**: Implemented safeguards against OWASP Top 10 attacks, including XSS, CSRF, SQL Injection, and Session Hijacking.
* **Input Validation**: All input data is validated and sanitized before processing.
* **Regular Updates**: Libraries, components, and production environments are regularly updated to prevent the exploitation of known vulnerabilities.

## Database Security

* **Data Encryption**: Data is encrypted at rest, and all sensitive data is hashed.
* **Restricted Database Access**: Database access for application users is limited.
* **Regular Backups**: Data backups are performed regularly.

## Data Processing Security

* **Data Anonymization**: Data is anonymized before processing.
* **AI Instance Isolation**: AI instances are isolated with proprietary models and a custom GPT instance hosted in the cloud.

## Compliance Standards

* **Certifications and Standards**: Compliant with ISO 27001, 27017/18, 27701, ISO 9001, WCAG, SOC 1/2/3, KNF EBA, and EU Cloud standards when storing data on Azure cloud.


# Open Source Usage in the Codebase

Here's a detailed overview of the open source components utilized within the codebase. The project leverages several open source libraries and frameworks to enhance its functionality, particularly in the domains of machine learning, audio processing, and web development.

### Index

1. **Python Libraries**
   * PyTorch
   * Transformers
   * Pyannote.audio
   * DeepSpeech
   * SpeechRecognition
2. **JavaScript Libraries**
   * Underscore.js
3. **Other Tools**
   * Mozilla DeepSpeech Models
   * Google Speech Recognition

***

### 1. Python Libraries

#### PyTorch

* **Usage**: PyTorch is used for loading models and processing audio data.
* **Example**:

  ```python
  import torch
  pipeline = torch.hub.load('pyannote/pyannote-audio', 'dia')
  ```

#### Transformers

* **Usage**: The Transformers library from Hugging Face is used for speech-to-text tasks.
* **Example**:

  ```python
  from transformers import Wav2Vec2ForCTC, Wav2Vec2Tokenizer
  ```

#### Pyannote.audio

* **Usage**: This library is utilized for speaker diarization tasks.
* **Example**:

  ```python
  from pyannote.core import Annotation, Segment
  ```

#### DeepSpeech

* **Usage**: Mozilla's DeepSpeech is used for speech-to-text conversion.
* **Example**:

  ```python
  import deepspeech as ds
  model = ds.Model('deepspeech-0.9.3-models.tflite')
  ```

#### SpeechRecognition

* **Usage**: This library is used for recognizing speech via Google Speech Recognition.
* **Example**:

  ```python
  import speech_recognition as sr
  recognizer = sr.Recognizer()
  ```

***

### 2. JavaScript Libraries

#### Underscore.js

* **Usage**: Utilized for templating and utility functions.
* **Example**:

  ```javascript
  function template(text, settings, oldSettings) {
    // Implementation using Underscore.js templating
  }
  ```

***

### 3. Other Tools

#### Mozilla DeepSpeech Models

* **Usage**: Pre-trained models from Mozilla DeepSpeech are used for speech recognition tasks.
* **Example**:

  ```bash
  !wget https://github.com/mozilla/DeepSpeech/releases/download/v0.9.3/deepspeech-0.9.3-models.tflite
  ```

#### Google Speech Recognition

* **Usage**: Used for converting speech to text through an internet connection.
* **Example**:

  ```python
  # Speech to text translation with Google Speech Recognition
  ```

***

These open source tools and libraries significantly contribute to the functionality of the project, enabling advanced features like speech recognition, natural language processing, and efficient data handling. By leveraging these resources, the project benefits from a robust foundation of community-supported software.


