# Kirken ACTS Vejle API y documentación

Documentación pública para desarrolladores y agentes de IA que consultan el calendario y la web de la iglesia.

[OpenAPI](https://actsvejle.dk/openapi.json) · [API](https://actsvejle.dk/api) · [API v1](https://actsvejle.dk/api/v1) · [JSON events](https://actsvejle.dk/api/v1/events) · [llms.txt](https://actsvejle.dk/llms.txt)

## Acceso y autenticación

Las operaciones de lectura documentadas son públicas. No requieren inicio de sesión, clave de API ni cookies. Usa HTTPS y GET. HEAD devuelve solo las cabeceras y OPTIONS indica los métodos permitidos.

## API y OpenAPI

GET /api y /api/v1 devuelven directorios JSON de recursos públicos. /api/v1 también incluye la política de versiones y límites en formato legible por máquinas. OpenAPI 3.0.4 incluye operationId únicos, descripciones, parámetros tipados y esquemas JSON para herramientas de llamadas a funciones.

```sh
curl -H "Accept: application/json" https://actsvejle.dk/api
```

## Versiones y retirada

La API JSON estable usa la versión principal en la URL: /api/v1. API-Version: 1 confirma la versión de la respuesta. Los cambios incompatibles usan una URL nueva, como /api/v2; las ampliaciones pueden permanecer en v1, por lo que los clientes deben ignorar campos desconocidos. No hay versiones ni suscripciones de calendario con retirada prevista. Antes de retirar una versión publicaremos aquí un aviso con al menos 90 días de antelación y enviaremos Deprecation como fecha RFC 9745 (@<segundos-Unix>), Sunset como fecha HTTP RFC 8594 y un Link con rel=deprecation en las respuestas afectadas. El aviso no cambia el comportamiento antes de la fecha anunciada.

## Calendario como JSON

GET /api/v1/events devuelve ocurrencias públicas concretas con ID, título y descripción traducidos, fecha, hora, lugar y categorías. Las repeticiones, cancelaciones y cambios por fecha siguen el calendario web. Las horas son locales de Europe/Copenhagen. lang admite da, en, de o es (predeterminado da); las traducciones ausentes usan inglés y después danés. from y to son fechas iniciales inclusivas YYYY-MM-DD, años 1970 a 9998; por defecto, hoy en Copenhague hasta 90 días después. Máximo 366 días. limit es 1–100 (predeterminado 50), offset un entero seguro no negativo (predeterminado 0); sigue pagination.nextOffset hasta null. Los datos pueden cambiar entre páginas. category y type usan los filtros de suscripción siguientes. Otros parámetros, parámetros únicos repetidos e idiomas inválidos devuelven 400. /api/calendar también admite JSON con Accept: application/json; en otro caso conserva iCalendar, incluidos */* y preferencias iguales.

```sh
curl -i -H "Accept: application/json" "https://actsvejle.dk/api/v1/events?lang=en&limit=10"
```

## Calendario

GET /api/calendar devuelve el calendario iCalendar existente como text/calendar en UTF-8. Usa un analizador RFC 5545 que admita recurrencias, excepciones y la zona horaria Europe/Copenhagen. Incluye eventos públicos actuales; un calendario vacío es distinto de una interrupción del servicio.

lang admite da, en, de o es; el valor predeterminado y la alternativa para idiomas desconocidos es da. Repite category=<id> o type=<valor> para combinar selecciones. Los ID de categoría aparecen en los enlaces de suscripción del calendario público. Máximo 64 valores de categoría y tipo en total. type admite service, kids, groups, worship o special y solo corresponde a eventos sin categoría. Omite ambos filtros para todos los eventos. Los ID válidos desconocidos devuelven una selección vacía. Otros parámetros de consulta se ignoran.

```sh
curl -H "Accept: text/calendar" "https://actsvejle.dk/api/calendar?lang=en"
```

## Contenido web en Markdown

Consulta las páginas públicas con Accept: text/markdown o añade .md a su dirección. La portada es /index.md. El danés no usa prefijo; inglés, alemán y español usan /en, /de y /es. El calendario en Markdown es una introducción; consulta el feed para fechas actuales. Las páginas Markdown desconocidas conservan su respuesta Markdown con HTTP 404.

```sh
curl -H "Accept: text/markdown" https://actsvejle.dk/en/om-os
```

## Errores y soluciones

Los fallos del calendario, las rutas API desconocidas y los métodos de escritura rechazados en las API documentadas devuelven JSON RFC 9457 con Content-Type: application/problem+json. Los campos son type, title, status, detail, instance, code y hint. code es un código estable y hint describe el siguiente paso. Usa el estado HTTP y code en tu integración.

400 INVALID_CALENDAR_SELECTION: Corrige los filtros vacíos o inválidos, o reduce la selección a un máximo de 64 valores.

400 INVALID_EVENT_QUERY: Corrige el idioma, intervalo de fechas, paginación o filtros del calendario JSON según /openapi.json.

404 API_NOT_FOUND: Busca un endpoint existente en /api o /openapi.json.

405 METHOD_NOT_ALLOWED: Usa GET, HEAD u OPTIONS. La cabecera Allow indica los métodos permitidos.

429 RATE_LIMITED: Espera los segundos indicados en Retry-After. RateLimit muestra la cuota restante (r) y segundos hasta el reinicio (t).

503 CALENDAR_UNAVAILABLE: Espera 300 segundos según Retry-After antes de reintentar. No almacenes las respuestas de error en caché.

```sh
curl -i "https://actsvejle.dk/api/calendar?type=invalid"
```

## Caché y uso

Las rutas JSON /api, /api/v1 y /api/v1/events, y las respuestas JSON de /api/calendar, permiten 120 solicitudes por 60 segundos por IP de cliente, ruta e instancia del servidor. GET, HEAD, OPTIONS y métodos rechazados cuentan en las rutas JSON. RateLimit-Policy: "instance-read";q=120;w=60 y RateLimit: "instance-read";r=<restantes>;t=<segundos> siguen IETF draft-ietf-httpapi-ratelimit-headers-11, todavía no un RFC. En un 429 tiene prioridad Retry-After. No se deben almacenar en caché respuestas JSON ni datos de cuota. Los contadores se reinician al reiniciar la instancia y no se comparten entre instancias; no es una cuota global. Con muchos clientes, los nuevos pueden compartir una cuota conservadora común en la instancia. El alojamiento puede imponer límites adicionales. Reutiliza los datos entre preguntas. Las suscripciones iCalendar conservan su caché de 300 segundos y quedan fuera del límite JSON. La autenticación y las API administrativas internas conservan sus protocolos.

## Acciones y contacto

La API permite leer información pública. Las inscripciones, mensajes y donaciones requieren la decisión del visitante y una confirmación real del servicio. No existe una API pública para pagos, reservas, datos personales sensibles ni administración.

[Kontakt / Contact](https://actsvejle.dk/kontakt)
