{"openapi":"3.1.0","info":{"title":"RaverBot API","version":"2.0.0"},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer"},"browserSession":{"type":"apiKey","in":"cookie","name":"raver_session","description":"Sesión del panel. Las escrituras requieren X-CSRF-Token obtenido de /api/v1/me."},"integration":{"type":"http","scheme":"bearer","description":"Token exclusivo RAVER_ALERTA_TECHNO_TOKEN"}}},"paths":{"/internal/events":{"post":{"summary":"Recibir o actualizar un evento de Alerta Techno","security":[{"integration":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"source":{"type":"string","minLength":1,"maxLength":100},"externalId":{"type":"string","minLength":1,"maxLength":200},"idempotencyKey":{"type":"string","minLength":1,"maxLength":400},"alertaTechnoEventId":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"type":"string","minLength":1,"maxLength":500},"dateStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"dateEnd":{"default":null,"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"venue":{"default":null,"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"city":{"default":null,"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}]},"ticketUrl":{"default":null,"anyOf":[{"type":"string","maxLength":4000,"format":"uri"},{"type":"null"}]},"genres":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","maxLength":100}},"status":{"type":"string","maxLength":50},"soldout":{"type":"boolean"},"classifiedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["source","externalId","idempotencyKey","alertaTechnoEventId","title","dateStart","dateEnd","venue","city","ticketUrl","genres","status","soldout","classifiedAt"],"additionalProperties":true}}}},"responses":{"200":{"description":"Entrega repetida; status already_exists"},"201":{"description":"Evento persistido o actualizado"},"400":{"description":"Payload inválido"},"401":{"description":"Token exclusivo requerido"},"409":{"description":"Identidades en conflicto"},"503":{"description":"Integración no configurada"}}}},"/api/v1/auth/login":{"post":{"summary":"Ingresar al panel con usuario y contraseña","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"username":{"type":"string","pattern":"^[a-z0-9_.-]{3,50}$"},"password":{"type":"string","minLength":1,"maxLength":128}},"required":["username","password"],"additionalProperties":false}}}},"responses":{"200":{"description":"Sesión iniciada mediante cookie HttpOnly"},"401":{"description":"Credenciales incorrectas"},"429":{"description":"Límite de intentos"}}}},"/api/v1/me":{"get":{"summary":"Identidad y permisos","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/auth/password":{"post":{"summary":"Cambiar mi contraseña","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/users":{"get":{"summary":"Usuarios del panel","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}},"post":{"summary":"Crear usuario del panel","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"username":{"type":"string","pattern":"^[a-z0-9_.-]{3,50}$"},"password":{"type":"string","minLength":12,"maxLength":128},"role":{"type":"string","enum":["viewer","operator","admin"]},"groups":{"minItems":1,"maxItems":100,"type":"array","items":{"anyOf":[{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},{"type":"string","const":"*"}]}}},"required":["username","password","role","groups"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/users/{id}/password":{"post":{"summary":"Restablecer contraseña","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/users/{id}":{"delete":{"summary":"Desactivar usuario","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/commands":{"get":{"summary":"Registro de comandos","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/groups":{"get":{"summary":"Listar grupos","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}},"post":{"summary":"Crear grupo","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"name":{"type":"string","minLength":1,"maxLength":100},"enabled":{"default":false,"type":"boolean"},"primary":{"default":"primary","type":"string","enum":["primary","secondary"]},"backup":{"default":true,"type":"boolean"},"config":{"default":{},"type":"object","properties":{"flags":{"type":"object","propertyNames":{"type":"string","enum":["bot","tickets","references","events","moderation","schedules","welcome","music","newTicketsLinks","hype","comandos","reglas","admins","cuidados","bienvenida","buscar","vendida","refes","refespara","misrefes","ok","eventos","set","enviar","cancelar","status","sessions","debug"]},"additionalProperties":{"type":"boolean"}},"commandRoles":{"type":"object","propertyNames":{"type":"string","enum":["comandos","reglas","admins","cuidados","bienvenida","buscar","vendida","refes","refespara","misrefes","ok","eventos","music","set","enviar","cancelar","status","sessions","debug"]},"additionalProperties":{"type":"string","enum":["member","admin"]}},"texts":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"string","maxLength":8000}},"textProfile":{"type":"string","enum":["revendeTuTicket","botardo","ticketSell","sofiRRPP","mendozaElectronica","ticketsMarket","stockTickets","intercambioDeTickets"]},"vipUsers":{"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"}},"admins":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"}},"rrpps":{"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"}},"rules":{"type":"object","properties":{"blockImages":{"type":"boolean"},"blockLinks":{"type":"boolean"},"rrppOnlyLinks":{"type":"boolean"},"rrppDailyLimit":{"type":"boolean"},"restrictRecentLinks":{"type":"boolean"},"drugDetection":{"type":"boolean"},"blockSales":{"type":"boolean"},"requirePrice":{"type":"boolean"},"blockRrppMessages":{"type":"boolean"},"allowedDomains":{"maxItems":100,"type":"array","items":{"type":"string","pattern":"^[a-z0-9.-]+$"}},"blockedTerms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"intentTerms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"exemptAdmins":{"type":"boolean"}},"additionalProperties":false},"timezone":{"type":"string"},"ticketTtlHours":{"type":"integer","minimum":1,"maximum":720},"welcomeEvery":{"type":"integer","minimum":1,"maximum":100},"cooldownSeconds":{"type":"integer","minimum":0,"maximum":3600},"newTicketsLinksIntervalMinutes":{"type":"integer","minimum":1,"maximum":525600},"retentionDays":{"type":"integer","minimum":7,"maximum":3650}},"additionalProperties":false}},"required":["id","name","enabled","primary","backup","config"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/groups/{id}":{"put":{"summary":"Actualizar grupo con control de versión","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"name":{"type":"string","minLength":1,"maxLength":100},"enabled":{"default":false,"type":"boolean"},"primary":{"default":"primary","type":"string","enum":["primary","secondary"]},"backup":{"default":true,"type":"boolean"},"config":{"default":{},"type":"object","properties":{"flags":{"type":"object","propertyNames":{"type":"string","enum":["bot","tickets","references","events","moderation","schedules","welcome","music","newTicketsLinks","hype","comandos","reglas","admins","cuidados","bienvenida","buscar","vendida","refes","refespara","misrefes","ok","eventos","set","enviar","cancelar","status","sessions","debug"]},"additionalProperties":{"type":"boolean"}},"commandRoles":{"type":"object","propertyNames":{"type":"string","enum":["comandos","reglas","admins","cuidados","bienvenida","buscar","vendida","refes","refespara","misrefes","ok","eventos","music","set","enviar","cancelar","status","sessions","debug"]},"additionalProperties":{"type":"string","enum":["member","admin"]}},"texts":{"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"string","maxLength":8000}},"textProfile":{"type":"string","enum":["revendeTuTicket","botardo","ticketSell","sofiRRPP","mendozaElectronica","ticketsMarket","stockTickets","intercambioDeTickets"]},"vipUsers":{"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"}},"admins":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"}},"rrpps":{"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"}},"rules":{"type":"object","properties":{"blockImages":{"type":"boolean"},"blockLinks":{"type":"boolean"},"rrppOnlyLinks":{"type":"boolean"},"rrppDailyLimit":{"type":"boolean"},"restrictRecentLinks":{"type":"boolean"},"drugDetection":{"type":"boolean"},"blockSales":{"type":"boolean"},"requirePrice":{"type":"boolean"},"blockRrppMessages":{"type":"boolean"},"allowedDomains":{"maxItems":100,"type":"array","items":{"type":"string","pattern":"^[a-z0-9.-]+$"}},"blockedTerms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"intentTerms":{"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"exemptAdmins":{"type":"boolean"}},"additionalProperties":false},"timezone":{"type":"string"},"ticketTtlHours":{"type":"integer","minimum":1,"maximum":720},"welcomeEvery":{"type":"integer","minimum":1,"maximum":100},"cooldownSeconds":{"type":"integer","minimum":0,"maximum":3600},"newTicketsLinksIntervalMinutes":{"type":"integer","minimum":1,"maximum":525600},"retentionDays":{"type":"integer","minimum":7,"maximum":3650}},"additionalProperties":false},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["id","name","enabled","primary","backup","config","version"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/config":{"get":{"summary":"Configuración global","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}},"put":{"summary":"Reemplazar configuración global","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"config":{"type":"object","properties":{"flags":{"default":{},"type":"object","propertyNames":{"type":"string","enum":["bot","tickets","references","events","moderation","schedules","welcome","music","newTicketsLinks","hype","comandos","reglas","admins","cuidados","bienvenida","buscar","vendida","refes","refespara","misrefes","ok","eventos","set","enviar","cancelar","status","sessions","debug"]},"additionalProperties":{"type":"boolean"}},"commandRoles":{"default":{},"type":"object","propertyNames":{"type":"string","enum":["comandos","reglas","admins","cuidados","bienvenida","buscar","vendida","refes","refespara","misrefes","ok","eventos","music","set","enviar","cancelar","status","sessions","debug"]},"additionalProperties":{"type":"string","enum":["member","admin"]}},"texts":{"default":{},"type":"object","propertyNames":{"type":"string","maxLength":60},"additionalProperties":{"type":"string","maxLength":8000}},"textProfile":{"default":"revendeTuTicket","type":"string","enum":["revendeTuTicket","botardo","ticketSell","sofiRRPP","mendozaElectronica","ticketsMarket","stockTickets","intercambioDeTickets"]},"vipUsers":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"}},"admins":{"default":[],"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"}},"rrpps":{"default":[],"maxItems":1000,"type":"array","items":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"}},"rules":{"default":{"blockImages":false,"blockLinks":false,"rrppOnlyLinks":false,"rrppDailyLimit":false,"restrictRecentLinks":false,"drugDetection":false,"blockSales":false,"requirePrice":false,"blockRrppMessages":false,"allowedDomains":[],"blockedTerms":[],"intentTerms":["vendo","compro","busco","ofrezco"],"exemptAdmins":true},"type":"object","properties":{"blockImages":{"default":false,"type":"boolean"},"blockLinks":{"default":false,"type":"boolean"},"rrppOnlyLinks":{"default":false,"type":"boolean"},"rrppDailyLimit":{"default":false,"type":"boolean"},"restrictRecentLinks":{"default":false,"type":"boolean"},"drugDetection":{"default":false,"type":"boolean"},"blockSales":{"default":false,"type":"boolean"},"requirePrice":{"default":false,"type":"boolean"},"blockRrppMessages":{"default":false,"type":"boolean"},"allowedDomains":{"default":[],"maxItems":100,"type":"array","items":{"type":"string","pattern":"^[a-z0-9.-]+$"}},"blockedTerms":{"default":[],"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"intentTerms":{"default":["vendo","compro","busco","ofrezco"],"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":40}},"exemptAdmins":{"default":true,"type":"boolean"}},"required":["blockImages","blockLinks","rrppOnlyLinks","rrppDailyLimit","restrictRecentLinks","drugDetection","blockSales","requirePrice","blockRrppMessages","allowedDomains","blockedTerms","intentTerms","exemptAdmins"],"additionalProperties":false},"timezone":{"default":"UTC","type":"string"},"ticketTtlHours":{"default":24,"type":"integer","minimum":1,"maximum":720},"welcomeEvery":{"default":5,"type":"integer","minimum":1,"maximum":100},"cooldownSeconds":{"default":2,"type":"integer","minimum":0,"maximum":3600},"newTicketsLinksIntervalMinutes":{"default":180,"type":"integer","minimum":1,"maximum":525600},"retentionDays":{"default":90,"type":"integer","minimum":7,"maximum":3650}},"required":["flags","commandRoles","texts","textProfile","vipUsers","admins","rrpps","rules","timezone","ticketTtlHours","welcomeEvery","cooldownSeconds","newTicketsLinksIntervalMinutes","retentionDays"],"additionalProperties":false},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["config","version"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/ticket-links":{"get":{"summary":"Eventos externos y publicaciones por grupo","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/ticket-links/mainstream":{"get":{"summary":"Lista global de artistas prioritarios","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}},"put":{"summary":"Actualizar artistas prioritarios","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"policy":{"type":"object","properties":{"artists":{"maxItems":2000,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"aliases":{"default":[],"maxItems":30,"type":"array","items":{"type":"string","minLength":1,"maxLength":120}}},"required":["name","aliases"],"additionalProperties":false}}},"required":["artists"],"additionalProperties":false},"version":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["policy","version"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/tickets":{"get":{"summary":"Listar tickets","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}},"post":{"summary":"Crear o actualizar tickets","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"group":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"owner":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"event":{"type":"string","minLength":1,"maxLength":200},"price":{"type":"number","exclusiveMinimum":0,"maximum":1000000000}},"required":["group","owner","event","price"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/tickets/{id}":{"delete":{"summary":"Eliminar tickets","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/events":{"get":{"summary":"Listar events","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}},"post":{"summary":"Crear o actualizar events","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"group":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"name":{"type":"string","minLength":1,"maxLength":200},"at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"tags":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","maxLength":50}}},"required":["group","name","at","tags"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/events/{id}":{"delete":{"summary":"Eliminar events","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/schedules":{"get":{"summary":"Listar schedules","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}},"post":{"summary":"Crear o actualizar schedules","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"group":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"body":{"type":"string","minLength":1,"maxLength":8000},"nextAt":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"intervalMinutes":{"default":null,"anyOf":[{"type":"integer","minimum":5,"maximum":525600},{"type":"null"}]},"enabled":{"default":true,"type":"boolean"}},"required":["group","body","nextAt","intervalMinutes","enabled"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/schedules/{id}":{"delete":{"summary":"Eliminar schedules","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/tracks":{"get":{"summary":"Listar tracks","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}},"post":{"summary":"Crear o actualizar tracks","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"group":{"default":"*","anyOf":[{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},{"type":"string","const":"*"}]},"artist":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","maxLength":200},"url":{"type":"string","format":"uri"}},"required":["group","artist","title","url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/tracks/{id}":{"delete":{"summary":"Eliminar tracks","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/references":{"get":{"summary":"Listar references","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}},"post":{"summary":"Crear o actualizar references","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"group":{"default":"*","anyOf":[{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},{"type":"string","const":"*"}]},"author":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"target":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"}},"required":["group","author","target"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/references/{id}":{"delete":{"summary":"Eliminar references","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/references/{id}/decision":{"post":{"summary":"Aprobar o rechazar referencia","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","enum":["approved","rejected"]}},"required":["status"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/sessions":{"get":{"summary":"Salud de sesiones","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/sessions/{id}/groups":{"get":{"summary":"Buscar grupo por nombre sin leer mensajes","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/sessions/{id}/recover":{"post":{"summary":"Reiniciar autenticación o recuperación","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/sessions/{id}/qr":{"get":{"summary":"QR temporal de autenticación","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/alerts":{"get":{"summary":"Política de alertas","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}},"put":{"summary":"Actualizar alertas","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"enabled":{"default":true,"type":"boolean"},"recipients":{"default":[],"maxItems":20,"type":"array","items":{"type":"string","pattern":"^[\\w@.:-]+$"}},"severities":{"default":["warning","critical"],"type":"array","items":{"type":"string","enum":["warning","critical"]}},"thresholdSeconds":{"default":30,"type":"integer","minimum":0,"maximum":86400},"repeatSeconds":{"default":1800,"type":"integer","minimum":60,"maximum":604800},"escalateSeconds":{"default":300,"type":"integer","minimum":60,"maximum":604800},"fallbackEnabled":{"default":false,"type":"boolean"}},"required":["enabled","recipients","severities","thresholdSeconds","repeatSeconds","escalateSeconds","fallbackEnabled"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/integrations/webhook":{"put":{"summary":"Actualizar secreto del canal alternativo","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"url":{"type":"string","format":"uri"}},"required":["url"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/outbox":{"get":{"summary":"Historial de acciones y resultados del bot","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/incidents":{"get":{"summary":"Consultar incidents","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/audit":{"get":{"summary":"Consultar audit","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/outbox/{id}/resolve":{"post":{"summary":"Conciliar envío incierto sin reenvío","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"resolution":{"type":"string","enum":["sent","discard"]}},"required":["resolution"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/incidents/{id}/resolve":{"post":{"summary":"Cerrar incidente","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/metrics":{"get":{"summary":"Percentiles internos y externos","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/tokens":{"post":{"summary":"Crear o rotar acceso","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},"role":{"type":"string","enum":["viewer","operator","admin"]},"groups":{"minItems":1,"maxItems":100,"type":"array","items":{"anyOf":[{"type":"string","minLength":1,"maxLength":180,"pattern":"^[\\w@.:-]+$"},{"type":"string","const":"*"}]}}},"required":["id","role","groups"],"additionalProperties":false}}}},"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}},"/api/v1/tokens/{id}":{"delete":{"summary":"Revocar acceso","security":[{"bearer":[]},{"browserSession":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Resultado JSON"},"400":{"description":"Validación"},"401":{"description":"Autenticación requerida"},"403":{"description":"Rol o alcance insuficiente"},"409":{"description":"Conflicto de versión"},"429":{"description":"Límite de solicitudes"}}}}}}