API v2: pide solo lo que vas a usar
La v2 es la superficie de Estevão pensada para integraciones externas: solo lectura, autenticada por clave, con respuestas que empiezan pequeñas y crecen a medida que pides.
01 / Por qué
Económica por defecto
La v1 se diseñó para la app Ordo y devuelve todo lo que una pantalla de la app necesita. Quien solo quería las referencias de las lecturas de mañana recibía el día entero, con colecta, salmo y lecturas de la mañana y de la tarde. La v2 lo invierte.
include y fields
include elige lo que se calcula (lecturas, texto, colecta, explicación). fields recorta los atributos que vuelven. Son palancas independientes.
Contexto explícito
book, bible, psalter, lectionary, reading_type y lang son parámetros planos. book es obligatorio: nada de libro por defecto silencioso.
Rangos en una llamada
/days acepta from y to, o year. Un mes o un año entero salen de una sola petición.
Un solo formato
Toda respuesta viene en data, meta y, en las colecciones, links. Todo error viene en problem+json con un code estable.
La v1 sigue publicada y sin plazo de retiro. Usa la v2 en integraciones nuevas y migra una ruta a la vez, si y cuando tenga sentido.
02 / URL base
Una clave, un encabezado
La v2 acepta solo clave de API, enviada en el encabezado X-API-Key. Es la misma clave de la v1: el plan, los límites y el panel de uso valen para las dos versiones.
https://api.caminhoanglicano.com.br/api/v2curl -G "https://api.caminhoanglicano.com.br/api/v2/days/today" \
-H "X-API-Key: $ESTEVAO_API_KEY" \
--data-urlencode "book=loc_2015" \
--data-urlencode "include=readings,collect"Sin la clave, la respuesta es 401 MISSING_API_KEY. Mantén la clave en el servidor: nunca la pongas en código que corre en el navegador o en la app.
03 / Contexto
book es obligatorio
En la v1, quien olvida el libro recibe 200 con los datos de un libro que no eligió. En la v2, todo recurso que depende del libro exige book. Los catálogos de libros y de Biblias y /passages no lo exigen.
| Parámetro | Descripción |
|---|---|
bookobligatorio | Código del libro de oración, como loc_2015 o loc_1662_en. Obligatorio en todo recurso cuyo contenido depende del libro; la v2 no tiene libro por defecto. Consulta GET /api/v2/prayer-books. |
bible | Versión bíblica de los textos, como nvi o kjv. Por defecto, la versión preferida del libro. Consulta GET /api/v2/bible-versions. |
psalter | Salterio, cuando difiere de la versión bíblica. |
lectionary | Variante del leccionario del libro, como revised_1922 en el BCP 1662. Las variantes aceptadas están en capabilities.lectionary.variants del libro. |
reading_type | Tipo de lectura del leccionario, como semicontinuous, cuando el libro ofrece más de uno. |
lang | Idioma de la respuesta, como pt-BR o en. Por defecto, el idioma del libro. En los catálogos, filtra por idioma. |
{
"type": "https://estevao.caminhoanglicano.com.br/docs/v2/errors#missing-prayer-book",
"title": "Missing prayer book",
"status": 400,
"code": "MISSING_PRAYER_BOOK",
"detail": "O parâmetro 'book' é obrigatório na v2. Consulte GET /api/v2/prayer-books.",
"documentation_url": "https://estevao.caminhoanglicano.com.br/docs/v2",
"request_id": "6f0c2c1e-…"
}04 / include
include: lo que se calcula
Sin include, /days devuelve solo el día litúrgico: tiempo, color, semana y la celebración que prevaleció. Cada include añade un subrecurso y tiene un costo relativo, informado en X-Request-Cost.
| include | Qué añade | Costo |
|---|---|---|
readings | Referencias de las lecturas del día, como lista de slots. | +1 |
readings.text | Texto completo de cada lectura, en la versión de bible. | +3 |
readings.morning | Lecturas de la Oración de la Mañana, en morning_readings. | +1 |
readings.evening | Lecturas de la Oración de la Tarde, en evening_readings. | +1 |
readings.alternatives | Referencias alternativas, cuando el leccionario las ofrece. | +0 |
collect | Colecta(s) del día: título, tipo y referencia. | +1 |
collect.text | Cuerpo de la colecta y prefacio. | +0 |
celebrations | Todas las celebraciones concurrentes del día, no solo la que prevaleció. | +0 |
explanation | Por qué este color, este tiempo y estas lecturas, con la procedencia de cada lectura. | +4 |
- — Un hijo implica al padre: include=readings.text ya calcula readings.
- — Un include que el endpoint no ofrece responde 400 INVALID_INCLUDE, con la lista aceptada en allowed.
- — En /days/:date/readings y /collects/:date el recurso ya es el de la ruta; include solo añade text o alternatives.
05 / fields
fields: lo que se serializa
fields[tipo] recibe la lista de atributos a devolver para ese tipo de recurso. No cambia lo que se calcula; solo lo que vuelve en el JSON.
/api/v2/days?book=loc_2015&from=2026-03-01&to=2026-03-31
&fields[day]=date,season,color,celebrationTipos aceptados: dayreadingcollectcelebrationcelebration_typeannual_overviewseasonkey_datelectionary_cycleprayer_bookbible_version
06 / Formato
data, meta y links
Un sobre único, para escribir un solo parser. Las claves son snake_case en inglés en todos los recursos; los valores, como nombres de tiempos y colores, vienen en el idioma del libro o de lang.
{
"data": {
"date": "2026-03-25",
"liturgical_year": 2026,
"week_of_season": 5,
"is_sunday": false,
"is_holy_day": true,
"day_of_week": "Quarta-feira",
"season": { "slug": "lent", "name": "Quaresma" },
"color": "branco",
"description": ["Anunciação de Nosso Senhor Jesus Cristo à Bem-Aventurada Virgem Maria"],
"fast": null,
"celebration": {
"id": 412,
"name": "Anunciação de Nosso Senhor Jesus Cristo à Bem-Aventurada Virgem Maria",
"type": "principal_feast",
"color": "branco",
"movable": false,
"transferred": false
}
},
"meta": {
"prayer_book": "loc_2015",
"language": "pt-BR",
"bible": "nvi",
"generated_at": "2026-03-25T09:00:00Z"
}
}- — meta repite el contexto que resolvió la respuesta: libro, idioma, versión bíblica y variante del leccionario, cuando la hay.
- — Las lecturas son una lista con slot (first_reading, psalm, second_reading, gospel…), no cuatro claves fijas: los libros difieren en cuántas lecturas asignan.
- — Un día sin lecturas responde 200 con readings vacío. 404 queda para recursos que no existen.
- — Las colecciones paginadas traen links.self y links.next; meta trae count y total.
07 / Límites
Caché, costo y límites
X-API-Key
Cuota por llamada
Cada petición autenticada cuenta una llamada en la cuota de la clave, como en la v1. El plan multiplica el límite diario y el de ráfaga por minuto.
X-Request-Cost
Costo relativo
Toda respuesta informa el trabajo relativo en el servidor: 1 por día, más el peso de cada include. Es una estimación y no se descuenta de la cuota.
ETag · If-None-Match
Peticiones condicionales
Reenvía la ETag en If-None-Match y recibe 304 sin cuerpo cuando nada cambió. Cache-Control: una hora para fechas y catálogos, cinco minutos para hoy.
from · to · year
Rangos
Hasta 366 días por llamada en /days. Con readings.text o explanation, hasta 31 días. Por encima, 400 RANGE_TOO_LARGE con max_days.
08 / De la v1 a la v2
Dónde quedó cada ruta
Los datos salen de los mismos servicios litúrgicos de la v1; lo que cambia es el formato. La v2 todavía no publica el Oficio Diario: para eso, sigue en la v1.
| v1 | v2 |
|---|---|
GET /api/v1/calendar/today | GET /api/v2/days/today |
GET /api/v1/calendar/:y/:m/:d | GET /api/v2/days/2026-03-25 |
GET /api/v1/calendar/:y/:m | GET /api/v2/days?from=2026-03-01&to=2026-03-31 |
GET /api/v1/calendar/:y | GET /api/v2/days?year=2026 |
GET /api/v1/calendar/:y/overview | GET /api/v2/years/2026 |
GET /api/v1/calendar/:y/seasons | GET /api/v2/years/2026/seasons |
GET /api/v1/calendar/:y/key_dates | GET /api/v2/years/2026/key-dates |
GET /api/v1/calendar/:y/celebrations | GET /api/v2/celebrations?year=2026 |
GET /api/v1/lectionary/:y/:m/:d | GET /api/v2/days/2026-03-25/readings |
GET /api/v1/lectionary/:y/:m/:d/all_services | GET /api/v2/days/2026-03-25/readings?service=all |
GET /api/v1/lectionary/cycle/:y | GET /api/v2/years/2026/lectionary-cycle |
GET /api/v1/liturgical_explanation/:y/:m/:d | GET /api/v2/liturgical-explanations/2026-03-25 |
GET /api/v1/celebrations · /search · /date/:m/:d | GET /api/v2/celebrations?q=&month=&day= |
GET /api/v1/celebrations/types | GET /api/v2/celebrations/types |
GET /api/v1/prayer_books/:code/preferences | GET /api/v2/prayer-books/loc_2015/preferences |
GET /api/v1/bible_versions | GET /api/v2/bible-versions |
— | GET /api/v2/collects/2026-03-25 |
— | GET /api/v2/passages?ref=João+3:16&bible=nvi |
- — El blob preferences se convierte en parámetros planos: book, bible, lectionary, psalter, reading_type y lang. El blob todavía se acepta para facilitar la migración.
- — Las fechas van en formato ISO (2026-03-25), tanto en la ruta como en las respuestas.
- — Las rutas usan guion (key-dates, prayer-books) en lugar de guion bajo.