Overview
The Omi Developer API provides read-only access to your personal Omi data, allowing you to build custom applications and integrations. Use it to create analytics dashboards, export data to other services, or build custom tools on top of your Omi data.
Getting Started
1. Generate an API Key
- Open the Omi app
- Navigate to
Settings > Developer
- Under the “Developer API Keys” section, click “Create Key”
- Give your key a descriptive name (e.g., “My Analytics Dashboard”)
- Copy the key immediately - you won’t be able to see it again!
2. Making API Requests
All API requests must include your API key in the Authorization
header:
curl -H "Authorization: Bearer omi_dev_your_api_key_here" \
https://api.omi.me/v1/dev/user/memories
Base URL
https://api.omi.me/v1/dev
For self-hosted instances, replace with your backend URL.
Endpoints
Key Management
List API Keys
Retrieve all your developer API keys (excluding the secret values).
Response:
[
{
"id": "key_123abc",
"name": "My Analytics Dashboard",
"key_prefix": "omi_dev_abc123",
"created_at": "2025-01-15T10:30:00Z",
"last_used_at": "2025-01-20T14:22:00Z"
}
]
Create API Key
Create a new developer API key.
Request Body:
{
"name": "My New Integration"
}
Response:
{
"id": "key_456def",
"name": "My New Integration",
"key_prefix": "omi_dev_def456",
"key": "omi_dev_def456_full_secret_key_here",
"created_at": "2025-01-20T15:00:00Z",
"last_used_at": null
}
The full API key is only returned once during creation. Store it securely!
Revoke API Key
DELETE /v1/dev/keys/{key_id}
Revoke a specific API key. This action cannot be undone.
Response: 204 No Content
User Data (Read-Only)
All user data endpoints require authentication via your Developer API key.
Get Memories
GET /v1/dev/user/memories
Retrieve your memories with optional filtering.
Query Parameters:
limit
(integer, optional): Maximum number of memories to return. Default: 25
offset
(integer, optional): Number of memories to skip. Default: 0
categories
(string, optional): Comma-separated list of categories to filter by (e.g., “personal,work”)
Example Request:
curl -H "Authorization: Bearer omi_dev_your_api_key" \
"https://api.omi.me/v1/dev/user/memories?limit=50&offset=0&categories=personal,work"
Response:
[
{
"id": "mem_789ghi",
"content": "Discussed project roadmap for Q1 with team members...",
"category": "interesting"
},
{
"id": "mem_456def",
"content": "Reminder to call mom on her birthday next week",
"category": "system"
}
]
Get Action Items
GET /v1/dev/user/action-items
Retrieve all your action items with optional filtering.
Query Parameters:
conversation_id
(string, optional): Filter by conversation ID (use “null” for standalone items)
completed
(boolean, optional): Filter by completion status
start_date
(datetime, optional): Filter by start date (inclusive)
end_date
(datetime, optional): Filter by end date (inclusive)
limit
(integer, optional): Maximum number to return. Default: 100
offset
(integer, optional): Number of items to skip. Default: 0
Example Request:
curl -H "Authorization: Bearer omi_dev_your_api_key" \
"https://api.omi.me/v1/dev/user/action-items?completed=false&limit=50"
Response:
[
{
"id": "action_101",
"description": "Review budget proposal",
"completed": false,
"created_at": "2025-01-20T10:15:00Z",
"updated_at": "2025-01-20T10:15:00Z",
"due_at": null,
"completed_at": null,
"conversation_id": "conv_202"
},
{
"id": "action_102",
"description": "Call dentist for appointment",
"completed": true,
"created_at": "2025-01-19T14:00:00Z",
"updated_at": "2025-01-20T09:00:00Z",
"due_at": "2025-01-25T00:00:00Z",
"completed_at": "2025-01-20T09:00:00Z",
"conversation_id": null
}
]
Get Conversations
GET /v1/dev/user/conversations
Retrieve your conversation transcripts. Only completed, non-discarded conversations are returned.
Query Parameters:
limit
(integer, optional): Maximum number to return. Default: 25
offset
(integer, optional): Number to skip. Default: 0
start_date
(datetime, optional): Filter by start date (inclusive)
end_date
(datetime, optional): Filter by end date (inclusive)
categories
(string, optional): Comma-separated list of categories (e.g., “personal,business”)
include_transcript
(boolean, optional): Include full transcript segments. Default: false
Example Request:
curl -H "Authorization: Bearer omi_dev_your_api_key" \
"https://api.omi.me/v1/dev/user/conversations?limit=10&include_transcript=true"
Response (without transcript):
[
{
"id": "conv_202",
"created_at": "2025-01-20T13:50:00Z",
"started_at": "2025-01-20T13:50:00Z",
"finished_at": "2025-01-20T14:10:00Z",
"language": "en",
"source": "omi",
"structured": {
"title": "Feature Discussion",
"overview": "Brainstorming session for new features",
"emoji": "💼",
"category": "business",
"action_items": [
{
"description": "Create mockups for new UI",
"completed": false,
"created_at": "2025-01-20T14:10:00Z",
"updated_at": "2025-01-20T14:10:00Z",
"due_at": null,
"completed_at": null
}
],
"events": []
}
}
]
Response (with transcript):
[
{
"id": "conv_202",
"created_at": "2025-01-20T13:50:00Z",
"started_at": "2025-01-20T13:50:00Z",
"finished_at": "2025-01-20T14:10:00Z",
"language": "en",
"source": "friend",
"structured": {
"title": "Feature Discussion",
"overview": "Brainstorming session for new features",
"emoji": "💼",
"category": "business",
"action_items": [
{
"description": "Create mockups for new UI",
"completed": false,
"created_at": "2025-01-20T14:10:00Z",
"updated_at": "2025-01-20T14:10:00Z",
"due_at": null,
"completed_at": null
}
],
"events": []
},
"transcript_segments": [
{
"id": "seg_001",
"text": "Let's discuss the new feature",
"speaker_id": 0,
"start": 0.0,
"end": 2.5
},
{
"id": "seg_002",
"text": "I think we should focus on the user interface first",
"speaker_id": 1,
"start": 2.5,
"end": 5.8
}
]
}
]
Authentication
All API requests (except key creation) require authentication using your Developer API key:
Authorization: Bearer omi_dev_your_api_key_here
Rate Limits
- Rate Limit: 100 requests per minute per API key
- Daily Limit: 10,000 requests per day per user
Rate limit headers are included in responses:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1642694400
Error Responses
The API uses standard HTTP status codes:
200 OK
- Request succeeded
204 No Content
- Request succeeded with no response body
400 Bad Request
- Invalid request parameters
401 Unauthorized
- Invalid or missing API key
403 Forbidden
- API key doesn’t have required permissions
404 Not Found
- Resource not found
429 Too Many Requests
- Rate limit exceeded
500 Internal Server Error
- Server error
Error Response Format:
{
"error": {
"message": "Invalid API key",
"code": "invalid_api_key"
}
}
Security Best Practices
Never commit API keys to version control or share them publicly!
- Store keys securely: Use environment variables or secret management services
- Rotate keys regularly: Generate new keys and revoke old ones periodically
- Use specific keys: Create separate keys for different applications
- Monitor usage: Check the “last used” timestamp in your key list
- Revoke immediately: If a key is compromised, revoke it right away
Example Use Cases
Analytics Dashboard
Build a custom dashboard to visualize your memory trends:
import requests
import pandas as pd
api_key = "omi_dev_your_api_key"
headers = {"Authorization": f"Bearer {api_key}"}
response = requests.get(
"https://api.omi.me/v1/dev/user/memories",
headers=headers,
params={"limit": 1000}
)
memories = response.json()
df = pd.DataFrame(memories)
# Analyze and visualize your data
Action Item Tracker
Sync your Omi action items with your task management system:
const API_KEY = process.env.OMI_API_KEY;
async function syncActionItems() {
const response = await fetch(
'https://api.omi.me/v1/dev/user/action-items?completed=false',
{
headers: {
'Authorization': `Bearer ${API_KEY}`
}
}
);
const actionItems = await response.json();
// Sync with your task manager
}
Data Export
Export your conversations to a local database:
#!/bin/bash
API_KEY="omi_dev_your_api_key"
curl -H "Authorization: Bearer $API_KEY" \
"https://api.omi.me/v1/dev/user/conversations?limit=1000" \
> conversations_backup.json
Comparison with MCP
Feature | Developer API | MCP |
---|
Purpose | Direct HTTP API access | AI assistant integration |
Access | Read-only user data | Read/write with AI context |
Use Case | Custom apps, dashboards | Claude Desktop, AI agents |
Authentication | Bearer token | Environment variable |
Best For | Web apps, analytics | AI-powered workflows |
Use the Developer API when you need programmatic access to your data for custom applications.
Use MCP when you want AI assistants like Claude to interact with your Omi data.
Support
For questions, issues, or feature requests:
License
The Omi Developer API client libraries and examples are licensed under the MIT License.