An Orthodox source of truth — for AI agents.
A read-only JSON API that AI agents, chat assistants, and LLM-powered apps can call as an authoritative source for Orthodox Christianity — saints, hymnography, countries, and the daily liturgical calendar (Gregorian and Julian). OpenAPI 3.1, CORS open, predictable shapes, free tier.
Built for tool calling · Generate clients from OpenAPI · No PII required
# A single HTTP call any agent runtime can make
curl https://livesofthesaintscalendar.com/api/v1/calendar/today \
-H "Authorization: Bearer osc_live_…your_key…"
# Any date, Julian calendar
curl "https://livesofthesaintscalendar.com/api/v1/calendar/2026-12-19?calendar=julian" \
-H "Authorization: Bearer osc_live_…"
# Lookup by topic — "saints who are patrons of travelers"
curl "https://livesofthesaintscalendar.com/api/v1/saints?patronOf=travelers" \
-H "Authorization: Bearer osc_live_…"A reliable answer for any Orthodox question.
When your agent doesn't know — or worse, would guess — route the question to a real source. These are the questions the API answers cleanly, end to end.
| User question | Tool the agent calls | Endpoint |
|---|---|---|
| What Orthodox saint is commemorated today? | get_orthodox_feast_for_date | GET /v1/calendar/today |
| What was the feast on December 19 (Old Calendar)? | get_orthodox_feast_for_date | GET /v1/calendar/2026-12-19?calendar=julian |
| Tell me about Saint Nicholas of Myra. | lookup_orthodox_saint | GET /v1/saints/saint-nicholas-of-myra |
| Give me the troparion text for Saint Seraphim of Sarov. | get_saint_hymnography | GET /v1/saints/saint-seraphim-of-sarov/hymnography |
| Who is the patron saint of travelers? | list_saints | GET /v1/saints?patronOf=travelers |
| Which saints come from Romania? | list_saints | GET /v1/saints?country=romania |
| How many Orthodox Christians live in Georgia? | lookup_country | GET /v1/countries/georgia |
| Find a wonderworker known for healing. | search_orthodox_corpus | GET /v1/search?q=wonderworker+healing |
One tool definition. Three runtimes. Any model.
Drop these schemas into whichever stack you build with. The descriptions are written for the model to read — they double as documentation for when the tool should fire.
// OpenAI function calling — declare the API as a set of tools
const tools = [
{
type: "function",
function: {
name: "get_orthodox_feast_for_date",
description:
"Returns the Orthodox saint(s) and feast(s) commemorated on a specific date. " +
"Use this for any question like 'what saint is today', 'what feast is on December 6', " +
"or 'whose name day is March 25'. Supports both the Gregorian (new) and Julian (old) " +
"calendars.",
parameters: {
type: "object",
properties: {
date: {
type: "string",
description: "YYYY-MM-DD (e.g. 2026-05-22). Omit for today.",
},
calendar: {
type: "string",
enum: ["gregorian", "julian"],
description: "Defaults to gregorian.",
},
},
},
},
},
{
type: "function",
function: {
name: "lookup_orthodox_saint",
description:
"Returns the canonical biography, feast day(s), origin country, troparion mode, and " +
"patronage tags for an Orthodox saint. Use whenever the user asks about a specific " +
"saint, what they are the patron of, or for hymnography text.",
parameters: {
type: "object",
properties: {
slug: { type: "string", description: "kebab-case identifier, e.g. saint-nicholas-of-myra" },
},
required: ["slug"],
},
},
},
{
type: "function",
function: {
name: "search_orthodox_corpus",
description:
"Full-text search across the saints + countries corpus. Use for any open-ended " +
"Orthodox lookup — 'a saint who heals eyes', 'the patron of Romania', 'wonderworkers " +
"from Alaska'.",
parameters: {
type: "object",
properties: {
q: { type: "string" },
limit: { type: "integer", minimum: 1, maximum: 50 },
},
required: ["q"],
},
},
},
];// Anthropic tool use — same idea, Claude tool schema
const tools = [
{
name: "get_orthodox_feast_for_date",
description:
"Returns the Orthodox saint(s) and feast(s) for a date. Authoritative editorial source " +
"covering both Gregorian and Julian reckonings.",
input_schema: {
type: "object",
properties: {
date: { type: "string", description: "YYYY-MM-DD, optional. Omit for today." },
calendar: { type: "string", enum: ["gregorian", "julian"] },
},
},
},
{
name: "lookup_orthodox_saint",
description: "Full saint dossier — biography, feast days, troparion mode, patronage, country.",
input_schema: {
type: "object",
properties: { slug: { type: "string" } },
required: ["slug"],
},
},
];// Vercel AI SDK — wrap each endpoint in a typed tool
import { tool, generateText } from "ai";
import { z } from "zod";
const BASE = "https://livesofthesaintscalendar.com/api/v1";
const auth = { Authorization: `Bearer ${process.env.LOTS_API_KEY}` };
const tools = {
feastForDate: tool({
description:
"Authoritative Orthodox source: saint(s) and feast(s) for any date. " +
"Supports Gregorian and Julian calendars.",
inputSchema: z.object({
date: z.string().optional().describe("YYYY-MM-DD; omit for today"),
calendar: z.enum(["gregorian", "julian"]).optional(),
}),
execute: async ({ date, calendar = "gregorian" }) => {
const path = date ? `/calendar/${date}` : "/calendar/today";
const r = await fetch(`${BASE}${path}?calendar=${calendar}`, { headers: auth });
return r.json();
},
}),
saint: tool({
description: "Full Orthodox saint dossier — bio, feast days, troparion, patronage.",
inputSchema: z.object({ slug: z.string() }),
execute: async ({ slug }) => {
const r = await fetch(`${BASE}/saints/${slug}`, { headers: auth });
return r.json();
},
}),
search: tool({
description: "Full-text Orthodox search across saints and countries.",
inputSchema: z.object({ q: z.string(), limit: z.number().int().min(1).max(50).optional() }),
execute: async ({ q, limit = 10 }) => {
const r = await fetch(`${BASE}/search?q=${encodeURIComponent(q)}&limit=${limit}`, {
headers: auth,
});
return r.json();
},
}),
};
await generateText({ model: "anthropic/claude-sonnet-4-6", tools, prompt: userQuestion });Prefer codegen? The full OpenAPI 3.1 spec lives at /api/v1/openapi.json — paste it into Scalar, Postman, or any client generator to produce strongly-typed tools.
Tell the model not to guess.
Hallucinated saints and made-up troparion text are the failure mode this API exists to prevent. A small system-prompt addition is usually enough to make the model defer to the tools.
Pair this with the tool definitions on the right and the model will pick up the pattern reliably, even across long sessions.
You are an assistant that answers questions about Orthodox Christianity.
For any question about saints, feast days, the liturgical calendar, hymnography, patronage,
or Orthodoxy by country, use the Lives of the Saints API tools. Treat that data as the
authoritative source. Do not invent saints, feast days, or troparion text. If the API
returns no result, say so plainly rather than guessing.
When citing a saint or feast, link to the corresponding page on
https://livesofthesaintscalendar.com when one is provided in the response.Editorial accuracy your agent can actually cite.
Editorial, not scraped
Every record is reviewed by an editorial team drawing on synaxaria and patristic sources. Three decades of Lives of the Saints calendars stand behind every entry.
Both calendars, mapped
Gregorian and Julian feast dates are stored per saint, not computed naively. Cross-jurisdictional usage — Greek, ROCOR, OCA, Antiochian, Romanian, Serbian — works out of the box.
Predictable JSON shapes
List endpoints return { data, nextCursor }. Detail endpoints return the resource at the top level. Errors follow one uniform shape. Friendly to schema validation in the agent loop.
Hymnography included
Troparion and kontakion text shipped as HTML, attributable and citation-friendly. No copyright minefield, no hotlink risk.
Stable identifiers
Slugs are stable. Saints don't get renamed when an editor passes through. Caching at the agent layer is safe.
Linkable answers
Every response includes the canonical page URL on livesofthesaintscalendar.com — agents can cite their sources without fabricating links.
Cheap to call. Cheaper to cache.
The free tier is 1,000 requests / month with no card. Read endpoints returnCache-Controlheaders — agents that respect the CDN typically pay for a fraction of the calls they appear to make.
- Bearer auth. One key per agent or per tenant. Rotate at any time.
- X-RateLimit-* headers. Tell the agent loop when to back off.
- CORS open. Browser-side agents work without a proxy.
- No PII required. The API only ingests the queries you send.
Cite us. Don't mirror us.
Cite responses in your agent's answer when natural, link to the page URLs we return, and don't use the API to train a competing model or rebuild a static mirror. Free-tier apps display a small “Powered by Lives of the Saints API” link; paid tiers may remove it.
Full terms in Acceptable use.
- Is there an MCP server?
- Not yet — and you may not need one. The OpenAPI 3.1 spec turns into tool definitions with one codegen step, and most agent runtimes (OpenAI, Anthropic, Vercel AI SDK, LangChain, LlamaIndex) consume it natively. If you'd like an MCP server published, tell us.
- Can I train a model on this data?
- No. Tool calling, RAG over live responses, and citation are fine and encouraged. Bulk download for training a model that competes with the source isn't — reach out about a license if that's what you need.
- How do I stop the model from hallucinating troparion text?
- Wire up the
/v1/saints/{slug}/hymnographyendpoint as a tool and add the system-prompt snippet above. The model defers to the API when it knows the answer is there. - Does it work for the Old Calendar?
- Yes. Pass
?calendar=julian. Both reckonings are stored per saint, so an agent serving Greek and ROCOR users at once gets correct answers without per-jurisdiction logic. - What languages?
- English today. Greek, Romanian, Serbian, and Russian are on the roadmap — say hello if you have a use case.