{ "components": { "responses": { "Error401": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Missing or invalid authentication credentials." }, "Error403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Authenticated, but the token does not grant the required scope." }, "Error404": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }, "description": "Requested resource was not found." } }, "schemas": { "BatchActionItemsRequest": { "properties": { "action_items": { "description": "List of action items to create", "items": { "$ref": "#/components/schemas/CreateActionItemRequest" }, "maxItems": 50, "title": "Action Items", "type": "array" } }, "required": [ "action_items" ], "title": "BatchActionItemsRequest", "type": "object" }, "BatchActionItemsResponse": { "properties": { "action_items": { "items": { "$ref": "#/components/schemas/DeveloperActionItem" }, "title": "Action Items", "type": "array" }, "created_count": { "title": "Created Count", "type": "integer" } }, "required": [ "action_items", "created_count" ], "title": "BatchActionItemsResponse", "type": "object" }, "BatchMemoriesRequest": { "properties": { "memories": { "description": "List of memories to create", "items": { "$ref": "#/components/schemas/CreateMemoryRequest" }, "maxItems": 25, "title": "Memories", "type": "array" } }, "required": [ "memories" ], "title": "BatchMemoriesRequest", "type": "object" }, "BatchMemoriesResponse": { "properties": { "created_count": { "title": "Created Count", "type": "integer" }, "memories": { "items": { "$ref": "#/components/schemas/DeveloperMemory" }, "title": "Memories", "type": "array" } }, "required": [ "memories", "created_count" ], "title": "BatchMemoriesResponse", "type": "object" }, "CategoryEnum": { "enum": [ "personal", "education", "health", "finance", "legal", "philosophy", "spiritual", "science", "entrepreneurship", "parenting", "romantic", "travel", "inspiration", "technology", "business", "social", "work", "sports", "politics", "literature", "history", "architecture", "music", "weather", "news", "entertainment", "psychology", "real", "design", "family", "economics", "environment", "other" ], "title": "CategoryEnum", "type": "string" }, "ConversationCreateResponse": { "properties": { "discarded": { "title": "Discarded", "type": "boolean" }, "id": { "title": "Id", "type": "string" }, "status": { "title": "Status", "type": "string" } }, "required": [ "id", "status", "discarded" ], "title": "ConversationCreateResponse", "type": "object" }, "ConversationSource": { "enum": [ "friend", "omi", "fieldy", "bee", "plaud", "frame", "friend_com", "apple_watch", "phone", "phone_call", "desktop", "openglass", "screenpipe", "workflow", "sdcard", "external_integration", "limitless", "onboarding", "unknown" ], "title": "ConversationSource", "type": "string" }, "CreateActionItemRequest": { "properties": { "completed": { "default": false, "description": "Whether the action item is completed", "title": "Completed", "type": "boolean" }, "description": { "description": "The action item description", "maxLength": 500, "minLength": 1, "title": "Description", "type": "string" }, "due_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "description": "When the action item is due (ISO format with timezone)", "title": "Due At" } }, "required": [ "description" ], "title": "CreateActionItemRequest", "type": "object" }, "CreateConversationFromTranscriptRequest": { "properties": { "client_device_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Capture device id ({platform}_{hash})", "title": "Client Device Id" }, "client_platform": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Client platform (ios/android/macos)", "title": "Client Platform" }, "client_session_id": { "anyOf": [ { "maxLength": 200, "minLength": 1, "type": "string" }, { "type": "null" } ], "description": "Stable client-generated session ID. When provided, retries return the same conversation ID.", "title": "Client Session Id" }, "finished_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "description": "When conversation finished (calculated from segments duration if not provided)", "title": "Finished At" }, "geolocation": { "anyOf": [ { "$ref": "#/components/schemas/Geolocation" }, { "type": "null" } ], "description": "Geolocation where conversation occurred" }, "language": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "en", "description": "Language code (ISO 639-1, e.g., 'en', 'es', 'fr')", "title": "Language" }, "source": { "anyOf": [ { "$ref": "#/components/schemas/ConversationSource" }, { "type": "null" } ], "default": "phone", "description": "Source of the conversation (e.g., omi, friend, openglass, phone, external_integration)" }, "started_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "description": "When conversation started (defaults to now)", "title": "Started At" }, "transcript_segments": { "description": "List of transcript segments with speaker and timing info", "items": { "$ref": "#/components/schemas/CreateConversationTranscriptSegment" }, "maxItems": 500, "minItems": 1, "title": "Transcript Segments", "type": "array" } }, "required": [ "transcript_segments" ], "title": "CreateConversationFromTranscriptRequest", "type": "object" }, "CreateConversationRequest": { "properties": { "finished_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "description": "When the conversation finished (defaults to started_at + 5 minutes)", "title": "Finished At" }, "geolocation": { "anyOf": [ { "$ref": "#/components/schemas/Geolocation" }, { "type": "null" } ], "description": "Geolocation where conversation occurred" }, "language": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "en", "description": "Language code (ISO 639-1, e.g., 'en', 'es', 'fr')", "title": "Language" }, "started_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "description": "When the conversation started (defaults to now)", "title": "Started At" }, "text": { "description": "The conversation text/transcript", "maxLength": 100000, "minLength": 1, "title": "Text", "type": "string" }, "text_source": { "$ref": "#/components/schemas/ExternalIntegrationConversationSource", "default": "other_text", "description": "Source type: audio_transcript, message, or other_text" }, "text_source_spec": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Additional source specification (e.g., 'email', 'slack', 'whatsapp')", "title": "Text Source Spec" } }, "required": [ "text" ], "title": "CreateConversationRequest", "type": "object" }, "CreateConversationTranscriptSegment": { "properties": { "end": { "description": "End time in seconds (e.g., 1.5, 3.0, 65.8)", "title": "End", "type": "number" }, "is_user": { "default": false, "description": "Whether this segment is from the user", "title": "Is User", "type": "boolean" }, "person_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "ID of person speaking (if known)", "title": "Person Id" }, "speaker": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "SPEAKER_00", "description": "Speaker identifier (e.g., 'SPEAKER_00', 'SPEAKER_01')", "title": "Speaker" }, "speaker_id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "description": "Numeric speaker ID", "title": "Speaker Id" }, "start": { "description": "Start time in seconds (e.g., 0.0, 1.5, 60.2)", "title": "Start", "type": "number" }, "text": { "description": "The text spoken in this segment", "title": "Text", "type": "string" } }, "required": [ "text", "start", "end" ], "title": "CreateConversationTranscriptSegment", "type": "object" }, "CreateGoalRequest": { "properties": { "current_value": { "default": 0, "description": "Current progress value", "title": "Current Value", "type": "number" }, "goal_type": { "$ref": "#/components/schemas/GoalType", "default": "scale", "description": "Type of goal metric: boolean, scale, or numeric" }, "max_value": { "default": 10, "description": "Maximum value of the scale", "title": "Max Value", "type": "number" }, "min_value": { "default": 0, "description": "Minimum value of the scale", "title": "Min Value", "type": "number" }, "target_value": { "description": "Target value to achieve", "title": "Target Value", "type": "number" }, "title": { "description": "The goal title/description", "maxLength": 500, "minLength": 1, "title": "Title", "type": "string" }, "unit": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "Unit label (e.g., 'users', 'points')", "title": "Unit" } }, "required": [ "title", "target_value" ], "title": "CreateGoalRequest", "type": "object" }, "CreateMemoryRequest": { "properties": { "category": { "anyOf": [ { "$ref": "#/components/schemas/MemoryCategory" }, { "type": "null" } ], "description": "Memory category: interesting, system, or manual (auto-categorized if not provided)" }, "content": { "description": "The content of the memory", "maxLength": 500, "minLength": 1, "title": "Content", "type": "string" }, "tags": { "default": [], "description": "Tags associated with the memory", "items": { "type": "string" }, "title": "Tags", "type": "array" }, "visibility": { "default": "private", "description": "Visibility: public or private", "title": "Visibility", "type": "string" } }, "required": [ "content" ], "title": "CreateMemoryRequest", "type": "object" }, "DevApiKey": { "properties": { "created_at": { "format": "date-time", "title": "Created At", "type": "string" }, "id": { "title": "Id", "type": "string" }, "key_prefix": { "title": "Key Prefix", "type": "string" }, "last_used_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Last Used At" }, "name": { "title": "Name", "type": "string" }, "scopes": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Scopes" } }, "required": [ "id", "name", "key_prefix", "created_at" ], "title": "DevApiKey", "type": "object" }, "DevApiKeyCreate": { "properties": { "name": { "title": "Name", "type": "string" }, "scopes": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Scopes" } }, "required": [ "name" ], "title": "DevApiKeyCreate", "type": "object" }, "DevApiKeyCreated": { "properties": { "created_at": { "format": "date-time", "title": "Created At", "type": "string" }, "id": { "title": "Id", "type": "string" }, "key": { "title": "Key", "type": "string" }, "key_prefix": { "title": "Key Prefix", "type": "string" }, "last_used_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Last Used At" }, "name": { "title": "Name", "type": "string" }, "scopes": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Scopes" } }, "required": [ "id", "name", "key_prefix", "created_at", "key" ], "title": "DevApiKeyCreated", "type": "object" }, "DeveloperActionItem": { "properties": { "completed": { "title": "Completed", "type": "boolean" }, "completed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Completed At" }, "conversation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Conversation Id" }, "created_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Created At" }, "description": { "title": "Description", "type": "string" }, "due_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Due At" }, "id": { "title": "Id", "type": "string" }, "updated_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Updated At" } }, "required": [ "id", "description", "completed" ], "title": "DeveloperActionItem", "type": "object" }, "DeveloperConversation": { "properties": { "created_at": { "format": "date-time", "title": "Created At", "type": "string" }, "finished_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Finished At" }, "folder_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Folder Id" }, "folder_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Folder Name" }, "geolocation": { "anyOf": [ { "$ref": "#/components/schemas/Geolocation" }, { "type": "null" } ] }, "id": { "title": "Id", "type": "string" }, "language": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Language" }, "source": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Source" }, "started_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Started At" }, "structured": { "$ref": "#/components/schemas/DeveloperConversationStructured" }, "transcript_segments": { "anyOf": [ { "items": { "$ref": "#/components/schemas/DeveloperTranscriptSegment" }, "type": "array" }, { "type": "null" } ], "title": "Transcript Segments" } }, "required": [ "id", "created_at", "started_at", "finished_at", "structured" ], "title": "DeveloperConversation", "type": "object" }, "DeveloperConversationActionItem": { "properties": { "completed": { "default": false, "title": "Completed", "type": "boolean" }, "completed_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Completed At" }, "conversation_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Conversation Id" }, "created_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Created At" }, "description": { "title": "Description", "type": "string" }, "due_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Due At" }, "updated_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Updated At" } }, "required": [ "description" ], "title": "DeveloperConversationActionItem", "type": "object" }, "DeveloperConversationEvent": { "properties": { "created": { "default": false, "title": "Created", "type": "boolean" }, "description": { "default": "", "title": "Description", "type": "string" }, "duration": { "default": 30, "title": "Duration", "type": "integer" }, "start": { "format": "date-time", "title": "Start", "type": "string" }, "title": { "title": "Title", "type": "string" } }, "required": [ "title", "start" ], "title": "DeveloperConversationEvent", "type": "object" }, "DeveloperConversationStructured": { "properties": { "action_items": { "default": [], "items": { "$ref": "#/components/schemas/DeveloperConversationActionItem" }, "title": "Action Items", "type": "array" }, "category": { "$ref": "#/components/schemas/CategoryEnum" }, "emoji": { "default": "🧠", "title": "Emoji", "type": "string" }, "events": { "default": [], "items": { "$ref": "#/components/schemas/DeveloperConversationEvent" }, "title": "Events", "type": "array" }, "overview": { "title": "Overview", "type": "string" }, "title": { "title": "Title", "type": "string" } }, "required": [ "title", "overview", "category" ], "title": "DeveloperConversationStructured", "type": "object" }, "DeveloperFolder": { "properties": { "color": { "title": "Color", "type": "string" }, "conversation_count": { "default": 0, "title": "Conversation Count", "type": "integer" }, "created_at": { "format": "date-time", "title": "Created At", "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Description" }, "icon": { "title": "Icon", "type": "string" }, "id": { "title": "Id", "type": "string" }, "is_default": { "default": false, "title": "Is Default", "type": "boolean" }, "is_system": { "default": false, "title": "Is System", "type": "boolean" }, "name": { "title": "Name", "type": "string" }, "order": { "default": 0, "title": "Order", "type": "integer" }, "updated_at": { "format": "date-time", "title": "Updated At", "type": "string" } }, "required": [ "id", "name", "color", "icon", "created_at", "updated_at" ], "title": "DeveloperFolder", "type": "object" }, "DeveloperGoal": { "properties": { "created_at": { "format": "date-time", "title": "Created At", "type": "string" }, "current_value": { "title": "Current Value", "type": "number" }, "goal_type": { "title": "Goal Type", "type": "string" }, "id": { "title": "Id", "type": "string" }, "is_active": { "title": "Is Active", "type": "boolean" }, "max_value": { "title": "Max Value", "type": "number" }, "min_value": { "title": "Min Value", "type": "number" }, "target_value": { "title": "Target Value", "type": "number" }, "title": { "title": "Title", "type": "string" }, "unit": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Unit" }, "updated_at": { "format": "date-time", "title": "Updated At", "type": "string" } }, "required": [ "id", "title", "goal_type", "target_value", "current_value", "min_value", "max_value", "is_active", "created_at", "updated_at" ], "title": "DeveloperGoal", "type": "object" }, "DeveloperMemory": { "properties": { "category": { "$ref": "#/components/schemas/MemoryCategory", "default": "interesting" }, "content": { "default": "", "title": "Content", "type": "string" }, "created_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Created At" }, "edited": { "default": false, "title": "Edited", "type": "boolean" }, "id": { "title": "Id", "type": "string" }, "manually_added": { "default": false, "title": "Manually Added", "type": "boolean" }, "reviewed": { "default": false, "title": "Reviewed", "type": "boolean" }, "scoring": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Scoring" }, "tags": { "items": { "type": "string" }, "title": "Tags", "type": "array" }, "updated_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Updated At" }, "user_review": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "User Review" }, "visibility": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": "private", "title": "Visibility" } }, "required": [ "id" ], "title": "DeveloperMemory", "type": "object" }, "DeveloperTranscriptSegment": { "properties": { "end": { "title": "End", "type": "number" }, "id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Id" }, "speaker_id": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Speaker Id" }, "speaker_name": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Speaker Name" }, "start": { "title": "Start", "type": "number" }, "text": { "title": "Text", "type": "string" } }, "required": [ "text", "start", "end" ], "title": "DeveloperTranscriptSegment", "type": "object" }, "ErrorResponse": { "properties": { "detail": { "anyOf": [ { "type": "string" }, { "type": "array" }, { "type": "object" } ], "description": "Error detail returned by the API." } }, "required": [ "detail" ], "title": "ErrorResponse", "type": "object" }, "ExternalIntegrationConversationSource": { "enum": [ "audio_transcript", "message", "other_text" ], "title": "ExternalIntegrationConversationSource", "type": "string" }, "Geolocation": { "properties": { "address": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Address" }, "google_place_id": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Google Place Id" }, "latitude": { "title": "Latitude", "type": "number" }, "location_type": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Location Type" }, "longitude": { "title": "Longitude", "type": "number" } }, "required": [ "latitude", "longitude" ], "title": "Geolocation", "type": "object" }, "GoalType": { "enum": [ "boolean", "scale", "numeric" ], "title": "GoalType", "type": "string" }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError" }, "title": "Detail", "type": "array" } }, "title": "HTTPValidationError", "type": "object" }, "MemoryCategory": { "enum": [ "interesting", "system", "manual", "workflow", "core", "hobbies", "lifestyle", "interests", "habits", "work", "skills", "learnings", "other", "auto" ], "title": "MemoryCategory", "type": "string" }, "UpdateActionItemRequest": { "properties": { "completed": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "New completion status", "title": "Completed" }, "description": { "anyOf": [ { "maxLength": 500, "minLength": 1, "type": "string" }, { "type": "null" } ], "description": "New description", "title": "Description" }, "due_at": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "description": "New due date (ISO format with timezone)", "title": "Due At" } }, "title": "UpdateActionItemRequest", "type": "object" }, "UpdateConversationRequest": { "properties": { "discarded": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "description": "Whether the conversation is discarded", "title": "Discarded" }, "title": { "anyOf": [ { "maxLength": 500, "minLength": 1, "type": "string" }, { "type": "null" } ], "description": "New title for the conversation", "title": "Title" } }, "title": "UpdateConversationRequest", "type": "object" }, "UpdateGoalRequest": { "properties": { "current_value": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "description": "New progress value", "title": "Current Value" }, "max_value": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "description": "New maximum value", "title": "Max Value" }, "min_value": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "description": "New minimum value", "title": "Min Value" }, "target_value": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "description": "New target value", "title": "Target Value" }, "title": { "anyOf": [ { "maxLength": 500, "minLength": 1, "type": "string" }, { "type": "null" } ], "description": "New title", "title": "Title" }, "unit": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "New unit label", "title": "Unit" } }, "title": "UpdateGoalRequest", "type": "object" }, "UpdateMemoryRequest": { "properties": { "category": { "anyOf": [ { "$ref": "#/components/schemas/MemoryCategory" }, { "type": "null" } ], "description": "New category for the memory" }, "content": { "anyOf": [ { "maxLength": 500, "minLength": 1, "type": "string" }, { "type": "null" } ], "description": "New content for the memory", "title": "Content" }, "tags": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "description": "New tags for the memory", "title": "Tags" }, "visibility": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "description": "New visibility: public or private", "title": "Visibility" } }, "title": "UpdateMemoryRequest", "type": "object" }, "ValidationError": { "properties": { "ctx": { "title": "Context", "type": "object" }, "input": { "title": "Input" }, "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "title": "Location", "type": "array" }, "msg": { "title": "Message", "type": "string" }, "type": { "title": "Error Type", "type": "string" } }, "required": [ "loc", "msg", "type" ], "title": "ValidationError", "type": "object" } }, "securitySchemes": { "developerApiKey": { "bearerFormat": "Omi Developer API key", "description": "Send `Authorization: Bearer `.", "scheme": "bearer", "type": "http" }, "firebaseBearer": { "bearerFormat": "Firebase ID token", "description": "Send `Authorization: Bearer `.", "scheme": "bearer", "type": "http" } } }, "info": { "contact": { "name": "Omi", "url": "https://omi.me/" }, "description": "Programmatic access to your Omi data - memories, conversations, action items, goals, folders, and API keys. Build custom integrations, analytics dashboards, and automation workflows.", "license": { "name": "MIT", "url": "https://github.com/BasedHardware/omi/blob/main/LICENSE" }, "title": "Omi Developer API", "version": "1.0.0" }, "openapi": "3.1.0", "paths": { "/v1/dev/keys": { "get": { "operationId": "listApiKeys", "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/DevApiKey" }, "title": "Response Listapikeys", "type": "array" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" } }, "security": [ { "firebaseBearer": [] } ], "summary": "Get Keys", "tags": [ "API Keys" ] }, "post": { "description": "Create a new Developer API key with optional scopes.\n\n- **name**: Descriptive name for the key\n- **scopes**: Optional list of scopes. If not provided, defaults to read-only access.\n Available scopes:\n - conversations:read\n - conversations:write\n - memories:read\n - memories:write\n - action_items:read\n - action_items:write\n - goals:read\n - goals:write", "operationId": "createApiKey", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DevApiKeyCreate" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DevApiKeyCreated" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "firebaseBearer": [] } ], "summary": "Create Key", "tags": [ "API Keys" ] } }, "/v1/dev/keys/{key_id}": { "delete": { "operationId": "revokeApiKey", "parameters": [ { "in": "path", "name": "key_id", "required": true, "schema": { "title": "Key Id", "type": "string" } } ], "responses": { "204": { "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "firebaseBearer": [] } ], "summary": "Delete Key", "tags": [ "API Keys" ] } }, "/v1/dev/user/action-items": { "get": { "description": "Get action items with optional filters. Locked action items are excluded.\n\n- **conversation_id**: Filter by conversation ID (None for standalone items)\n- **completed**: Filter by completion status\n- **start_date**: Filter by start date (inclusive)\n- **end_date**: Filter by end date (inclusive)\n- **limit**: Maximum number of items to return\n- **offset**: Number of items to skip", "operationId": "listActionItems", "parameters": [ { "in": "query", "name": "conversation_id", "required": false, "schema": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Conversation Id" } }, { "in": "query", "name": "completed", "required": false, "schema": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Completed" } }, { "in": "query", "name": "start_date", "required": false, "schema": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Start Date" } }, { "in": "query", "name": "end_date", "required": false, "schema": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "End Date" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 100, "title": "Limit", "type": "integer" } }, { "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "title": "Offset", "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/DeveloperActionItem" }, "title": "Response Listactionitems", "type": "array" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Get Action Items", "tags": [ "Action Items" ] }, "post": { "description": "Create a new action item for the authenticated user.\n\n- **description**: The action item description (1-500 characters)\n- **completed**: Whether the action item is completed (default: False)\n- **due_at**: Optional due date in ISO 8601 format with timezone", "operationId": "createActionItem", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateActionItemRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeveloperActionItem" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Create Action Item", "tags": [ "Action Items" ] } }, "/v1/dev/user/action-items/batch": { "post": { "description": "Create multiple action items in a batch.\n\n- **action_items**: List of action items to create (max 50)", "operationId": "createActionItemsBatch", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BatchActionItemsRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BatchActionItemsResponse" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Create Action Items Batch", "tags": [ "Action Items" ] } }, "/v1/dev/user/action-items/{action_item_id}": { "delete": { "description": "Delete an action item by ID.\n\n- **action_item_id**: The ID of the action item to delete", "operationId": "deleteActionItem", "parameters": [ { "in": "path", "name": "action_item_id", "required": true, "schema": { "title": "Action Item Id", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": {} } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Delete Action Item", "tags": [ "Action Items" ] }, "patch": { "description": "Update an action item.\n\n- **action_item_id**: The ID of the action item to update\n- **description**: New description (optional)\n- **completed**: New completion status (optional)\n- **due_at**: New due date (optional, set to null to remove)", "operationId": "updateActionItem", "parameters": [ { "in": "path", "name": "action_item_id", "required": true, "schema": { "title": "Action Item Id", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateActionItemRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeveloperActionItem" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Update Action Item", "tags": [ "Action Items" ] } }, "/v1/dev/user/conversations": { "get": { "description": "Get conversations with optional transcript inclusion.\n\n- **include_transcript**: If True, includes full transcript_segments in the response\n- **folder_id**: Filter by folder ID (must be a non-empty string if provided)\n- **starred**: Filter by starred status (true/false)", "operationId": "listConversations", "parameters": [ { "in": "query", "name": "start_date", "required": false, "schema": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "Start Date" } }, { "in": "query", "name": "end_date", "required": false, "schema": { "anyOf": [ { "format": "date-time", "type": "string" }, { "type": "null" } ], "title": "End Date" } }, { "in": "query", "name": "categories", "required": false, "schema": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Categories" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 25, "title": "Limit", "type": "integer" } }, { "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "title": "Offset", "type": "integer" } }, { "in": "query", "name": "include_transcript", "required": false, "schema": { "default": false, "title": "Include Transcript", "type": "boolean" } }, { "in": "query", "name": "folder_id", "required": false, "schema": { "anyOf": [ { "minLength": 1, "type": "string" }, { "type": "null" } ], "title": "Folder Id" } }, { "in": "query", "name": "starred", "required": false, "schema": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Starred" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/DeveloperConversation" }, "title": "Response Listconversations", "type": "array" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Get Conversations", "tags": [ "Conversations" ] }, "post": { "description": "Create a new conversation from text for the authenticated user.\n\nThis endpoint processes the provided text through the full conversation pipeline:\n- Generates structured data (title, overview, category, emoji)\n- Extracts action items (with deduplication)\n- Extracts memories (with quality filtering)\n- Determines if conversation should be discarded\n- Triggers app integrations\n- Triggers webhooks\n\n**Request Parameters:**\n- **text**: The conversation text/transcript (1-100,000 characters)\n- **text_source**: Source type - audio_transcript, message, or other_text (default: other_text)\n- **text_source_spec**: Additional source info (e.g., 'email', 'slack')\n- **started_at**: When conversation started (defaults to now)\n- **finished_at**: When conversation finished (defaults to started_at + 5 minutes)\n- **language**: Language code (default: 'en')\n- **geolocation**: Optional geolocation data\n\n**Response:**\n- Returns the created conversation ID and status\n- Use GET /v1/dev/user/conversations/{id} to retrieve full details", "operationId": "createConversation", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateConversationRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConversationCreateResponse" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Create Conversation", "tags": [ "Conversations" ] } }, "/v1/dev/user/conversations/from-segments": { "post": { "description": "Create a new conversation from structured transcript segments.\n\nThis endpoint is for advanced integrations that have speaker diarization and timing information.\nIt processes the transcript segments through the full conversation pipeline.\n\n**Transcript Segments:**\n- **text**: The text spoken (required)\n- **speaker**: Speaker identifier like 'SPEAKER_00', 'SPEAKER_01' (default: 'SPEAKER_00')\n- **speaker_id**: Numeric speaker ID (auto-calculated from speaker if not provided)\n- **is_user**: Whether this segment is from the user (default: False)\n- **person_id**: ID of known person speaking (optional)\n- **start**: Start time in seconds, e.g., 0.0, 1.5, 60.2 (required)\n- **end**: End time in seconds, e.g., 1.5, 3.0, 65.8 (required)\n\n**Other Parameters:**\n- **source**: Source of conversation (default: external_integration). Options:\n - omi, friend, openglass, phone, desktop, apple_watch, bee, plaud, frame, etc.\n- **started_at**: When conversation started (defaults to now)\n- **finished_at**: When conversation finished (calculated from last segment if not provided)\n- **language**: Language code (default: 'en')\n- **geolocation**: Optional geolocation data\n\n**Example:**\n```json\n{\n \"transcript_segments\": [\n {\n \"text\": \"Hey, how are you doing?\",\n \"speaker\": \"SPEAKER_00\",\n \"is_user\": true,\n \"start\": 0.0,\n \"end\": 2.5\n },\n {\n \"text\": \"I'm doing great, thanks!\",\n \"speaker\": \"SPEAKER_01\",\n \"is_user\": false,\n \"start\": 2.8,\n \"end\": 5.2\n }\n ],\n \"source\": \"phone\",\n \"language\": \"en\"\n}\n```", "operationId": "createConversationFromSegments", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateConversationFromTranscriptRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ConversationCreateResponse" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Create Conversation From Segments", "tags": [ "Conversations" ] } }, "/v1/dev/user/conversations/{conversation_id}": { "delete": { "description": "Delete a conversation by ID.\n\nThis also deletes any associated photos in the conversation's subcollection.\n\n- **conversation_id**: The ID of the conversation to delete", "operationId": "deleteConversation", "parameters": [ { "in": "path", "name": "conversation_id", "required": true, "schema": { "title": "Conversation Id", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": {} } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Delete Conversation Endpoint", "tags": [ "Conversations" ] }, "get": { "description": "Get a single conversation by ID.\n\n- **conversation_id**: The ID of the conversation to retrieve\n- **include_transcript**: If True, includes full transcript_segments in the response", "operationId": "getConversation", "parameters": [ { "in": "path", "name": "conversation_id", "required": true, "schema": { "title": "Conversation Id", "type": "string" } }, { "in": "query", "name": "include_transcript", "required": false, "schema": { "default": false, "title": "Include Transcript", "type": "boolean" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeveloperConversation" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Get Conversation Endpoint", "tags": [ "Conversations" ] }, "patch": { "description": "Update a conversation's title or discard status.\n\n- **conversation_id**: The ID of the conversation to update\n- **title**: New title for the conversation (optional)\n- **discarded**: Whether the conversation is discarded (optional)", "operationId": "updateConversation", "parameters": [ { "in": "path", "name": "conversation_id", "required": true, "schema": { "title": "Conversation Id", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateConversationRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeveloperConversation" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Update Conversation Endpoint", "tags": [ "Conversations" ] } }, "/v1/dev/user/folders": { "get": { "description": "Get all folders for the authenticated user.\n\nThis endpoint is strictly read-only and returns an empty list if the user has no folders.\nUnlike the internal `/v1/folders` endpoint, it does NOT call `initialize_system_folders`,\nbecause doing so under a `conversations:read` scope would silently write to Firestore\n(violating the read-only contract) and opens a TOCTOU window where concurrent first\nrequests can race past the outer empty-check and create duplicate system folders.\n\nSystem folders (Work, Personal, Social) are still initialized lazily through other paths:\n- The mobile app calls the internal `GET /v1/folders` whenever the conversations screen\n is rendered (`app/lib/pages/conversations/conversations_page.dart`), which triggers\n `initialize_system_folders` on first access.\n- The conversation post-processing pipeline calls `initialize_system_folders` whenever\n a new conversation is created (`backend/utils/conversations/process_conversation.py`).\n\nIn practice, any user who can issue a Developer API key has already gone through one of\nthose paths, so the empty-list case here only affects users who have never opened the\nconversations tab nor created a single conversation.", "operationId": "listFolders", "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/DeveloperFolder" }, "title": "Response Listfolders", "type": "array" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" } }, "security": [ { "developerApiKey": [] } ], "summary": "Get User Folders", "tags": [ "Folders" ] } }, "/v1/dev/user/goals": { "get": { "description": "Get user goals.\n\n- **limit**: Maximum number of goals to return\n- **include_inactive**: If True, includes inactive/completed goals", "operationId": "listGoals", "parameters": [ { "in": "query", "name": "limit", "required": false, "schema": { "default": 10, "title": "Limit", "type": "integer" } }, { "in": "query", "name": "include_inactive", "required": false, "schema": { "default": false, "title": "Include Inactive", "type": "boolean" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/DeveloperGoal" }, "title": "Response Listgoals", "type": "array" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Get Goals", "tags": [ "Goals" ] }, "post": { "description": "Create a new goal. Supports up to 3 active goals; the oldest is deactivated if at max.\n\n- **title**: The goal title/description (1-500 characters)\n- **goal_type**: Type of goal metric: boolean, scale, or numeric (default: scale)\n- **target_value**: Target value to achieve\n- **current_value**: Current progress (default: 0)\n- **min_value**: Minimum scale value (default: 0)\n- **max_value**: Maximum scale value (default: 10)\n- **unit**: Optional unit label (e.g., 'users', 'points')", "operationId": "createGoal", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateGoalRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeveloperGoal" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Create Goal", "tags": [ "Goals" ] } }, "/v1/dev/user/goals/{goal_id}": { "delete": { "description": "Delete a goal by ID.\n\n- **goal_id**: The ID of the goal to delete", "operationId": "deleteGoal", "parameters": [ { "in": "path", "name": "goal_id", "required": true, "schema": { "title": "Goal Id", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": {} } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Delete Goal", "tags": [ "Goals" ] }, "get": { "description": "Get a single goal by ID.\n\n- **goal_id**: The ID of the goal to retrieve", "operationId": "getGoal", "parameters": [ { "in": "path", "name": "goal_id", "required": true, "schema": { "title": "Goal Id", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeveloperGoal" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Get Goal", "tags": [ "Goals" ] }, "patch": { "description": "Update a goal.\n\n- **goal_id**: The ID of the goal to update\n- **title**: New title (optional)\n- **target_value**: New target value (optional)\n- **current_value**: New progress value (optional)\n- **min_value**: New minimum value (optional)\n- **max_value**: New maximum value (optional)\n- **unit**: New unit label (optional)", "operationId": "updateGoal", "parameters": [ { "in": "path", "name": "goal_id", "required": true, "schema": { "title": "Goal Id", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateGoalRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeveloperGoal" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Update Goal", "tags": [ "Goals" ] } }, "/v1/dev/user/goals/{goal_id}/history": { "get": { "description": "Get progress history for a goal.\n\n- **goal_id**: The ID of the goal\n- **days**: Number of days of history to return (max 365, default 30)", "operationId": "listGoalHistory", "parameters": [ { "in": "path", "name": "goal_id", "required": true, "schema": { "title": "Goal Id", "type": "string" } }, { "in": "query", "name": "days", "required": false, "schema": { "default": 30, "maximum": 365, "minimum": 1, "title": "Days", "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "items": { "additionalProperties": true, "type": "object" }, "title": "Response Listgoalhistory", "type": "array" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Get Goal History", "tags": [ "Goals" ] } }, "/v1/dev/user/goals/{goal_id}/progress": { "patch": { "description": "Update the progress value of a goal.\n\n- **goal_id**: The ID of the goal to update\n- **current_value**: New progress value (query parameter)", "operationId": "updateGoalProgress", "parameters": [ { "in": "path", "name": "goal_id", "required": true, "schema": { "title": "Goal Id", "type": "string" } }, { "description": "New progress value", "in": "query", "name": "current_value", "required": true, "schema": { "description": "New progress value", "title": "Current Value", "type": "number" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeveloperGoal" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Update Goal Progress", "tags": [ "Goals" ] } }, "/v1/dev/user/memories": { "get": { "operationId": "listMemories", "parameters": [ { "in": "query", "name": "limit", "required": false, "schema": { "default": 25, "title": "Limit", "type": "integer" } }, { "in": "query", "name": "offset", "required": false, "schema": { "default": 0, "title": "Offset", "type": "integer" } }, { "in": "query", "name": "categories", "required": false, "schema": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Categories" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/DeveloperMemory" }, "title": "Response Listmemories", "type": "array" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Get Memories", "tags": [ "Memories" ] }, "post": { "description": "Create a new memory for the authenticated user.\n\n- **content**: The content of the memory (1-500 characters)\n- **category**: Memory category (auto-categorized if not provided)\n- **visibility**: Visibility: public or private (default: private)\n- **tags**: List of tags associated with the memory", "operationId": "createMemory", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateMemoryRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeveloperMemory" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Create Memory", "tags": [ "Memories" ] } }, "/v1/dev/user/memories/batch": { "post": { "description": "Create multiple memories in a batch.\n\n- **memories**: List of memories to create (max 25)", "operationId": "createMemoriesBatch", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BatchMemoriesRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BatchMemoriesResponse" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Create Memories Batch", "tags": [ "Memories" ] } }, "/v1/dev/user/memories/vector/search": { "get": { "description": "Search developer-readable default memory memory through hydrated vector candidates.\n\nThis narrow developer API vector endpoint fails closed unless the authenticated\nDeveloper API app/key has a verified memories.read scope, a persisted app/key\ndefault-read grant, and the server-owned rollout state enables developer_api\nmemory default-memory reads. Vector hits are hydrated from authoritative\n`users/{uid}/memory_items` before returning results, so stale Short-term and\nArchive remain unavailable by default.", "operationId": "search_memories_vector_v1_dev_user_memories_vector_search_get", "parameters": [ { "in": "query", "name": "query", "required": true, "schema": { "minLength": 1, "title": "Query", "type": "string" } }, { "in": "query", "name": "limit", "required": false, "schema": { "default": 10, "maximum": 100, "minimum": 1, "title": "Limit", "type": "integer" } } ], "responses": { "200": { "content": { "application/json": { "schema": {} } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Search Memories Vector", "tags": [ "developer" ] } }, "/v1/dev/user/memories/{memory_id}": { "delete": { "description": "Delete a memory by ID.\n\n- **memory_id**: The ID of the memory to delete", "operationId": "deleteMemory", "parameters": [ { "in": "path", "name": "memory_id", "required": true, "schema": { "title": "Memory Id", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": {} } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Delete Memory", "tags": [ "Memories" ] }, "patch": { "description": "Update a memory's content, visibility, tags, or category.\n\n- **memory_id**: The ID of the memory to update\n- **content**: New content for the memory (optional)\n- **visibility**: New visibility: public or private (optional)\n- **tags**: New tags for the memory (optional)\n- **category**: New category for the memory (optional)", "operationId": "updateMemory", "parameters": [ { "in": "path", "name": "memory_id", "required": true, "schema": { "title": "Memory Id", "type": "string" } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateMemoryRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeveloperMemory" } } }, "description": "Successful Response" }, "401": { "$ref": "#/components/responses/Error401" }, "403": { "$ref": "#/components/responses/Error403" }, "404": { "$ref": "#/components/responses/Error404" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Validation Error" } }, "security": [ { "developerApiKey": [] } ], "summary": "Update Memory", "tags": [ "Memories" ] } } }, "servers": [ { "description": "Production", "url": "https://api.omi.me" } ], "tags": [ { "description": "Read and write user memories - timeless facts, preferences, and insights.", "name": "Memories" }, { "description": "Create and retrieve conversation transcripts with AI-generated summaries.", "name": "Conversations" }, { "description": "Retrieve user-defined folders for organizing conversations.", "name": "Folders" }, { "description": "Manage tasks and to-dos extracted from conversations or created manually.", "name": "Action Items" }, { "description": "Manage user goals and progress history.", "name": "Goals" }, { "description": "Create, list, and revoke developer API keys.", "name": "API Keys" } ] }