{"openapi":"3.1.0","info":{"title":"Mesoamerican Astrology API","version":"2.0.0","description":"Calculate Mayan astrology day signs, the Tzolkin sacred round, the Haab year, the full Long Count and the Aztec tonalpohualli from any date: day sign and coefficient, trecena, Calendar Round, Lord of the Night, Year Bearer and the five point Cruz Maya, each with a composed reading. The correlation constant that makes two Mayan calculators disagree is a typed parameter with a named default rather than a hidden pick, and every response echoes the conventions it was computed under, so a saved chart stays reproducible. Both naming traditions ship on every sign, the Yucatec spelling and the Kʼicheʼ name daykeepers actually use, and readings come back in every language the API ships. One key covers every RoxyAPI domain, with Remote MCP and typed SDKs.\n\n# RoxyAPI: AI-Native Insight Infrastructure\n\n> **Base URL:** `https://roxyapi.com/api/v2`\n> All endpoint paths below are relative to this base URL.\n\nThe only multi-domain spiritual intelligence API. 18 domains (Astrology, Vedic Astrology, Forecast, Human Design, Chinese Astrology, Feng Shui, Mesoamerican Astrology, Vastu Shastra, Numerology, Kabbalah, Tarot Reading, Biorhythm, Ayurveda, I-Ching Oracle, Crystals and Healing Stones, Dream Interpretation, Angel Numbers, Location and Timezone), 258+ endpoints, one API key, instant activation. Remote MCP server per domain plus AGENTS.md for AI coding agents.\n\n## Who uses RoxyAPI\n\n- **Developers** building astrology apps, tarot platforms, numerology calculators, or dream journals\n- **AI agent builders** connecting Claude, GPT, or Gemini to real calculation engines via MCP\n- **Vibe coders** shipping insight apps with Cursor, Bolt, or Replit using zero domain knowledge\n- **Founders and brands** launching branded spiritual experiences for their audience\n\n## Quick start (60 seconds)\n\n**1. Get your API key** at [roxyapi.com/pricing](https://roxyapi.com/pricing). Instant delivery, no account required.\n\n**2. Make your first call:**\n```bash\ncurl -H \"X-API-Key: YOUR_KEY\" https://roxyapi.com/api/v2/tarot/draw -X POST -H \"Content-Type: application/json\" -d '{\"count\": 3}'\n```\n\n**3. Monitor usage:**\n```bash\ncurl -H \"X-API-Key: YOUR_KEY\" https://roxyapi.com/api/v2/usage\n```\n\n## AI agent integration (Remote MCP)\n\nRoxyAPI ships a Remote MCP server per product over Streamable HTTP, with no local setup and no Docker. Your AI agent auto-discovers all 258+ endpoints as callable tools with zero configuration:\n- **Claude Desktop, Cursor, Windsurf**: Add MCP server URL in settings\n- **OpenAI Agents, Gemini ADK**: Connect via Streamable HTTP transport\n- **Custom agents**: Use the MCP Python/TypeScript SDK\n\nMCP endpoints: `https://roxyapi.com/mcp/{domain}` (e.g., `/mcp/astrology`, `/mcp/tarot`)\n\nSetup guide: [roxyapi.com/docs/mcp](https://roxyapi.com/docs/mcp)\n\n## Authentication\n\nAll endpoints require an API key via header or query param:\n- **Header (recommended):** `X-API-Key: YOUR_KEY`\n- **Query param (testing):** `?api_key=YOUR_KEY`\n\n## Response format\n\nClean JSON, no wrapper objects. Errors return `{ \"error\": \"message\", \"code\": \"error_code\" }`. The `error` field is human-readable (may change wording). The `code` field is machine-readable and stable, so it is the one safe to switch on programmatically.\n\nRate limit headers on every response: `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Used`, `X-RateLimit-Reset` (Unix timestamp, seconds). Quotas reset on the 1st of every calendar month at 12:00 AM UTC, not on your renewal date.\n\n## Errors\n\nAll errors return `{ \"error\": \"message\", \"code\": \"error_code\" }`:\n\n| Status | Code | When |\n|--------|------|------|\n| 400 | `validation_error` | Missing or invalid parameters. Response includes `issues[]` with per-field `path`, `message`, `code`, `expected`, `minimum`, `maximum`, `format`, `pattern`. |\n| 401 | `api_key_required` | No API key provided |\n| 401 | `invalid_api_key` | Key format invalid or tampered |\n| 401 | `subscription_not_found` | Key references non-existent subscription |\n| 401 | `subscription_inactive` | Subscription cancelled, expired, or suspended |\n| 404 | `not_found` | Resource not found. Response may include a ranked `suggestions[]` array (each with `endpoint`, `hint`, and a `docs` deep link) for typo recovery. |\n| 405 | `method_not_allowed` | Path exists for a different HTTP method. Response includes `allow[]` and the `Allow` header lists valid methods. |\n| 429 | `rate_limit_exceeded` | Monthly quota reached |\n| 500 | `internal_error` | Server error |\n\n## Pricing\n\nFlat per-request pricing. Every call counts the same, whether a planet position or a full birth chart with aspects. No credit systems, no variable costs. Plans from $39 per month for 50K requests, up to 3M requests, with custom volume above that.\n\nSee [roxyapi.com/pricing](https://roxyapi.com/pricing)\n\n## Resources\n\n- [Quickstart guide](https://roxyapi.com/docs/quickstart): first API call in 60 seconds\n- [Documentation](https://roxyapi.com/docs): guides, tutorials, domain reference\n- [MCP setup](https://roxyapi.com/docs/mcp): connect AI agents\n- [Open source templates](https://roxyapi.com/starters): clone and deploy in 30 minutes\n- [FAQ](https://roxyapi.com/faq): common questions\n- [Contact](https://roxyapi.com/contact): support and API key recovery\n","contact":{"name":"RoxyAPI Support","url":"https://roxyapi.com/contact"},"license":{"name":"Proprietary","url":"https://roxyapi.com/policy/terms"}},"externalDocs":{"description":"Complete API Documentation with Examples","url":"https://roxyapi.com/docs"},"servers":[{"url":"/api/v2","description":"Production API v2"}],"security":[{"apiKey":[]}],"tags":[{"name":"Mesoamerican Astrology","description":"Calculate Mayan astrology day signs, the Tzolkin sacred round, the Haab year, the full Long Count and the Aztec tonalpohualli from any date: day sign and coefficient, trecena, Calendar Round, Lord of the Night, Year Bearer and the five point Cruz Maya, each with a composed reading. The correlation constant that makes two Mayan calculators disagree is a typed parameter with a named default rather than a hidden pick, and every response echoes the conventions it was computed under, so a saved chart stays reproducible. Both naming traditions ship on every sign, the Yucatec spelling and the Kʼicheʼ name daykeepers actually use, and readings come back in every language the API ships. One key covers every RoxyAPI domain, with Remote MCP and typed SDKs."}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Your API key for accessing RoxyAPI. Alternatively, you can pass the API key as a query parameter \"api_key\"."}},"schemas":{},"parameters":{}},"paths":{"/mayan/tzolkin":{"post":{"operationId":"calculateTzolkin","tags":["Mesoamerican Astrology"],"summary":"Mayan day sign for a date - Tzolkin calculator API","description":"Mayan astrology day sign calculator: returns the Tzolkin day sign, the coefficient 1 to 13 and the trecena for any Gregorian date, under the correlation living daykeepers use, with a composed nawal reading. Built for Mayan zodiac apps, daily energy feeds and AI agents answering what is my Mayan sign. Classical Maya count only, with the correlation echoed on every response so a saved reading stays reproducible.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","format":"date","example":"2012-12-21","description":"Date in YYYY-MM-DD format, in the PROLEPTIC GREGORIAN calendar, extended backwards unchanged through the 1582 reform. Years 1 to 4000 are accepted. A reference converter that switches to the Julian calendar below the reform will disagree with a date before 15 October 1582 by ten or eleven days; that is a difference of input convention rather than of arithmetic, and passing the Julian equivalent to such a tool reproduces these values exactly. A single-digit month or day is accepted and zero padded."},"correlation":{"type":"string","enum":["gmt-584283","martinez-hernando-584281","astronomical-584285","martin-skidmore-584286"],"default":"gmt-584283","example":"gmt-584283","description":"Which correlation constant ties the day count to a civil date. This is the single choice that shifts every value in the response, so it is a parameter rather than a hidden default, and the resolved value comes back under conventions. \"gmt-584283\" is the commonly accepted constant and the default, and it is the one the major institutional converter runs on. \"martinez-hernando-584281\" sits two days earlier, \"astronomical-584285\" two days later, and \"martin-skidmore-584286\" three days later, each shifting the Long Count by exactly its difference in days. Four of the eight published constants are offered: the other four sit tens of thousands of days away and are of historical interest only. The 584281 constant is attributed to Martinez and Hernando, printed in the literature as Martinéz-Hernando."}},"required":["date"]}}}},"responses":{"200":{"description":"The Tzolkin day for this date.","content":{"application/json":{"schema":{"type":"object","properties":{"daySign":{"type":"string","example":"ajaw","description":"Machine identifier of the Tzolkin day sign, always lowercase ASCII Yucatec whatever the lang parameter says, so it stays safe to compare against in code. The twenty ids run imix, ik, akbal, kan, chikchan, kimi, manik, lamat, muluk, ok, chuwen, eb, ben, ix, men, kib, kaban, etznab, kawak, ajaw."},"daySignName":{"type":"string","example":"Ajaw","description":"Display name of the day sign in the standard Maya orthography, where the ejective is written with a modifier letter rather than a typewriter quote. A proper noun carried as data, so it is identical under every lang."},"daySignClassic":{"type":"string","example":"Ahau","description":"The sixteenth century Yucatec spelling of the same sign, which is the form most printed reference tables and older sources use. Useful for matching a name a reader copied out of a book."},"daySignKiche":{"type":"string","example":"AJPUʼ","description":"The Kʼicheʼ name of the same day from the living highland daykeeping tradition, which is the vocabulary a nawal reading in Guatemala uses. A parallel naming tradition rather than a translation, so it is identical under every lang."},"number":{"type":"number","example":4,"description":"The Tzolkin coefficient, 1 to 13. This is the classical day number that runs alongside the twenty signs; it is not a rank and a 13 is not better than a 1. Nine of the thirteen carry a recorded character, which is returned separately."},"trecena":{"type":"object","properties":{"number":{"type":"number","example":20,"description":"Which of the twenty thirteen day periods this day falls in, 1 to 20. Trecena 1 opens on 1 Imix."},"dayOfTrecena":{"type":"number","example":4,"description":"Position of this day inside its trecena, 1 to 13. Always equal to the coefficient, because a trecena is exactly one run of the coefficient."},"rulingSign":{"type":"string","example":"kawak","description":"Machine identifier of the day sign the trecena opens on, which the tradition reads as colouring all thirteen of its days."},"rulingSignName":{"type":"string","example":"Kawak","description":"Display name of the sign the trecena opens on. A proper noun carried as data."}},"required":["number","dayOfTrecena","rulingSign","rulingSignName"],"description":"The thirteen day period this day belongs to. The trecena is the unit a daykeeper reads a run of days in, and the sign it opens on is what gives the whole period its character."},"date":{"type":"string","example":"2012-12-21","description":"Echo of the date the day was resolved from, in proleptic Gregorian."},"reading":{"type":"object","properties":{"keynote":{"type":"string","example":"The nawal Ajaw, called AJPUʼ in the highland daykeeping tradition, is the sun at its height, the completed day and the authority that comes with finishing. The sign itself is read as lord, ruler, sun.","description":"The sign in one composed sentence: its name in both naming traditions, what it is about, and the glyph reading behind it. Composed per request from the sign components rather than stored whole, which is why it stays consistent with every other reading in the response."},"numberReading":{"type":"string","example":"The coefficient 4 has no character recorded for it in the sources this API is built on, so no reading is offered for the number alone. The sign carries the day.","description":"What the coefficient contributes. Nine of the thirteen carry a recorded character, banded as gentle, indifferent or violent; the other four carry none and this field says so rather than inventing one. The band ids are the source vocabulary, so violent names the days reserved for strong ceremony and defence and is not a warning."},"numberBand":{"type":"string","example":"gentle","description":"Machine identifier of the recorded character of the coefficient: gentle, indifferent or violent. ABSENT for coefficients 4, 5, 6 and 10, which have no recorded character in any consulted source. Always English so it stays safe to switch on."},"strengths":{"type":"array","items":{"type":"string"},"example":["Finishes what was started and lets the result be seen"],"description":"What the sign does well, as full sentences rather than keywords."},"challenges":{"type":"array","items":{"type":"string"},"example":["Needs the light on it and dims when the light moves"],"description":"Where the same temperament costs the sign something. Each one is the shadow of a strength above rather than an unrelated flaw."},"guidance":{"type":"string","example":"Give the credit away once today. A sun that shines only on itself lights nothing.","description":"The one thing worth doing differently under this sign."}},"required":["keynote","numberReading","strengths","challenges","guidance"],"description":"The composed nawal reading for this day: the sign, what the coefficient contributes, and what the sign does well and badly."},"conventions":{"type":"object","properties":{"correlation":{"type":"string","example":"gmt-584283","description":"The correlation constant actually applied, whether it was requested or defaulted. Store this beside any Maya date you persist: the same civil date resolves to a different Long Count under each constant, and a date with no correlation recorded cannot be reproduced."}},"required":["correlation"],"description":"The conventions this answer was computed under, echoed so the result is self describing. Only the correlation is echoed here, because it is the only switch this route takes."}},"required":["daySign","daySignName","daySignClassic","daySignKiche","number","trecena","date","reading","conventions"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/chart":{"post":{"operationId":"generateMayanChart","tags":["Mesoamerican Astrology"],"summary":"Generate a Mayan chart - Tzolkin, Haab and Long Count calculator API","description":"Mayan astrology birth chart from one date: the Tzolkin day sign and coefficient, the Haab date, the full Long Count with its day count, the Calendar Round, the Lord of the Night, the Year Bearer of the Haab year and the five point Cruz Maya, each with composed readings. Built for nawal readings, birth chart features and multi domain spiritual apps that show a Mayan card beside a natal chart. Every school split in the domain is a typed parameter and comes back echoed, so the chart can be reproduced exactly.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","format":"date","example":"2012-12-21","description":"Date in YYYY-MM-DD format, in the PROLEPTIC GREGORIAN calendar, extended backwards unchanged through the 1582 reform. Years 1 to 4000 are accepted. A reference converter that switches to the Julian calendar below the reform will disagree with a date before 15 October 1582 by ten or eleven days; that is a difference of input convention rather than of arithmetic, and passing the Julian equivalent to such a tool reproduces these values exactly. A single-digit month or day is accepted and zero padded."},"correlation":{"type":"string","enum":["gmt-584283","martinez-hernando-584281","astronomical-584285","martin-skidmore-584286"],"default":"gmt-584283","example":"gmt-584283","description":"Which correlation constant ties the day count to a civil date. This is the single choice that shifts every value in the response, so it is a parameter rather than a hidden default, and the resolved value comes back under conventions. \"gmt-584283\" is the commonly accepted constant and the default, and it is the one the major institutional converter runs on. \"martinez-hernando-584281\" sits two days earlier, \"astronomical-584285\" two days later, and \"martin-skidmore-584286\" three days later, each shifting the Long Count by exactly its difference in days. Four of the eight published constants are offered: the other four sit tens of thousands of days away and are of historical interest only. The 584281 constant is attributed to Martinez and Hernando, printed in the literature as Martinéz-Hernando."},"yearBearerSystem":{"type":"string","enum":["classic","campeche","colonial-yucatec"],"default":"classic","example":"classic","description":"Which Haab day is read as the start of the year when naming its Year Bearer. Only four of the twenty day signs can ever carry a year, and which four depends entirely on this choice, so the three schools never agree. \"classic\" reads the seating of Pop and is the default, because it is the set highland daykeepers still use; its four bearers are Ikʼ, Manikʼ, Ebʼ and Kabʼan. \"campeche\" reads 1 Pop and gives Akʼbʼal, Lamat, Bʼen and Etzʼnabʼ. \"colonial-yucatec\" reads 2 Pop and gives Kʼan, Muluk, Ix and Kawak. The three sets share no member, so a bearer alone tells you which school produced it."}},"required":["date"]}}}},"responses":{"200":{"description":"The full Maya chart for this date.","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","example":"2012-12-21","description":"Echo of the date the chart was computed from, in proleptic Gregorian."},"tzolkin":{"type":"object","properties":{"daySign":{"type":"string","example":"ajaw","description":"Machine identifier of the Tzolkin day sign, always lowercase ASCII Yucatec whatever the lang parameter says, so it stays safe to compare against in code. The twenty ids run imix, ik, akbal, kan, chikchan, kimi, manik, lamat, muluk, ok, chuwen, eb, ben, ix, men, kib, kaban, etznab, kawak, ajaw."},"daySignName":{"type":"string","example":"Ajaw","description":"Display name of the day sign in the standard Maya orthography, where the ejective is written with a modifier letter rather than a typewriter quote. A proper noun carried as data, so it is identical under every lang."},"daySignClassic":{"type":"string","example":"Ahau","description":"The sixteenth century Yucatec spelling of the same sign, which is the form most printed reference tables and older sources use. Useful for matching a name a reader copied out of a book."},"daySignKiche":{"type":"string","example":"AJPUʼ","description":"The Kʼicheʼ name of the same day from the living highland daykeeping tradition, which is the vocabulary a nawal reading in Guatemala uses. A parallel naming tradition rather than a translation, so it is identical under every lang."},"number":{"type":"number","example":4,"description":"The Tzolkin coefficient, 1 to 13. This is the classical day number that runs alongside the twenty signs; it is not a rank and a 13 is not better than a 1. Nine of the thirteen carry a recorded character, which is returned separately."},"trecena":{"type":"object","properties":{"number":{"type":"number","example":20,"description":"Which of the twenty thirteen day periods this day falls in, 1 to 20. Trecena 1 opens on 1 Imix."},"dayOfTrecena":{"type":"number","example":4,"description":"Position of this day inside its trecena, 1 to 13. Always equal to the coefficient, because a trecena is exactly one run of the coefficient."},"rulingSign":{"type":"string","example":"kawak","description":"Machine identifier of the day sign the trecena opens on, which the tradition reads as colouring all thirteen of its days."},"rulingSignName":{"type":"string","example":"Kawak","description":"Display name of the sign the trecena opens on. A proper noun carried as data."}},"required":["number","dayOfTrecena","rulingSign","rulingSignName"],"description":"The thirteen day period this day belongs to. The trecena is the unit a daykeeper reads a run of days in, and the sign it opens on is what gives the whole period its character."},"reading":{"type":"object","properties":{"keynote":{"type":"string","example":"The nawal Ajaw, called AJPUʼ in the highland daykeeping tradition, is the sun at its height, the completed day and the authority that comes with finishing. The sign itself is read as lord, ruler, sun.","description":"The sign in one composed sentence: its name in both naming traditions, what it is about, and the glyph reading behind it. Composed per request from the sign components rather than stored whole, which is why it stays consistent with every other reading in the response."},"numberReading":{"type":"string","example":"The coefficient 4 has no character recorded for it in the sources this API is built on, so no reading is offered for the number alone. The sign carries the day.","description":"What the coefficient contributes. Nine of the thirteen carry a recorded character, banded as gentle, indifferent or violent; the other four carry none and this field says so rather than inventing one. The band ids are the source vocabulary, so violent names the days reserved for strong ceremony and defence and is not a warning."},"numberBand":{"type":"string","example":"gentle","description":"Machine identifier of the recorded character of the coefficient: gentle, indifferent or violent. ABSENT for coefficients 4, 5, 6 and 10, which have no recorded character in any consulted source. Always English so it stays safe to switch on."},"strengths":{"type":"array","items":{"type":"string"},"example":["Finishes what was started and lets the result be seen"],"description":"What the sign does well, as full sentences rather than keywords."},"challenges":{"type":"array","items":{"type":"string"},"example":["Needs the light on it and dims when the light moves"],"description":"Where the same temperament costs the sign something. Each one is the shadow of a strength above rather than an unrelated flaw."},"guidance":{"type":"string","example":"Give the credit away once today. A sun that shines only on itself lights nothing.","description":"The one thing worth doing differently under this sign."}},"required":["keynote","numberReading","strengths","challenges","guidance"],"description":"The composed nawal reading for the Tzolkin day."}},"required":["daySign","daySignName","daySignClassic","daySignKiche","number","trecena","reading"],"description":"The 260 day sacred round: the day sign, its coefficient and the trecena it falls in. This is the cycle a nawal reading is built on."},"haab":{"type":"object","properties":{"month":{"type":"string","example":"kankin","description":"Machine identifier of the Haab period, always lowercase ASCII. The nineteen ids run pop, wo, sip, sotz, sek, xul, yaxkin, mol, chen, yax, sak, keh, mak, kankin, muwan, pax, kayab, kumku, wayeb."},"monthName":{"type":"string","example":"Kʼankʼin","description":"Display name of the Haab period in the standard orthography. A proper noun carried as data, so it is identical under every lang."},"monthClassic":{"type":"string","example":"Kankin","description":"The sixteenth century Yucatec spelling of the same period, which is the form most printed tables use."},"day":{"type":"number","example":3,"description":"Day inside the period, 0 to 19, or 0 to 4 in Wayebʼ. Day 0 is a real date and is called the seating of the period, so a Haab month has no day 20. Numbering from 1 instead is the usual way to be one day wrong on every Haab date."},"dayOfYear":{"type":"number","example":263,"description":"Day of the 365 day Haab year, 0 to 364. The Haab has no leap day at all, so it drifts against the solar year by about a day every four years and there is nothing to correct."},"reading":{"type":"string","example":"The Haab date is 3 Kʼankʼin, inside a period read this way: The yellow sun, ripening light, where the year turns toward its harvest.","description":"Composed reading of the Haab date, which reads differently on the seating day of a period."}},"required":["month","monthName","monthClassic","day","dayOfYear","reading"],"description":"The 365 day vague year: eighteen periods of twenty days plus the five days of Wayebʼ. This is the agricultural year the Tzolkin runs against."},"longCount":{"type":"object","properties":{"formatted":{"type":"string","example":"13.0.0.0.0","description":"The dotted Long Count, most significant position first. This is the spelling every reference converter and every inscription uses."},"baktun":{"type":"number","example":13,"description":"Baktun, the highest of the five positions. One baktun is 144,000 days."},"katun":{"type":"number","example":0,"description":"Katun, 0 to 19. One katun is 7,200 days, roughly twenty years."},"tun":{"type":"number","example":0,"description":"Tun, 0 to 19. One tun is 360 days, which is why this position sits roughly a year apart."},"winal":{"type":"number","example":0,"description":"Winal, 0 to 17 and never 19. This is the one position that is not base twenty: eighteen winal make a tun, which is what keeps the tun near a solar year."},"kin":{"type":"number","example":0,"description":"Kin, 0 to 19. One kin is one day."},"daysSinceEpoch":{"type":"number","example":1872000,"description":"The whole Long Count as a single integer count of days from the epoch. Subtracting two of these is the correct way to measure an interval, and it is the number the Tzolkin, the Haab and the night lord are all derived from."},"julianDayNumber":{"type":"number","example":2456283,"description":"Julian Day Number of the same day, which is the bridge between this count and any other calendar. Adding the correlation constant to daysSinceEpoch gives exactly this."}},"required":["formatted","baktun","katun","tun","winal","kin","daysSinceEpoch","julianDayNumber"],"description":"The linear day count from the mythological start of the era, written in five positions. Unlike the two round calendars this one never repeats, which is what lets an inscription name an absolute date."},"calendarRound":{"type":"string","example":"4 Ajaw 3 Kʼankʼin","description":"The Tzolkin and Haab dates written together, which is how a Classic inscription names a day. The pair repeats every 18,980 days, a little under 52 years, so a Calendar Round alone is ambiguous beyond one lifetime and the Long Count is what disambiguates it."},"lordOfNight":{"type":"object","properties":{"label":{"type":"string","example":"G9","description":"Which of the nine Lords of the Night governs this day, G1 to G9. The cycle steps forward one per day and closes every nine."},"reading":{"type":"string","example":"The night belongs to G9 of the nine, a cycle that turns one step every day and closes every nine. The Maya names for the nine were never recorded, so the cycle is published by its glyph labels alone.","description":"One line on the night lord, including why the nine carry labels rather than names."}},"required":["label","reading"],"description":"The nine day cycle that runs beside the other three. The nine are identified and the cycle is unambiguous, but no source records what the Maya called them, so this API publishes the labels rather than borrowing names from a neighbouring culture."},"yearBearer":{"type":"object","properties":{"daySign":{"type":"string","example":"kaban","description":"Machine identifier of the day sign carrying the Haab year this date falls in. Only four of the twenty can ever carry a year, and which four depends on the school."},"daySignName":{"type":"string","example":"Kabʼan","description":"Display name of the bearing sign. A proper noun carried as data."},"number":{"type":"number","example":5,"description":"Coefficient of the bearing day, 1 to 13. The coefficient advances by one each Haab year, which is what makes the bearer and the number together repeat only every 52 years."},"reading":{"type":"string","example":"The Haab year is carried by 5 Kabʼan, read at the seating of Pop. This is the Classic set, and it is the one highland daykeepers still run today.","description":"One line on the year bearer that names the school it was read under, because the three schools name three different bearers for the same year."}},"required":["daySign","daySignName","number","reading"],"description":"The Tzolkin day that names the Haab year this date falls in, under the requested school."},"cross":{"type":"array","items":{"type":"object","properties":{"position":{"type":"string","example":"conception","description":"Which point of the cross this is: center, conception, destiny, left or right. Always English so it stays safe to switch on. The arms are published as left and right and carry no gender, because the sources that agree on the SIGNS disagree on which arm is masculine and which feminine."},"offsetDays":{"type":"number","example":-8,"description":"Days from the birth day to this arm. Negative is before the birth day. Conception is minus eight, destiny plus eight, the left arm plus six and the right arm minus six."},"daySign":{"type":"string","example":"chikchan","description":"Machine identifier of the day sign standing at this point."},"daySignName":{"type":"string","example":"Chikchan","description":"Display name of the sign at this point. A proper noun carried as data."},"daySignKiche":{"type":"string","example":"KAN","description":"Kʼicheʼ name of the same sign, which is the vocabulary a cross is normally read in."},"number":{"type":"number","example":9,"description":"Coefficient of the day at this point, 1 to 13."},"reading":{"type":"string","example":"The conception arm, eight days before the birth day, is 9 Chikchan. It is read as the root the life is drawn from.","description":"One line on what this point of the cross is read as."}},"required":["position","offsetDays","daySign","daySignName","daySignKiche","number","reading"]},"description":"The Cruz Maya, the five point nawal cross, with source convention. This is a LIVING DAYKEEPER PRACTICE rather than an archaeological reconstruction: no academic source describes a five point cross, and the day offsets here were measured against two independent practitioner calculators that agree. It is published because practitioners use it, and it is labelled because that is what honesty about a source looks like."},"summary":{"type":"string","example":"This day is 4 Ajaw 3 Kʼankʼin, Long Count 13.0.0.0.0. The nawal is Ajaw, the sun at its height, the completed day and the authority that comes with finishing, carried on the coefficient 4.","description":"One composed sentence placing the day in all three calendars, for a card headline or a chat reply."},"conventions":{"type":"object","properties":{"correlation":{"type":"string","example":"gmt-584283","description":"The correlation constant actually applied, whether it was requested or defaulted. Store this beside any Maya date you persist: the same civil date resolves to a different Long Count under each constant, and a date with no correlation recorded cannot be reproduced."},"yearBearerSystem":{"type":"string","example":"classic","description":"The Year Bearer school actually applied. The three schools name three different bearers for the same Haab year, so a bearer stored without this value cannot be checked against anything."}},"required":["correlation","yearBearerSystem"],"description":"The conventions this chart was computed under, echoed so the result is self describing. Store both beside any chart you persist."}},"required":["date","tzolkin","haab","longCount","calendarRound","lordOfNight","yearBearer","cross","summary","conventions"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/long-count/convert":{"post":{"operationId":"convertLongCount","tags":["Mesoamerican Astrology"],"summary":"Convert a Maya Long Count - Long Count calendar converter API","description":"Maya Long Count converter that runs both ways: give it a Gregorian date and it returns the Long Count, give it a dotted Long Count and it returns the date. Every answer carries the Julian Day Number, the elapsed day count and the Calendar Round, and the correlation constant is a typed parameter so a value can be matched against any published inscription reading. Built for epigraphy tools, museum and education apps, and anything that has to place a Maya date on a civil calendar.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","format":"date","example":"2012-12-21","description":"Proleptic Gregorian date to convert INTO a Long Count. Supply this or longCount, never both and never neither."},"longCount":{"type":"string","maxLength":32,"example":"13.0.0.0.0","description":"Dotted Long Count to convert INTO a date, written baktun.katun.tun.winal.kin. Each position is bounded by its own base, and the winal counts to 17 rather than to 19 because eighteen winal make a tun, so 9.12.11.18.0 is rejected as a date that does not exist. Supply this or date, never both and never neither."},"correlation":{"type":"string","enum":["gmt-584283","martinez-hernando-584281","astronomical-584285","martin-skidmore-584286"],"default":"gmt-584283","example":"gmt-584283","description":"Which correlation constant ties the day count to a civil date. This is the single choice that shifts every value in the response, so it is a parameter rather than a hidden default, and the resolved value comes back under conventions. \"gmt-584283\" is the commonly accepted constant and the default, and it is the one the major institutional converter runs on. \"martinez-hernando-584281\" sits two days earlier, \"astronomical-584285\" two days later, and \"martin-skidmore-584286\" three days later, each shifting the Long Count by exactly its difference in days. Four of the eight published constants are offered: the other four sit tens of thousands of days away and are of historical interest only. The 584281 constant is attributed to Martinez and Hernando, printed in the literature as Martinéz-Hernando."}}}}}},"responses":{"200":{"description":"The converted date.","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","example":"2012-12-21","description":"The proleptic Gregorian date, echoed when it was the input and computed when the Long Count was."},"longCount":{"type":"string","example":"13.0.0.0.0","description":"The dotted Long Count, echoed when it was the input and computed when the date was."},"daysSinceEpoch":{"type":"number","example":1872000,"description":"The Long Count as one integer count of days from the epoch. Subtracting two of these is the correct way to measure an interval between two Maya dates."},"julianDayNumber":{"type":"number","example":2456283,"description":"Julian Day Number of the same day, which is the bridge to any other calendar. It is exactly daysSinceEpoch plus the correlation constant."},"calendarRound":{"type":"string","example":"4 Ajaw 3 Kʼankʼin","description":"The Tzolkin and Haab dates written together, which is how an inscription names a day. The pair repeats every 18,980 days, so it is ambiguous beyond about 52 years and the Long Count is what fixes it."},"lordOfNight":{"type":"string","example":"G9","description":"Which of the nine Lords of the Night governs the day, G1 to G9. The nine carry glyph labels rather than names because no source records what the Maya called them."},"note":{"type":"string","example":"This date precedes the Gregorian reform of 15 October 1582. Dates are read as proleptic Gregorian throughout, so a converter that switches to the Julian calendar below the reform will disagree by ten or eleven days on the same input.","description":"Present ONLY for a date before the Gregorian reform, where the input convention is the usual reason two converters disagree. Absent otherwise, so its presence is itself the signal."},"conventions":{"type":"object","properties":{"correlation":{"type":"string","example":"gmt-584283","description":"The correlation constant actually applied, whether it was requested or defaulted. Store this beside any Maya date you persist: the same civil date resolves to a different Long Count under each constant, and a date with no correlation recorded cannot be reproduced."}},"required":["correlation"],"description":"The conventions this conversion was computed under, echoed so the result is self describing."}},"required":["date","longCount","daysSinceEpoch","julianDayNumber","calendarRound","lordOfNight","conventions"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/daily":{"get":{"operationId":"getDailyMayanReading","tags":["Mesoamerican Astrology"],"summary":"Daily Mayan energy reading - Tzolkin day sign of the day API","description":"Mayan energy of the day: the Tzolkin day sign, its coefficient and its trecena for today or for any date you name, with a composed reading. Content is fixed for a given date and rolls over at midnight UTC, so a daily feed can cache it safely and an editorial calendar can be filled weeks ahead. Built for daily energy widgets, nawal of the day feeds and chatbot answers about what today carries.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"},{"schema":{"type":"string","format":"date","example":"2026-09-02","description":"Date in YYYY-MM-DD format, in the PROLEPTIC GREGORIAN calendar, extended backwards unchanged through the 1582 reform. Years 1 to 4000 are accepted. A reference converter that switches to the Julian calendar below the reform will disagree with a date before 15 October 1582 by ten or eleven days; that is a difference of input convention rather than of arithmetic, and passing the Julian equivalent to such a tool reproduces these values exactly. A single-digit month or day is accepted and zero padded. Defaults to the current day in UTC."},"required":false,"description":"Date in YYYY-MM-DD format, in the PROLEPTIC GREGORIAN calendar, extended backwards unchanged through the 1582 reform. Years 1 to 4000 are accepted. A reference converter that switches to the Julian calendar below the reform will disagree with a date before 15 October 1582 by ten or eleven days; that is a difference of input convention rather than of arithmetic, and passing the Julian equivalent to such a tool reproduces these values exactly. A single-digit month or day is accepted and zero padded. Defaults to the current day in UTC.","name":"date","in":"query"},{"schema":{"type":"string","enum":["gmt-584283","martinez-hernando-584281","astronomical-584285","martin-skidmore-584286"],"default":"gmt-584283","example":"gmt-584283","description":"Which correlation constant ties the day count to a civil date. This is the single choice that shifts every value in the response, so it is a parameter rather than a hidden default, and the resolved value comes back under conventions. \"gmt-584283\" is the commonly accepted constant and the default, and it is the one the major institutional converter runs on. \"martinez-hernando-584281\" sits two days earlier, \"astronomical-584285\" two days later, and \"martin-skidmore-584286\" three days later, each shifting the Long Count by exactly its difference in days. Four of the eight published constants are offered: the other four sit tens of thousands of days away and are of historical interest only. The 584281 constant is attributed to Martinez and Hernando, printed in the literature as Martinéz-Hernando."},"required":false,"description":"Which correlation constant ties the day count to a civil date. This is the single choice that shifts every value in the response, so it is a parameter rather than a hidden default, and the resolved value comes back under conventions. \"gmt-584283\" is the commonly accepted constant and the default, and it is the one the major institutional converter runs on. \"martinez-hernando-584281\" sits two days earlier, \"astronomical-584285\" two days later, and \"martin-skidmore-584286\" three days later, each shifting the Long Count by exactly its difference in days. Four of the eight published constants are offered: the other four sit tens of thousands of days away and are of historical interest only. The 584281 constant is attributed to Martinez and Hernando, printed in the literature as Martinéz-Hernando.","name":"correlation","in":"query"}],"responses":{"200":{"description":"The Tzolkin reading for this day.","content":{"application/json":{"schema":{"type":"object","properties":{"daySign":{"type":"string","example":"ajaw","description":"Machine identifier of the Tzolkin day sign, always lowercase ASCII Yucatec whatever the lang parameter says, so it stays safe to compare against in code. The twenty ids run imix, ik, akbal, kan, chikchan, kimi, manik, lamat, muluk, ok, chuwen, eb, ben, ix, men, kib, kaban, etznab, kawak, ajaw."},"daySignName":{"type":"string","example":"Ajaw","description":"Display name of the day sign in the standard Maya orthography, where the ejective is written with a modifier letter rather than a typewriter quote. A proper noun carried as data, so it is identical under every lang."},"daySignClassic":{"type":"string","example":"Ahau","description":"The sixteenth century Yucatec spelling of the same sign, which is the form most printed reference tables and older sources use. Useful for matching a name a reader copied out of a book."},"daySignKiche":{"type":"string","example":"AJPUʼ","description":"The Kʼicheʼ name of the same day from the living highland daykeeping tradition, which is the vocabulary a nawal reading in Guatemala uses. A parallel naming tradition rather than a translation, so it is identical under every lang."},"number":{"type":"number","example":4,"description":"The Tzolkin coefficient, 1 to 13. This is the classical day number that runs alongside the twenty signs; it is not a rank and a 13 is not better than a 1. Nine of the thirteen carry a recorded character, which is returned separately."},"trecena":{"type":"object","properties":{"number":{"type":"number","example":20,"description":"Which of the twenty thirteen day periods this day falls in, 1 to 20. Trecena 1 opens on 1 Imix."},"dayOfTrecena":{"type":"number","example":4,"description":"Position of this day inside its trecena, 1 to 13. Always equal to the coefficient, because a trecena is exactly one run of the coefficient."},"rulingSign":{"type":"string","example":"kawak","description":"Machine identifier of the day sign the trecena opens on, which the tradition reads as colouring all thirteen of its days."},"rulingSignName":{"type":"string","example":"Kawak","description":"Display name of the sign the trecena opens on. A proper noun carried as data."}},"required":["number","dayOfTrecena","rulingSign","rulingSignName"],"description":"The thirteen day period this day belongs to. The trecena is the unit a daykeeper reads a run of days in, and the sign it opens on is what gives the whole period its character."},"date":{"type":"string","example":"2026-09-02","description":"Date of this reading. Echoes the date requested, or the current day in UTC when it was omitted."},"overview":{"type":"string","example":"Today is 2 Akʼbʼal, day 2 of the trecena that opened on 1 Ikʼ. The day is coloured by the dark hour before first light, where a thing is decided but not yet visible.","description":"What the day carries, placing it inside its trecena as well as naming it. Composed per request, so it stays consistent with the reading below rather than being a second opinion."},"reading":{"type":"object","properties":{"keynote":{"type":"string","example":"The nawal Ajaw, called AJPUʼ in the highland daykeeping tradition, is the sun at its height, the completed day and the authority that comes with finishing. The sign itself is read as lord, ruler, sun.","description":"The sign in one composed sentence: its name in both naming traditions, what it is about, and the glyph reading behind it. Composed per request from the sign components rather than stored whole, which is why it stays consistent with every other reading in the response."},"numberReading":{"type":"string","example":"The coefficient 4 has no character recorded for it in the sources this API is built on, so no reading is offered for the number alone. The sign carries the day.","description":"What the coefficient contributes. Nine of the thirteen carry a recorded character, banded as gentle, indifferent or violent; the other four carry none and this field says so rather than inventing one. The band ids are the source vocabulary, so violent names the days reserved for strong ceremony and defence and is not a warning."},"numberBand":{"type":"string","example":"gentle","description":"Machine identifier of the recorded character of the coefficient: gentle, indifferent or violent. ABSENT for coefficients 4, 5, 6 and 10, which have no recorded character in any consulted source. Always English so it stays safe to switch on."},"strengths":{"type":"array","items":{"type":"string"},"example":["Finishes what was started and lets the result be seen"],"description":"What the sign does well, as full sentences rather than keywords."},"challenges":{"type":"array","items":{"type":"string"},"example":["Needs the light on it and dims when the light moves"],"description":"Where the same temperament costs the sign something. Each one is the shadow of a strength above rather than an unrelated flaw."},"guidance":{"type":"string","example":"Give the credit away once today. A sun that shines only on itself lights nothing.","description":"The one thing worth doing differently under this sign."}},"required":["keynote","numberReading","strengths","challenges","guidance"],"description":"The composed nawal reading for the day sign in force."},"conventions":{"type":"object","properties":{"correlation":{"type":"string","example":"gmt-584283","description":"The correlation constant actually applied, whether it was requested or defaulted. Store this beside any Maya date you persist: the same civil date resolves to a different Long Count under each constant, and a date with no correlation recorded cannot be reproduced."}},"required":["correlation"],"description":"The conventions this reading was computed under, echoed so the result is self describing."}},"required":["daySign","daySignName","daySignClassic","daySignKiche","number","trecena","date","overview","reading","conventions"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/calendar/monthly":{"get":{"operationId":"getMonthlyTzolkinCalendar","tags":["Mesoamerican Astrology"],"summary":"Monthly Tzolkin calendar grid - Maya calendar month API","description":"Mayan calendar grid for a whole civil month: every day of the month with its Tzolkin day sign and coefficient, its trecena, its Haab date and its Long Count. One call fills a monthly grid that would otherwise take a request per day, and the answer is fixed for any month that has already begun. Built for calendar widgets, editorial planners and any app that shows a month of Maya dates at once.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"},{"schema":{"type":"integer","example":2026,"description":"Gregorian year of the grid, 1900 to 2100. Defaults to the current year in UTC. Wider historical ranges are available on the single date routes, which are not bounded to this window."},"required":false,"description":"Gregorian year of the grid, 1900 to 2100. Defaults to the current year in UTC. Wider historical ranges are available on the single date routes, which are not bounded to this window.","name":"year","in":"query"},{"schema":{"type":"integer","example":9,"description":"Calendar month of the grid, 1 to 12. Defaults to the current month in UTC."},"required":false,"description":"Calendar month of the grid, 1 to 12. Defaults to the current month in UTC.","name":"month","in":"query"},{"schema":{"type":"string","enum":["gmt-584283","martinez-hernando-584281","astronomical-584285","martin-skidmore-584286"],"default":"gmt-584283","example":"gmt-584283","description":"Which correlation constant ties the day count to a civil date. This is the single choice that shifts every value in the response, so it is a parameter rather than a hidden default, and the resolved value comes back under conventions. \"gmt-584283\" is the commonly accepted constant and the default, and it is the one the major institutional converter runs on. \"martinez-hernando-584281\" sits two days earlier, \"astronomical-584285\" two days later, and \"martin-skidmore-584286\" three days later, each shifting the Long Count by exactly its difference in days. Four of the eight published constants are offered: the other four sit tens of thousands of days away and are of historical interest only. The 584281 constant is attributed to Martinez and Hernando, printed in the literature as Martinéz-Hernando."},"required":false,"description":"Which correlation constant ties the day count to a civil date. This is the single choice that shifts every value in the response, so it is a parameter rather than a hidden default, and the resolved value comes back under conventions. \"gmt-584283\" is the commonly accepted constant and the default, and it is the one the major institutional converter runs on. \"martinez-hernando-584281\" sits two days earlier, \"astronomical-584285\" two days later, and \"martin-skidmore-584286\" three days later, each shifting the Long Count by exactly its difference in days. Four of the eight published constants are offered: the other four sit tens of thousands of days away and are of historical interest only. The 584281 constant is attributed to Martinez and Hernando, printed in the literature as Martinéz-Hernando.","name":"correlation","in":"query"}],"responses":{"200":{"description":"Every day of the month with its Maya date.","content":{"application/json":{"schema":{"type":"object","properties":{"year":{"type":"number","example":2026,"description":"Year of the grid, echoed or defaulted to the current year in UTC."},"month":{"type":"number","example":9,"description":"Month of the grid, echoed or defaulted to the current month in UTC."},"total":{"type":"number","example":30,"description":"Number of days in the grid, which is the length of the civil month. Every day of the month appears exactly once and none is repeated."},"days":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","example":"2026-09-02","description":"Calendar date of this row, in proleptic Gregorian."},"daySign":{"type":"string","example":"akbal","description":"Machine identifier of the Tzolkin day sign, always lowercase ASCII Yucatec, so it stays safe to compare against in code."},"daySignName":{"type":"string","example":"Akʼbʼal","description":"Display name of the day sign. A proper noun carried as data, identical under every lang."},"number":{"type":"number","example":2,"description":"The Tzolkin coefficient for this day, 1 to 13."},"trecena":{"type":"number","example":18,"description":"Which of the twenty thirteen day periods this day falls in, 1 to 20. Consecutive rows share a trecena until the period turns."},"haab":{"type":"string","example":"16 Mol","description":"The Haab date, written as the day inside its period followed by the period name. Day 0 is the seating of a period and is a real date."},"longCount":{"type":"string","example":"13.0.13.16.3","description":"The dotted Long Count for this day. Consecutive rows differ by exactly one kin."}},"required":["date","daySign","daySignName","number","trecena","haab","longCount"]},"description":"The days of the month in calendar order, one row per day. Every date in the month is present exactly once, which is what makes this safe to render straight into a grid."},"conventions":{"type":"object","properties":{"correlation":{"type":"string","example":"gmt-584283","description":"The correlation constant actually applied, whether it was requested or defaulted. Store this beside any Maya date you persist: the same civil date resolves to a different Long Count under each constant, and a date with no correlation recorded cannot be reproduced."}},"required":["correlation"],"description":"The conventions this grid was computed under, echoed so the result is self describing."}},"required":["year","month","total","days","conventions"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/compatibility":{"post":{"operationId":"calculateMayanCompatibility","tags":["Mesoamerican Astrology"],"summary":"Mayan nawal compatibility - Tzolkin pair analysis API","description":"Mayan compatibility between two birth dates, published as its parts rather than as a verdict: both nawals with their coefficients and trecenas, the five structural ties the pair either has or does not, the weight each tie carries, and a composite score built from them. Built for matchmaking features, relationship reports and compatibility widgets that need to show their working. The scoring weights are stated on every response so a caller can re-derive the number or replace it.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"personA":{"type":"object","properties":{"date":{"type":"string","format":"date","example":"2012-12-21","description":"Date in YYYY-MM-DD format, in the PROLEPTIC GREGORIAN calendar, extended backwards unchanged through the 1582 reform. Years 1 to 4000 are accepted. A reference converter that switches to the Julian calendar below the reform will disagree with a date before 15 October 1582 by ten or eleven days; that is a difference of input convention rather than of arithmetic, and passing the Julian equivalent to such a tool reproduces these values exactly. A single-digit month or day is accepted and zero padded."}},"required":["date"],"description":"The first person, by birth date. Only a date is needed: the Tzolkin is a day count, so no time, timezone or place changes the answer."},"personB":{"type":"object","properties":{"date":{"type":"string","format":"date","example":"2012-12-21","description":"Date in YYYY-MM-DD format, in the PROLEPTIC GREGORIAN calendar, extended backwards unchanged through the 1582 reform. Years 1 to 4000 are accepted. A reference converter that switches to the Julian calendar below the reform will disagree with a date before 15 October 1582 by ten or eleven days; that is a difference of input convention rather than of arithmetic, and passing the Julian equivalent to such a tool reproduces these values exactly. A single-digit month or day is accepted and zero padded."}},"required":["date"],"description":"The second person, by birth date. The comparison is symmetric except for the cross tie, which is checked in both directions."},"correlation":{"type":"string","enum":["gmt-584283","martinez-hernando-584281","astronomical-584285","martin-skidmore-584286"],"default":"gmt-584283","example":"gmt-584283","description":"Which correlation constant ties the day count to a civil date. This is the single choice that shifts every value in the response, so it is a parameter rather than a hidden default, and the resolved value comes back under conventions. \"gmt-584283\" is the commonly accepted constant and the default, and it is the one the major institutional converter runs on. \"martinez-hernando-584281\" sits two days earlier, \"astronomical-584285\" two days later, and \"martin-skidmore-584286\" three days later, each shifting the Long Count by exactly its difference in days. Four of the eight published constants are offered: the other four sit tens of thousands of days away and are of historical interest only. The 584281 constant is attributed to Martinez and Hernando, printed in the literature as Martinéz-Hernando."},"directionScheme":{"type":"string","enum":["madrid-codex","landa"],"default":"madrid-codex","example":"madrid-codex","description":"Which reading of the world direction and colour to serve for a day sign. The two published assignments differ by exactly one quarter turn on all twenty signs, so neither is a rounding of the other and a silent pick would be a school choice. \"madrid-codex\" is the codex reading and the default; \"landa\" is the sixteenth century assignment recorded beside it."}},"required":["personA","personB"]}}}},"responses":{"200":{"description":"The comparison of the two days.","content":{"application/json":{"schema":{"type":"object","properties":{"personA":{"type":"object","properties":{"daySign":{"type":"string","example":"ajaw","description":"Machine identifier of the Tzolkin day sign, always lowercase ASCII Yucatec whatever the lang parameter says, so it stays safe to compare against in code. The twenty ids run imix, ik, akbal, kan, chikchan, kimi, manik, lamat, muluk, ok, chuwen, eb, ben, ix, men, kib, kaban, etznab, kawak, ajaw."},"daySignName":{"type":"string","example":"Ajaw","description":"Display name of the day sign in the standard Maya orthography, where the ejective is written with a modifier letter rather than a typewriter quote. A proper noun carried as data, so it is identical under every lang."},"daySignClassic":{"type":"string","example":"Ahau","description":"The sixteenth century Yucatec spelling of the same sign, which is the form most printed reference tables and older sources use. Useful for matching a name a reader copied out of a book."},"daySignKiche":{"type":"string","example":"AJPUʼ","description":"The Kʼicheʼ name of the same day from the living highland daykeeping tradition, which is the vocabulary a nawal reading in Guatemala uses. A parallel naming tradition rather than a translation, so it is identical under every lang."},"number":{"type":"number","example":4,"description":"The Tzolkin coefficient, 1 to 13. This is the classical day number that runs alongside the twenty signs; it is not a rank and a 13 is not better than a 1. Nine of the thirteen carry a recorded character, which is returned separately."},"trecena":{"type":"object","properties":{"number":{"type":"number","example":20,"description":"Which of the twenty thirteen day periods this day falls in, 1 to 20. Trecena 1 opens on 1 Imix."},"dayOfTrecena":{"type":"number","example":4,"description":"Position of this day inside its trecena, 1 to 13. Always equal to the coefficient, because a trecena is exactly one run of the coefficient."},"rulingSign":{"type":"string","example":"kawak","description":"Machine identifier of the day sign the trecena opens on, which the tradition reads as colouring all thirteen of its days."},"rulingSignName":{"type":"string","example":"Kawak","description":"Display name of the sign the trecena opens on. A proper noun carried as data."}},"required":["number","dayOfTrecena","rulingSign","rulingSignName"],"description":"The thirteen day period this day belongs to. The trecena is the unit a daykeeper reads a run of days in, and the sign it opens on is what gives the whole period its character."},"date":{"type":"string","example":"1990-06-15","description":"Echo of the first birth date."}},"required":["daySign","daySignName","daySignClassic","daySignKiche","number","trecena","date"],"description":"The Tzolkin day the first person was born on."},"personB":{"type":"object","properties":{"daySign":{"type":"string","example":"ajaw","description":"Machine identifier of the Tzolkin day sign, always lowercase ASCII Yucatec whatever the lang parameter says, so it stays safe to compare against in code. The twenty ids run imix, ik, akbal, kan, chikchan, kimi, manik, lamat, muluk, ok, chuwen, eb, ben, ix, men, kib, kaban, etznab, kawak, ajaw."},"daySignName":{"type":"string","example":"Ajaw","description":"Display name of the day sign in the standard Maya orthography, where the ejective is written with a modifier letter rather than a typewriter quote. A proper noun carried as data, so it is identical under every lang."},"daySignClassic":{"type":"string","example":"Ahau","description":"The sixteenth century Yucatec spelling of the same sign, which is the form most printed reference tables and older sources use. Useful for matching a name a reader copied out of a book."},"daySignKiche":{"type":"string","example":"AJPUʼ","description":"The Kʼicheʼ name of the same day from the living highland daykeeping tradition, which is the vocabulary a nawal reading in Guatemala uses. A parallel naming tradition rather than a translation, so it is identical under every lang."},"number":{"type":"number","example":4,"description":"The Tzolkin coefficient, 1 to 13. This is the classical day number that runs alongside the twenty signs; it is not a rank and a 13 is not better than a 1. Nine of the thirteen carry a recorded character, which is returned separately."},"trecena":{"type":"object","properties":{"number":{"type":"number","example":20,"description":"Which of the twenty thirteen day periods this day falls in, 1 to 20. Trecena 1 opens on 1 Imix."},"dayOfTrecena":{"type":"number","example":4,"description":"Position of this day inside its trecena, 1 to 13. Always equal to the coefficient, because a trecena is exactly one run of the coefficient."},"rulingSign":{"type":"string","example":"kawak","description":"Machine identifier of the day sign the trecena opens on, which the tradition reads as colouring all thirteen of its days."},"rulingSignName":{"type":"string","example":"Kawak","description":"Display name of the sign the trecena opens on. A proper noun carried as data."}},"required":["number","dayOfTrecena","rulingSign","rulingSignName"],"description":"The thirteen day period this day belongs to. The trecena is the unit a daykeeper reads a run of days in, and the sign it opens on is what gives the whole period its character."},"date":{"type":"string","example":"1988-03-02","description":"Echo of the second birth date."}},"required":["daySign","daySignName","daySignClassic","daySignKiche","number","trecena","date"],"description":"The Tzolkin day the second person was born on."},"daysApart":{"type":"number","example":47,"description":"How far apart the two days sit in the 260 day round, taken the short way round, so the value never exceeds 130. Two people on the same nawal are 0 apart."},"components":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"same-trecena","description":"Which tie this row reports: same-sign, same-trecena, same-number, cross-partner or shared-direction. Always English so it stays safe to switch on."},"holds":{"type":"boolean","example":true,"description":"Whether this tie holds for the pair. Every component is returned whether it holds or not, so a caller can render the misses as well as the hits."},"weight":{"type":"number","example":20,"description":"Points this tie contributes to the score when it holds, and nothing when it does not. The weights are published rather than hidden precisely because the weighting is ours rather than traditional."},"reading":{"type":"string","example":"Both days fall inside the same trecena, so the two lives are coloured by one ruling sign.","description":"One line on what this tie means. Present ONLY when the tie holds, so a caller can render the hits without filtering and a miss carries no sentence to explain away."}},"required":["id","holds","weight"]},"description":"The five structural ties, in a fixed order, each either holding or not. Every one of them is a property of the count itself or of the measured daykeeper cross convention; what is ours is only the decision to weigh them together."},"score":{"type":"number","example":65,"description":"A RoxyAPI COMPOSITE, not a traditional rating. No classical source rates a pair of Tzolkin days, so this number is a floor of 45 plus the weight of every tie that holds, capped at 100. The components above are what is sourced; this is what we built out of them, and it is labelled so that nobody cites it as tradition."},"verdict":{"type":"string","example":"workable","description":"Coarse band the composite score falls in: excellent, strong, workable or reserved. Built for badges and filters that should not hard code a threshold against a number whose weighting may be tuned."},"summary":{"type":"string","example":"The pair sets Lamat against Ajaw, 47 days apart in the 260 day count.","description":"One composed sentence naming both nawals and the distance between them, for a headline above the component list. When no tie holds at all it says so, because that is the common case and a blank component list is not self explanatory."},"conventions":{"type":"object","properties":{"correlation":{"type":"string","example":"gmt-584283","description":"The correlation constant actually applied, whether it was requested or defaulted. Store this beside any Maya date you persist: the same civil date resolves to a different Long Count under each constant, and a date with no correlation recorded cannot be reproduced."},"directionScheme":{"type":"string","example":"madrid-codex","description":"The direction reading actually applied. The two readings sit one quarter turn apart, so a direction stored without this value is ambiguous."}},"required":["correlation","directionScheme"],"description":"The conventions this comparison was computed under. The direction scheme is echoed because one of the five ties is read off the world directions, which the two schemes assign differently."}},"required":["personA","personB","daysApart","components","score","verdict","summary","conventions"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/day-signs":{"get":{"operationId":"listMayanDaySigns","tags":["Mesoamerican Astrology"],"summary":"List the 20 Mayan day signs - Tzolkin nawal catalogue API","description":"Retrieve all twenty Tzolkin day signs in sequence order from Imix to Ajaw. Each entry returns the machine id, the name in the standard orthography, the sixteenth century spelling and the Kʼicheʼ name from the living daykeeping tradition, both published glosses, and the world direction and colour under the requested scheme. Built for nawal pickers, sign reference pages and any app that needs the whole set in one call.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"},{"schema":{"type":"string","enum":["madrid-codex","landa"],"default":"madrid-codex","example":"madrid-codex","description":"Which reading of the world direction and colour to serve for a day sign. The two published assignments differ by exactly one quarter turn on all twenty signs, so neither is a rounding of the other and a silent pick would be a school choice. \"madrid-codex\" is the codex reading and the default; \"landa\" is the sixteenth century assignment recorded beside it."},"required":false,"description":"Which reading of the world direction and colour to serve for a day sign. The two published assignments differ by exactly one quarter turn on all twenty signs, so neither is a rounding of the other and a silent pick would be a school choice. \"madrid-codex\" is the codex reading and the default; \"landa\" is the sixteenth century assignment recorded beside it.","name":"directionScheme","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20,"example":20,"description":"Maximum items to return per page. Range: 1-20, default 20."},"required":false,"description":"Maximum items to return per page. Range: 1-20, default 20.","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0,"description":"Number of items to skip for pagination. Default 0."},"required":false,"description":"Number of items to skip for pagination. Default 0.","name":"offset","in":"query"}],"responses":{"200":{"description":"The day sign catalogue.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number","example":20,"description":"Total signs in the cycle. Always 20; the Tzolkin sign set is closed."},"limit":{"type":"number","example":20,"description":"Maximum items returned for this page."},"offset":{"type":"number","example":0,"description":"Number of items skipped before this page."},"daySigns":{"type":"array","items":{"type":"object","properties":{"position":{"type":"number","example":1,"description":"Place in the twenty sign sequence, 1 to 20, counting Imix as 1. The sequence never varies and is what every other cycle in the domain is indexed against."},"id":{"type":"string","example":"imix","description":"Machine identifier of the day sign, always lowercase ASCII Yucatec whatever the lang parameter says, so it stays safe to compare against in code and to use as a path parameter. The twenty ids run imix, ik, akbal, kan, chikchan, kimi, manik, lamat, muluk, ok, chuwen, eb, ben, ix, men, kib, kaban, etznab, kawak, ajaw."},"nameYucatec":{"type":"string","example":"Imix","description":"Display name in the standard Maya orthography, where an ejective is written with a modifier letter rather than a typewriter quote. A proper noun carried as data, identical under every lang."},"nameClassic":{"type":"string","example":"Imix","description":"The sixteenth century Yucatec spelling of the same sign, which is the form most printed reference tables and older books use."},"nameKiche":{"type":"string","example":"IMOX","description":"The Kʼicheʼ name from the living highland daykeeping tradition, which is the vocabulary a nawal reading in Guatemala uses. A parallel naming tradition rather than a translation, so it is identical under every lang."},"gloss":{"type":"string","example":"crocodile","description":"The short day-name association, translated in place because it is a common noun rather than a name. Two published readings of the twenty signs disagree on six of them, so the alternate reading ships beside this one rather than one being resolved away."},"glossAlternate":{"type":"string","example":"Naah Kan, the Primordial Snake; the essence of water","description":"The glyph-table reading of the same sign, translated in place. On the six signs where the two readings disagree this is the one the composed prose follows, so a reading that seems to ignore the gloss above is doing so deliberately."},"direction":{"type":"string","example":"north","description":"World direction this sign belongs to under the requested scheme: east, north, west or south. The twenty signs divide evenly into four groups of five, so exactly five signs share each quarter."},"color":{"type":"string","example":"white","description":"Colour paired with the direction: red for east, white for north, black for west, yellow for south. Always English so it stays safe to key a palette off."}},"required":["position","id","nameYucatec","nameClassic","nameKiche","gloss","glossAlternate","direction","color"]},"description":"Day signs for the current page, in sequence order. Use /mayan/day-signs/{id} for the full record with the composed reading, strengths, challenges and guidance."},"conventions":{"type":"object","properties":{"directionScheme":{"type":"string","example":"madrid-codex","description":"The direction reading actually applied. The two readings sit one quarter turn apart, so a direction stored without this value is ambiguous."}},"required":["directionScheme"],"description":"The conventions this listing was served under. Only the direction scheme applies here, because it is the only field on a catalogue row that a school split moves."}},"required":["total","limit","offset","daySigns","conventions"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/day-signs/{id}":{"get":{"operationId":"getMayanDaySign","tags":["Mesoamerican Astrology"],"summary":"Get one Mayan day sign - Nawal profile API","description":"Retrieve the full profile of one Tzolkin day sign: both naming traditions, both published glosses, the world direction and colour under the requested scheme, a composed keynote, what the sign does well, where the same temperament costs it something, and one line of guidance. Built for nawal detail pages, sign cards and chatbot answers about a single Mayan sign.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["imix","ik","akbal","kan","chikchan","kimi","manik","lamat","muluk","ok","chuwen","eb","ben","ix","men","kib","kaban","etznab","kawak","ajaw"],"example":"imix","description":"Day sign id, case-insensitive and punctuation-insensitive. One of imix, ik, akbal, kan, chikchan, kimi, manik, lamat, muluk, ok, chuwen, eb, ben, ix, men, kib, kaban, etznab, kawak, ajaw."},"required":true,"description":"Day sign id, case-insensitive and punctuation-insensitive. One of imix, ik, akbal, kan, chikchan, kimi, manik, lamat, muluk, ok, chuwen, eb, ben, ix, men, kib, kaban, etznab, kawak, ajaw.","name":"id","in":"path"},{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"},{"schema":{"type":"string","enum":["madrid-codex","landa"],"default":"madrid-codex","example":"madrid-codex","description":"Which reading of the world direction and colour to serve for a day sign. The two published assignments differ by exactly one quarter turn on all twenty signs, so neither is a rounding of the other and a silent pick would be a school choice. \"madrid-codex\" is the codex reading and the default; \"landa\" is the sixteenth century assignment recorded beside it."},"required":false,"description":"Which reading of the world direction and colour to serve for a day sign. The two published assignments differ by exactly one quarter turn on all twenty signs, so neither is a rounding of the other and a silent pick would be a school choice. \"madrid-codex\" is the codex reading and the default; \"landa\" is the sixteenth century assignment recorded beside it.","name":"directionScheme","in":"query"}],"responses":{"200":{"description":"Full day sign profile.","content":{"application/json":{"schema":{"type":"object","properties":{"position":{"type":"number","example":1,"description":"Place in the twenty sign sequence, 1 to 20, counting Imix as 1. The sequence never varies and is what every other cycle in the domain is indexed against."},"id":{"type":"string","example":"imix","description":"Machine identifier of the day sign, always lowercase ASCII Yucatec whatever the lang parameter says, so it stays safe to compare against in code and to use as a path parameter. The twenty ids run imix, ik, akbal, kan, chikchan, kimi, manik, lamat, muluk, ok, chuwen, eb, ben, ix, men, kib, kaban, etznab, kawak, ajaw."},"nameYucatec":{"type":"string","example":"Imix","description":"Display name in the standard Maya orthography, where an ejective is written with a modifier letter rather than a typewriter quote. A proper noun carried as data, identical under every lang."},"nameClassic":{"type":"string","example":"Imix","description":"The sixteenth century Yucatec spelling of the same sign, which is the form most printed reference tables and older books use."},"nameKiche":{"type":"string","example":"IMOX","description":"The Kʼicheʼ name from the living highland daykeeping tradition, which is the vocabulary a nawal reading in Guatemala uses. A parallel naming tradition rather than a translation, so it is identical under every lang."},"gloss":{"type":"string","example":"crocodile","description":"The short day-name association, translated in place because it is a common noun rather than a name. Two published readings of the twenty signs disagree on six of them, so the alternate reading ships beside this one rather than one being resolved away."},"glossAlternate":{"type":"string","example":"Naah Kan, the Primordial Snake; the essence of water","description":"The glyph-table reading of the same sign, translated in place. On the six signs where the two readings disagree this is the one the composed prose follows, so a reading that seems to ignore the gloss above is doing so deliberately."},"direction":{"type":"string","example":"north","description":"World direction this sign belongs to under the requested scheme: east, north, west or south. The twenty signs divide evenly into four groups of five, so exactly five signs share each quarter."},"color":{"type":"string","example":"white","description":"Colour paired with the direction: red for east, white for north, black for west, yellow for south. Always English so it stays safe to key a palette off."},"keynote":{"type":"string","example":"The nawal Imix, called IMOX in the highland daykeeping tradition, is the first water, the unformed source every later shape is drawn out of. The sign itself is read as Naah Kan, the Primordial Snake; the essence of water.","description":"The sign in one composed sentence: both names, what it is about and the glyph reading behind it."},"directionReading":{"type":"string","example":"The sign faces north, the quarter of the ancestors and of everything overhead, and carries the colour white. Directions follow the codex reading, which is the one most reference tables print.","description":"The world direction in prose, followed by a line naming which of the two published readings produced it. The two sit one quarter turn apart on all twenty signs."},"essence":{"type":"string","example":"the first water, the unformed source every later shape is drawn out of","description":"What the sign is about, as a clause rather than a sentence, because it is spliced into composed prose elsewhere in the API. Translated in place."},"strengths":{"type":"array","items":{"type":"string"},"example":["Begins things other people are still describing, and works comfortably before a shape exists"],"description":"What the sign does well, as full sentences rather than keywords."},"challenges":{"type":"array","items":{"type":"string"},"example":["Takes on more feeling than belongs to it and calls the weight its own"],"description":"Where the same temperament costs the sign something. Each one is the shadow of a strength above rather than an unrelated flaw."},"guidance":{"type":"string","example":"Give the day a container. Water without banks floods, and the same instinct that opens a thing can drown it.","description":"The one thing worth doing differently under this sign."},"trecena":{"type":"object","properties":{"number":{"type":"number","example":1,"description":"The trecena this sign opens, 1 to 20. Every sign opens exactly one trecena, because 13 and 20 share no factor."},"reading":{"type":"string","example":"Trecena 1 opens on 1 Imix and runs for thirteen days under it. The whole period takes its colour from the first water, the unformed source every later shape is drawn out of.","description":"The composed reading of the thirteen day period this sign opens."}},"required":["number","reading"],"description":"The thirteen day period this sign opens. Composed from the sign rather than stored, so the two can never disagree."},"conventions":{"type":"object","properties":{"directionScheme":{"type":"string","example":"madrid-codex","description":"The direction reading actually applied. The two readings sit one quarter turn apart, so a direction stored without this value is ambiguous."}},"required":["directionScheme"],"description":"The conventions this profile was served under."}},"required":["position","id","nameYucatec","nameClassic","nameKiche","gloss","glossAlternate","direction","color","keynote","directionReading","essence","strengths","challenges","guidance","trecena","conventions"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/trecenas":{"get":{"operationId":"listTrecenas","tags":["Mesoamerican Astrology"],"summary":"List the 20 Mayan trecenas - Tzolkin thirteen day period API","description":"Retrieve all twenty trecenas, the thirteen day periods the 260 day Tzolkin divides into. Each entry returns the period number, the day sign it opens on in both naming traditions, and a composed reading of what the period carries. Built for calendar apps, energy period trackers and content planners that work in thirteen day blocks rather than in weeks.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20,"example":20,"description":"Maximum items to return per page. Range: 1-20, default 20."},"required":false,"description":"Maximum items to return per page. Range: 1-20, default 20.","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0,"description":"Number of items to skip for pagination. Default 0."},"required":false,"description":"Number of items to skip for pagination. Default 0.","name":"offset","in":"query"}],"responses":{"200":{"description":"The trecena catalogue.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number","example":20,"description":"Total trecenas in the round. Always 20, because 260 divided by 13 is exactly 20."},"limit":{"type":"number","example":20,"description":"Maximum items returned for this page."},"offset":{"type":"number","example":0,"description":"Number of items skipped before this page."},"trecenas":{"type":"array","items":{"type":"object","properties":{"number":{"type":"number","example":1,"description":"Which of the twenty thirteen day periods this is, 1 to 20. Trecena 1 opens on 1 Imix and the openers step thirteen signs at a time from there."},"rulingSign":{"type":"string","example":"imix","description":"Machine identifier of the day sign the period opens on, which the tradition reads as colouring all thirteen of its days."},"rulingSignName":{"type":"string","example":"Imix","description":"Display name of the sign the period opens on. A proper noun carried as data."},"rulingSignKiche":{"type":"string","example":"IMOX","description":"Kʼicheʼ name of the same sign, the vocabulary a highland reading uses."},"length":{"type":"number","example":13,"description":"Days in the period. Always 13, which is what the word trecena means."},"reading":{"type":"string","example":"Trecena 1 opens on 1 Imix and runs for thirteen days under it. The whole period takes its colour from the first water, the unformed source every later shape is drawn out of.","description":"The composed reading of the period, built from the sign it opens on. Composed rather than stored, so it can never drift away from the day sign it is drawn from."}},"required":["number","rulingSign","rulingSignName","rulingSignKiche","length","reading"]},"description":"Trecenas for the current page, in order from the one that opens on 1 Imix."}},"required":["total","limit","offset","trecenas"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/trecenas/{number}":{"get":{"operationId":"getTrecena","tags":["Mesoamerican Astrology"],"summary":"Get one Mayan trecena - Thirteen day period profile API","description":"Retrieve one of the twenty trecenas by number, with the day sign it opens on in both naming traditions and a composed reading of the period. Built for period detail pages and for apps that show which thirteen day block a date falls in.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"integer","example":1,"description":"Trecena number, 1 to 20. Trecena 1 opens on 1 Imix, trecena 2 on 1 Ix, and each subsequent period opens thirteen signs further round the twenty."},"required":true,"description":"Trecena number, 1 to 20. Trecena 1 opens on 1 Imix, trecena 2 on 1 Ix, and each subsequent period opens thirteen signs further round the twenty.","name":"number","in":"path"},{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"}],"responses":{"200":{"description":"The trecena.","content":{"application/json":{"schema":{"type":"object","properties":{"number":{"type":"number","example":1,"description":"Which of the twenty thirteen day periods this is, 1 to 20. Trecena 1 opens on 1 Imix and the openers step thirteen signs at a time from there."},"rulingSign":{"type":"string","example":"imix","description":"Machine identifier of the day sign the period opens on, which the tradition reads as colouring all thirteen of its days."},"rulingSignName":{"type":"string","example":"Imix","description":"Display name of the sign the period opens on. A proper noun carried as data."},"rulingSignKiche":{"type":"string","example":"IMOX","description":"Kʼicheʼ name of the same sign, the vocabulary a highland reading uses."},"length":{"type":"number","example":13,"description":"Days in the period. Always 13, which is what the word trecena means."},"reading":{"type":"string","example":"Trecena 1 opens on 1 Imix and runs for thirteen days under it. The whole period takes its colour from the first water, the unformed source every later shape is drawn out of.","description":"The composed reading of the period, built from the sign it opens on. Composed rather than stored, so it can never drift away from the day sign it is drawn from."}},"required":["number","rulingSign","rulingSignName","rulingSignKiche","length","reading"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/haab-months":{"get":{"operationId":"listHaabMonths","tags":["Mesoamerican Astrology"],"summary":"List the 19 Haab periods - Maya solar calendar month API","description":"Retrieve all nineteen periods of the Haab, the 365 day Maya year: eighteen months of twenty days plus the five days of Wayebʼ. Each entry returns the machine id, both spellings of the name, the length, what the name means and a composed reading. Built for calendar reference pages and for any app that has to label a Haab date rather than only compute it.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":19,"default":19,"example":19,"description":"Maximum items to return per page. Range: 1-19, default 19."},"required":false,"description":"Maximum items to return per page. Range: 1-19, default 19.","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0,"description":"Number of items to skip for pagination. Default 0."},"required":false,"description":"Number of items to skip for pagination. Default 0.","name":"offset","in":"query"}],"responses":{"200":{"description":"The Haab period catalogue.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number","example":19,"description":"Total periods in the Haab year. Always 19: eighteen months plus Wayebʼ, which is a period of the year even though it is only five days."},"limit":{"type":"number","example":19,"description":"Maximum items returned for this page."},"offset":{"type":"number","example":0,"description":"Number of items skipped before this page."},"months":{"type":"array","items":{"type":"object","properties":{"position":{"type":"number","example":1,"description":"Place in the Haab year, 1 to 19. Pop is 1 and Wayebʼ is 19, so a position of 19 always means the five short days."},"id":{"type":"string","example":"pop","description":"Machine identifier of the Haab period, always lowercase ASCII, so it stays safe to compare against and to use as a path parameter. The nineteen ids run pop, wo, sip, sotz, sek, xul, yaxkin, mol, chen, yax, sak, keh, mak, kankin, muwan, pax, kayab, kumku, wayeb."},"nameYucatec":{"type":"string","example":"Pop","description":"Display name in the standard orthography. A proper noun carried as data, identical under every lang."},"nameClassic":{"type":"string","example":"Pop","description":"The sixteenth century Yucatec spelling, which is the form most printed tables use."},"length":{"type":"number","example":20,"description":"Days in the period. Twenty for the eighteen months and five for Wayebʼ, which is never twenty. Days inside a period are numbered from 0, so a twenty day period runs 0 to 19."},"gloss":{"type":"string","example":"mat","description":"What the period name means, translated in place because it is a common noun rather than a name."},"reading":{"type":"string","example":"The Haab period Pop stands at position 1 in the year and runs 20 days. The mat is the seat of authority, so the year opens on who is entitled to speak and on the households the mat gathers.","description":"The composed reading of the period, built from its position, its length and its gloss."}},"required":["position","id","nameYucatec","nameClassic","length","gloss","reading"]},"description":"Periods for the current page, in order from Pop."}},"required":["total","limit","offset","months"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/mayan/haab-months/{id}":{"get":{"operationId":"getHaabMonth","tags":["Mesoamerican Astrology"],"summary":"Get one Haab period - Maya solar calendar month profile API","description":"Retrieve one of the nineteen Haab periods by id, with both spellings of its name, its position in the year, its length and a composed reading. Built for calendar detail pages and for labelling a Haab date a chart route has already returned.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["pop","wo","sip","sotz","sek","xul","yaxkin","mol","chen","yax","sak","keh","mak","kankin","muwan","pax","kayab","kumku","wayeb"],"example":"pop","description":"Haab period id, case-insensitive and punctuation-insensitive. One of pop, wo, sip, sotz, sek, xul, yaxkin, mol, chen, yax, sak, keh, mak, kankin, muwan, pax, kayab, kumku, wayeb."},"required":true,"description":"Haab period id, case-insensitive and punctuation-insensitive. One of pop, wo, sip, sotz, sek, xul, yaxkin, mol, chen, yax, sak, keh, mak, kankin, muwan, pax, kayab, kumku, wayeb.","name":"id","in":"path"},{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"}],"responses":{"200":{"description":"The Haab period.","content":{"application/json":{"schema":{"type":"object","properties":{"position":{"type":"number","example":1,"description":"Place in the Haab year, 1 to 19. Pop is 1 and Wayebʼ is 19, so a position of 19 always means the five short days."},"id":{"type":"string","example":"pop","description":"Machine identifier of the Haab period, always lowercase ASCII, so it stays safe to compare against and to use as a path parameter. The nineteen ids run pop, wo, sip, sotz, sek, xul, yaxkin, mol, chen, yax, sak, keh, mak, kankin, muwan, pax, kayab, kumku, wayeb."},"nameYucatec":{"type":"string","example":"Pop","description":"Display name in the standard orthography. A proper noun carried as data, identical under every lang."},"nameClassic":{"type":"string","example":"Pop","description":"The sixteenth century Yucatec spelling, which is the form most printed tables use."},"length":{"type":"number","example":20,"description":"Days in the period. Twenty for the eighteen months and five for Wayebʼ, which is never twenty. Days inside a period are numbered from 0, so a twenty day period runs 0 to 19."},"gloss":{"type":"string","example":"mat","description":"What the period name means, translated in place because it is a common noun rather than a name."},"reading":{"type":"string","example":"The Haab period Pop stands at position 1 in the year and runs 20 days. The mat is the seat of authority, so the year opens on who is entitled to speak and on the households the mat gathers.","description":"The composed reading of the period, built from its position, its length and its gloss."}},"required":["position","id","nameYucatec","nameClassic","length","gloss","reading"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/aztec/tonalpohualli":{"post":{"operationId":"calculateTonalpohualli","tags":["Mesoamerican Astrology"],"summary":"Aztec day sign for a date - Tonalpohualli calculator API","description":"Aztec calendar day sign calculator: returns the tonalpohualli day sign, its coefficient 1 to 13 and its trecena for any Gregorian date, with a composed reading. The count is anchored on the recorded day of the fall of Tenochtitlan and runs in step with the Maya count under the default constant, verified on the anchor and on two modern dates. Built for Aztec calendar apps, Mexica day sign features and AI agents answering what is my Aztec sign.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","format":"date","example":"2012-12-21","description":"Date in YYYY-MM-DD format, in the PROLEPTIC GREGORIAN calendar, extended backwards unchanged through the 1582 reform. Years 1 to 4000 are accepted. A reference converter that switches to the Julian calendar below the reform will disagree with a date before 15 October 1582 by ten or eleven days; that is a difference of input convention rather than of arithmetic, and passing the Julian equivalent to such a tool reproduces these values exactly. A single-digit month or day is accepted and zero padded."}},"required":["date"]}}}},"responses":{"200":{"description":"The tonalpohualli day for this date.","content":{"application/json":{"schema":{"type":"object","properties":{"daySign":{"type":"string","example":"coatl","description":"Machine identifier of the tonalpohualli day sign, always lowercase ASCII Nahuatl whatever the lang parameter says, so it stays safe to compare against in code. The twenty ids run cipactli, ehecatl, calli, cuetzpalin, coatl, miquiztli, mazatl, tochtli, atl, itzcuintli, ozomahtli, malinalli, acatl, ocelotl, cuauhtli, cozcacuauhtli, ollin, tecpatl, quiahuitl, xochitl."},"daySignName":{"type":"string","example":"Cōātl","description":"Display name in Nahuatl with the vowel length marks the reference tables print. A proper noun carried as data, so it is identical under every lang."},"gloss":{"type":"string","example":"serpent / snake","description":"What the sign name means, translated in place because it is a common noun. Several English renderings are in circulation for some signs and all of them are given rather than one being picked."},"direction":{"type":"string","example":"east","description":"World direction the sign belongs to: east, north, west or south. The twenty run through the four quarters in order, so the direction is a property of the position as much as of the sign."},"number":{"type":"number","example":1,"description":"The tonalpohualli coefficient, 1 to 13. Structurally the same count as the Maya coefficient and read the same way: a rank it is not."},"trecena":{"type":"object","properties":{"number":{"type":"number","example":9,"description":"Which of the twenty thirteen day periods this day falls in, 1 to 20."},"dayOfTrecena":{"type":"number","example":1,"description":"Position of this day inside its trecena, 1 to 13. Always equal to the coefficient."},"startSign":{"type":"string","example":"coatl","description":"Machine identifier of the day sign the trecena opens on."},"startSignName":{"type":"string","example":"Cōātl","description":"Display name of the sign the trecena opens on. A proper noun carried as data."}},"required":["number","dayOfTrecena","startSign","startSignName"],"description":"The thirteen day period this day belongs to, named by the sign it opens on. No patron deity is returned: the published patron column carries an unresolved disagreement on two of the twenty rows, and a column that is right for eighteen and guessed for two is worse than none."},"keynote":{"type":"string","example":"The tonalpohualli sign Cōātl is the serpent, the charge that runs the whole length of a living thing. It is read as serpent / snake, and it belongs to the east.","description":"The sign in one composed sentence. Composed per request from the sign components rather than stored whole."},"guidance":{"type":"string","example":"Move what has built up in the body before it picks its own target.","description":"The one thing worth doing differently under this sign."},"scope":{"type":"string","example":"This count returns the day sign, its coefficient and its trecena. The night lord and the solar year are not returned, because the sources consulted for them do not agree closely enough to publish.","description":"A plain statement of what this family covers and what it deliberately leaves out. Present on every response so nobody has to guess whether a missing field is an outage or a decision."},"date":{"type":"string","example":"1521-08-23","description":"Echo of the date the day was resolved from, in proleptic Gregorian."},"conventions":{"type":"object","properties":{"correlation":{"type":"string","example":"caso","description":"The correlation this count runs on, anchored on the recorded day 1 Coatl at the fall of Tenochtitlan, 13 August 1521 in the Julian calendar and 23 August 1521 in the proleptic Gregorian calendar this API takes. It is echoed rather than requested because it is not a switch: the anchor is a civil date, so no correlation constant enters the arithmetic, and the published alternatives for this calendar move the solar year alignment rather than the day count. The count was verified to run in step with the Maya count under the default constant, on the anchor and on two modern dates."}},"required":["correlation"],"description":"The conventions this answer was computed under, echoed so the result is self describing."}},"required":["daySign","daySignName","gloss","direction","number","trecena","keynote","guidance","scope","date","conventions"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/aztec/daily":{"get":{"operationId":"getDailyAztecReading","tags":["Mesoamerican Astrology"],"summary":"Daily Aztec energy reading - Tonalpohualli day sign of the day API","description":"Aztec energy of the day: the tonalpohualli day sign, its coefficient and its trecena for today or for any date you name, with a composed reading. Content is fixed for a given date and rolls over at midnight UTC, so a daily feed can cache it safely and an editorial calendar can be filled weeks ahead. Built for daily energy widgets, Mexica day sign feeds and chatbot answers about what today carries.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"},{"schema":{"type":"string","format":"date","example":"2026-09-02","description":"Date in YYYY-MM-DD format, in the PROLEPTIC GREGORIAN calendar, extended backwards unchanged through the 1582 reform. Years 1 to 4000 are accepted. A reference converter that switches to the Julian calendar below the reform will disagree with a date before 15 October 1582 by ten or eleven days; that is a difference of input convention rather than of arithmetic, and passing the Julian equivalent to such a tool reproduces these values exactly. A single-digit month or day is accepted and zero padded. Defaults to the current day in UTC."},"required":false,"description":"Date in YYYY-MM-DD format, in the PROLEPTIC GREGORIAN calendar, extended backwards unchanged through the 1582 reform. Years 1 to 4000 are accepted. A reference converter that switches to the Julian calendar below the reform will disagree with a date before 15 October 1582 by ten or eleven days; that is a difference of input convention rather than of arithmetic, and passing the Julian equivalent to such a tool reproduces these values exactly. A single-digit month or day is accepted and zero padded. Defaults to the current day in UTC.","name":"date","in":"query"}],"responses":{"200":{"description":"The tonalpohualli reading for this day.","content":{"application/json":{"schema":{"type":"object","properties":{"daySign":{"type":"string","example":"coatl","description":"Machine identifier of the tonalpohualli day sign, always lowercase ASCII Nahuatl whatever the lang parameter says, so it stays safe to compare against in code. The twenty ids run cipactli, ehecatl, calli, cuetzpalin, coatl, miquiztli, mazatl, tochtli, atl, itzcuintli, ozomahtli, malinalli, acatl, ocelotl, cuauhtli, cozcacuauhtli, ollin, tecpatl, quiahuitl, xochitl."},"daySignName":{"type":"string","example":"Cōātl","description":"Display name in Nahuatl with the vowel length marks the reference tables print. A proper noun carried as data, so it is identical under every lang."},"gloss":{"type":"string","example":"serpent / snake","description":"What the sign name means, translated in place because it is a common noun. Several English renderings are in circulation for some signs and all of them are given rather than one being picked."},"direction":{"type":"string","example":"east","description":"World direction the sign belongs to: east, north, west or south. The twenty run through the four quarters in order, so the direction is a property of the position as much as of the sign."},"number":{"type":"number","example":1,"description":"The tonalpohualli coefficient, 1 to 13. Structurally the same count as the Maya coefficient and read the same way: a rank it is not."},"trecena":{"type":"object","properties":{"number":{"type":"number","example":9,"description":"Which of the twenty thirteen day periods this day falls in, 1 to 20."},"dayOfTrecena":{"type":"number","example":1,"description":"Position of this day inside its trecena, 1 to 13. Always equal to the coefficient."},"startSign":{"type":"string","example":"coatl","description":"Machine identifier of the day sign the trecena opens on."},"startSignName":{"type":"string","example":"Cōātl","description":"Display name of the sign the trecena opens on. A proper noun carried as data."}},"required":["number","dayOfTrecena","startSign","startSignName"],"description":"The thirteen day period this day belongs to, named by the sign it opens on. No patron deity is returned: the published patron column carries an unresolved disagreement on two of the twenty rows, and a column that is right for eighteen and guessed for two is worse than none."},"keynote":{"type":"string","example":"The tonalpohualli sign Cōātl is the serpent, the charge that runs the whole length of a living thing. It is read as serpent / snake, and it belongs to the east.","description":"The sign in one composed sentence. Composed per request from the sign components rather than stored whole."},"guidance":{"type":"string","example":"Move what has built up in the body before it picks its own target.","description":"The one thing worth doing differently under this sign."},"scope":{"type":"string","example":"This count returns the day sign, its coefficient and its trecena. The night lord and the solar year are not returned, because the sources consulted for them do not agree closely enough to publish.","description":"A plain statement of what this family covers and what it deliberately leaves out. Present on every response so nobody has to guess whether a missing field is an outage or a decision."},"date":{"type":"string","example":"2026-09-02","description":"Date of this reading. Echoes the date requested, or the current day in UTC when it was omitted."},"overview":{"type":"string","example":"Today is 2 Calli in the tonalpohualli, day 2 of the trecena that opened on 1 Ehēcatl. The day is coloured by the house, the enclosure that makes rest and privacy possible.","description":"What the day carries, placing it inside its trecena as well as naming it. Composed per request, so it stays consistent with the keynote rather than being a second opinion."},"conventions":{"type":"object","properties":{"correlation":{"type":"string","example":"caso","description":"The correlation this count runs on, anchored on the recorded day 1 Coatl at the fall of Tenochtitlan, 13 August 1521 in the Julian calendar and 23 August 1521 in the proleptic Gregorian calendar this API takes. It is echoed rather than requested because it is not a switch: the anchor is a civil date, so no correlation constant enters the arithmetic, and the published alternatives for this calendar move the solar year alignment rather than the day count. The count was verified to run in step with the Maya count under the default constant, on the anchor and on two modern dates."}},"required":["correlation"],"description":"The conventions this reading was computed under, echoed so the result is self describing."}},"required":["daySign","daySignName","gloss","direction","number","trecena","keynote","guidance","scope","date","overview","conventions"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/aztec/day-signs":{"get":{"operationId":"listAztecDaySigns","tags":["Mesoamerican Astrology"],"summary":"List the 20 Aztec day signs - Tonalpohualli sign catalogue API","description":"Retrieve all twenty tonalpohualli day signs in sequence order from Cipactli to Xochitl. Each entry returns the machine id, the Nahuatl name, what it means, the world direction it belongs to and a composed reading. Built for Aztec sign pickers, Mexica calendar reference pages and any app that needs the whole set in one call.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20,"example":20,"description":"Maximum items to return per page. Range: 1-20, default 20."},"required":false,"description":"Maximum items to return per page. Range: 1-20, default 20.","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0,"description":"Number of items to skip for pagination. Default 0."},"required":false,"description":"Number of items to skip for pagination. Default 0.","name":"offset","in":"query"}],"responses":{"200":{"description":"The tonalpohualli day sign catalogue.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number","example":20,"description":"Total signs in the cycle. Always 20; the sign set is closed."},"limit":{"type":"number","example":20,"description":"Maximum items returned for this page."},"offset":{"type":"number","example":0,"description":"Number of items skipped before this page."},"daySigns":{"type":"array","items":{"type":"object","properties":{"position":{"type":"number","example":1,"description":"Place in the twenty sign sequence, 1 to 20, counting Cipactli as 1. The sequence never varies and is what the trecenas are indexed against."},"id":{"type":"string","example":"cipactli","description":"Machine identifier of the day sign, always lowercase ASCII Nahuatl whatever the lang parameter says, so it stays safe to compare against and to use as a path parameter. The twenty ids run cipactli, ehecatl, calli, cuetzpalin, coatl, miquiztli, mazatl, tochtli, atl, itzcuintli, ozomahtli, malinalli, acatl, ocelotl, cuauhtli, cozcacuauhtli, ollin, tecpatl, quiahuitl, xochitl."},"nameNahuatl":{"type":"string","example":"Cipactli","description":"Display name in Nahuatl with the vowel length marks the reference tables print. A proper noun carried as data, identical under every lang."},"gloss":{"type":"string","example":"crocodile / alligator / caiman","description":"What the sign name means, translated in place because it is a common noun. Where several English renderings are in circulation all of them are given rather than one being picked."},"direction":{"type":"string","example":"east","description":"World direction the sign belongs to: east, north, west or south. The twenty run through the four quarters in strict rotation, so every fourth sign shares a quarter."},"essence":{"type":"string","example":"the crocodile in the first water, the ground the world was built on","description":"What the sign is about, as a clause rather than a sentence, because it is spliced into composed prose elsewhere in the API. Translated in place."},"guidance":{"type":"string","example":"Begin something, and give it a base wide enough to carry the rest.","description":"The one thing worth doing differently under this sign."},"keynote":{"type":"string","example":"The tonalpohualli sign Cipactli is the crocodile in the first water, the ground the world was built on. It is read as crocodile / alligator / caiman, and it belongs to the east.","description":"The sign in one composed sentence, built from the components above."}},"required":["position","id","nameNahuatl","gloss","direction","essence","guidance","keynote"]},"description":"Day signs for the current page, in sequence order."}},"required":["total","limit","offset","daySigns"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/aztec/day-signs/{id}":{"get":{"operationId":"getAztecDaySign","tags":["Mesoamerican Astrology"],"summary":"Get one Aztec day sign - Tonalpohualli sign profile API","description":"Retrieve the full profile of one tonalpohualli day sign: the Nahuatl name, what it means, the world direction it belongs to, a composed keynote and one line of guidance. Built for Aztec sign detail pages, day sign cards and chatbot answers about a single Mexica sign.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["cipactli","ehecatl","calli","cuetzpalin","coatl","miquiztli","mazatl","tochtli","atl","itzcuintli","ozomahtli","malinalli","acatl","ocelotl","cuauhtli","cozcacuauhtli","ollin","tecpatl","quiahuitl","xochitl"],"example":"cipactli","description":"Day sign id, case-insensitive and punctuation-insensitive. One of cipactli, ehecatl, calli, cuetzpalin, coatl, miquiztli, mazatl, tochtli, atl, itzcuintli, ozomahtli, malinalli, acatl, ocelotl, cuauhtli, cozcacuauhtli, ollin, tecpatl, quiahuitl, xochitl."},"required":true,"description":"Day sign id, case-insensitive and punctuation-insensitive. One of cipactli, ehecatl, calli, cuetzpalin, coatl, miquiztli, mazatl, tochtli, atl, itzcuintli, ozomahtli, malinalli, acatl, ocelotl, cuauhtli, cozcacuauhtli, ollin, tecpatl, quiahuitl, xochitl.","name":"id","in":"path"},{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"}],"responses":{"200":{"description":"The tonalpohualli day sign.","content":{"application/json":{"schema":{"type":"object","properties":{"position":{"type":"number","example":1,"description":"Place in the twenty sign sequence, 1 to 20, counting Cipactli as 1. The sequence never varies and is what the trecenas are indexed against."},"id":{"type":"string","example":"cipactli","description":"Machine identifier of the day sign, always lowercase ASCII Nahuatl whatever the lang parameter says, so it stays safe to compare against and to use as a path parameter. The twenty ids run cipactli, ehecatl, calli, cuetzpalin, coatl, miquiztli, mazatl, tochtli, atl, itzcuintli, ozomahtli, malinalli, acatl, ocelotl, cuauhtli, cozcacuauhtli, ollin, tecpatl, quiahuitl, xochitl."},"nameNahuatl":{"type":"string","example":"Cipactli","description":"Display name in Nahuatl with the vowel length marks the reference tables print. A proper noun carried as data, identical under every lang."},"gloss":{"type":"string","example":"crocodile / alligator / caiman","description":"What the sign name means, translated in place because it is a common noun. Where several English renderings are in circulation all of them are given rather than one being picked."},"direction":{"type":"string","example":"east","description":"World direction the sign belongs to: east, north, west or south. The twenty run through the four quarters in strict rotation, so every fourth sign shares a quarter."},"essence":{"type":"string","example":"the crocodile in the first water, the ground the world was built on","description":"What the sign is about, as a clause rather than a sentence, because it is spliced into composed prose elsewhere in the API. Translated in place."},"guidance":{"type":"string","example":"Begin something, and give it a base wide enough to carry the rest.","description":"The one thing worth doing differently under this sign."},"keynote":{"type":"string","example":"The tonalpohualli sign Cipactli is the crocodile in the first water, the ground the world was built on. It is read as crocodile / alligator / caiman, and it belongs to the east.","description":"The sign in one composed sentence, built from the components above."}},"required":["position","id","nameNahuatl","gloss","direction","essence","guidance","keynote"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/aztec/trecenas":{"get":{"operationId":"listAztecTrecenas","tags":["Mesoamerican Astrology"],"summary":"List the 20 Aztec trecenas - Tonalpohualli thirteen day period API","description":"Retrieve all twenty trecenas, the thirteen day periods the 260 day tonalpohualli divides into. Each entry returns the period number, the day sign it opens on and a composed reading of what the period carries. Built for Aztec calendar apps, energy period trackers and content planners that work in thirteen day blocks.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":20,"default":20,"example":20,"description":"Maximum items to return per page. Range: 1-20, default 20."},"required":false,"description":"Maximum items to return per page. Range: 1-20, default 20.","name":"limit","in":"query"},{"schema":{"type":["integer","null"],"minimum":0,"default":0,"example":0,"description":"Number of items to skip for pagination. Default 0."},"required":false,"description":"Number of items to skip for pagination. Default 0.","name":"offset","in":"query"}],"responses":{"200":{"description":"The tonalpohualli trecena catalogue.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number","example":20,"description":"Total trecenas in the count. Always 20, because 260 divided by 13 is exactly 20."},"limit":{"type":"number","example":20,"description":"Maximum items returned for this page."},"offset":{"type":"number","example":0,"description":"Number of items skipped before this page."},"trecenas":{"type":"array","items":{"type":"object","properties":{"number":{"type":"number","example":1,"description":"Which of the twenty thirteen day periods this is, 1 to 20. Trecena 1 opens on 1 Cipactli and the openers step thirteen signs at a time from there."},"startSign":{"type":"string","example":"cipactli","description":"Machine identifier of the day sign the period opens on."},"startSignName":{"type":"string","example":"Cipactli","description":"Display name of the sign the period opens on. A proper noun carried as data."},"length":{"type":"number","example":13,"description":"Days in the period. Always 13, which is what the word trecena means."},"reading":{"type":"string","example":"Trecena 1 opens on 1 Cipactli and runs for thirteen days under it. The period takes its character from the crocodile in the first water, the ground the world was built on.","description":"The composed reading of the period, built from the sign it opens on rather than stored, so the two can never drift apart. No patron deity is named, because two of the twenty published patrons are disputed and none ships rather than eighteen shipping beside two guesses."}},"required":["number","startSign","startSignName","length","reading"]},"description":"Trecenas for the current page, in order from the one that opens on 1 Cipactli."}},"required":["total","limit","offset","trecenas"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}},"/aztec/trecenas/{number}":{"get":{"operationId":"getAztecTrecena","tags":["Mesoamerican Astrology"],"summary":"Get one Aztec trecena - Tonalpohualli period profile API","description":"Retrieve one of the twenty tonalpohualli trecenas by number, with the day sign it opens on and a composed reading of the period. Built for period detail pages and for apps that show which thirteen day block a date falls in.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"integer","example":1,"description":"Trecena number, 1 to 20. Trecena 1 opens on 1 Cipactli, trecena 2 on 1 Ocelotl, and each subsequent period opens thirteen signs further round the twenty."},"required":true,"description":"Trecena number, 1 to 20. Trecena 1 opens on 1 Cipactli, trecena 2 on 1 Ocelotl, and each subsequent period opens thirteen signs further round the twenty.","name":"number","in":"path"},{"schema":{"type":"string","enum":["en","tr","de","es","hi","pt","fr","ru","zh-Hans","zh-Hant"],"default":"en","example":"en","description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English."},"required":false,"description":"Response language (BCP 47). Supported: en, tr, de, es, hi, pt, fr, ru, zh-Hans, zh-Hant. Defaults to en. Coverage varies by domain, and a field with no translation in the requested language returns English.","name":"lang","in":"query"}],"responses":{"200":{"description":"The tonalpohualli trecena.","content":{"application/json":{"schema":{"type":"object","properties":{"number":{"type":"number","example":1,"description":"Which of the twenty thirteen day periods this is, 1 to 20. Trecena 1 opens on 1 Cipactli and the openers step thirteen signs at a time from there."},"startSign":{"type":"string","example":"cipactli","description":"Machine identifier of the day sign the period opens on."},"startSignName":{"type":"string","example":"Cipactli","description":"Display name of the sign the period opens on. A proper noun carried as data."},"length":{"type":"number","example":13,"description":"Days in the period. Always 13, which is what the word trecena means."},"reading":{"type":"string","example":"Trecena 1 opens on 1 Cipactli and runs for thirteen days under it. The period takes its character from the crocodile in the first water, the ground the world was built on.","description":"The composed reading of the period, built from the sign it opens on rather than stored, so the two can never drift apart. No patron deity is named, because two of the twenty published patrons are disputed and none ships rather than eighteen shipping beside two guesses."}},"required":["number","startSign","startSignName","length","reading"]}}}},"400":{"description":"Validation error. `issues[]` lists every failed field.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"First issue summary."},"code":{"type":"string","enum":["validation_error"]},"issues":{"type":"array","description":"Every validation failure. Use this to rebuild a valid request.","items":{"type":"object","properties":{"path":{"type":"string","description":"Dot-separated field path, or \"(root)\" for top-level."},"message":{"type":"string"},"code":{"type":"string","description":"Zod issue code (invalid_type, too_small, too_big, invalid_string, ...)."},"expected":{"type":"string","description":"Expected type for invalid_type."},"minimum":{"description":"Minimum bound for too_small issues.","oneOf":[{"type":"number"},{"type":"string"}]},"maximum":{"description":"Maximum bound for too_big issues.","oneOf":[{"type":"number"},{"type":"string"}]},"inclusive":{"type":"boolean"},"format":{"type":"string","description":"Format name for string issues (regex, email, url, uuid)."},"pattern":{"type":"string","description":"Regex pattern when format is regex."}},"required":["path","message"]}}},"required":["error","code","issues"]}}}},"401":{"description":"Invalid or missing API key","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"405":{"description":"Method not allowed. The path exists but only responds to the methods listed in `allow[]` and the `Allow` response header.","headers":{"Allow":{"description":"Comma-separated list of allowed methods (RFC 9110).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["method_not_allowed"]},"allow":{"type":"array","items":{"type":"string"},"description":"Allowed HTTP methods for this path. Mirrors the Allow response header."},"docs":{"type":"string","description":"Link to the product page for this domain."}},"required":["error","code","allow"]}}}},"429":{"description":"Monthly rate limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Human-readable error message. May change wording."},"code":{"type":"string","description":"Machine-readable error code. Stable identifier."}},"required":["error","code"]}}}}}}}},"webhooks":{}}