He encontrado el mismo tipo de problema, pero he seguido un camino diferente. En lugar de consumir directamente los puntos finales de la API del calendario, mi importador crea BBCode de [event] y lo publica en Discourse, permitiendo que el plugin lo analice como si un usuario administrador hubiera creado el evento manualmente. De esa manera, evito depender de parámetros de consulta transitorios como include_expired, y obtengo un contrato más estable: las publicaciones y el BBCode simples es poco probable que cambien sin previo aviso.
[event start="2025-09-29 09:00" end="2025-10-29 10:00" location="Office B1"]
Reunión para discutir la API RESTful de Discourse
[/event]
La contrapartida es más trabajo de mi parte: tuve que escribir un formateador que convierte los datos ICS en etiquetas [event] debidamente escapadas, maneja eventos de todo el día o programados, etc. Pero en la práctica, este enfoque ha sido mucho más resistente a las actualizaciones. No elimina la necesidad de avisos de desaprobación previos (todavía me gustaría que las API fallaran rápidamente o al menos advirtieran cuando se eliminan opciones), sin embargo, ha reducido el riesgo de que mis scripts se rompan silenciosamente.