Opening the portal

An API by Caminho Anglicano

Check status
Documentation / API v2

API v2: ask only for what you use

v2 is the Estevão surface built for outside integrations: read-only, authenticated by key, with responses that start small and grow as you ask.

01 / Why

Cheap by default

v1 was designed for the Ordo app and returns everything one app screen needs. Someone who only wanted tomorrow's reading references got the whole day, with collect, psalm and morning and evening readings. v2 turns that around.

include and fields

include chooses what is computed (readings, text, collect, explanation). fields trims the attributes that come back. They are independent levers.

Explicit context

book, bible, psalter, lectionary, reading_type and lang are flat parameters. book is required: no silent default book.

Ranges in one call

/days accepts from and to, or year. A whole month or year comes back from a single request.

One shape

Every response is data, meta and, for collections, links. Every error is problem+json with a stable code.

v1 remains published with no end date. Use v2 for new integrations and migrate one route at a time, if and when it makes sense.

02 / Base URL

One key, one header

v2 accepts API keys only, sent in the X-API-Key header. It is the same key as v1: your plan, limits and usage dashboard cover both versions.

Base URL
https://api.caminhoanglicano.com.br/api/v2
First call
curl -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"

Without the key the answer is 401 MISSING_API_KEY. Keep the key on your server: never put it in code that runs in a browser or an app.

03 / Context

book is required

On v1, forgetting the book gets you a 200 with data from a book you never chose. On v2, every resource that depends on the book requires book. The prayer book and Bible catalogues and /passages do not.

ParameterDescription
bookrequiredPrayer book code, such as loc_2015 or loc_1662_en. Required on every resource whose content depends on the book; v2 has no default book. See GET /api/v2/prayer-books.
bibleBible translation for texts, such as nvi or kjv. Defaults to the book's preferred version. See GET /api/v2/bible-versions.
psalterPsalter, when it differs from the Bible translation.
lectionaryThe book's lectionary variant, such as revised_1922 for the BCP 1662. Accepted variants are in the book's capabilities.lectionary.variants.
reading_typeLectionary reading type, such as semicontinuous, when the book offers more than one.
langResponse language, such as pt-BR or en. Defaults to the book's language. On catalogues, filters by language.
Without book400
{
  "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: what is computed

Without include, /days returns just the liturgical day: season, colour, week and the celebration that prevailed. Each include adds a sub-resource and has a relative cost, reported in X-Request-Cost.

includeWhat it addsCost
readingsReferences of the day's readings, as a list of slots.+1
readings.textFull text of each reading, in the bible translation.+3
readings.morningMorning Prayer readings, in morning_readings.+1
readings.eveningEvening Prayer readings, in evening_readings.+1
readings.alternativesAlternative references, when the lectionary offers them.+0
collectThe day's collect(s): title, kind and reference.+1
collect.textCollect body and preface.+0
celebrationsEvery competing celebration of the day, not only the one that prevailed.+0
explanationWhy this colour, this season and these readings, with the provenance of each reading.+4
  • — A child implies its parent: include=readings.text already computes readings.
  • — An include the endpoint does not offer answers 400 INVALID_INCLUDE, with the accepted list in allowed.
  • — On /days/:date/readings and /collects/:date the resource is the one in the path; include only adds text or alternatives.

05 / fields

fields: what is serialized

fields[type] takes the list of attributes to return for that resource type. It does not change what is computed, only what comes back in the JSON.

GET
/api/v2/days?book=loc_2015&from=2026-03-01&to=2026-03-31
  &fields[day]=date,season,color,celebration

Accepted types: dayreadingcollectcelebrationcelebration_typeannual_overviewseasonkey_datelectionary_cycleprayer_bookbible_version

06 / Shape

data, meta and links

A single envelope, so you write one parser. Keys are English snake_case on every resource; values such as season and colour names come in the book's language or in lang.

GET /days/2026-03-25?book=loc_2015200 OK
{
  "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 repeats the context that resolved the response: book, language, Bible translation and lectionary variant, when there is one.
  • — Readings are a list with a slot (first_reading, psalm, second_reading, gospel…), not four fixed keys: books differ in how many readings they appoint.
  • — A day without readings answers 200 with an empty readings list. 404 is for resources that do not exist.
  • — Paginated collections carry links.self and links.next; meta carries count and total.

07 / Limits

Cache, cost and limits

X-API-Key

Quota per call

Each authenticated request counts as one call on the key's quota, as on v1. Your plan multiplies the daily and per-minute burst limits.

X-Request-Cost

Relative cost

Every response reports the relative work on the server: 1 per day, plus the weight of each include. It is an estimate and is never debited from the quota.

ETag · If-None-Match

Conditional requests

Send the ETag back in If-None-Match and get a bodiless 304 when nothing changed. Cache-Control: one hour for dates and catalogues, five minutes for today.

from · to · year

Ranges

Up to 366 days per call on /days. With readings.text or explanation, up to 31 days. Beyond that, 400 RANGE_TOO_LARGE with max_days.

08 / From v1 to v2

Where each route went

The data comes from the same liturgical services as v1; only the shape changes. v2 does not publish the Daily Office yet: for that, stay on v1.

v1v2
GET /api/v1/calendar/todayGET /api/v2/days/today
GET /api/v1/calendar/:y/:m/:dGET /api/v2/days/2026-03-25
GET /api/v1/calendar/:y/:mGET /api/v2/days?from=2026-03-01&to=2026-03-31
GET /api/v1/calendar/:yGET /api/v2/days?year=2026
GET /api/v1/calendar/:y/overviewGET /api/v2/years/2026
GET /api/v1/calendar/:y/seasonsGET /api/v2/years/2026/seasons
GET /api/v1/calendar/:y/key_datesGET /api/v2/years/2026/key-dates
GET /api/v1/calendar/:y/celebrationsGET /api/v2/celebrations?year=2026
GET /api/v1/lectionary/:y/:m/:dGET /api/v2/days/2026-03-25/readings
GET /api/v1/lectionary/:y/:m/:d/all_servicesGET /api/v2/days/2026-03-25/readings?service=all
GET /api/v1/lectionary/cycle/:yGET /api/v2/years/2026/lectionary-cycle
GET /api/v1/liturgical_explanation/:y/:m/:dGET /api/v2/liturgical-explanations/2026-03-25
GET /api/v1/celebrations · /search · /date/:m/:dGET /api/v2/celebrations?q=&month=&day=
GET /api/v1/celebrations/typesGET /api/v2/celebrations/types
GET /api/v1/prayer_books/:code/preferencesGET /api/v2/prayer-books/loc_2015/preferences
GET /api/v1/bible_versionsGET /api/v2/bible-versions
—GET /api/v2/collects/2026-03-25
—GET /api/v2/passages?ref=João+3:16&bible=nvi
  • — The preferences blob becomes flat parameters: book, bible, lectionary, psalter, reading_type and lang. The blob is still accepted to ease migration.
  • — Dates are ISO (2026-03-25), both in paths and in responses.
  • — Routes use hyphens (key-dates, prayer-books) instead of underscores.