backend/API_DOCUMENTATION.md
Create a .env file in the backend directory with the following variables:
# API Keys
ANTHROPIC_API_KEY=your_anthropic_api_key # Required for Claude model
GROQ_API_KEY=your_groq_api_key # Optional, for Groq model
# Database Configuration
DB_PATH=./meetings.db # SQLite database path
# Server Configuration
HOST=0.0.0.0 # Server host
PORT=5167 # Server port
# Processing Configuration
CHUNK_SIZE=5000 # Default chunk size for processing
CHUNK_OVERLAP=1000 # Default overlap between chunks
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
Required packages:
python -c "from app.db import init_db; import asyncio; asyncio.run(init_db())"
Start the server using uvicorn:
uvicorn app.main:app --host 0.0.0.0 --port 5167 --reload
The API will be available at http://localhost:5167
backend/
├── app/
│ ├── __init__.py
│ ├── main.py # Main FastAPI application
│ ├── db.py # Database operations
│ └── transcript_processor.py.py # Transcript processing logic
├── requirements.txt # Python dependencies
└── meeting_minutes.db # SQLite database
This API provides endpoints for processing meeting transcripts and generating structured summaries. It uses AI models to analyze transcripts and extract key information such as action items, decisions, and deadlines.
http://localhost:5167
Currently, no authentication is required for API endpoints.
Process a transcript text directly.
Endpoint: /process-transcript
Method: POST
Content-Type: application/json
{
"text": "string", // Required: The transcript text
"model": "string", // Required: AI model to use (e.g., "ollama")
"model_name": "string", // Required: Model version (e.g., "qwen2.5:14b")
"chunk_size": 40000, // Optional: Size of text chunks (default: 80000)
"overlap": 1000 // Optional: Overlap between chunks (default: 1000)
}
{
"process_id": "string",
"message": "Processing started"
}
Upload and process a transcript file. This endpoint provides the same functionality as /process-transcript but accepts a file upload instead of raw text.
Endpoint: /upload-transcript
Method: POST
Content-Type: multipart/form-data
| Parameter | Type | Required | Description |
|---|---|---|---|
| file | File | Yes | The transcript file to upload |
| model | String | No | AI model to use (default: "claude") |
| model_name | String | No | Specific model version (default: "claude-3-5-sonnet-latest") |
| chunk_size | Integer | No | Size of text chunks (default: 5000) |
| overlap | Integer | No | Overlap between chunks (default: 1000) |
{
"process_id": "string",
"message": "Processing started"
}
Retrieve the generated summary for a specific process.
Endpoint: /get-summary/{process_id}
Method: GET
| Parameter | Type | Required | Description |
|---|---|---|---|
| process_id | String | Yes | ID of the process to retrieve |
| Code | Description |
|---|---|
| 200 | Success - Summary completed |
| 202 | Accepted - Processing in progress |
| 400 | Bad Request - Failed or unknown status |
| 404 | Not Found - Process ID not found |
| 500 | Internal Server Error - Server-side error |
{
"status": "string", // "completed", "processing", "error"
"meetingName": "string", // Name of the meeting (null if not available)
"process_id": "string", // Process ID
"data": { // Summary data (null if not completed)
"MeetingName": "string",
"SectionSummary": {
"title": "string",
"blocks": [
{
"id": "string",
"type": "string",
"content": "string",
"color": "string"
}
]
},
"CriticalDeadlines": {
"title": "string",
"blocks": []
},
"KeyItemsDecisions": {
"title": "string",
"blocks": []
},
"ImmediateActionItems": {
"title": "string",
"blocks": []
},
"NextSteps": {
"title": "string",
"blocks": []
},
"OtherImportantPoints": {
"title": "string",
"blocks": []
},
"ClosingRemarks": {
"title": "string",
"blocks": []
}
},
"start": "string", // Start time in ISO format (null if not started)
"end": "string", // End time in ISO format (null if not completed)
"error": "string" // Error message if status is "error"
}
## Data Models
### Block
Represents a single block of content in a section.
```json
{
"id": "string", // Unique identifier
"type": "string", // Type of block (text, action, decision, etc.)
"content": "string", // Content text
"color": "string" // Color for UI display
}
Represents a section in the meeting summary.
{
"title": "string", // Section title
"blocks": [ // Array of Block objects
{
"id": "string",
"type": "string",
"content": "string",
"color": "string"
}
]
}
| Code | Description |
|---|---|
| 200 | Success - Request completed successfully |
| 202 | Accepted - Processing in progress |
| 400 | Bad Request - Invalid request or parameters |
| 404 | Not Found - Process ID not found |
| 500 | Internal Server Error - Server-side error |
All error responses follow this format:
{
"status": "error",
"meetingName": null,
"process_id": "string",
"data": null,
"start": null,
"end": null,
"error": "Error message describing what went wrong"
}
curl -X POST -F "[email protected]" http://localhost:5167/upload-transcript
curl http://localhost:5167/get-summary/1a2e5c9c-a35f-452f-9f92-be66620fcb3f