{ "openapi": "3.0.3", "info": { "title": "CORE API", "version": "1.0.0", "description": "CORE is a memory sharing platform for LLMs with graph-based storage, temporal facts, and comprehensive search capabilities.\n\n## Authentication\n\nCORE supports multiple authentication methods:\n- **Bearer Token**: Personal API tokens or OAuth2 access tokens\n- **OAuth2**: Full OAuth2 authorization code flow with PKCE support\n- **Session Cookies**: For web interface access\n\nMost API endpoints support Bearer token authentication via the Authorization header:\n```\nAuthorization: Bearer YOUR_TOKEN_HERE\n```\n\n## Features\n\n- **Temporal Knowledge Graph**: Store and query facts with temporal validity\n- **Spaces**: Organize knowledge into logical spaces/projects\n- **Search**: Advanced semantic search with graph traversal\n- **Ingestion**: Process and extract facts from various data sources \n- **Integrations**: Connect with external platforms via OAuth2\n- **MCP Support**: Model Context Protocol for AI assistant integration\n- **Webhooks**: Real-time notifications for data changes\n", "contact": { "name": "Core", "url": "https://github.com/redplanethq/core" } }, "servers": [ { "url": "{protocol}://{domain}", "description": "Configurable CORE server", "variables": { "protocol": { "default": "https", "enum": [ "http", "https" ], "description": "The protocol to use" }, "domain": { "default": "core.heysol.ai", "description": "The CORE API domain" } } } ], "security": [ { "bearerAuth": [ ] }, { "oauth2": [ ] } ], "components": { "securitySchemes": { "bearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT", "description": "Bearer token authentication supports:\n- Personal API tokens (PATs)\n- OAuth2 access tokens\n- JWT tokens\n\nExample: `Authorization: Bearer your_token_here`\n" }, "oauth2": { "type": "oauth2", "description": "OAuth2 authorization code flow with PKCE support.\nSupports scopes: read, write, mcp, integration, oauth\n", "flows": { "authorizationCode": { "authorizationUrl": "/oauth/authorize", "tokenUrl": "/oauth/token", "refreshUrl": "/oauth/token", "scopes": { "read": "Read access to user data", "write": "Write access to user data", "mcp": "MCP (Model Context Protocol) access", "integration": "Access to integrations", "oauth": "OAuth client management" } } } } }, "schemas": { "Error": { "type": "object", "properties": { "error": { "type": "string", "description": "Error code or message" }, "error_description": { "type": "string", "description": "Human-readable error description" }, "details": { "type": "array", "description": "Validation error details", "items": { "type": "object" } } }, "required": [ "error" ] }, "OAuth2Error": { "type": "object", "properties": { "error": { "type": "string", "enum": [ "invalid_request", "invalid_client", "invalid_grant", "unauthorized_client", "unsupported_grant_type", "invalid_scope" ] }, "error_description": { "type": "string" }, "error_uri": { "type": "string" }, "state": { "type": "string" } } }, "OAuth2TokenResponse": { "type": "object", "properties": { "access_token": { "type": "string", "description": "The access token" }, "token_type": { "type": "string", "enum": [ "Bearer" ] }, "expires_in": { "type": "integer", "description": "Access token lifetime in seconds" }, "refresh_token": { "type": "string", "description": "Refresh token (if applicable)" }, "scope": { "type": "string", "description": "Space-separated list of granted scopes" } } }, "UserInfo": { "type": "object", "properties": { "id": { "type": "string" }, "email": { "type": "string", "format": "email" }, "name": { "type": "string" }, "picture": { "type": "string", "format": "uri" } } }, "SearchRequest": { "type": "object", "required": [ "query" ], "properties": { "query": { "type": "string", "description": "Search query text" }, "startTime": { "type": "string", "format": "date-time", "description": "Filter facts after this timestamp" }, "endTime": { "type": "string", "format": "date-time", "description": "Filter facts before this timestamp" }, "spaceIds": { "type": "array", "items": { "type": "string" }, "default": [ ], "description": "Filter results to specific spaces" }, "limit": { "type": "integer", "minimum": 1, "maximum": 1000, "description": "Maximum number of results" }, "maxBfsDepth": { "type": "integer", "minimum": 1, "maximum": 10, "description": "Maximum graph traversal depth" }, "includeInvalidated": { "type": "boolean", "default": false, "description": "Include invalidated facts" }, "entityTypes": { "type": "array", "items": { "type": "string" }, "description": "Filter by entity types" }, "scoreThreshold": { "type": "number", "minimum": 0, "maximum": 1, "description": "Minimum relevance score" }, "minResults": { "type": "integer", "minimum": 1, "description": "Minimum number of results to return" } } }, "ExtensionSearchRequest": { "type": "object", "required": [ "input" ], "properties": { "input": { "type": "string", "description": "Search input text" }, "limit": { "type": "integer", "minimum": 1, "maximum": 1000 }, "maxBfsDepth": { "type": "integer", "minimum": 1, "maximum": 10 }, "includeInvalidated": { "type": "boolean", "default": false }, "entityTypes": { "type": "array", "items": { "type": "string" } }, "scoreThreshold": { "type": "number", "minimum": 0, "maximum": 1 }, "minResults": { "type": "integer", "minimum": 1 } } }, "ExtensionSummaryRequest": { "type": "object", "required": [ "html", "url" ], "properties": { "html": { "type": "string", "description": "HTML content to summarize" }, "url": { "type": "string", "format": "uri", "description": "URL of the page" }, "title": { "type": "string", "description": "Page title" } } }, "IngestRequest": { "type": "object", "required": [ "episodeBody", "referenceTime", "source" ], "properties": { "episodeBody": { "type": "string", "description": "Content to ingest and process" }, "referenceTime": { "type": "string", "format": "date-time", "description": "Reference timestamp for the content" }, "metadata": { "type": "object", "additionalProperties": { "oneOf": [ { "type": "string" }, { "type": "number" }, { "type": "boolean" } ] }, "description": "Additional metadata" }, "source": { "type": "string", "description": "Source identifier" }, "spaceId": { "type": "string", "description": "Space to assign the content to" }, "sessionId": { "type": "string", "description": "Session identifier" } } }, "ActivityRequest": { "type": "object", "required": [ "text", "source" ], "properties": { "text": { "type": "string", "description": "Activity text content" }, "source": { "type": "string", "description": "Source identifier" }, "sourceURL": { "type": "string", "format": "uri", "description": "Source URL" }, "integrationAccountId": { "type": "string", "description": "Integration account ID" }, "taskId": { "type": "string", "description": "Task identifier" } } }, "Space": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "userId": { "type": "string" } } }, "CreateSpaceRequest": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string", "description": "Space name" }, "description": { "type": "string", "description": "Space description" } } }, "UpdateSpaceRequest": { "type": "object", "properties": { "name": { "type": "string", "description": "Updated space name" }, "description": { "type": "string", "description": "Updated space description" } } }, "BulkSpaceOperation": { "type": "object", "required": [ "intent" ], "properties": { "intent": { "type": "string", "enum": [ "assign_statements", "remove_statements", "bulk_assign", "initialize_space_ids" ], "description": "Type of bulk operation" }, "spaceId": { "type": "string", "description": "Target space ID (required for some operations)" }, "statementIds": { "type": "array", "items": { "type": "string" }, "description": "Statement IDs to operate on" }, "spaceIds": { "type": "array", "items": { "type": "string" }, "description": "Space IDs for bulk operations" } } }, "IngestionRule": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "text": { "type": "string" }, "source": { "type": "string" }, "isActive": { "type": "boolean" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } } }, "CreateIngestionRuleRequest": { "type": "object", "required": [ "text", "source" ], "properties": { "name": { "type": "string" }, "text": { "type": "string", "description": "Rule text/content" }, "source": { "type": "string", "description": "Source identifier" }, "isActive": { "type": "boolean", "default": true } } }, "UpdateIngestionRuleRequest": { "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "text": { "type": "string" }, "source": { "type": "string" }, "isActive": { "type": "boolean" } } }, "OAuth2Client": { "type": "object", "properties": { "id": { "type": "string" }, "clientId": { "type": "string" }, "name": { "type": "string" }, "redirectUris": { "type": "array", "items": { "type": "string", "format": "uri" } }, "createdAt": { "type": "string", "format": "date-time" } } }, "Conversation": { "type": "object", "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } } }, "Log": { "type": "object", "properties": { "id": { "type": "string", "description": "Log identifier" }, "source": { "type": "string", "description": "Log source name" }, "ingestText": { "type": "string", "description": "Text content that was ingested" }, "time": { "type": "string", "format": "date-time", "description": "Creation timestamp" }, "processedAt": { "type": "string", "format": "date-time", "nullable": true, "description": "Processing completion timestamp" }, "episodeUUID": { "type": "string", "nullable": true, "description": "Associated episode UUID if processed" }, "status": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ], "description": "Processing status" }, "error": { "type": "string", "nullable": true, "description": "Error message if processing failed" }, "sourceURL": { "type": "string", "format": "uri", "nullable": true, "description": "Source URL if applicable" }, "integrationSlug": { "type": "string", "nullable": true, "description": "Integration slug identifier" }, "data": { "type": "object", "nullable": true, "description": "Additional log data" } } }, "DeleteLogRequest": { "type": "object", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "Log ID to delete" } } }, "DeleteLogResponse": { "type": "object", "properties": { "success": { "type": "boolean" }, "message": { "type": "string" }, "deleted": { "type": "object", "properties": { "episode": { "type": "boolean" }, "statements": { "type": "integer" }, "entities": { "type": "integer" }, "facts": { "type": "integer" } } } } } } }, "paths": { "/oauth/authorize": { "get": { "summary": "OAuth2 Authorization Endpoint", "description": "OAuth2 authorization endpoint supporting authorization code flow with PKCE.\nRequires user to be logged in via session cookie.\n", "security": [ { } ], "parameters": [ { "name": "client_id", "in": "query", "required": true, "schema": { "type": "string" }, "description": "OAuth2 client identifier" }, { "name": "redirect_uri", "in": "query", "required": true, "schema": { "type": "string", "format": "uri" }, "description": "Redirect URI after authorization" }, { "name": "response_type", "in": "query", "required": true, "schema": { "type": "string", "enum": [ "code" ] }, "description": "Must be 'code' for authorization code flow" }, { "name": "scope", "in": "query", "schema": { "type": "string" }, "description": "Space-separated list of requested scopes", "example": "read write mcp" }, { "name": "state", "in": "query", "schema": { "type": "string" }, "description": "State parameter for CSRF protection" }, { "name": "code_challenge", "in": "query", "schema": { "type": "string" }, "description": "PKCE code challenge" }, { "name": "code_challenge_method", "in": "query", "schema": { "type": "string", "enum": [ "S256", "plain" ] }, "description": "PKCE code challenge method" } ], "responses": { "200": { "description": "Authorization page displayed" }, "302": { "description": "Redirect to login if not authenticated" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuth2Error" } } }, "description": "Invalid request parameters" } } }, "post": { "summary": "OAuth2 Authorization Decision", "description": "Handle user's allow/deny decision for OAuth2 authorization", "security": [ { } ], "requestBody": { "content": { "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "action" ], "properties": { "action": { "type": "string", "enum": [ "allow", "deny" ] }, "client_id": { "type": "string" }, "redirect_uri": { "type": "string", "format": "uri" }, "scope": { "type": "string" }, "state": { "type": "string" }, "code_challenge": { "type": "string" }, "code_challenge_method": { "type": "string", "enum": [ "S256", "plain" ] } } } } } }, "responses": { "302": { "description": "Redirect to redirect_uri with code or error" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuth2Error" } } }, "description": "Invalid request" } } } }, "/oauth/token": { "post": { "summary": "OAuth2 Token Endpoint", "description": "Exchange authorization code for access token, or refresh an existing token.\nSupports both JSON and form-encoded requests.\n", "security": [ { } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "grant_type", "client_id" ], "properties": { "grant_type": { "type": "string", "enum": [ "authorization_code", "refresh_token" ] }, "code": { "type": "string", "description": "Authorization code (for authorization_code grant)" }, "redirect_uri": { "type": "string", "format": "uri", "description": "Original redirect URI (for authorization_code grant)" }, "client_id": { "type": "string", "description": "OAuth2 client ID" }, "client_secret": { "type": "string", "description": "OAuth2 client secret (if not using PKCE)" }, "code_verifier": { "type": "string", "description": "PKCE code verifier (for PKCE flow)" }, "refresh_token": { "type": "string", "description": "Refresh token (for refresh_token grant)" } } } }, "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "grant_type", "client_id" ], "properties": { "grant_type": { "type": "string", "enum": [ "authorization_code", "refresh_token" ] }, "code": { "type": "string" }, "redirect_uri": { "type": "string" }, "client_id": { "type": "string" }, "client_secret": { "type": "string" }, "code_verifier": { "type": "string" }, "refresh_token": { "type": "string" } } } } } }, "responses": { "200": { "description": "Token issued successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuth2TokenResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuth2Error" } } } } } } }, "/oauth/userinfo": { "get": { "summary": "OAuth2 User Info Endpoint", "description": "Get authenticated user information", "security": [ { "oauth2": [ "read" ] } ], "responses": { "200": { "description": "User information", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UserInfo" } } } }, "401": { "description": "Invalid or expired token", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/oauth/tokeninfo": { "get": { "summary": "OAuth2 Token Introspection", "description": "Get information about the current access token", "security": [ { "oauth2": [ ] } ], "responses": { "200": { "description": "Token information", "content": { "application/json": { "schema": { "type": "object", "properties": { "active": { "type": "boolean" }, "scope": { "type": "string" }, "client_id": { "type": "string" }, "exp": { "type": "integer" }, "sub": { "type": "string" } } } } } }, "401": { "description": "Invalid token" } } } }, "/api/profile": { "get": { "summary": "Get User Profile", "description": "Get user profile information via OAuth2 authentication", "security": [ { "oauth2": [ "read" ] } ], "responses": { "200": { "description": "User profile data", "content": { "application/json": { "schema": { "type": "object", "properties": { "user": { "$ref": "#/components/schemas/UserInfo" }, "client": { "type": "object", "properties": { "clientId": { "type": "string" }, "name": { "type": "string" } } }, "scopes": { "type": "array", "items": { "type": "string" } } } } } } } } } }, "/api/v1/search": { "post": { "summary": "Search Knowledge Graph", "description": "Perform advanced semantic search with graph traversal capabilities.\nSupports temporal filtering, entity type filtering, and relevance scoring.\n", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SearchRequest" } } } }, "responses": { "200": { "description": "Search results", "content": { "application/json": { "schema": { "type": "object", "properties": { "results": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "content": { "type": "string" }, "score": { "type": "number" }, "metadata": { "type": "object" } } } } } } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "401": { "description": "Unauthorized" } } } }, "/api/v1/add": { "post": { "summary": "Add Data to Ingestion Queue", "description": "Add data to the ingestion queue for processing. Content will be analyzed\nand facts will be extracted into the knowledge graph.\n", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IngestRequest" } } } }, "responses": { "200": { "description": "Data queued for ingestion", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "queueId": { "type": "string" } } } } } } } } }, "/api/v1/activity": { "post": { "summary": "Create Activity", "description": "Create activity and trigger ingestion with webhook notifications.\nUsed for real-time data processing with external integrations.\n", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ActivityRequest" } } } }, "responses": { "200": { "description": "Activity created and processed" } } } }, "/api/v1/spaces": { "get": { "summary": "List/Search Spaces", "description": "Get list of spaces with optional search filtering", "security": [ { "bearerAuth": [ ] } ], "parameters": [ { "name": "q", "in": "query", "schema": { "type": "string" }, "description": "Search query for space names" } ], "responses": { "200": { "description": "List of spaces", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Space" } } } } } } }, "post": { "summary": "Create New Space", "description": "Create a new space for organizing knowledge", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSpaceRequest" } } } }, "responses": { "201": { "description": "Space created successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Space" } } } } } }, "put": { "summary": "Bulk Space Operations", "description": "Perform bulk operations on spaces including:\n- assign_statements: Assign statements to a space\n- remove_statements: Remove statements from a space \n- bulk_assign: Bulk assign multiple statements\n- initialize_space_ids: Initialize space IDs for statements\n", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/BulkSpaceOperation" } } } }, "responses": { "200": { "description": "Bulk operation completed" } } } }, "/api/v1/spaces/{spaceId}": { "parameters": [ { "name": "spaceId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Space identifier" } ], "get": { "summary": "Get Space Details", "description": "Retrieve detailed information about a specific space", "security": [ { "bearerAuth": [ ] } ], "responses": { "200": { "description": "Space details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Space" } } } }, "404": { "description": "Space not found" } } }, "put": { "summary": "Update Space", "description": "Update space name and/or description", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSpaceRequest" } } } }, "responses": { "200": { "description": "Space updated successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Space" } } } } } }, "delete": { "summary": "Delete Space", "description": "Delete a space and optionally reassign its content", "security": [ { "bearerAuth": [ ] } ], "responses": { "204": { "description": "Space deleted successfully" } } } }, "/api/v1/integrations": { "get": { "summary": "Get Connected Integrations", "description": "Get OAuth client's connected integrations with usage statistics", "security": [ { "oauth2": [ "integration" ] } ], "responses": { "200": { "description": "List of connected integrations", "content": { "application/json": { "schema": { "type": "object", "properties": { "integrations": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string" }, "status": { "type": "string" } } } }, "count": { "type": "integer" } } } } } } } } }, "/api/v1/integration_account": { "get": { "summary": "List Integration Accounts", "description": "Get user's integration accounts", "security": [ { "bearerAuth": [ ] } ], "responses": { "200": { "description": "List of integration accounts" } } }, "post": { "summary": "Create Integration Account", "description": "Create new integration account", "security": [ { "bearerAuth": [ ] } ], "responses": { "201": { "description": "Integration account created" } } } }, "/api/v1/integration_account/disconnect": { "post": { "summary": "Disconnect Integration Account", "description": "Disconnect an integration account", "security": [ { "bearerAuth": [ ] } ], "responses": { "200": { "description": "Integration disconnected" } } } }, "/api/v1/integration_account/disconnect_mcp": { "post": { "summary": "Disconnect MCP Integration", "description": "Disconnect an MCP integration account", "security": [ { "bearerAuth": [ ] } ], "responses": { "200": { "description": "MCP integration disconnected" } } } }, "/api/oauth/clients": { "get": { "summary": "List OAuth Clients", "description": "Get user's OAuth clients", "security": [ { "bearerAuth": [ ] } ], "responses": { "200": { "description": "List of OAuth clients", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/OAuth2Client" } } } } } } }, "post": { "summary": "Create OAuth Client", "description": "Create new OAuth client application", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "required": [ "name", "redirectUris" ], "properties": { "name": { "type": "string" }, "redirectUris": { "type": "array", "items": { "type": "string", "format": "uri" } } } } } } }, "responses": { "201": { "description": "OAuth client created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuth2Client" } } } } } } }, "/api/oauth/clients/{clientId}": { "parameters": [ { "name": "clientId", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "summary": "Get OAuth Client", "description": "Get specific OAuth client details", "security": [ { "bearerAuth": [ ] } ], "responses": { "200": { "description": "OAuth client details", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OAuth2Client" } } } } } }, "put": { "summary": "Update OAuth Client", "description": "Update OAuth client configuration", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string" }, "redirectUris": { "type": "array", "items": { "type": "string", "format": "uri" } } } } } } }, "responses": { "200": { "description": "Client updated" } } }, "delete": { "summary": "Delete OAuth Client", "description": "Delete OAuth client application", "security": [ { "bearerAuth": [ ] } ], "responses": { "204": { "description": "Client deleted" } } } }, "/api/v1/episodes/{episodeId}/facts": { "parameters": [ { "name": "episodeId", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "summary": "Get Episode Facts", "description": "Get facts/statements for a specific episode", "security": [ { "bearerAuth": [ ] } ], "responses": { "200": { "description": "Episode facts", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "content": { "type": "string" }, "type": { "type": "string" }, "confidence": { "type": "number" }, "validFrom": { "type": "string", "format": "date-time" }, "validTo": { "type": "string", "format": "date-time" } } } } } } } } } }, "/api/v1/logs": { "get": { "summary": "Get Ingestion Logs", "description": "View ingestion queue status and processing logs", "security": [ { "bearerAuth": [ ] } ], "parameters": [ { "name": "page", "in": "query", "schema": { "type": "integer", "minimum": 1, "default": 1 } }, { "name": "limit", "in": "query", "schema": { "type": "integer", "minimum": 1, "maximum": 100, "default": 20 } }, { "name": "source", "in": "query", "schema": { "type": "string" }, "description": "Filter by source" }, { "name": "status", "in": "query", "schema": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ] }, "description": "Filter by status" } ], "responses": { "200": { "description": "Paginated ingestion logs", "content": { "application/json": { "schema": { "type": "object", "properties": { "logs": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "source": { "type": "string" }, "status": { "type": "string" }, "message": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" } } } }, "pagination": { "type": "object" } } } } } } } } }, "/api/v1/logs/{logId}": { "parameters": [ { "name": "logId", "in": "path", "required": true, "schema": { "type": "string" }, "description": "Log identifier" } ], "get": { "summary": "Get Specific Log", "description": "Retrieve detailed information about a specific ingestion log", "security": [ { "bearerAuth": [ ] } ], "responses": { "200": { "description": "Log details", "content": { "application/json": { "schema": { "type": "object", "properties": { "log": { "$ref": "#/components/schemas/Log" } } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Log not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } }, "delete": { "summary": "Delete Log Entry", "description": "Delete a specific log entry and associated episode if it exists", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteLogRequest" } } } }, "responses": { "200": { "description": "Log deleted successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteLogResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "404": { "description": "Log not found or unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }, "/api/v1/ingestion-queue/status": { "get": { "summary": "Get Ingestion Queue Status", "description": "Get current status of the ingestion queue", "security": [ { "bearerAuth": [ ] } ], "responses": { "200": { "description": "Queue status information", "content": { "application/json": { "schema": { "type": "object", "properties": { "pending": { "type": "integer" }, "processing": { "type": "integer" }, "completed": { "type": "integer" }, "failed": { "type": "integer" }, "totalCapacity": { "type": "integer" } } } } } } } } }, "/api/v1/webhooks": { "post": { "summary": "Create Webhook", "description": "Create webhook configuration for real-time notifications", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "content": { "application/x-www-form-urlencoded": { "schema": { "type": "object", "required": [ "url" ], "properties": { "url": { "type": "string", "format": "uri", "description": "Webhook endpoint URL" }, "secret": { "type": "string", "description": "Optional webhook secret for signature verification" } } } } } }, "responses": { "201": { "description": "Webhook created", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "url": { "type": "string" }, "secret": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" } } } } } } } } }, "/api/v1/webhooks/{id}": { "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "get": { "summary": "Get Webhook", "description": "Get webhook configuration details", "security": [ { "bearerAuth": [ ] } ], "responses": { "200": { "description": "Webhook details" } } }, "put": { "summary": "Update Webhook", "description": "Update webhook configuration", "security": [ { "bearerAuth": [ ] } ], "requestBody": { "content": { "application/x-www-form-urlencoded": { "schema": { "type": "object", "properties": { "url": { "type": "string", "format": "uri" }, "secret": { "type": "string" } } } } } }, "responses": { "200": { "description": "Webhook updated" } } }, "delete": { "summary": "Delete Webhook", "description": "Delete webhook configuration", "security": [ { "bearerAuth": [ ] } ], "responses": { "204": { "description": "Webhook deleted" } } } } } }