Skip to main content
Omi’s Data Import APIs allow your app to programmatically interact with user data in the Omi ecosystem. Unlike triggers (which respond to events), these APIs let your app proactively create or read data.

Create Conversation

Add new conversations to a user’s account from external sources

Create Memories

Add facts and knowledge to the user’s memory bank

Read Conversations

Access and retrieve a user’s conversation history

Read Memories

Access facts stored in the user’s knowledge base

Quick Reference

CapabilityMethodEndpoint
Create ConversationPOST/v2/integrations/{app_id}/user/conversations?uid={user_id}
Create MemoriesPOST/v2/integrations/{app_id}/user/memories?uid={user_id}
Read ConversationsGET/v2/integrations/{app_id}/conversations?uid={user_id}
Read MemoriesGET/v2/integrations/{app_id}/memories?uid={user_id}
Base URL: https://api.omi.me

Prerequisites

1

Understand Omi App Basics

Familiarize yourself with Omi app development and integration apps
2

Create Your App

In the Omi mobile app:
  1. Go to AppsCreate App
  2. Under App Capabilities, select External Integration
  3. Select Imports and choose the specific capabilities your app needs
3

Generate API Keys

Go to your app’s management page, find the API Keys section, and click Create Key
Copy and store your API key securely - you won’t be able to see it again!
4

User Enables Your App

The user must explicitly enable your app in their Omi account before you can access their data

Authentication

All API requests require authentication using your API key in the Authorization header:
Authorization: Bearer sk_your_api_key_here
The API key must belong to the app specified in the URL path (app_id).

Create Conversation API

Create new conversations in a user’s Omi account from external sources like phone calls, emails, or messages.

Endpoint

POST https://api.omi.me/v2/integrations/{app_id}/user/conversations?uid={user_id}

Request Body

{
  "text": "The full text content of the conversation",
  "started_at": "2024-07-21T22:34:43.384323+00:00",
  "finished_at": "2024-07-21T22:35:43.384323+00:00",
  "text_source": "audio_transcript",
  "text_source_spec": "phone_call",
  "language": "en",
  "geolocation": {
    "latitude": 37.7749,
    "longitude": -122.4194
  }
}

Field Reference

FieldRequiredDefaultDescription
textYes-The full text content of the conversation
started_atNoCurrent timeWhen the conversation started (ISO 8601)
finished_atNostarted_at + 5minWhen the conversation ended (ISO 8601)
text_sourceNoaudio_transcriptSource type: audio_transcript, message, or other_text
text_source_specNo-Additional source detail (e.g., phone_call, sms, email)
languageNoenLanguage code
geolocationNo-Object with latitude and longitude coordinates

Response

Success (200 OK):
{}
The conversation is created asynchronously in the user’s account.
import requests
from datetime import datetime, timezone

response = requests.post(
    f"https://api.omi.me/v2/integrations/{APP_ID}/user/conversations?uid={USER_ID}",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "started_at": datetime.now(timezone.utc).isoformat(),
        "finished_at": datetime.now(timezone.utc).isoformat(),
        "text": "John: Hi Sarah, how was your weekend?\n\nSarah: It was great! I went hiking.",
        "text_source": "audio_transcript",
        "text_source_spec": "phone_call"
    }
)
response = requests.post(
    f"https://api.omi.me/v2/integrations/{APP_ID}/user/conversations?uid={USER_ID}",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "text": "Mom: Don't forget to pick up milk\n\nMe: Will do!",
        "text_source": "message",
        "text_source_spec": "sms"
    }
)
response = requests.post(
    f"https://api.omi.me/v2/integrations/{APP_ID}/user/conversations?uid={USER_ID}",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "text": "From: [email protected]\nSubject: Dinner Plans\n\nWould you like to grab dinner Friday at 7pm?",
        "text_source": "other_text",
        "text_source_spec": "email"
    }
)
response = requests.post(
    f"https://api.omi.me/v2/integrations/{APP_ID}/user/conversations?uid={USER_ID}",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "text": "Just finished my first marathon! 26.2 miles in 4:15. #running",
        "text_source": "other_text",
        "text_source_spec": "social_post",
        "geolocation": {"latitude": 40.7128, "longitude": -74.0060}
    }
)

Create Memories API

Add facts and knowledge to a user’s memory bank. You can either provide raw text (Omi will extract memories automatically) or provide explicit memory objects.

Endpoint

POST https://api.omi.me/v2/integrations/{app_id}/user/memories?uid={user_id}

Request Options

Provide raw text and let Omi automatically extract relevant memories:
{
  "text": "Your flight to Paris has been confirmed for May 15th, 2024. Departure: JFK at 9:30 PM.",
  "text_source": "email",
  "text_source_spec": "travel_confirmation"
}
FieldRequiredDefaultDescription
textYes*-Text content from which memories will be extracted
text_sourceNootherSource type: email, social_post, or other
text_source_specNo-Additional source detail
*Either text or memories is required

Response

Success (200 OK):
{}
Memories are extracted/saved asynchronously in the user’s account.
response = requests.post(
    f"https://api.omi.me/v2/integrations/{APP_ID}/user/memories?uid={USER_ID}",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "text": "Your flight to Paris confirmed for May 15th. Departure: JFK 9:30 PM. Hotel de Paris: May 16-20.",
        "text_source": "email",
        "text_source_spec": "travel_confirmation"
    }
)
response = requests.post(
    f"https://api.omi.me/v2/integrations/{APP_ID}/user/memories?uid={USER_ID}",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "memories": [
            {"content": "User prefers window seats when flying", "tags": ["preferences", "travel"]},
            {"content": "User is vegetarian", "tags": ["preferences", "food"]}
        ]
    }
)

Read Conversations API

Retrieve conversations from a user’s Omi account.

Endpoint

GET https://api.omi.me/v2/integrations/{app_id}/conversations?uid={user_id}

Query Parameters

ParameterDefaultDescription
limit100Maximum conversations to return (max: 1000)
offset0Number to skip for pagination
include_discardedfalseInclude discarded conversations
statuses-Filter by statuses (comma-separated)

Response

{
  "conversations": [
    {
      "id": "conversation_id_1",
      "created_at": "2024-03-15T12:00:00Z",
      "started_at": "2024-03-15T12:00:00Z",
      "finished_at": "2024-03-15T12:05:00Z",
      "text": "Full conversation text content...",
      "structured": {
        "title": "Conversation Title",
        "overview": "Brief overview of the conversation"
      },
      "transcript_segments": [
        {"text": "Segment text...", "start_time": 0, "end_time": 10}
      ],
      "geolocation": {"latitude": 37.7749, "longitude": -122.4194}
    }
  ]
}
response = requests.get(
    f"https://api.omi.me/v2/integrations/{APP_ID}/conversations?uid={USER_ID}",
    headers={"Authorization": f"Bearer {API_KEY}"},
    params={"limit": 50, "offset": 0}
)

conversations = response.json()["conversations"]
for conv in conversations:
    print(f"{conv['structured']['title']} - {conv['created_at']}")

Read Memories API

Retrieve memories (facts) from a user’s knowledge base.

Endpoint

GET https://api.omi.me/v2/integrations/{app_id}/memories?uid={user_id}

Query Parameters

ParameterDefaultDescription
limit100Maximum memories to return (max: 1000)
offset0Number to skip for pagination

Response

{
  "memories": [
    {
      "id": "memory_id_1",
      "content": "User prefers vegetarian food options",
      "created_at": "2024-03-15T12:00:00Z",
      "tags": ["preferences", "food"]
    }
  ]
}
response = requests.get(
    f"https://api.omi.me/v2/integrations/{APP_ID}/memories?uid={USER_ID}",
    headers={"Authorization": f"Bearer {API_KEY}"},
    params={"limit": 100}
)

memories = response.json()["memories"]
for memory in memories:
    print(f"{memory['content']} (Tags: {', '.join(memory.get('tags', []))})")

Error Handling

All endpoints return consistent error codes:
StatusErrorDescription
400Bad RequestInvalid request format or missing required fields
401UnauthorizedMissing or invalid Authorization header
403ForbiddenInvalid API key, app not enabled by user, or app lacks required capability
404Not FoundApp not found
422Unprocessable EntityValid format but invalid content (e.g., empty text and memories)
429Too Many RequestsRate limit exceeded - implement exponential backoff
Implement exponential backoff when you receive a 429 error. Start with a 1-second delay and double it on each retry.

Best Practices

Get User Consent

Always ensure you have explicit user consent before creating conversations or memories on their behalf

Secure API Keys

Store API keys securely using environment variables or secret management systems - never hardcode them

Handle Errors Gracefully

Implement robust error handling with retries and logging for production reliability

Quality Over Quantity

Only create meaningful content that provides genuine value to users - avoid spam

Example Use Cases

Automatically create conversation entries from a journaling app, syncing daily reflections to Omi
Create structured conversation summaries after calendar meetings end, including action items
Generate conversations with health insights from fitness tracker data
Extract memories from educational content or research materials to build a personal knowledge base
Extract and store contact details as memories from emails and messages
Read conversations and memories to generate insights and visualizations about user patterns

Testing & Troubleshooting

1

Use Development Keys

Create a separate API key for testing to avoid affecting production data
2

Mark Test Content

Clearly mark test conversations (e.g., prefix with “[TEST]”) so they’re easy to identify and clean up
3

Verify in the Omi App

After creating content, open the Omi app to verify it appears correctly
4

Check Structured Data

For conversations, verify that title, overview, and action items are extracted correctly
Common Issues:
ProblemSolution
Authentication errorsVerify your API key is correct and matches the app_id in the URL
Permission errorsEnsure the user has enabled your app and your app has the required capability
Empty responseCheck that you’re providing text or memories (for memory creation)
Rate limitingImplement exponential backoff starting at 1 second

Future Capabilities

The Omi team is expanding the available capabilities. Coming soon:
  • Update existing conversations
  • Update existing memories
  • Set reminders
  • Access and update user preferences