{"openapi":"3.1.0","info":{"title":"cycle-mirror","version":"phase2"},"paths":{"/api/v1/auth/prelogin/":{"post":{"tags":["auth"],"summary":"Prelogin","operationId":"prelogin_api_v1_auth_prelogin__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreloginIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login/":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_api_v1_auth_login__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/signup/":{"post":{"tags":["auth"],"summary":"Signup","description":"Crea un workspace demo aislado y deja al usuario autenticado.\n\nSolo acepta roles/permisos definidos por el servidor. La operación es idempotente\npara que un doble click o un reintento de red no duplique tenant y usuario.","operationId":"signup_api_v1_auth_signup__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/refresh/":{"post":{"tags":["auth"],"summary":"Refresh","operationId":"refresh_api_v1_auth_refresh__post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/edge-session/":{"get":{"tags":["auth"],"summary":"Edge Session","description":"Contrato interno para nginx auth_request de `my.` -> Edge-2.\n\nLa cookie HttpOnly se valida aquí. nginx añade después un secreto server-to-server,\npor lo que estos headers nunca se confían si el cliente llama Edge-2 directamente.","operationId":"edge_session_api_v1_auth_edge_session__get","responses":{"204":{"description":"Successful Response"}}}},"/api/v1/auth/logout/":{"post":{"tags":["auth"],"summary":"Logout","operationId":"logout_api_v1_auth_logout__post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/products/master/":{"get":{"tags":["master-products"],"summary":"List Master","operationId":"list_master_api_v1_products_master__get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Size"}},{"name":"grouped","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Grouped"}},{"name":"ordering","in":"query","required":false,"schema":{"type":"string","description":"-created (newest, def) | created | name | -name","title":"Ordering"},"description":"-created (newest, def) | created | name | -name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["master-products"],"summary":"Create Master","operationId":"create_master_api_v1_products_master__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MasterProductIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/master/totals/":{"get":{"tags":["master-products"],"summary":"Totals","operationId":"totals_api_v1_products_master_totals__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/products/master/{id}":{"get":{"tags":["master-products"],"summary":"Get Master","operationId":"get_master_api_v1_products_master__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["master-products"],"summary":"Patch Master","operationId":"patch_master_api_v1_products_master__id__patch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MasterProductPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["master-products"],"summary":"Delete Master","operationId":"delete_master_api_v1_products_master__id__delete","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/products/":{"get":{"tags":["units"],"summary":"List Units","operationId":"list_units_api_v1_products_products__get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["units"],"summary":"Create Unit","operationId":"create_unit_api_v1_products_products__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/products/{id}":{"get":{"tags":["units"],"summary":"Get Unit","operationId":"get_unit_api_v1_products_products__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["units"],"summary":"Patch Unit","operationId":"patch_unit_api_v1_products_products__id__patch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["units"],"summary":"Delete Unit","operationId":"delete_unit_api_v1_products_products__id__delete","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lookups/{group}/":{"get":{"tags":["lookups"],"summary":"List Lookups","operationId":"list_lookups_api_v1_lookups__group___get","parameters":[{"name":"group","in":"path","required":true,"schema":{"type":"string","title":"Group"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["lookups"],"summary":"Create Lookup","operationId":"create_lookup_api_v1_lookups__group___post","parameters":[{"name":"group","in":"path","required":true,"schema":{"type":"string","title":"Group"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/lookups/{group}/{id}":{"patch":{"tags":["lookups"],"summary":"Patch Lookup","operationId":"patch_lookup_api_v1_lookups__group___id__patch","parameters":[{"name":"group","in":"path","required":true,"schema":{"type":"string","title":"Group"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["lookups"],"summary":"Delete Lookup","operationId":"delete_lookup_api_v1_lookups__group___id__delete","parameters":[{"name":"group","in":"path","required":true,"schema":{"type":"string","title":"Group"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/manufacturing_batch/":{"get":{"tags":["manufacturing"],"summary":"List Batches","operationId":"list_batches_api_v1_manufacturing_batch__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["manufacturing"],"summary":"Create Batch","operationId":"create_batch_api_v1_manufacturing_batch__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManufacturingBatchIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/manufacturing_batch/{id}":{"get":{"tags":["manufacturing"],"summary":"Get Batch","operationId":"get_batch_api_v1_manufacturing_batch__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["manufacturing"],"summary":"Patch Batch","operationId":"patch_batch_api_v1_manufacturing_batch__id__patch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["manufacturing"],"summary":"Delete Batch","operationId":"delete_batch_api_v1_manufacturing_batch__id__delete","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/product_manufacturing/{id}":{"get":{"tags":["manufacturing"],"summary":"Product Manufacturing","operationId":"product_manufacturing_api_v1_product_manufacturing__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/companies/":{"get":{"tags":["companies"],"summary":"List Companies","operationId":"list_companies_api_v1_companies_companies__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["companies"],"summary":"Create Company","operationId":"create_company_api_v1_companies_companies__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/companies/{id}":{"get":{"tags":["companies"],"summary":"Get Company","operationId":"get_company_api_v1_companies_companies__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["companies"],"summary":"Patch Company","operationId":"patch_company_api_v1_companies_companies__id__patch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["companies"],"summary":"Delete Company","operationId":"delete_company_api_v1_companies_companies__id__delete","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/companies/{id}/generate-api-key":{"post":{"tags":["companies"],"summary":"Generate Api Key","operationId":"generate_api_key_api_v1_companies_companies__id__generate_api_key_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/users/":{"get":{"tags":["users"],"summary":"List Users","operationId":"list_users_api_v1_users_users__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["users"],"summary":"Create User","operationId":"create_user_api_v1_users_users__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/users/{id}":{"get":{"tags":["users"],"summary":"Get User","operationId":"get_user_api_v1_users_users__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["users"],"summary":"Patch User","operationId":"patch_user_api_v1_users_users__id__patch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["users"],"summary":"Delete User","operationId":"delete_user_api_v1_users_users__id__delete","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/avatar/":{"post":{"tags":["users"],"summary":"Upload Avatar","operationId":"upload_avatar_api_v1_users_avatar__post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_avatar_api_v1_users_avatar__post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/leads/":{"get":{"tags":["leads"],"summary":"List Leads","operationId":"list_leads_api_v1_leads__get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["leads"],"summary":"Create Lead","operationId":"create_lead_api_v1_leads__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/brands/config/{id}":{"get":{"tags":["brand-config"],"summary":"Get Brand Config","operationId":"get_brand_config_api_v1_products_brands_config__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["brand-config"],"summary":"Save Brand Config","operationId":"save_brand_config_api_v1_products_brands_config__id__post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}},{"name":"org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandConfigIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/master/brand-content/":{"patch":{"tags":["brand-config"],"summary":"Patch Brand Content","operationId":"patch_brand_content_api_v1_products_master_brand_content__patch","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/products/images/":{"post":{"tags":["uploads"],"summary":"Upload Image","operationId":"upload_image_api_v1_products_products_images__post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_image_api_v1_products_products_images__post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/products/rehost-images/":{"post":{"tags":["uploads"],"summary":"Rehost Images","description":"Re-aloja una lista de URLs externas en storage propio (BACKEND-TASKS #11).\nEntrada: {urls:[...]}. Salida: {results:[{src, url|null}]}. url=null si la fuente da 404.","operationId":"rehost_images_api_v1_products_products_rehost_images__post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/products/{id}/rehost":{"post":{"tags":["uploads"],"summary":"Rehost Product Images","description":"Re-aloja las imágenes (hotlinks externos) de un master concreto y reescribe sus url.\nDeja las que fallen tal cual. Esto es lo que evita el problema Mango a futuro.","operationId":"rehost_product_images_api_v1_products_products__id__rehost_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/demo-tenant":{"post":{"tags":["admin"],"summary":"Create Demo Tenant","operationId":"create_demo_tenant_api_v1_admin_demo_tenant_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemoTenantIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/tenants":{"get":{"tags":["admin"],"summary":"List Tenants","operationId":"list_tenants_api_v1_admin_tenants_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/import":{"post":{"tags":["admin"],"summary":"Import Products","description":"Importa fichas (y unidades) copiadas del backend del partner al mirror.\n- Conserva el _id original (deep-links/refs idénticos).\n- Si rehost=True, DESCARGA y RE-ALOJA las imágenes en el storage propio del mirror\n  (evita heredar hotlinks que mueren, p.ej. el caso Mango). Si una imagen falla,\n  se deja su url original y se contabiliza como fallo.\n- Upsert idempotente por _id (re-ejecutable).\nBody: { products:[...], units:[...], org_id?, rehost?=true }","operationId":"import_products_api_v1_admin_import_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/":{"get":{"tags":["suppliers"],"summary":"List Suppliers","operationId":"list_suppliers_api_v1_suppliers__get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["suppliers"],"summary":"Create Supplier","operationId":"create_supplier_api_v1_suppliers__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplierIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/supply-base":{"get":{"tags":["suppliers"],"summary":"Supply Base","operationId":"supply_base_api_v1_suppliers_supply_base_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/suppliers/import":{"post":{"tags":["suppliers"],"summary":"Import Suppliers","description":"Upsert masivo (CSV de OS Hub). Body: {suppliers:[...], org_id?}. Upsert por os_id,\nsi no hay os_id por name_normalized. Idempotente.","operationId":"import_suppliers_api_v1_suppliers_import_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suppliers/{id}":{"get":{"tags":["suppliers"],"summary":"Get Supplier","operationId":"get_supplier_api_v1_suppliers__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["suppliers"],"summary":"Patch Supplier","operationId":"patch_supplier_api_v1_suppliers__id__patch","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["suppliers"],"summary":"Delete Supplier","operationId":"delete_supplier_api_v1_suppliers__id__delete","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connectors/{provider}/import":{"post":{"tags":["connectors"],"summary":"Import Items","operationId":"import_items_api_v1_connectors__provider__import_post","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"dry_run","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Dry Run"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connectors/{provider}/config":{"get":{"tags":["connectors"],"summary":"Get Config","operationId":"get_config_api_v1_connectors__provider__config_get","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["connectors"],"summary":"Put Config","operationId":"put_config_api_v1_connectors__provider__config_put","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connectors/{provider}/sync":{"post":{"tags":["connectors"],"summary":"Sync","operationId":"sync_api_v1_connectors__provider__sync_post","parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/free":{"post":{"tags":["billing"],"summary":"Set Free","description":"Alta en Free sin pasar por Stripe.","operationId":"set_free_api_v1_billing_free_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/checkout":{"post":{"tags":["billing"],"summary":"Checkout","operationId":"checkout_api_v1_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/portal":{"post":{"tags":["billing"],"summary":"Portal","operationId":"portal_api_v1_billing_portal_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/billing/webhook":{"post":{"tags":["billing"],"summary":"Webhook","operationId":"webhook_api_v1_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/collections/":{"get":{"tags":["collections"],"summary":"List Collections","operationId":"list_collections_api_v1_collections__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/collections":{"get":{"tags":["collections"],"summary":"List Collections","operationId":"list_collections_api_v1_collections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/collections/{slug}":{"get":{"tags":["collections"],"summary":"Get Collection","operationId":"get_collection_api_v1_collections__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/collections/{slug}/products":{"get":{"tags":["collections"],"summary":"Collection Products","operationId":"collection_products_api_v1_collections__slug__products_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/products/videos/":{"post":{"tags":["videos"],"summary":"Upload Video","operationId":"upload_video_api_v1_products_products_videos__post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_video_api_v1_products_products_videos__post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/videos/{id}":{"get":{"tags":["videos"],"summary":"Serve Video","operationId":"serve_video_api_v1_videos__id__get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/videos/{id}/poster":{"get":{"tags":["videos"],"summary":"Serve Poster","operationId":"serve_poster_api_v1_videos__id__poster_get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/videos/{id}/reprocess":{"post":{"tags":["videos"],"summary":"Reprocess","operationId":"reprocess_api_v1_videos__id__reprocess_post","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/loadBatchFile/":{"post":{"tags":["batch"],"summary":"Load Batch File","description":"Sube un CSV o JSON de productos y los upsertea por (org_id, sku). El front\nsolo mira el 200; devolvemos un resumen útil igualmente.","operationId":"load_batch_file_api_v1_products_loadBatchFile__post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_load_batch_file_api_v1_products_loadBatchFile__post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/products/products/export-csv/":{"post":{"tags":["batch"],"summary":"Export Variants Csv","description":"POST {master_product_id, variants:[...]} → text/csv (contrato de Label Studio/export).\nSi no pasan variants, exporta las unidades del master.","operationId":"export_variants_csv_api_v1_products_products_export_csv__post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/user-access/{email}":{"get":{"tags":["access"],"summary":"Get Access","operationId":"get_access_api_v1_user_access__email__get","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["access"],"summary":"Put Access","operationId":"put_access_api_v1_user_access__email__put","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/events/":{"get":{"tags":["events"],"summary":"List Events","operationId":"list_events_api_v1_events__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/events":{"get":{"tags":["events"],"summary":"List Events","operationId":"list_events_api_v1_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/events/import":{"post":{"tags":["events"],"summary":"Import Events","operationId":"import_events_api_v1_events_import_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Body_load_batch_file_api_v1_products_loadBatchFile__post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"fileName":{"type":"string","title":"Filename","default":""}},"type":"object","required":["file"],"title":"Body_load_batch_file_api_v1_products_loadBatchFile__post"},"Body_upload_avatar_api_v1_users_avatar__post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_avatar_api_v1_users_avatar__post"},"Body_upload_image_api_v1_products_products_images__post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_image_api_v1_products_products_images__post"},"Body_upload_video_api_v1_products_products_videos__post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_video_api_v1_products_products_videos__post"},"BrandConfigIn":{"properties":{},"additionalProperties":true,"type":"object","title":"BrandConfigIn"},"BrandIn":{"properties":{"name":{"type":"string","title":"Name"}},"additionalProperties":true,"type":"object","required":["name"],"title":"BrandIn"},"CompanyIn":{"properties":{"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"legal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Name"},"tax_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tax Id"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"gs1_company_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gs1 Company Prefix"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"additionalProperties":true,"type":"object","required":["name","email"],"title":"CompanyIn"},"DemoTenantIn":{"properties":{"name":{"type":"string","title":"Name"},"org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"},"max_products":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Products"},"ttl_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ttl Days"}},"additionalProperties":true,"type":"object","required":["name"],"title":"DemoTenantIn"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LeadIn":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"additionalProperties":true,"type":"object","title":"LeadIn"},"LoginIn":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["username","password"],"title":"LoginIn"},"LookupIn":{"properties":{"name":{"type":"string","title":"Name"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Data"}},"additionalProperties":true,"type":"object","required":["name"],"title":"LookupIn"},"ManufacturingBatchIn":{"properties":{},"additionalProperties":true,"type":"object","title":"ManufacturingBatchIn"},"MasterProductIn":{"properties":{"brand":{"$ref":"#/components/schemas/BrandIn"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"material":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Material"}},"additionalProperties":true,"type":"object","required":["brand"],"title":"MasterProductIn"},"MasterProductPatch":{"properties":{},"additionalProperties":true,"type":"object","title":"MasterProductPatch"},"PreloginIn":{"properties":{"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"}},"additionalProperties":true,"type":"object","title":"PreloginIn"},"SignupIn":{"properties":{"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"company_name":{"type":"string","title":"Company Name"},"password":{"type":"string","title":"Password"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"source":{"type":"string","title":"Source","default":"catalogue"},"accepted_terms":{"type":"boolean","title":"Accepted Terms","default":false},"terms_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Version"},"entrypoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entrypoint"},"open_session":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Open Session"},"idempotency_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency Key"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"}},"type":"object","required":["first_name","last_name","email","company_name","password"],"title":"SignupIn","description":"Alta autoservicio desde Open. Ignora cualquier intento de elevar privilegios."},"SupplierIn":{"properties":{"name":{"type":"string","title":"Name"},"os_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Id"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier"}},"additionalProperties":true,"type":"object","required":["name"],"title":"SupplierIn"},"UnitIn":{"properties":{"sku":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sku"},"master_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Master Id"}},"additionalProperties":true,"type":"object","title":"UnitIn"},"UserIn":{"properties":{"username":{"type":"string","title":"Username"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"is_admin":{"type":"boolean","title":"Is Admin","default":false},"is_superuser":{"type":"boolean","title":"Is Superuser","default":false},"is_staff":{"type":"boolean","title":"Is Staff","default":false},"is_demo":{"type":"boolean","title":"Is Demo","default":false},"org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Org Id"},"priority_brand":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority Brand"},"verticals":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Verticals"},"brand_lock":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Lock"},"catalog_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Catalog Scope"}},"additionalProperties":true,"type":"object","required":["username"],"title":"UserIn"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}