{"openapi":"3.1.0","info":{"title":"BOLEVA API","description":"\n**BOLEVA** — *Tu próxima experiencia comienza aquí.*\n\nAPI REST para publicar eventos, vender boletos digitales (compras **simuladas**) y\nvalidar accesos con códigos QR firmados.\n\n### Cómo autenticarte en esta documentación\n1. Pulsa **Authorize** (candado) e ingresa correo y contraseña de un usuario de prueba\n   (campo *username* = correo). También puedes usar `POST /api/auth/login`.\n2. Ejecuta cualquier operación protegida; el token se envía como `Authorization: Bearer …`.\n\n### Métodos HTTP demostrados\n`GET` · `HEAD` · `POST` · `PUT` · `PATCH` · `DELETE` · `OPTIONS`\n\nLos montos se expresan en **centavos de MXN** (`20000` = $200.00 MXN).\n","version":"2.0.0"},"paths":{"/api/auth/register":{"post":{"tags":["Autenticación"],"summary":"Registrar usuario (siempre comprador; organizador requiere aprobación)","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenOut"}}}},"409":{"description":"Correo ya registrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"tags":["Autenticación"],"summary":"Iniciar sesión (JSON). Entrega cookie HttpOnly + token Bearer","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenOut"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/token":{"post":{"tags":["Autenticación"],"summary":"Token OAuth2 (formulario) — usado por el botón Authorize de Swagger","operationId":"oauth_token_api_auth_token_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_oauth_token_api_auth_token_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthTokenOut"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"429":{"description":"Too Many Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/logout":{"post":{"tags":["Autenticación"],"summary":"Cerrar sesión en este navegador (borra las cookies)","operationId":"logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}}}}},"/api/auth/logout-all":{"post":{"tags":["Autenticación"],"summary":"Cerrar sesión en todos los dispositivos (invalida todos los tokens)","operationId":"logout_all_api_auth_logout_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/me":{"get":{"tags":["Autenticación"],"summary":"Consultar el usuario autenticado","operationId":"me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOut"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"tags":["Autenticación"],"summary":"Actualizar parcialmente mi perfil","operationId":"update_me_api_auth_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfilePatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/me/password":{"post":{"tags":["Autenticación"],"summary":"Cambiar contraseña (cierra las demás sesiones)","operationId":"change_password_api_auth_me_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordChangeIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenOut"}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/me/organizer-request":{"get":{"tags":["Autenticación"],"summary":"Estado de mi última solicitud de organizador","operationId":"my_organizer_request_api_auth_me_organizer_request_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/OrganizerRequestOut"},{"type":"null"}],"title":"Response My Organizer Request Api Auth Me Organizer Request Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["Autenticación"],"summary":"Solicitar permisos de organizador (queda pendiente de aprobación)","operationId":"request_organizer_api_auth_me_organizer_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizerRequestIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizerRequestOut"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/events":{"get":{"tags":["Eventos"],"summary":"Listar eventos públicos (catálogo)","operationId":"list_events_api_events_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Texto a buscar","title":"Q"},"description":"Texto a buscar"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40,"pattern":"^[a-z0-9\\-]*$"},{"type":"null"}],"description":"Categoría general (slug)","title":"Category"},"description":"Categoría general (slug)"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"City"}},{"name":"venue","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"description":"Lugar o recinto","title":"Venue"},"description":"Lugar o recinto"},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"}},{"name":"min_price_cents","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Min Price Cents"}},{"name":"max_price_cents","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Max Price Cents"}},{"name":"featured","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Solo eventos destacados por el administrador","title":"Featured"},"description":"Solo eventos destacados por el administrador"},{"name":"include_past","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Past"}},{"name":"sort","in":"query","required":false,"schema":{"enum":["date","price_asc","price_desc","newest","popular"],"type":"string","default":"date","title":"Sort"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":12,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_EventOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"tags":["Eventos"],"summary":"HEAD de la colección: solo encabezados (X-Total-Count)","operationId":"head_events_api_events_head","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Q"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40,"pattern":"^[a-z0-9\\-]*$"},{"type":"null"}],"description":"Categoría general (slug)","title":"Category"},"description":"Categoría general (slug)"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"City"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"tags":["Eventos"],"summary":"OPTIONS: métodos permitidos en /api/events","operationId":"options_events_api_events_options","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AllowedMethodsOut"}}}}}},"post":{"tags":["Eventos"],"summary":"Crear un evento (borrador o publicado)","operationId":"create_event_api_events_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/events/{event_id}":{"get":{"tags":["Eventos"],"summary":"Consultar un evento","operationId":"get_event_api_events__event_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"head":{"tags":["Eventos"],"summary":"HEAD de un evento: existencia, disponibilidad y última modificación","operationId":"head_event_api_events__event_id__head","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"tags":["Eventos"],"summary":"OPTIONS: métodos permitidos en un evento","operationId":"options_event_api_events__event_id__options","parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AllowedMethodsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Eventos"],"summary":"Actualizar completamente un evento propio","operationId":"replace_event_api_events__event_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventReplace"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Eventos"],"summary":"Actualizar parcialmente un evento propio (p. ej. publicar)","operationId":"patch_event_api_events__event_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Eventos"],"summary":"Eliminar un evento sin compras","operationId":"delete_event_api_events__event_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"description":"Tiene ventas: debe cancelarse","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/events/{event_id}/cancel":{"post":{"tags":["Eventos"],"summary":"Cancelar un evento: invalida boletos y reembolsa (simulado) las compras","operationId":"cancel_event_api_events__event_id__cancel_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/events/{event_id}/image":{"post":{"tags":["Eventos"],"summary":"Subir la imagen promocional (PNG, JPG o WEBP)","operationId":"upload_image_api_events__event_id__image_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_image_api_events__event_id__image_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventOut"}}}},"413":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Request Entity Too Large"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Unprocessable Entity"}}}},"/api/events/{event_id}/categories":{"get":{"tags":["Eventos"],"summary":"Categorías de boleto con su inventario","operationId":"list_ticket_categories_api_events__event_id__categories_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TicketCategoryOut"},"title":"Response List Ticket Categories Api Events  Event Id  Categories Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Eventos"],"summary":"Agregar una categoría de boleto (General, VIP, Palco…)","operationId":"create_ticket_category_api_events__event_id__categories_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCategoryIn"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCategoryOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Unprocessable Entity"}}}},"/api/events/{event_id}/categories/{category_id}":{"put":{"tags":["Eventos"],"summary":"Reemplazar una categoría de boleto","operationId":"replace_ticket_category_api_events__event_id__categories__category_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}},{"name":"category_id","in":"path","required":true,"schema":{"type":"integer","title":"Category Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCategoryIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCategoryOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Eventos"],"summary":"Modificar parcialmente una categoría (precio, capacidad, activa…)","operationId":"patch_ticket_category_api_events__event_id__categories__category_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}},{"name":"category_id","in":"path","required":true,"schema":{"type":"integer","title":"Category Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCategoryPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCategoryOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Eventos"],"summary":"Eliminar una categoría sin ventas (con ventas: desactivarla)","operationId":"delete_ticket_category_api_events__event_id__categories__category_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}},{"name":"category_id","in":"path","required":true,"schema":{"type":"integer","title":"Category Id"}}],"responses":{"204":{"description":"Successful Response"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/events/{event_id}/categories/{category_id}/seats":{"get":{"tags":["Eventos"],"summary":"Mapa de asientos numerados con su disponibilidad real","operationId":"category_seats_api_events__event_id__categories__category_id__seats_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}},{"name":"category_id","in":"path","required":true,"schema":{"type":"integer","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SeatMapOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/orders/quote":{"get":{"tags":["Compras"],"summary":"Cotizar (formato 1.0: una categoría) — precio calculado por el servidor","operationId":"quote_get_api_orders_quote_get","parameters":[{"name":"event_id","in":"query","required":true,"schema":{"type":"integer","minimum":1,"title":"Event Id"}},{"name":"quantity","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":1,"title":"Quantity"}},{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Compras"],"summary":"Cotizar varias categorías (y asientos) antes de comprar","operationId":"quote_post_api_orders_quote_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Unprocessable Entity"}}}},"/api/orders":{"post":{"tags":["Compras"],"summary":"Crear una compra simulada y emitir los boletos","description":"Compra **simulada**: no se realiza ningún cobro real. El servidor calcula precios, comisión y disponibilidad por categoría. Envía un encabezado `Idempotency-Key` único por intento de compra: si la solicitud se repite (doble clic, reintento) se devuelve la misma orden con 200.","operationId":"create_order_api_orders_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","minLength":8,"maxLength":80},{"type":"null"}],"description":"UUID único por intento de compra","title":"Idempotency-Key"},"description":"UUID único por intento de compra"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderDetailOut"}}}},"200":{"description":"Repetición idempotente: orden ya existente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderDetailOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"description":"Sin disponibilidad, asiento vendido, evento cancelado o ya ocurrido","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Datos inválidos o campos no permitidos (p. ej. un precio enviado por el cliente)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Too Many Requests"}}}},"/api/orders/me":{"get":{"tags":["Compras"],"summary":"Historial de compras del usuario autenticado","operationId":"my_orders_api_orders_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OrderOut"},"type":"array","title":"Response My Orders Api Orders Me Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/orders/{order_id}":{"get":{"tags":["Compras"],"summary":"Consultar una compra (comprador, organizador del evento o administrador)","operationId":"get_order_api_orders__order_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"integer","title":"Order Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderDetailOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tickets/me":{"get":{"tags":["Boletos"],"summary":"Boletos del usuario autenticado","operationId":"my_tickets_api_tickets_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TicketOut"},"type":"array","title":"Response My Tickets Api Tickets Me Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/tickets/validate":{"post":{"tags":["Boletos"],"summary":"Validar un boleto en el acceso de un evento","description":"Acepta el contenido del QR (`BLV1.…`, firmado con HMAC) o la referencia manual (`BLV-XXXX-XXXX`). El paso de *válido* a *utilizado* es atómico.\n\n* **200** — Entrada válida. Acceso autorizado.\n* **409** — Entrada ya utilizada. Acceso rechazado.\n* **422** — Entrada inválida (no existe, alterada, invalidada por transferencia, cancelada u otro evento).\n\nTodas las respuestas comparten el mismo cuerpo `ValidateOut` y quedan en la bitácora.","operationId":"validate_ticket_api_tickets_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateIn"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateOut"}}}},"409":{"description":"Entrada ya utilizada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateOut"}}}},"422":{"description":"Entrada inválida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateOut"}}}},"403":{"description":"Sin permiso sobre el evento","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/tickets/{ticket_id}":{"get":{"tags":["Boletos"],"summary":"Consultar un boleto (dueño, organizador del evento o administrador)","operationId":"get_ticket_api_tickets__ticket_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"string","title":"Ticket Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tickets/{ticket_id}/qr":{"get":{"tags":["Boletos"],"summary":"Imagen QR del boleto (PNG o SVG)","operationId":"ticket_qr_api_tickets__ticket_id__qr_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"string","title":"Ticket Id"}},{"name":"format","in":"query","required":false,"schema":{"enum":["png","svg"],"type":"string","default":"png","title":"Format"}},{"name":"scale","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":2,"default":8,"title":"Scale"}}],"responses":{"200":{"description":"Successful Response","content":{"image/png":{},"image/svg+xml":{}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tickets/{ticket_id}/pdf":{"get":{"tags":["Boletos"],"summary":"Boleto digital en PDF (listo para imprimir)","operationId":"ticket_pdf_api_tickets__ticket_id__pdf_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"string","title":"Ticket Id"}},{"name":"download","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Download"}}],"responses":{"200":{"description":"Successful Response","content":{"application/pdf":{}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transfers/quote":{"get":{"tags":["Transferencias"],"summary":"Resumen transparente antes de transferir (comisión calculada por el servidor)","operationId":"quote_api_transfers_quote_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"recipient_email","in":"query","required":true,"schema":{"type":"string","format":"email","title":"Recipient Email"}},{"name":"ticket_ids","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":10,"title":"Ticket Ids"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferQuoteOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transfers":{"post":{"tags":["Transferencias"],"summary":"Enviar boletos a otra cuenta BOLEVA (queda pendiente de aceptación)","operationId":"create_api_transfers_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TransferOut"},"type":"array","title":"Response Create Api Transfers Post"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Unprocessable Entity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/transfers/me":{"get":{"tags":["Transferencias"],"summary":"Mis transferencias enviadas y recibidas","operationId":"mine_api_transfers_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferListOut"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/transfers/{transfer_id}":{"get":{"tags":["Transferencias"],"summary":"Consultar una transferencia (remitente, destinatario o admin)","operationId":"get_one_api_transfers__transfer_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"transfer_id","in":"path","required":true,"schema":{"type":"string","title":"Transfer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Transferencias"],"summary":"Cancelar una transferencia enviada que sigue pendiente","operationId":"cancel_api_transfers__transfer_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"transfer_id","in":"path","required":true,"schema":{"type":"string","title":"Transfer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transfers/{transfer_id}/accept":{"post":{"tags":["Transferencias"],"summary":"Aceptar una transferencia recibida: el boleto (con QR nuevo) pasa a tu cuenta","operationId":"accept_api_transfers__transfer_id__accept_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"transfer_id","in":"path","required":true,"schema":{"type":"string","title":"Transfer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/transfers/{transfer_id}/reject":{"post":{"tags":["Transferencias"],"summary":"Rechazar una transferencia recibida (el boleto regresa a su propietario)","operationId":"reject_api_transfers__transfer_id__reject_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"transfer_id","in":"path","required":true,"schema":{"type":"string","title":"Transfer Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organizer/events":{"get":{"tags":["Organizador"],"summary":"Mis eventos (todos los estados)","operationId":"my_events_api_organizer_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventOut"},"type":"array","title":"Response My Events Api Organizer Events Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/organizer/events/stats":{"get":{"tags":["Organizador"],"summary":"Ventas y disponibilidad por evento propio","operationId":"my_events_stats_api_organizer_events_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/EventStats"},"type":"array","title":"Response My Events Stats Api Organizer Events Stats Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/organizer/dashboard":{"get":{"tags":["Organizador"],"summary":"Estadísticas: ventas, categorías, volumen, transferencias, embudo y comisiones","operationId":"dashboard_api_organizer_dashboard_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Event Id"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizerDashboard"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organizer/events/{event_id}/stats":{"get":{"tags":["Organizador"],"summary":"Estadísticas de un evento propio (vendidos, ingresos, comisión, accesos)","operationId":"event_stats_api_organizer_events__event_id__stats_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventStats"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organizer/events/{event_id}/categories":{"get":{"tags":["Organizador"],"summary":"Ventas e inventario por categoría de un evento propio","operationId":"event_categories_api_organizer_events__event_id__categories_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CategoryStats"},"title":"Response Event Categories Api Organizer Events  Event Id  Categories Get"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organizer/events/{event_id}/sales":{"get":{"tags":["Organizador"],"summary":"Ventas registradas de un evento propio","operationId":"event_sales_api_organizer_events__event_id__sales_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SaleRow"},"title":"Response Event Sales Api Organizer Events  Event Id  Sales Get"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/organizer/events/{event_id}/validations":{"get":{"tags":["Organizador"],"summary":"Bitácora de accesos validados/rechazados de un evento propio","operationId":"event_validations_api_organizer_events__event_id__validations_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ValidationLogOut"},"title":"Response Event Validations Api Organizer Events  Event Id  Validations Get"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stats":{"get":{"tags":["Administración"],"summary":"Estadísticas generales (filtros: evento y fechas)","operationId":"stats_api_admin_stats_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Event Id"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminStats"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/organizer-requests":{"get":{"tags":["Administración"],"summary":"Solicitudes para ser organizador","operationId":"list_requests_api_admin_organizer_requests_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["pending","approved","rejected"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_OrganizerRequestOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/organizer-requests/{request_id}/approve":{"post":{"tags":["Administración"],"summary":"Aprobar: el usuario obtiene permisos de organizador","operationId":"approve_request_api_admin_organizer_requests__request_id__approve_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"integer","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizerRequestOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/organizer-requests/{request_id}/reject":{"post":{"tags":["Administración"],"summary":"Rechazar la solicitud","operationId":"reject_request_api_admin_organizer_requests__request_id__reject_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"integer","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizerRequestOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users":{"get":{"tags":["Administración"],"summary":"Listar usuarios (filtro por rol o texto)","operationId":"list_users_api_admin_users_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"enum":["buyer","organizer","admin"],"type":"string"},{"type":"null"}],"title":"Role"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Q"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_UserOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}":{"patch":{"tags":["Administración"],"summary":"Suspender/activar una cuenta o retirar/otorgar permisos de organizador","operationId":"patch_user_api_admin_users__user_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminUserPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserOut"}}}},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/organizers":{"get":{"tags":["Administración"],"summary":"Organizadores autorizados (para asignar eventos)","operationId":"list_organizers_api_admin_organizers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserOut"},"type":"array","title":"Response List Organizers Api Admin Organizers Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/events":{"get":{"tags":["Administración"],"summary":"Todos los eventos (cualquier estado)","operationId":"list_events_api_admin_events_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["draft","published","cancelled"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"featured","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Featured"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_EventOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/events/{event_id}/featured":{"patch":{"tags":["Administración"],"summary":"Destacar un evento en el carrusel de inicio","operationId":"feature_event_api_admin_events__event_id__featured_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"path","required":true,"schema":{"type":"integer","title":"Event Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeaturedPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/orders":{"get":{"tags":["Administración"],"summary":"Órdenes simuladas de toda la plataforma","operationId":"list_orders_api_admin_orders_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"event_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Event Id"}},{"name":"volume_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Volume Only"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_AdminOrderOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/transfers":{"get":{"tags":["Administración"],"summary":"Transferencias de boletos (simuladas)","operationId":"list_transfers_api_admin_transfers_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"enum":["pending","accepted","rejected","cancelled","expired"],"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"event_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"title":"Event Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_TransferOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/settings":{"get":{"tags":["Administración"],"summary":"Reglas comerciales de la plataforma","operationId":"get_platform_settings_api_admin_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformSettingsOut"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"tags":["Administración"],"summary":"Cambiar comisión, umbral de volumen y política de transferencias (aplica a operaciones nuevas)","operationId":"patch_platform_settings_api_admin_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformSettingsPatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlatformSettingsOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/categories":{"get":{"tags":["Administración"],"summary":"Categorías generales (incluye desactivadas)","operationId":"list_general_categories_api_admin_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CategoryOut"},"type":"array","title":"Response List General Categories Api Admin Categories Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["Administración"],"summary":"Crear categoría general","operationId":"create_general_category_api_admin_categories_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralCategoryIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryOut"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/categories/{slug}":{"patch":{"tags":["Administración"],"summary":"Editar o desactivar una categoría general","operationId":"patch_general_category_api_admin_categories__slug__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralCategoryPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Administración"],"summary":"Eliminar una categoría general sin eventos","operationId":"delete_general_category_api_admin_categories__slug__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/promotions":{"get":{"tags":["Administración"],"summary":"Todas las promociones y novedades","operationId":"list_promotions_api_admin_promotions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PromotionOut"},"type":"array","title":"Response List Promotions Api Admin Promotions Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["Administración"],"summary":"Crear promoción o novedad","operationId":"create_promotion_api_admin_promotions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/promotions/{promo_id}":{"put":{"tags":["Administración"],"summary":"Reemplazar una promoción","operationId":"replace_promotion_api_admin_promotions__promo_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"promo_id","in":"path","required":true,"schema":{"type":"integer","title":"Promo Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Administración"],"summary":"Modificar parcialmente una promoción","operationId":"patch_promotion_api_admin_promotions__promo_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"promo_id","in":"path","required":true,"schema":{"type":"integer","title":"Promo Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromotionOut"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Administración"],"summary":"Eliminar una promoción","operationId":"delete_promotion_api_admin_promotions__promo_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"promo_id","in":"path","required":true,"schema":{"type":"integer","title":"Promo Id"}}],"responses":{"204":{"description":"Successful Response"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Message"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/audit":{"get":{"tags":["Administración"],"summary":"Bitácora de auditoría","operationId":"list_audit_api_admin_audit_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Action"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_AuditOut_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/health":{"get":{"tags":["Sistema"],"summary":"Estado del servicio y de la base de datos","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOut"}}}}}},"head":{"tags":["Sistema"],"summary":"Verificación ligera (sin cuerpo)","operationId":"health_head_api_health_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/meta/config":{"get":{"tags":["Sistema"],"summary":"Configuración pública y reglas comerciales vigentes","operationId":"public_config_api_meta_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicConfigOut"}}}}}}},"/api/meta/categories":{"get":{"tags":["Sistema"],"summary":"Categorías generales activas con número de eventos","operationId":"categories_api_meta_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CategoryOut"},"type":"array","title":"Response Categories Api Meta Categories Get"}}}}}}},"/api/meta/cities":{"get":{"tags":["Sistema"],"summary":"Ciudades con eventos publicados","operationId":"cities_api_meta_cities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/CityOut"},"type":"array","title":"Response Cities Api Meta Cities Get"}}}}}}},"/api/promotions":{"get":{"tags":["Sistema"],"summary":"Promociones y novedades vigentes (creadas por BOLEVA)","operationId":"public_promotions_api_promotions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PromotionOut"},"type":"array","title":"Response Public Promotions Api Promotions Get"}}}}}}},"/api/analytics/events":{"post":{"tags":["Sistema"],"summary":"Registrar un paso anónimo del embudo (visita, evento consultado, selección de boletos)","operationId":"track_api_analytics_events_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsIn"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AdminOrderOut":{"properties":{"id":{"type":"integer","title":"Id"},"reference":{"type":"string","title":"Reference"},"event":{"$ref":"#/components/schemas/EventSummary"},"quantity":{"type":"integer","title":"Quantity"},"unit_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Price Cents"},"subtotal_cents":{"type":"integer","title":"Subtotal Cents"},"service_fee_cents":{"type":"integer","title":"Service Fee Cents"},"total_cents":{"type":"integer","title":"Total Cents"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","enum":["paid","refunded"],"title":"Status"},"is_volume":{"type":"boolean","title":"Is Volume"},"items":{"items":{"$ref":"#/components/schemas/OrderItemOut"},"type":"array","title":"Items"},"payment_provider":{"type":"string","title":"Payment Provider"},"payment_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Reference"},"created_at":{"type":"string","title":"Created At"},"refunded_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refunded At"},"simulated":{"type":"boolean","title":"Simulated","description":"Toda compra es una demostración sin cobro real","default":true},"buyer_name":{"type":"string","title":"Buyer Name"},"buyer_email":{"type":"string","title":"Buyer Email"},"commission_bps":{"type":"integer","title":"Commission Bps"},"commission_cents":{"type":"integer","title":"Commission Cents"},"organizer_net_cents":{"type":"integer","title":"Organizer Net Cents"}},"type":"object","required":["id","reference","event","quantity","unit_price_cents","subtotal_cents","service_fee_cents","total_cents","currency","status","is_volume","items","payment_provider","payment_reference","created_at","refunded_at","buyer_name","buyer_email","commission_bps","commission_cents","organizer_net_cents"],"title":"AdminOrderOut"},"AdminStats":{"properties":{"commission_rate_bps":{"type":"integer","title":"Commission Rate Bps","description":"Tasa vigente para nuevas ventas"},"period":{"$ref":"#/components/schemas/Period"},"totals":{"$ref":"#/components/schemas/Totals"},"events":{"items":{"$ref":"#/components/schemas/EventStats"},"type":"array","title":"Events"},"categories":{"items":{"$ref":"#/components/schemas/CategoryStats"},"type":"array","title":"Categories"},"top_categories":{"items":{"$ref":"#/components/schemas/CategoryStats"},"type":"array","title":"Top Categories"},"volume":{"$ref":"#/components/schemas/VolumeStats"},"transfers":{"$ref":"#/components/schemas/TransferStats"},"risk":{"additionalProperties":true,"type":"object","title":"Risk","description":"Indicadores informativos (no implican sanciones)"},"funnel":{"$ref":"#/components/schemas/Funnel"},"recent_sales":{"items":{"$ref":"#/components/schemas/SaleRow"},"type":"array","title":"Recent Sales"},"daily_sales":{"items":{"$ref":"#/components/schemas/DailySales"},"type":"array","title":"Daily Sales"},"users_total":{"type":"integer","title":"Users Total"},"users_by_role":{"additionalProperties":{"type":"integer"},"type":"object","title":"Users By Role"},"users_suspended":{"type":"integer","title":"Users Suspended"},"pending_organizer_requests":{"type":"integer","title":"Pending Organizer Requests"},"top_events":{"items":{"$ref":"#/components/schemas/EventStats"},"type":"array","title":"Top Events"}},"type":"object","required":["commission_rate_bps","period","totals","events","categories","top_categories","volume","transfers","risk","funnel","recent_sales","daily_sales","users_total","users_by_role","users_suspended","pending_organizer_requests","top_events"],"title":"AdminStats"},"AdminUserPatch":{"properties":{"status":{"anyOf":[{"type":"string","enum":["active","suspended"]},{"type":"null"}],"title":"Status"},"role":{"anyOf":[{"type":"string","enum":["buyer","organizer"]},{"type":"null"}],"title":"Role"}},"additionalProperties":false,"type":"object","title":"AdminUserPatch","description":"El administrador puede suspender/activar cuentas y alternar comprador/organizador.\n\nEl rol ``admin`` solo se asigna con ``scripts/create_admin.py`` (mecanismo controlado)."},"AllowedMethodsOut":{"properties":{"resource":{"type":"string","title":"Resource"},"allow":{"items":{"type":"string"},"type":"array","title":"Allow"},"methods":{"additionalProperties":{"type":"string"},"type":"object","title":"Methods"}},"type":"object","required":["resource","allow","methods"],"title":"AllowedMethodsOut"},"AnalyticsIn":{"properties":{"kind":{"type":"string","pattern":"^(visit|event_view|ticket_selection)$","title":"Kind"},"visitor_id":{"type":"string","pattern":"^[0-9a-fA-F\\-]{32,36}$","title":"Visitor Id","description":"Identificador aleatorio anónimo del navegador"},"event_id":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Event Id"}},"additionalProperties":false,"type":"object","required":["kind","visitor_id"],"title":"AnalyticsIn"},"AuditOut":{"properties":{"id":{"type":"integer","title":"Id"},"action":{"type":"string","title":"Action"},"actor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Name"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"entity_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Id"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details"},"ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","action","actor_name","entity_type","entity_id","details","ip","created_at"],"title":"AuditOut"},"Body_oauth_token_api_auth_token_post":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_oauth_token_api_auth_token_post"},"Body_upload_image_api_events__event_id__image_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_image_api_events__event_id__image_post"},"CancelOut":{"properties":{"event":{"$ref":"#/components/schemas/EventOut"},"tickets_cancelled":{"type":"integer","title":"Tickets Cancelled"},"orders_refunded":{"type":"integer","title":"Orders Refunded"},"detail":{"type":"string","title":"Detail"}},"type":"object","required":["event","tickets_cancelled","orders_refunded","detail"],"title":"CancelOut"},"CategoryOut":{"properties":{"value":{"type":"string","title":"Value"},"label":{"type":"string","title":"Label"},"icon":{"type":"string","title":"Icon"},"sort_order":{"type":"integer","title":"Sort Order"},"is_active":{"type":"boolean","title":"Is Active"},"published_events":{"type":"integer","title":"Published Events"},"total_events":{"type":"integer","title":"Total Events"}},"type":"object","required":["value","label","icon","sort_order","is_active","published_events","total_events"],"title":"CategoryOut"},"CategoryStats":{"properties":{"event_id":{"type":"integer","title":"Event Id"},"event_title":{"type":"string","title":"Event Title"},"category_id":{"type":"integer","title":"Category Id"},"name":{"type":"string","title":"Name"},"seating_mode":{"type":"string","title":"Seating Mode"},"price_cents":{"type":"integer","title":"Price Cents"},"capacity":{"type":"integer","title":"Capacity"},"tickets_available":{"type":"integer","title":"Tickets Available"},"tickets_sold":{"type":"integer","title":"Tickets Sold"},"tickets_sold_paid":{"type":"integer","title":"Tickets Sold Paid"},"gross_cents":{"type":"integer","title":"Gross Cents"},"sold_percent":{"type":"number","title":"Sold Percent"},"availability_status":{"type":"string","title":"Availability Status"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["event_id","event_title","category_id","name","seating_mode","price_cents","capacity","tickets_available","tickets_sold","tickets_sold_paid","gross_cents","sold_percent","availability_status","is_active"],"title":"CategoryStats"},"CityOut":{"properties":{"city":{"type":"string","title":"City"},"state":{"type":"string","title":"State"},"published_events":{"type":"integer","title":"Published Events"}},"type":"object","required":["city","state","published_events"],"title":"CityOut"},"DailySales":{"properties":{"date":{"type":"string","title":"Date"},"tickets":{"type":"integer","title":"Tickets"},"gross_cents":{"type":"integer","title":"Gross Cents"}},"type":"object","required":["date","tickets","gross_cents"],"title":"DailySales"},"EventCreate":{"properties":{"title":{"type":"string","maxLength":150,"minLength":3,"title":"Title","examples":["Festival de Talento Colima"]},"description":{"type":"string","maxLength":5000,"minLength":10,"title":"Description"},"category":{"type":"string","pattern":"^[a-z0-9][a-z0-9\\-]{1,38}[a-z0-9]$","title":"Category","description":"Identificador de la categoría general","examples":["festivales"]},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url","examples":["/static/images/covers/festivales.svg"]},"venue":{"type":"string","maxLength":150,"minLength":2,"title":"Venue","examples":["Teatro Hidalgo"]},"address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address"},"city":{"type":"string","maxLength":80,"minLength":2,"title":"City","examples":["Colima"]},"state":{"type":"string","maxLength":80,"minLength":2,"title":"State","examples":["Colima"]},"starts_at":{"type":"string","format":"date-time","title":"Starts At","description":"Fecha y hora de inicio (ISO-8601). Sin zona horaria se asume hora del centro de México."},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"additional_info":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}],"title":"Additional Info","description":"Información adicional"},"terms":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}],"title":"Terms","description":"Condiciones del evento"},"status":{"type":"string","enum":["draft","published"],"title":"Status","description":"`draft` (borrador) o `published`","default":"draft"},"ticket_categories":{"anyOf":[{"items":{"$ref":"#/components/schemas/TicketCategoryIn"},"type":"array","maxItems":12},{"type":"null"}],"title":"Ticket Categories"},"price_cents":{"anyOf":[{"type":"integer","maximum":10000000.0,"minimum":0.0},{"type":"null"}],"title":"Price Cents"},"capacity":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":1.0},{"type":"null"}],"title":"Capacity"},"organizer_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organizer Id","description":"Solo administradores: crear a nombre de un organizador"}},"additionalProperties":false,"type":"object","required":["title","description","category","venue","city","state","starts_at"],"title":"EventCreate","description":"Crea un evento con sus categorías. Compatibilidad 1.0: sin `ticket_categories`,\n`price_cents` y `capacity` crean una categoría «General»."},"EventOut":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"category":{"type":"string","title":"Category"},"category_label":{"type":"string","title":"Category Label"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"venue":{"type":"string","title":"Venue"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"type":"string","title":"City"},"state":{"type":"string","title":"State"},"starts_at":{"type":"string","title":"Starts At"},"ends_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ends At"},"additional_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Additional Info"},"terms":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms"},"price_cents":{"type":"integer","title":"Price Cents","description":"Precio «desde»: el menor precio de las categorías activas con disponibilidad"},"currency":{"type":"string","title":"Currency","default":"MXN"},"capacity":{"type":"integer","title":"Capacity"},"tickets_available":{"type":"integer","title":"Tickets Available"},"tickets_sold":{"type":"integer","title":"Tickets Sold"},"sold_percent":{"type":"number","title":"Sold Percent"},"availability_status":{"type":"string","enum":["available","high_demand","low","sold_out"],"title":"Availability Status"},"status":{"type":"string","enum":["draft","published","cancelled"],"title":"Status"},"is_demo":{"type":"boolean","title":"Is Demo"},"is_featured":{"type":"boolean","title":"Is Featured"},"featured_rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Featured Rank"},"organizer":{"$ref":"#/components/schemas/UserPublic"},"ticket_categories":{"items":{"$ref":"#/components/schemas/TicketCategoryOut"},"type":"array","title":"Ticket Categories"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"cancelled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancelled At"}},"type":"object","required":["id","title","description","category","category_label","image_url","venue","address","city","state","starts_at","ends_at","additional_info","terms","price_cents","capacity","tickets_available","tickets_sold","sold_percent","availability_status","status","is_demo","is_featured","featured_rank","organizer","ticket_categories","created_at","updated_at","published_at","cancelled_at"],"title":"EventOut"},"EventPatch":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":150,"minLength":3},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":5000,"minLength":10},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string","pattern":"^[a-z0-9][a-z0-9\\-]{1,38}[a-z0-9]$"},{"type":"null"}],"title":"Category"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"venue":{"anyOf":[{"type":"string","maxLength":150,"minLength":2},{"type":"null"}],"title":"Venue"},"address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string","maxLength":80,"minLength":2},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string","maxLength":80,"minLength":2},{"type":"null"}],"title":"State"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"additional_info":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}],"title":"Additional Info"},"terms":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}],"title":"Terms"},"price_cents":{"anyOf":[{"type":"integer","maximum":10000000.0,"minimum":0.0},{"type":"null"}],"title":"Price Cents"},"capacity":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":1.0},{"type":"null"}],"title":"Capacity"},"ticket_categories":{"anyOf":[{"items":{"$ref":"#/components/schemas/TicketCategoryIn"},"type":"array","maxItems":12,"minItems":1},{"type":"null"}],"title":"Ticket Categories"},"status":{"anyOf":[{"type":"string","enum":["draft","published"]},{"type":"null"}],"title":"Status"}},"additionalProperties":false,"type":"object","title":"EventPatch","description":"Cuerpo de PATCH: solo los campos enviados se modifican."},"EventReplace":{"properties":{"title":{"type":"string","maxLength":150,"minLength":3,"title":"Title","examples":["Festival de Talento Colima"]},"description":{"type":"string","maxLength":5000,"minLength":10,"title":"Description"},"category":{"type":"string","pattern":"^[a-z0-9][a-z0-9\\-]{1,38}[a-z0-9]$","title":"Category","description":"Identificador de la categoría general","examples":["festivales"]},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url","examples":["/static/images/covers/festivales.svg"]},"venue":{"type":"string","maxLength":150,"minLength":2,"title":"Venue","examples":["Teatro Hidalgo"]},"address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address"},"city":{"type":"string","maxLength":80,"minLength":2,"title":"City","examples":["Colima"]},"state":{"type":"string","maxLength":80,"minLength":2,"title":"State","examples":["Colima"]},"starts_at":{"type":"string","format":"date-time","title":"Starts At","description":"Fecha y hora de inicio (ISO-8601). Sin zona horaria se asume hora del centro de México."},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"additional_info":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}],"title":"Additional Info","description":"Información adicional"},"terms":{"anyOf":[{"type":"string","maxLength":3000},{"type":"null"}],"title":"Terms","description":"Condiciones del evento"},"status":{"type":"string","enum":["draft","published"],"title":"Status"},"ticket_categories":{"anyOf":[{"items":{"$ref":"#/components/schemas/TicketCategoryIn"},"type":"array","maxItems":12,"minItems":1},{"type":"null"}],"title":"Ticket Categories"},"price_cents":{"anyOf":[{"type":"integer","maximum":10000000.0,"minimum":0.0},{"type":"null"}],"title":"Price Cents"},"capacity":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":1.0},{"type":"null"}],"title":"Capacity"}},"additionalProperties":false,"type":"object","required":["title","description","category","venue","city","state","starts_at","status"],"title":"EventReplace","description":"Cuerpo de PUT: representación completa del evento, incluida la lista de categorías."},"EventStats":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"status":{"type":"string","title":"Status"},"category":{"type":"string","title":"Category"},"city":{"type":"string","title":"City"},"starts_at":{"type":"string","title":"Starts At"},"price_cents":{"type":"integer","title":"Price Cents"},"capacity":{"type":"integer","title":"Capacity"},"tickets_available":{"type":"integer","title":"Tickets Available"},"tickets_sold":{"type":"integer","title":"Tickets Sold"},"sold_percent":{"type":"number","title":"Sold Percent"},"availability_status":{"type":"string","title":"Availability Status"},"tickets_validated":{"type":"integer","title":"Tickets Validated"},"transfers_accepted":{"type":"integer","title":"Transfers Accepted"},"orders_count":{"type":"integer","title":"Orders Count"},"gross_cents":{"type":"integer","title":"Gross Cents"},"commission_cents":{"type":"integer","title":"Commission Cents"},"net_cents":{"type":"integer","title":"Net Cents"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"is_demo":{"type":"boolean","title":"Is Demo"},"is_featured":{"type":"boolean","title":"Is Featured"}},"type":"object","required":["id","title","status","category","city","starts_at","price_cents","capacity","tickets_available","tickets_sold","sold_percent","availability_status","tickets_validated","transfers_accepted","orders_count","gross_cents","commission_cents","net_cents","image_url","is_demo","is_featured"],"title":"EventStats"},"EventSummary":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"category":{"type":"string","title":"Category"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"venue":{"type":"string","title":"Venue"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"type":"string","title":"City"},"state":{"type":"string","title":"State"},"starts_at":{"type":"string","title":"Starts At"},"status":{"type":"string","enum":["draft","published","cancelled"],"title":"Status"}},"type":"object","required":["id","title","category","image_url","venue","city","state","starts_at","status"],"title":"EventSummary"},"FeaturedPatch":{"properties":{"is_featured":{"type":"boolean","title":"Is Featured"},"featured_rank":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Featured Rank"}},"additionalProperties":false,"type":"object","required":["is_featured"],"title":"FeaturedPatch"},"Funnel":{"properties":{"period_start":{"type":"string","title":"Period Start"},"period_end":{"type":"string","title":"Period End"},"steps":{"items":{"$ref":"#/components/schemas/FunnelStep"},"type":"array","title":"Steps"},"buyers":{"type":"integer","title":"Buyers"},"orders":{"type":"integer","title":"Orders","description":"Órdenes pagadas en el periodo (un comprador puede tener varias)"}},"type":"object","required":["period_start","period_end","steps","buyers","orders"],"title":"Funnel"},"FunnelStep":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"value":{"type":"integer","title":"Value"},"unit":{"type":"string","title":"Unit"}},"type":"object","required":["key","label","value","unit"],"title":"FunnelStep"},"GeneralCategoryIn":{"properties":{"slug":{"type":"string","pattern":"^[a-z0-9][a-z0-9\\-]{1,38}[a-z0-9]$","title":"Slug","examples":["familiar"]},"label":{"type":"string","maxLength":60,"minLength":2,"title":"Label","examples":["Familiar"]},"icon":{"type":"string","maxLength":30,"title":"Icon","default":"ticket"},"sort_order":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Sort Order","default":100},"is_active":{"type":"boolean","title":"Is Active","default":true}},"additionalProperties":false,"type":"object","required":["slug","label"],"title":"GeneralCategoryIn"},"GeneralCategoryPatch":{"properties":{"label":{"anyOf":[{"type":"string","maxLength":60,"minLength":2},{"type":"null"}],"title":"Label"},"icon":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Icon"},"sort_order":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":0.0},{"type":"null"}],"title":"Sort Order"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"additionalProperties":false,"type":"object","title":"GeneralCategoryPatch"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthOut":{"properties":{"status":{"type":"string","title":"Status"},"app":{"type":"string","title":"App"},"version":{"type":"string","title":"Version"},"environment":{"type":"string","title":"Environment"},"database":{"type":"string","title":"Database"}},"type":"object","required":["status","app","version","environment","database"],"title":"HealthOut"},"LoginIn":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":128,"minLength":1,"title":"Password"}},"type":"object","required":["email","password"],"title":"LoginIn"},"Message":{"properties":{"detail":{"type":"string","title":"Detail"}},"type":"object","required":["detail"],"title":"Message"},"OAuthTokenOut":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","const":"bearer","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token"],"title":"OAuthTokenOut"},"OrderCreate":{"properties":{"event_id":{"type":"integer","minimum":1.0,"title":"Event Id"},"items":{"anyOf":[{"items":{"$ref":"#/components/schemas/OrderItemIn"},"type":"array","maxItems":12,"minItems":1},{"type":"null"}],"title":"Items"},"quantity":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Quantity"}},"additionalProperties":false,"type":"object","required":["event_id"],"title":"OrderCreate","description":"Solo se envían evento, categorías, cantidades y asientos: **precios, cargos y totales los\ncalcula el servidor**. Cualquier campo adicional (p. ej. un precio) se rechaza con 422.\n\nCompatibilidad 1.0: `{event_id, quantity}` compra en la única categoría del evento."},"OrderDetailOut":{"properties":{"id":{"type":"integer","title":"Id"},"reference":{"type":"string","title":"Reference"},"event":{"$ref":"#/components/schemas/EventSummary"},"quantity":{"type":"integer","title":"Quantity"},"unit_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Price Cents"},"subtotal_cents":{"type":"integer","title":"Subtotal Cents"},"service_fee_cents":{"type":"integer","title":"Service Fee Cents"},"total_cents":{"type":"integer","title":"Total Cents"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","enum":["paid","refunded"],"title":"Status"},"is_volume":{"type":"boolean","title":"Is Volume"},"items":{"items":{"$ref":"#/components/schemas/OrderItemOut"},"type":"array","title":"Items"},"payment_provider":{"type":"string","title":"Payment Provider"},"payment_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Reference"},"created_at":{"type":"string","title":"Created At"},"refunded_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refunded At"},"simulated":{"type":"boolean","title":"Simulated","description":"Toda compra es una demostración sin cobro real","default":true},"tickets":{"items":{"$ref":"#/components/schemas/TicketOut"},"type":"array","title":"Tickets"},"commission_bps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Commission Bps"},"commission_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Commission Cents"},"organizer_net_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Organizer Net Cents"},"buyer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buyer Name"}},"type":"object","required":["id","reference","event","quantity","unit_price_cents","subtotal_cents","service_fee_cents","total_cents","currency","status","is_volume","items","payment_provider","payment_reference","created_at","refunded_at","tickets"],"title":"OrderDetailOut"},"OrderItemIn":{"properties":{"category_id":{"type":"integer","minimum":1.0,"title":"Category Id"},"quantity":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Quantity"},"seat_ids":{"items":{"type":"integer"},"type":"array","maxItems":50,"title":"Seat Ids","description":"Solo categorías numeradas (opcional)"}},"additionalProperties":false,"type":"object","required":["category_id","quantity"],"title":"OrderItemIn"},"OrderItemOut":{"properties":{"category_id":{"type":"integer","title":"Category Id"},"category_name":{"type":"string","title":"Category Name"},"quantity":{"type":"integer","title":"Quantity"},"unit_price_cents":{"type":"integer","title":"Unit Price Cents"},"subtotal_cents":{"type":"integer","title":"Subtotal Cents"}},"type":"object","required":["category_id","category_name","quantity","unit_price_cents","subtotal_cents"],"title":"OrderItemOut"},"OrderOut":{"properties":{"id":{"type":"integer","title":"Id"},"reference":{"type":"string","title":"Reference"},"event":{"$ref":"#/components/schemas/EventSummary"},"quantity":{"type":"integer","title":"Quantity"},"unit_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Price Cents"},"subtotal_cents":{"type":"integer","title":"Subtotal Cents"},"service_fee_cents":{"type":"integer","title":"Service Fee Cents"},"total_cents":{"type":"integer","title":"Total Cents"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","enum":["paid","refunded"],"title":"Status"},"is_volume":{"type":"boolean","title":"Is Volume"},"items":{"items":{"$ref":"#/components/schemas/OrderItemOut"},"type":"array","title":"Items"},"payment_provider":{"type":"string","title":"Payment Provider"},"payment_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Reference"},"created_at":{"type":"string","title":"Created At"},"refunded_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refunded At"},"simulated":{"type":"boolean","title":"Simulated","description":"Toda compra es una demostración sin cobro real","default":true}},"type":"object","required":["id","reference","event","quantity","unit_price_cents","subtotal_cents","service_fee_cents","total_cents","currency","status","is_volume","items","payment_provider","payment_reference","created_at","refunded_at"],"title":"OrderOut"},"OrganizerDashboard":{"properties":{"commission_rate_bps":{"type":"integer","title":"Commission Rate Bps","description":"Tasa vigente para nuevas ventas"},"period":{"$ref":"#/components/schemas/Period"},"totals":{"$ref":"#/components/schemas/Totals"},"events":{"items":{"$ref":"#/components/schemas/EventStats"},"type":"array","title":"Events"},"categories":{"items":{"$ref":"#/components/schemas/CategoryStats"},"type":"array","title":"Categories"},"top_categories":{"items":{"$ref":"#/components/schemas/CategoryStats"},"type":"array","title":"Top Categories"},"volume":{"$ref":"#/components/schemas/VolumeStats"},"transfers":{"$ref":"#/components/schemas/TransferStats"},"risk":{"additionalProperties":true,"type":"object","title":"Risk","description":"Indicadores informativos (no implican sanciones)"},"funnel":{"$ref":"#/components/schemas/Funnel"},"recent_sales":{"items":{"$ref":"#/components/schemas/SaleRow"},"type":"array","title":"Recent Sales"},"daily_sales":{"items":{"$ref":"#/components/schemas/DailySales"},"type":"array","title":"Daily Sales"}},"type":"object","required":["commission_rate_bps","period","totals","events","categories","top_categories","volume","transfers","risk","funnel","recent_sales","daily_sales"],"title":"OrganizerDashboard"},"OrganizerRequestIn":{"properties":{"organization_name":{"type":"string","maxLength":150,"minLength":2,"title":"Organization Name","examples":["Producciones Colima"]},"description":{"type":"string","maxLength":1000,"minLength":10,"title":"Description","description":"¿Qué tipo de eventos organizas?"},"phone":{"anyOf":[{"type":"string","maxLength":20,"pattern":"^[0-9+\\-\\s()]{7,20}$"},{"type":"null"}],"title":"Phone"},"website":{"anyOf":[{"type":"string","maxLength":200,"pattern":"^https?://[^\\s<>\\\"']{3,190}$"},{"type":"null"}],"title":"Website"}},"additionalProperties":false,"type":"object","required":["organization_name","description"],"title":"OrganizerRequestIn"},"OrganizerRequestOut":{"properties":{"id":{"type":"integer","title":"Id"},"user":{"$ref":"#/components/schemas/UserPublic"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"organization_name":{"type":"string","title":"Organization Name"},"description":{"type":"string","title":"Description"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"status":{"type":"string","enum":["pending","approved","rejected"],"title":"Status"},"review_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Notes"},"reviewed_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By Name"},"reviewed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed At"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","user","organization_name","description","phone","website","status","review_notes","reviewed_at","created_at"],"title":"OrganizerRequestOut"},"Page_AdminOrderOut_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AdminOrderOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de registros que cumplen el filtro"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"Page[AdminOrderOut]"},"Page_AuditOut_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AuditOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de registros que cumplen el filtro"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"Page[AuditOut]"},"Page_EventOut_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/EventOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de registros que cumplen el filtro"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"Page[EventOut]"},"Page_OrganizerRequestOut_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/OrganizerRequestOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de registros que cumplen el filtro"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"Page[OrganizerRequestOut]"},"Page_TransferOut_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TransferOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de registros que cumplen el filtro"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"Page[TransferOut]"},"Page_UserOut_":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserOut"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total","description":"Total de registros que cumplen el filtro"},"page":{"type":"integer","title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"pages":{"type":"integer","title":"Pages"}},"type":"object","required":["items","total","page","page_size","pages"],"title":"Page[UserOut]"},"PasswordChangeIn":{"properties":{"current_password":{"type":"string","maxLength":128,"minLength":1,"title":"Current Password"},"new_password":{"type":"string","maxLength":128,"minLength":8,"title":"New Password","description":"Mínimo 8 caracteres, con al menos una letra y un número."}},"additionalProperties":false,"type":"object","required":["current_password","new_password"],"title":"PasswordChangeIn"},"Period":{"properties":{"date_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"},"date_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}},"type":"object","required":["date_from","date_to"],"title":"Period"},"PlatformSettingsOut":{"properties":{"commission_rate_bps":{"type":"integer","title":"Commission Rate Bps"},"commission_rate_percent":{"type":"string","title":"Commission Rate Percent"},"volume_threshold":{"type":"integer","title":"Volume Threshold","description":"Boletos de un mismo evento en una sola compra para considerarla de volumen"},"transfer_fee_cents":{"type":"integer","title":"Transfer Fee Cents","description":"Comisión SIMULADA por boleto transferido que proviene de una compra de volumen"},"transfer_fee_enabled":{"type":"boolean","title":"Transfer Fee Enabled"},"transfers_enabled":{"type":"boolean","title":"Transfers Enabled"},"transfer_expiry_hours":{"type":"integer","title":"Transfer Expiry Hours"},"max_tickets_per_order":{"type":"integer","title":"Max Tickets Per Order"},"currency":{"type":"string","title":"Currency"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["commission_rate_bps","commission_rate_percent","volume_threshold","transfer_fee_cents","transfer_fee_enabled","transfers_enabled","transfer_expiry_hours","max_tickets_per_order","currency"],"title":"PlatformSettingsOut"},"PlatformSettingsPatch":{"properties":{"commission_rate_bps":{"anyOf":[{"type":"integer","maximum":5000.0,"minimum":0.0},{"type":"null"}],"title":"Commission Rate Bps","description":"Puntos base: 800 = 8.00 %"},"volume_threshold":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":2.0},{"type":"null"}],"title":"Volume Threshold"},"transfer_fee_cents":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":0.0},{"type":"null"}],"title":"Transfer Fee Cents"},"transfer_fee_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Transfer Fee Enabled"},"transfers_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Transfers Enabled"},"transfer_expiry_hours":{"anyOf":[{"type":"integer","maximum":720.0,"minimum":1.0},{"type":"null"}],"title":"Transfer Expiry Hours"}},"additionalProperties":false,"type":"object","title":"PlatformSettingsPatch"},"ProfilePatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":2},{"type":"null"}],"title":"Name"},"organization_name":{"anyOf":[{"type":"string","maxLength":150},{"type":"null"}],"title":"Organization Name"}},"additionalProperties":false,"type":"object","title":"ProfilePatch"},"PromotionIn":{"properties":{"title":{"type":"string","maxLength":120,"minLength":3,"title":"Title"},"body":{"type":"string","maxLength":400,"minLength":3,"title":"Body"},"event_id":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Event Id"},"link_url":{"anyOf":[{"type":"string","maxLength":200,"pattern":"^/[A-Za-z0-9/_\\-?=&.%]*$"},{"type":"null"}],"title":"Link Url","description":"Solo rutas internas de BOLEVA"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"is_active":{"type":"boolean","title":"Is Active","default":true},"sort_order":{"type":"integer","maximum":1000.0,"minimum":0.0,"title":"Sort Order","default":0}},"additionalProperties":false,"type":"object","required":["title","body"],"title":"PromotionIn"},"PromotionOut":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"body":{"type":"string","title":"Body"},"event_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Event Id"},"event_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Title"},"link_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Link Url"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"starts_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ends At"},"is_active":{"type":"boolean","title":"Is Active"},"sort_order":{"type":"integer","title":"Sort Order"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","title","body","event_id","link_url","image_url","starts_at","ends_at","is_active","sort_order","created_at"],"title":"PromotionOut"},"PromotionPatch":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":120,"minLength":3},{"type":"null"}],"title":"Title"},"body":{"anyOf":[{"type":"string","maxLength":400,"minLength":3},{"type":"null"}],"title":"Body"},"event_id":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Event Id"},"link_url":{"anyOf":[{"type":"string","maxLength":200,"pattern":"^/[A-Za-z0-9/_\\-?=&.%]*$"},{"type":"null"}],"title":"Link Url"},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Image Url"},"starts_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Starts At"},"ends_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Ends At"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"sort_order":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":0.0},{"type":"null"}],"title":"Sort Order"}},"additionalProperties":false,"type":"object","title":"PromotionPatch"},"PublicConfigOut":{"properties":{"app":{"type":"string","title":"App"},"currency":{"type":"string","title":"Currency"},"timezone":{"type":"string","title":"Timezone"},"max_tickets_per_order":{"type":"integer","title":"Max Tickets Per Order"},"commission_rate_bps":{"type":"integer","title":"Commission Rate Bps"},"volume_threshold":{"type":"integer","title":"Volume Threshold"},"transfer_fee_cents":{"type":"integer","title":"Transfer Fee Cents"},"transfer_fee_enabled":{"type":"boolean","title":"Transfer Fee Enabled"},"transfers_enabled":{"type":"boolean","title":"Transfers Enabled"},"payments_mode":{"type":"string","title":"Payments Mode"}},"type":"object","required":["app","currency","timezone","max_tickets_per_order","commission_rate_bps","volume_threshold","transfer_fee_cents","transfer_fee_enabled","transfers_enabled","payments_mode"],"title":"PublicConfigOut"},"QuoteLineOut":{"properties":{"category_id":{"type":"integer","title":"Category Id"},"category_name":{"type":"string","title":"Category Name"},"seating_mode":{"type":"string","title":"Seating Mode"},"quantity":{"type":"integer","title":"Quantity"},"unit_price_cents":{"type":"integer","title":"Unit Price Cents"},"subtotal_cents":{"type":"integer","title":"Subtotal Cents"},"tickets_available":{"type":"integer","title":"Tickets Available"},"seat_labels":{"items":{"type":"string"},"type":"array","title":"Seat Labels"}},"type":"object","required":["category_id","category_name","seating_mode","quantity","unit_price_cents","subtotal_cents","tickets_available","seat_labels"],"title":"QuoteLineOut"},"QuoteOut":{"properties":{"event_id":{"type":"integer","title":"Event Id"},"lines":{"items":{"$ref":"#/components/schemas/QuoteLineOut"},"type":"array","title":"Lines"},"quantity":{"type":"integer","title":"Quantity"},"unit_price_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Unit Price Cents"},"subtotal_cents":{"type":"integer","title":"Subtotal Cents"},"service_fee_cents":{"type":"integer","title":"Service Fee Cents"},"total_cents":{"type":"integer","title":"Total Cents"},"currency":{"type":"string","title":"Currency"},"tickets_available":{"type":"integer","title":"Tickets Available"},"max_per_order":{"type":"integer","title":"Max Per Order"},"is_volume":{"type":"boolean","title":"Is Volume","description":"La compra alcanza el umbral de compra de volumen"},"volume_threshold":{"type":"integer","title":"Volume Threshold"},"simulated":{"type":"boolean","title":"Simulated","default":true}},"type":"object","required":["event_id","lines","quantity","unit_price_cents","subtotal_cents","service_fee_cents","total_cents","currency","tickets_available","max_per_order","is_volume","volume_threshold"],"title":"QuoteOut"},"RegisterIn":{"properties":{"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name","examples":["Ana López"]},"email":{"type":"string","format":"email","title":"Email","examples":["ana@correo.mx"]},"password":{"type":"string","maxLength":128,"minLength":8,"title":"Password","description":"Mínimo 8 caracteres, con al menos una letra y un número."},"role":{"type":"string","enum":["buyer","organizer"],"title":"Role","description":"`organizer` crea además una solicitud pendiente de aprobación","default":"buyer"},"organization_name":{"anyOf":[{"type":"string","maxLength":150},{"type":"null"}],"title":"Organization Name"},"organizer_description":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Organizer Description"},"phone":{"anyOf":[{"type":"string","maxLength":20,"pattern":"^[0-9+\\-\\s()]{7,20}$"},{"type":"null"}],"title":"Phone"}},"additionalProperties":false,"type":"object","required":["name","email","password"],"title":"RegisterIn","description":"Registro público. Siempre crea un **comprador**. Si se elige `organizer`, se genera\nuna solicitud que un administrador debe aprobar. El rol `admin` no existe aquí."},"ReviewIn":{"properties":{"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","title":"ReviewIn"},"SaleRow":{"properties":{"order_id":{"type":"integer","title":"Order Id"},"reference":{"type":"string","title":"Reference"},"event_id":{"type":"integer","title":"Event Id"},"event_title":{"type":"string","title":"Event Title"},"buyer_name":{"type":"string","title":"Buyer Name"},"quantity":{"type":"integer","title":"Quantity"},"categories":{"type":"string","title":"Categories"},"is_volume":{"type":"boolean","title":"Is Volume"},"total_cents":{"type":"integer","title":"Total Cents"},"commission_cents":{"type":"integer","title":"Commission Cents"},"organizer_net_cents":{"type":"integer","title":"Organizer Net Cents"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["order_id","reference","event_id","event_title","buyer_name","quantity","categories","is_volume","total_cents","commission_cents","organizer_net_cents","status","created_at"],"title":"SaleRow"},"SeatMapOut":{"properties":{"category_id":{"type":"integer","title":"Category Id"},"category_name":{"type":"string","title":"Category Name"},"seat_rows":{"type":"integer","title":"Seat Rows"},"seats_per_row":{"type":"integer","title":"Seats Per Row"},"available":{"type":"integer","title":"Available"},"seats":{"items":{"$ref":"#/components/schemas/SeatOut"},"type":"array","title":"Seats"}},"type":"object","required":["category_id","category_name","seat_rows","seats_per_row","available","seats"],"title":"SeatMapOut"},"SeatOut":{"properties":{"id":{"type":"integer","title":"Id"},"label":{"type":"string","title":"Label"},"row_label":{"type":"string","title":"Row Label"},"number":{"type":"integer","title":"Number"},"status":{"type":"string","enum":["available","sold"],"title":"Status"}},"type":"object","required":["id","label","row_label","number","status"],"title":"SeatOut"},"TicketCategoryBrief":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"TicketCategoryBrief"},"TicketCategoryIn":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id","description":"Solo para categorías existentes (PUT del evento)"},"name":{"type":"string","maxLength":60,"minLength":1,"title":"Name","examples":["General"]},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"price_cents":{"type":"integer","maximum":10000000.0,"minimum":0.0,"title":"Price Cents","description":"Precio en centavos (20000 = $200.00 MXN)"},"capacity":{"type":"integer","maximum":100000.0,"minimum":1.0,"title":"Capacity","description":"Ignorado en categorías numeradas (filas × asientos)","default":1},"seating_mode":{"type":"string","enum":["general","numbered"],"title":"Seating Mode","default":"general"},"seat_rows":{"anyOf":[{"type":"integer","maximum":26.0,"minimum":1.0},{"type":"null"}],"title":"Seat Rows","description":"Filas A–Z (solo numeradas)"},"seats_per_row":{"anyOf":[{"type":"integer","maximum":80.0,"minimum":1.0},{"type":"null"}],"title":"Seats Per Row"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"additionalProperties":false,"type":"object","required":["name","price_cents"],"title":"TicketCategoryIn","description":"Zona o tipo de boleto. Para PUT se envía la lista completa (con `id` las existentes)."},"TicketCategoryOut":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"price_cents":{"type":"integer","title":"Price Cents"},"capacity":{"type":"integer","title":"Capacity"},"tickets_available":{"type":"integer","title":"Tickets Available"},"tickets_sold":{"type":"integer","title":"Tickets Sold"},"sold_percent":{"type":"number","title":"Sold Percent"},"availability_status":{"type":"string","enum":["available","high_demand","low","sold_out"],"title":"Availability Status"},"seating_mode":{"type":"string","enum":["general","numbered"],"title":"Seating Mode"},"seat_rows":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seat Rows"},"seats_per_row":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Seats Per Row"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","name","description","price_cents","capacity","tickets_available","tickets_sold","sold_percent","availability_status","seating_mode","seat_rows","seats_per_row","is_active"],"title":"TicketCategoryOut"},"TicketCategoryPatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":60,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"price_cents":{"anyOf":[{"type":"integer","maximum":10000000.0,"minimum":0.0},{"type":"null"}],"title":"Price Cents"},"capacity":{"anyOf":[{"type":"integer","maximum":100000.0,"minimum":1.0},{"type":"null"}],"title":"Capacity"},"seating_mode":{"anyOf":[{"type":"string","enum":["general","numbered"]},{"type":"null"}],"title":"Seating Mode"},"seat_rows":{"anyOf":[{"type":"integer","maximum":26.0,"minimum":1.0},{"type":"null"}],"title":"Seat Rows"},"seats_per_row":{"anyOf":[{"type":"integer","maximum":80.0,"minimum":1.0},{"type":"null"}],"title":"Seats Per Row"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"additionalProperties":false,"type":"object","title":"TicketCategoryPatch"},"TicketOut":{"properties":{"id":{"type":"string","title":"Id"},"code":{"type":"string","title":"Code","description":"Referencia legible para validación manual"},"status":{"type":"string","enum":["valid","used","cancelled","transfer_pending"],"title":"Status"},"holder_name":{"type":"string","title":"Holder Name"},"issued_at":{"type":"string","title":"Issued At"},"used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Used At"},"event":{"$ref":"#/components/schemas/EventSummary"},"category":{"$ref":"#/components/schemas/TicketCategoryBrief"},"seat_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seat Label"},"order_reference":{"type":"string","title":"Order Reference"},"from_volume_order":{"type":"boolean","title":"From Volume Order"},"qr_url":{"type":"string","title":"Qr Url"},"pdf_url":{"type":"string","title":"Pdf Url"}},"type":"object","required":["id","code","status","holder_name","issued_at","used_at","event","category","seat_label","order_reference","from_volume_order","qr_url","pdf_url"],"title":"TicketOut"},"TokenOut":{"properties":{"access_token":{"type":"string","title":"Access Token","description":"También se entrega en una cookie HttpOnly para el cliente web"},"token_type":{"type":"string","const":"bearer","title":"Token Type","default":"bearer"},"expires_at":{"type":"string","title":"Expires At"},"user":{"$ref":"#/components/schemas/UserOut"}},"type":"object","required":["access_token","expires_at","user"],"title":"TokenOut"},"Totals":{"properties":{"events_total":{"type":"integer","title":"Events Total"},"events_published":{"type":"integer","title":"Events Published"},"events_draft":{"type":"integer","title":"Events Draft"},"events_cancelled":{"type":"integer","title":"Events Cancelled"},"capacity_total":{"type":"integer","title":"Capacity Total"},"tickets_sold":{"type":"integer","title":"Tickets Sold"},"tickets_available":{"type":"integer","title":"Tickets Available"},"tickets_validated":{"type":"integer","title":"Tickets Validated"},"orders_count":{"type":"integer","title":"Orders Count"},"gross_cents":{"type":"integer","title":"Gross Cents","description":"Ventas brutas SIMULADAS"},"commission_cents":{"type":"integer","title":"Commission Cents","description":"Comisión de plataforma calculada (simulada)"},"net_cents":{"type":"integer","title":"Net Cents","description":"Ingreso estimado del organizador (simulado)"},"transfers_accepted":{"type":"integer","title":"Transfers Accepted"},"transfer_fees_cents":{"type":"integer","title":"Transfer Fees Cents","description":"Comisiones de transferencia SIMULADAS"}},"type":"object","required":["events_total","events_published","events_draft","events_cancelled","capacity_total","tickets_sold","tickets_available","tickets_validated","orders_count","gross_cents","commission_cents","net_cents","transfers_accepted","transfer_fees_cents"],"title":"Totals"},"TransferCreate":{"properties":{"ticket_ids":{"items":{"type":"string"},"type":"array","maxItems":10,"minItems":1,"title":"Ticket Ids"},"recipient_email":{"type":"string","format":"email","title":"Recipient Email"},"accept_conditions":{"type":"boolean","title":"Accept Conditions","description":"Debe ser `true`: el propietario aceptó el resumen y las condiciones"}},"additionalProperties":false,"type":"object","required":["ticket_ids","recipient_email","accept_conditions"],"title":"TransferCreate","description":"La comisión y el destinatario final los determina el servidor. Campos extra → 422."},"TransferListOut":{"properties":{"sent":{"items":{"$ref":"#/components/schemas/TransferOut"},"type":"array","title":"Sent"},"received":{"items":{"$ref":"#/components/schemas/TransferOut"},"type":"array","title":"Received"}},"type":"object","required":["sent","received"],"title":"TransferListOut"},"TransferOut":{"properties":{"id":{"type":"string","title":"Id"},"batch_id":{"type":"string","title":"Batch Id"},"status":{"type":"string","enum":["pending","accepted","rejected","cancelled","expired"],"title":"Status"},"ticket_id":{"type":"string","title":"Ticket Id"},"ticket_code":{"type":"string","title":"Ticket Code","description":"Código vigente si la consulta el destinatario tras aceptar; código anterior para el remitente"},"event_id":{"type":"integer","title":"Event Id"},"event_title":{"type":"string","title":"Event Title"},"event_starts_at":{"type":"string","title":"Event Starts At"},"category_name":{"type":"string","title":"Category Name"},"seat_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seat Label"},"from_name":{"type":"string","title":"From Name"},"to_name":{"type":"string","title":"To Name"},"to_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Email"},"from_volume_order":{"type":"boolean","title":"From Volume Order"},"fee_cents":{"type":"integer","title":"Fee Cents"},"fee_status":{"type":"string","enum":["none","pending","simulated","void"],"title":"Fee Status"},"created_at":{"type":"string","title":"Created At"},"expires_at":{"type":"string","title":"Expires At"},"responded_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Responded At"},"direction":{"type":"string","enum":["sent","received","admin"],"title":"Direction"}},"type":"object","required":["id","batch_id","status","ticket_id","ticket_code","event_id","event_title","event_starts_at","category_name","seat_label","from_name","to_name","to_email","from_volume_order","fee_cents","fee_status","created_at","expires_at","responded_at","direction"],"title":"TransferOut"},"TransferQuoteOut":{"properties":{"recipient_name":{"type":"string","title":"Recipient Name"},"recipient_email":{"type":"string","title":"Recipient Email"},"tickets":{"items":{"$ref":"#/components/schemas/TransferQuoteTicket"},"type":"array","title":"Tickets"},"fee_per_volume_ticket_cents":{"type":"integer","title":"Fee Per Volume Ticket Cents"},"fee_total_cents":{"type":"integer","title":"Fee Total Cents"},"total_simulated_cents":{"type":"integer","title":"Total Simulated Cents"},"expires_in_hours":{"type":"integer","title":"Expires In Hours"},"conditions":{"items":{"type":"string"},"type":"array","title":"Conditions"},"simulated":{"type":"boolean","title":"Simulated","default":true}},"type":"object","required":["recipient_name","recipient_email","tickets","fee_per_volume_ticket_cents","fee_total_cents","total_simulated_cents","expires_in_hours","conditions"],"title":"TransferQuoteOut"},"TransferQuoteTicket":{"properties":{"id":{"type":"string","title":"Id"},"code":{"type":"string","title":"Code"},"event_title":{"type":"string","title":"Event Title"},"category_name":{"type":"string","title":"Category Name"},"seat_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seat Label"},"from_volume_order":{"type":"boolean","title":"From Volume Order"},"fee_cents":{"type":"integer","title":"Fee Cents"}},"type":"object","required":["id","code","event_title","category_name","seat_label","from_volume_order","fee_cents"],"title":"TransferQuoteTicket"},"TransferStats":{"properties":{"total":{"type":"integer","title":"Total"},"accepted":{"type":"integer","title":"Accepted"},"ordinary":{"type":"integer","title":"Ordinary"},"volume":{"type":"integer","title":"Volume"},"pending":{"type":"integer","title":"Pending"},"rejected":{"type":"integer","title":"Rejected"},"cancelled":{"type":"integer","title":"Cancelled"},"expired":{"type":"integer","title":"Expired"},"fees_simulated_cents":{"type":"integer","title":"Fees Simulated Cents"},"fees_pending_cents":{"type":"integer","title":"Fees Pending Cents"}},"type":"object","required":["total","accepted","ordinary","volume","pending","rejected","cancelled","expired","fees_simulated_cents","fees_pending_cents"],"title":"TransferStats"},"UserOut":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"role":{"type":"string","enum":["buyer","organizer","admin"],"title":"Role"},"status":{"type":"string","enum":["active","suspended"],"title":"Status"},"organization_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Name"},"created_at":{"type":"string","title":"Created At"},"organizer_request_status":{"anyOf":[{"type":"string","enum":["pending","approved","rejected"]},{"type":"null"}],"title":"Organizer Request Status"}},"type":"object","required":["id","name","email","role","status","created_at"],"title":"UserOut"},"UserPublic":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"organization_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Name"}},"type":"object","required":["id","name"],"title":"UserPublic"},"ValidateIn":{"properties":{"event_id":{"type":"integer","minimum":1.0,"title":"Event Id","description":"Evento en cuya entrada se está validando"},"code":{"type":"string","maxLength":200,"minLength":4,"title":"Code","description":"Contenido del QR (BLV1.…) o referencia manual (BLV-XXXX-XXXX)","examples":["BLV-7K3Q-9XPM"]}},"additionalProperties":false,"type":"object","required":["event_id","code"],"title":"ValidateIn"},"ValidateOut":{"properties":{"result":{"type":"string","enum":["valid","already_used","invalid"],"title":"Result"},"reason":{"anyOf":[{"type":"string","enum":["not_found","tampered","cancelled","wrong_event","event_cancelled","malformed","superseded","transfer_pending"]},{"type":"null"}],"title":"Reason"},"access_granted":{"type":"boolean","title":"Access Granted"},"message":{"type":"string","title":"Message"},"ticket":{"anyOf":[{"$ref":"#/components/schemas/ValidatedTicket"},{"type":"null"}]},"checked_at":{"type":"string","title":"Checked At"}},"type":"object","required":["result","reason","access_granted","message","ticket","checked_at"],"title":"ValidateOut"},"ValidatedTicket":{"properties":{"id":{"type":"string","title":"Id"},"code":{"type":"string","title":"Code"},"holder_name":{"type":"string","title":"Holder Name"},"status":{"type":"string","enum":["valid","used","cancelled","transfer_pending"],"title":"Status"},"used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Used At"},"event_id":{"type":"integer","title":"Event Id"},"event_title":{"type":"string","title":"Event Title"},"category_name":{"type":"string","title":"Category Name"},"seat_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seat Label"}},"type":"object","required":["id","code","holder_name","status","used_at","event_id","event_title","category_name","seat_label"],"title":"ValidatedTicket"},"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"},"ValidationLogOut":{"properties":{"id":{"type":"integer","title":"Id"},"result":{"type":"string","enum":["valid","already_used","invalid"],"title":"Result"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"ticket_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticket Code"},"holder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Holder Name"},"input_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Input Hint"},"validator_name":{"type":"string","title":"Validator Name"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","result","reason","ticket_code","holder_name","input_hint","validator_name","created_at"],"title":"ValidationLogOut"},"VolumeStats":{"properties":{"buckets":{"items":{"type":"string"},"type":"array","title":"Buckets"},"by_orders":{"items":{"type":"integer"},"type":"array","title":"By Orders","description":"Número de ÓRDENES por cantidad de boletos"},"by_buyers":{"items":{"type":"integer"},"type":"array","title":"By Buyers","description":"Número de COMPRADORES únicos por evento según boletos acumulados"},"orders_total":{"type":"integer","title":"Orders Total"},"buyer_event_pairs":{"type":"integer","title":"Buyer Event Pairs"},"volume_orders":{"type":"integer","title":"Volume Orders"},"volume_threshold":{"type":"integer","title":"Volume Threshold"}},"type":"object","required":["buckets","by_orders","by_buyers","orders_total","buyer_event_pairs","volume_orders","volume_threshold"],"title":"VolumeStats"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/auth/token"}}}}},"tags":[{"name":"Autenticación","description":"Registro, inicio de sesión y perfil."},{"name":"Eventos","description":"Catálogo público y CRUD de eventos para organizadores."},{"name":"Compras","description":"Cotización y compras simuladas con emisión de boletos."},{"name":"Boletos","description":"Boletos digitales, QR, PDF y validación de accesos."},{"name":"Transferencias","description":"Envío de boletos entre cuentas con aceptación del destinatario y comisión simulada."},{"name":"Organizador","description":"Panel de ventas, ingresos y comisiones del organizador."},{"name":"Administración","description":"Supervisión general de la plataforma (solo administradores)."},{"name":"Sistema","description":"Salud del servicio y catálogos auxiliares."}]}