Canons Endpoint
Get canons for a saint by internal id. Each canon is split into odes (песни) with typed items (irmos, troparion, theotokion, …) and optional inter-ode sections (sedalen, kontakion, ikos, …). Tone (глас) is exposed as a separate field, not embedded in the text.
Request
GET /canons/?id=393
GET /canons/?id=393&lang=cu&number=2
Parameters:
| Parameter | Type | In | Description |
|---|---|---|---|
id |
string | query | Internal saint id (typically one). Example: ?id=393. |
lang |
string | query | ru (default), cu, or en. Unknown values fall back to ru. |
number |
integer | query | Optional. Selects a specific canon by its internal number. |
Validation:
- each id length:
1..128, pattern^[A-Za-z0-9_][A-Za-z0-9._:-]{0,127}$; number(when present) must be a single positive integer;0, negatives, decimals, non-numeric, or repeated values return400.
Response
Returns an ordered array in data.
found=true: canons payload for this id.found=false: emptycanons+notFoundobject (id unknown, no data for the language, or the requestednumberwas not found).
{
"meta": {
"lang": "ru",
"format": "html",
"requestedIds": ["393"],
"count": 1
},
"data": [
{
"id": "393",
"found": true,
"canons": [
{
"number": 1,
"title": "Канон святому священномученику Памфилу Кесарийскому",
"tone": 4,
"odes": [
{
"number": 1,
"items": [
{ "role": "irmos", "html": "<p>...</p>" },
{ "role": "troparion", "html": "<p>...</p>" },
{ "role": "theotokion", "html": "<p>...</p>" }
]
}
],
"sections": [
{ "type": "sedalen", "afterOde": 3, "tone": 6, "html": "<p>...</p>" },
{ "type": "kontakion", "afterOde": 6, "tone": 2, "html": "<p>...</p>" },
{ "type": "ikos", "afterOde": 6, "html": "<p>...</p>" }
]
}
]
}
]
}
Notes
numberis a stable per-saint selector: a saint may have several canons, each with a uniquenumber. Use?number=Nto fetch a specific one; omit it to get all.odes[].numberis the ode number (1–9) — distinct from the canonnumber.items[].role: one ofirmos,troparion,theotokion,troichen,refrain,katavasia.items[].marker(optional):slavaori-nyneliturgical marker.items[].toneandsections[].tone(optional): the glas of that piece as a separate field, independent of the canon-leveltone.sections[](optional) holds inter-ode hymns;typeis one ofsedalen,kontakion,ikos,svetilen,exapostilarion;afterOdemarks the ode it follows. Source order is the canonical output order.title/acrosticare localized plain text;htmlfields are sanitized HTML with allowlisted tags only:p,br,h2,h3,ul,ol,li,strong,em, and safe internal footnote anchors viaa.- Languages:
ruandcuare always available;enis optional and may be empty for now —lang=enreturnsfound=falseuntil English texts are added.