API Reference
Table of Contents
- Base URL
- Authentication
- Auth Endpoints
- User Endpoints
- Meeting Endpoints
- Search Endpoint
- Webhook Endpoints
- Organization Endpoints
- Privacy Endpoints (GDPR/CCPA)
- WebSocket Endpoints
- Error Responses
Base URL
http://localhost:8080/api/v1
Authentication
Most endpoints require a JWT access token in the Authorization header:
Authorization: Bearer <access_token>
Auth Endpoints
Register
POST /api/v1/auth/register
Request Body:
{
"email": "user@example.com",
"password": "SecurePassword123!",
"display_name": "John Doe"
}
Response: 201 Created
{
"id": "uuid",
"email": "user@example.com",
"display_name": "John Doe",
"role": "user"
}
Login
POST /api/v1/auth/login
Request Body:
{
"email": "user@example.com",
"password": "SecurePassword123!"
}
Response: 200 OK
{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"expires_in": 3600,
"user": {
"id": "uuid",
"email": "user@example.com",
"display_name": "John Doe",
"role": "admin"
},
"mfa_required": false
}
Refresh Token
POST /api/v1/auth/refresh
Request Body:
{
"refresh_token": "eyJ..."
}
Logout
POST /api/v1/auth/logout
Authorization: Bearer <token>
User Endpoints
Get Current User
GET /api/v1/users/me
Authorization: Bearer <token>
Update Profile
PUT /api/v1/users/me
Authorization: Bearer <token>
Request Body:
{
"display_name": "New Name",
"email": "newemail@example.com"
}
Meeting Endpoints
List Meetings
GET /api/v1/meetings
Authorization: Bearer <token>
Query Parameters:
page- Page number (default: 1)limit- Items per page (default: 20)status- Filter by status (scheduled, active, completed)
Create Meeting
POST /api/v1/meetings
Authorization: Bearer <token>
Request Body:
{
"title": "Weekly Standup",
"description": "Team sync meeting",
"scheduled_at": "2024-01-15T10:00:00Z"
}
Get Meeting
GET /api/v1/meetings/:id
Authorization: Bearer <token>
Start Recording
POST /api/v1/meetings/:id/start
Authorization: Bearer <token>
Stop Recording
POST /api/v1/meetings/:id/stop
Authorization: Bearer <token>
Get Transcript
GET /api/v1/meetings/:id/transcript
Authorization: Bearer <token>
Search Endpoint
Full-Text Search
GET /api/v1/search
Authorization: Bearer <token>
Query Parameters:
q- Search query (required)type- Content type (transcript, meeting, comment)from- Start date (ISO 8601)to- End date (ISO 8601)limit- Max results (default: 20)
Example:
curl "http://localhost:8080/api/v1/search?q=action+items&type=transcript" \
-H "Authorization: Bearer <token>"
Webhook Endpoints
List Webhooks
GET /api/v1/webhooks
Authorization: Bearer <token>
Create Webhook
POST /api/v1/webhooks
Authorization: Bearer <token>
Request Body:
{
"url": "https://your-server.com/webhook",
"events": ["meeting.started", "meeting.ended", "transcript.completed"],
"secret": "your-webhook-secret"
}
Available Events:
meeting.startedmeeting.endedtranscript.completedparticipant.joinedparticipant.left
Organization Endpoints
Create Organization
POST /api/v1/organizations
Authorization: Bearer <token>
Request Body:
{
"name": "Acme Corp",
"slug": "acme"
}
Invite Member
POST /api/v1/organizations/:org_id/members
Authorization: Bearer <token>
Request Body:
{
"email": "user@acme.com",
"role": "editor"
}
Get Usage Stats
GET /api/v1/organizations/:org_id/usage
Authorization: Bearer <token>
Privacy Endpoints (GDPR/CCPA)
Request Data Export
POST /api/v1/privacy/export
Authorization: Bearer <token>
Request Data Deletion
POST /api/v1/privacy/delete
Authorization: Bearer <token>
Request Body:
{
"confirm": true
}
Update Consent
PUT /api/v1/privacy/consent
Authorization: Bearer <token>
Request Body:
{
"marketing": false,
"analytics": true
}
CCPA Do Not Sell
PUT /api/v1/privacy/ccpa
Authorization: Bearer <token>
Request Body:
{
"do_not_sell": true,
"ca_resident": true
}
WebSocket Endpoints
Real-time Transcription
const ws = new WebSocket('ws://localhost:8080/ws/meeting/<meeting_id>');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
// Handle transcript segment, speaker update, etc.
};
Message Types:
transcript_segment- New transcription textspeaker_update- Speaker identificationparticipant_joined- New participantparticipant_left- Participant left
Error Responses
All errors follow this format:
{
"error": "error_code",
"message": "Human readable message"
}
Common Error Codes:
| Code | HTTP Status | Description |
|---|---|---|
unauthorized | 401 | Invalid or missing token |
forbidden | 403 | Insufficient permissions |
not_found | 404 | Resource not found |
validation_error | 400 | Invalid request body |
rate_limited | 429 | Too many requests |
internal_error | 500 | Server error |