{"openapi":"3.1.0","info":{"title":"OWRO API","description":"Odoo Wrapper Read Only REST API","version":"1.1.0"},"paths":{"/api/v1/instances":{"get":{"tags":["instances"],"summary":"List Instances","description":"Listar instancias disponibles para el usuario","operationId":"list_instances_api_v1_instances_get","security":[{"APIKeyHeader":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response List Instances Api V1 Instances Get"}}}}}},"post":{"tags":["instances"],"summary":"Create Instance","description":"Crear una nueva instancia","operationId":"create_instance_api_v1_instances_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OdooInstanceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instances/{name}":{"get":{"tags":["instances"],"summary":"Get Instance","description":"Obtener detalles de una instancia","operationId":"get_instance_api_v1_instances__name__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OdooInstanceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["instances"],"summary":"Update Instance","description":"Actualizar una instancia existente","operationId":"update_instance_api_v1_instances__name__put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OdooInstanceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["instances"],"summary":"Delete Instance","description":"Eliminar una instancia","operationId":"delete_instance_api_v1_instances__name__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/instances/{name}/test":{"get":{"tags":["instances"],"summary":"Test Connection","description":"Probar conexión a una instancia","operationId":"test_connection_api_v1_instances__name__test_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/apikeys":{"get":{"tags":["apikeys"],"summary":"List Apikeys","description":"Listar todas las API keys","operationId":"list_apikeys_api_v1_apikeys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKeyResponse"},"type":"array","title":"Response List Apikeys Api V1 Apikeys Get"}}}}},"security":[{"APIKeyHeader":[]}]},"post":{"tags":["apikeys"],"summary":"Create Apikey","description":"Generar una nueva API key","operationId":"create_apikey_api_v1_apikeys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreatedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"APIKeyHeader":[]}]}},"/api/v1/apikeys/{key_id}":{"delete":{"tags":["apikeys"],"summary":"Revoke Apikey","description":"Revocar (eliminar) una API key","operationId":"revoke_apikey_api_v1_apikeys__key_id__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/apikeys/{key_id}/permissions":{"post":{"tags":["apikeys"],"summary":"Add Permission","description":"Asignar permiso a una instancia","operationId":"add_permission_api_v1_apikeys__key_id__permissions_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionAdd"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["apikeys"],"summary":"List Permissions","description":"Listar permisos de una API key","operationId":"list_permissions_api_v1_apikeys__key_id__permissions_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"},"title":"Response List Permissions Api V1 Apikeys  Key Id  Permissions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/apikeys/{key_id}/permissions/{instance_name}":{"delete":{"tags":["apikeys"],"summary":"Remove Permission","description":"Quitar permiso de una instancia","operationId":"remove_permission_api_v1_apikeys__key_id__permissions__instance_name__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"instance_name","in":"path","required":true,"schema":{"type":"string","title":"Instance Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermissionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/odoo/{instance_name}/query":{"post":{"tags":["odoo"],"summary":"Execute Query","description":"Ejecutar consulta en Odoo","operationId":"execute_query_api_v1_odoo__instance_name__query_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"instance_name","in":"path","required":true,"schema":{"type":"string","title":"Instance Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OdooQueryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OdooQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google/{instance_name}/gmail/search":{"post":{"tags":["google"],"summary":"Search Emails","description":"Buscar correos electrónicos en Gmail","operationId":"search_emails_api_v1_google__instance_name__gmail_search_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"instance_name","in":"path","required":true,"schema":{"type":"string","title":"Instance Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google/{instance_name}/calendar/events":{"get":{"tags":["google"],"summary":"List Calendar Events","description":"Listar eventos del calendario","operationId":"list_calendar_events_api_v1_google__instance_name__calendar_events_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"instance_name","in":"path","required":true,"schema":{"type":"string","title":"Instance Name"}},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"}},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google/{instance_name}/drive/files":{"post":{"tags":["google"],"summary":"Search Drive Files","description":"Buscar archivos en Google Drive","operationId":"search_drive_files_api_v1_google__instance_name__drive_files_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"instance_name","in":"path","required":true,"schema":{"type":"string","title":"Instance Name"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/google/{instance_name}/drive/folders":{"get":{"tags":["google"],"summary":"List Drive Folders","description":"Listar carpetas en Google Drive","operationId":"list_drive_folders_api_v1_google__instance_name__drive_folders_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"instance_name","in":"path","required":true,"schema":{"type":"string","title":"Instance Name"}},{"name":"parent_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"ApiKeyCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_admin":{"type":"boolean","title":"Is Admin","default":false}},"type":"object","required":["name"],"title":"ApiKeyCreate"},"ApiKeyCreatedResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_admin":{"type":"boolean","title":"Is Admin"},"is_active":{"type":"boolean","title":"Is Active"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","description":"Lista de instancias permitidas"},"created_at":{"type":"string","title":"Created At"},"key":{"type":"string","title":"Key","description":"La API key en texto plano - solo se muestra al crear"}},"type":"object","required":["id","name","is_admin","is_active","created_at","key"],"title":"ApiKeyCreatedResponse"},"ApiKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_admin":{"type":"boolean","title":"Is Admin"},"is_active":{"type":"boolean","title":"Is Active"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","description":"Lista de instancias permitidas"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","name","is_admin","is_active","created_at"],"title":"ApiKeyResponse"},"GoogleQueryResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"title":"Data"},"instance":{"type":"string","title":"Instance"},"service":{"type":"string","title":"Service"}},"type":"object","required":["success","data","instance","service"],"title":"GoogleQueryResponse"},"GoogleSearchRequest":{"properties":{"query":{"type":"string","title":"Query","description":"Query en formato gogcli (ej: 'label:inbox' o búsqueda por fechas)"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit","default":50}},"type":"object","required":["query"],"title":"GoogleSearchRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MessageResponse":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"MessageResponse"},"OdooInstanceCreate":{"properties":{"url":{"type":"string","title":"Url"},"db":{"type":"string","title":"Db"},"username":{"type":"string","title":"Username"},"api_key":{"type":"string","title":"Api Key"},"allowed_models":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Models"},"max_records":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Records","default":1000}},"type":"object","required":["url","db","username","api_key"],"title":"OdooInstanceCreate"},"OdooInstanceResponse":{"properties":{"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"db":{"type":"string","title":"Db"},"username":{"type":"string","title":"Username"},"allowed_models":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Models"},"max_records":{"type":"integer","title":"Max Records"}},"type":"object","required":["name","url","db","username","max_records"],"title":"OdooInstanceResponse"},"OdooInstanceUpdate":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"db":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Db"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"allowed_models":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Models"},"max_records":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Records"}},"type":"object","title":"OdooInstanceUpdate"},"OdooQueryRequest":{"properties":{"model":{"type":"string","title":"Model"},"method":{"type":"string","title":"Method","description":"buscar, buscar_leer, leer, leer_campos, contar"},"args":{"items":{},"type":"array","title":"Args"},"kwargs":{"additionalProperties":true,"type":"object","title":"Kwargs"}},"type":"object","required":["model","method"],"title":"OdooQueryRequest"},"OdooQueryResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"data":{"title":"Data"},"instance":{"type":"string","title":"Instance"},"model":{"type":"string","title":"Model"},"method":{"type":"string","title":"Method"}},"type":"object","required":["success","data","instance","model","method"],"title":"OdooQueryResponse"},"PermissionAdd":{"properties":{"instance_name":{"type":"string","title":"Instance Name"}},"type":"object","required":["instance_name"],"title":"PermissionAdd"},"PermissionResponse":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions"}},"type":"object","required":["api_key_id","permissions"],"title":"PermissionResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}