{"openapi":"3.1.0","info":{"title":"Ayurveda API","version":"2.0.0","description":"Ayurveda API for dosha profiles, the dinacharya daily routine and the ritucharya seasonal regimen, with a verse cited on every value. Read the vata, pitta and kapha constitution from a verified sidereal birth chart, compute brahma muhurta and the six dosha periods from the real sunrise at any location, resolve the Ayurvedic season from actual solar ingress instants under two published conventions, and serve the catalogue of three doshas, fifteen sub-doshas, six tastes and twenty qualities straight from the primary texts. Deterministic, cacheable and localized. 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":"Ayurveda","description":"Ayurveda API for dosha profiles, the dinacharya daily routine and the ritucharya seasonal regimen, with a verse cited on every value. Read the vata, pitta and kapha constitution from a verified sidereal birth chart, compute brahma muhurta and the six dosha periods from the real sunrise at any location, resolve the Ayurvedic season from actual solar ingress instants under two published conventions, and serve the catalogue of three doshas, fifteen sub-doshas, six tastes and twenty qualities straight from the primary texts. Deterministic, cacheable and localized. 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":{"AyurvedaConstitutionRequest":{"type":"object","properties":{"date":{"type":"string","format":"date","example":"1990-07-04","description":"Birth date in YYYY-MM-DD format. It sets the sidereal positions the whole reading is built from, so an approximate date gives an approximate constitution."},"time":{"type":"string","format":"time","example":"10:12:00","description":"Birth time in 24-hour HH:MM:SS format. The rising sign turns roughly every two hours and carries the heaviest weight of the three factors, so time is the input a reading is most sensitive to."},"latitude":{"type":"number","minimum":-90,"maximum":90,"example":28.6139,"description":"Birth latitude in decimal degrees. It sets the local sidereal time behind the rising sign, and it feeds the strength of each graha through the sunrise at that place."},"longitude":{"type":"number","minimum":-180,"maximum":180,"example":77.209,"description":"Birth longitude in decimal degrees. It sets the local sidereal time behind the rising sign, together with the latitude."},"timezone":{"anyOf":[{"type":"number","minimum":-14,"maximum":14},{"type":"string"}],"default":5.5,"description":"Timezone as an IANA name such as \"Asia/Kolkata\", or as decimal hours from UTC such as 5.5. An IANA name is resolved to the offset in force on the birth date, so a summer-time birth is placed correctly. Defaults to 5.5.","example":5.5},"ayanamsa":{"type":"string","enum":["kp-newcomb","kp-old","lahiri","raman","custom"],"default":"lahiri","example":"lahiri","description":"Sidereal frame the chart is cast in. \"lahiri\" is the traditional Vedic standard used by most software and is the default. \"raman\" sits about 1.45 degrees below it. \"kp-newcomb\" and \"kp-old\" are the two Krishnamurti Paddhati frames. \"custom\" takes your own value in degrees via ayanamsaValue. The frame rotates the whole zodiac, so a graha within 1.45 degrees of a boundary can change rashi when you switch, which moves both sign factors of the reading."},"ayanamsaValue":{"type":"number","example":24,"description":"Custom sidereal frame value in degrees. Required when ayanamsa is \"custom\" and ignored otherwise. Use it to reconcile exactly against a specific reference program."},"signDoshaScheme":{"type":"string","enum":["satyacharya","bphs"],"default":"satyacharya","example":"satyacharya","description":"Which classical sign table the rising sign and the Moon sign are read through. \"satyacharya\" is the twelve-sign extract appended to Brihat Jataka 18.20, carried in two independent public-domain translations that agree on all twelve rows, and is the default. \"bphs\" is the Brihat Parasara Hora Sastra rule by elemental triplicity. The two agree exactly on three signs of twelve, overlap in part on seven, and share no humour at all on Scorpio or Sagittarius, so the choice can change the reading outright and is echoed in the response."}},"required":["date","time","latitude","longitude"]},"AyurvedaDinacharyaRequest":{"type":"object","properties":{"date":{"type":"string","format":"date","example":"2026-06-21","description":"The local calendar date, in YYYY-MM-DD format. Sunrise and sunset are computed for this date at the given place, and the whole routine follows from them, so the answer changes through the year at any latitude away from the equator."},"latitude":{"type":"number","minimum":-90,"maximum":90,"example":51.5074,"description":"Latitude in decimal degrees. It sets how long the day and the night actually are, which is the whole difference between this and a printed timetable: at 51 north in June the day runs about sixteen and a half hours and its thirds are five and a half hours each."},"longitude":{"type":"number","minimum":-180,"maximum":180,"example":-0.1278,"description":"Longitude in decimal degrees. It sets the clock time of sunrise at this place."},"timezone":{"anyOf":[{"type":"number","minimum":-14,"maximum":14},{"type":"string"}],"default":0,"description":"Timezone as an IANA name such as \"Europe/London\", or as decimal hours from UTC such as 5.5. An IANA name is resolved to the offset in force on the requested date. It decides which local day is meant and, on the clock-hour grid, where the blocks fall. Defaults to 0.","example":"Europe/London"},"doshaClock":{"type":"string","enum":["sunrise-anchored","clock-hours"],"default":"sunrise-anchored","example":"sunrise-anchored","description":"How the six dosha periods are cut. \"sunrise-anchored\" divides the actual day and the actual night at this place into thirds, which is the division the frame chapter states, and is the default. \"clock-hours\" is the modern grid of six four-hour blocks from six in the morning; no classical text assigns clock hours, and the grid is only exact at an equinox near the equator. Both sets are returned whichever is chosen, so a caller can show one and reconcile against the other."}},"required":["date","latitude","longitude"]},"AyurvedaRitucharyaRequest":{"type":"object","properties":{"date":{"type":"string","format":"date","example":"2026-03-01","description":"The date to resolve, in YYYY-MM-DD format. The season is read at midday UTC on this date, because a season boundary is an instant and a calendar day has to be reduced to one; on a day that carries a boundary, the half the midday falls in is the answer."},"ritucharyaScheme":{"type":"string","enum":["sutrasthana-6","vimana-8"],"default":"sutrasthana-6","example":"sutrasthana-6","description":"Which six-season division the year is cut into. \"sutrasthana-6\" is the standard set of sisira, vasanta, grisma, varsa, sarad and hemanta, and is the default. \"vimana-8\" is the alternate division in which three seasons of extreme character alternate with three of moderate character and pravrt, the season of the first rains, replaces sisira. The alternate is not a relabelling: five of the six boundaries move, and because its verse gives no solar-month boundaries the month allocation is a RoxyAPI convention, stated in the response."},"rituZodiac":{"type":"string","enum":["sayana","nirayana"],"default":"sayana","example":"sayana","description":"Which zodiac the solar-month boundaries are measured in. \"sayana\" is the tropical reading, which is what published almanacs use for seasons and is the default. \"nirayana\" is the sidereal reading in the Lahiri frame, which runs about 24 days later. The gap is the size of the ayanamsa, so near a boundary the two answer with different seasons for the same date, which is why the value is echoed in every response."},"hemisphere":{"type":"string","enum":["northern","southern"],"default":"northern","example":"northern","description":"Which half of the world the season names are stated for. Defaults to \"northern\", which is the half the primary text describes. It is NEVER inferred from a latitude: a silent flip would change the answer without the caller asking, and no classical text handles the southern case at all. Passing \"southern\" rotates the six season names by three places, following a modern almanac rather than a verse, and the response says so and states what was not rotated with them."}},"required":["date"]}},"parameters":{}},"paths":{"/constitution":{"post":{"operationId":"calculateAyurvedicConstitution","tags":["Ayurveda"],"summary":"Ayurvedic constitution from a birth chart - Dosha profile API","description":"Read the Ayurvedic constitution from a sidereal birth chart and return the vata, pitta and kapha shares with a verse behind every factor. Three factors are scored, each one carrying a classical rule that it shows the native humour: the rising sign, the sign the Moon occupies, and the strongest graha by shadbala. The composite that blends them is a RoxyAPI convention rather than a classical one, so its version and its weights ship inside the response, and every response states that this is general wellness and cultural interest only.","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":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AyurvedaConstitutionRequest"}}}},"responses":{"200":{"description":"The constitution, its cited factors, and the graha table behind them.","content":{"application/json":{"schema":{"type":"object","properties":{"frame":{"type":"object","properties":{"ayanamsa":{"type":"string","example":"lahiri","description":"The sidereal frame the chart was cast in, echoing the request. Always English, so it is safe to compare against."},"ayanamsaDegrees":{"type":"number","example":23.72820922463809,"description":"The frame offset in degrees at the birth instant, read once and used for both sign factors and for the strength ranking, so the three cannot come from frames a fraction of a degree apart."}},"required":["ayanamsa","ayanamsaDegrees"],"description":"The sidereal frame this reading was cast in."},"lagnaSign":{"type":"string","example":"leo","description":"The rising sign, lowercase and always English. It is the best attested of the three factors and carries the heaviest weight."},"moonSign":{"type":"string","example":"scorpio","description":"The sign the Moon occupies, lowercase and always English. It is read through the same sign table as the rising sign, on the warrant of the verse that equates the two."},"factors":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"lagna-sign","description":"Which factor this is. One of lagna-sign, moon-sign or strongest-planet. Always English and stable, so it is safe to switch on. There are three and only three, because the two indicators often listed beside them, the lagna lord and the Sun, carry no classical rule that they show the native humour."},"input":{"type":"string","example":"leo","description":"What this factor read: a sign id for the two sign factors, or the space-separated grahas that reached the strength cutoff for the third."},"doshas":{"type":"array","items":{"type":"string"},"example":["pitta"],"description":"The humours this factor carries, as the Sanskrit identifiers vata, pitta and kapha. Never translated, so they stay safe to compare against. Where a factor carries more than one they are stored in the standing order and that order means nothing, because the two translations of the source order them differently and their sets are identical."},"weight":{"type":"number","example":2,"description":"How much of the composite this factor is given. The weights are a RoxyAPI convention and no primary text states them, which is why every one of them is published here rather than kept private."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["id","input","doshas","weight","source"],"description":"One cited factor of the reading."},"description":"The three scored factors, in the order they are weighted."},"composite":{"type":"object","properties":{"vata":{"type":"number","example":20,"description":"Share of vata in whole percent. The three shares always sum to exactly 100, by largest remainder, so a caller can render them as a bar without normalising first."},"pitta":{"type":"number","example":60,"description":"Share of pitta in whole percent."},"kapha":{"type":"number","example":20,"description":"Share of kapha in whole percent."},"dominant":{"type":"string","example":"pitta","description":"The humour holding the largest share. A Sanskrit identifier, never translated."},"secondary":{"type":"string","example":"vata","description":"The humour holding the second largest share. Reported whether or not it reached the margin that would put it in the type label."},"type":{"type":"string","example":"pitta","description":"The derived label: one humour when it leads clearly, two joined by a hyphen when the second is within the published margin, and sama when all three sit inside that band. Built from Sanskrit identifiers, so it stays the same string in every language."},"convention":{"type":"string","example":"roxyapi/v1","description":"The version of the blending convention this composite was built under. It is ours and not classical, and it is versioned so a caller comparing two readings taken months apart can tell whether the rule moved."},"weighting":{"type":"object","properties":{"lagnaSign":{"type":"number","example":2,"description":"Weight given to the rising sign factor."},"moonSign":{"type":"number","example":1,"description":"Weight given to the Moon sign factor, lower than the rising sign because its classical warrant is the narrower of the two."},"strongestPlanet":{"type":"number","example":2,"description":"Weight given to the strongest graha factor."},"strongPlanetThreshold":{"type":"number","example":0.9,"description":"Fraction of the leading shadbala total at which a second graha also counts as strong. The verse licenses a blended result where several planets attain strength and gives no number for several, so this one is ours."},"dualTypeMargin":{"type":"number","example":10,"description":"Percentage-point gap below which the second humour joins the type label. When all three sit inside it the label is sama."}},"required":["lagnaSign","moonSign","strongestPlanet","strongPlanetThreshold","dualTypeMargin"],"description":"Every number behind the blend, published so a caller who disagrees can re-weigh the factors themselves."}},"required":["vata","pitta","kapha","dominant","secondary","type","convention","weighting"],"description":"The blended reading. The factors are cited and this is not, which is why it carries a convention label."},"strengthRanking":{"type":"array","items":{"type":"object","properties":{"graha":{"type":"string","example":"Mars","description":"Graha name, as a Vedic birth chart returns it."},"totalVirupas":{"type":"number","example":525.53,"description":"Total shadbala in virupas, the six-fold strength measure. Higher is stronger, and the ranking below is taken from it."},"rank":{"type":"number","example":1,"description":"Position in the ranking, 1 for the strongest of the seven."},"strong":{"type":"boolean","example":true,"description":"Whether this graha reached the strength cutoff and therefore contributed to the reading. More than one true value is what makes the reading a blend."}},"required":["graha","totalVirupas","rank","strong"],"description":"One graha of the strength ranking."},"description":"The seven grahas ranked by shadbala, strongest first. Rahu and Ketu are not ranked, because shadbala is defined over the seven."},"planetDoshas":{"type":"array","items":{"type":"object","properties":{"graha":{"type":"string","example":"Sun","description":"Graha name, matching the name a Vedic birth chart uses, so this table joins to a chart with nothing in between."},"sanskritName":{"type":"string","example":"sūrya","description":"The graha name in Sanskrit, in the standard diacritic transliteration."},"doshas":{"type":"array","items":{"type":"string"},"example":["pitta"],"description":"The humours the verses give this graha. The Moon and Venus rows carry vata before kapha in both published translations, which is the row material in general circulation most often reverses."},"dhatu":{"type":"string","example":"bone","description":"The bodily constituent this graha rules, in English. Saturn returns a deliberately neutral rendering, because the one Sanskrit word behind it is attested as sinew, tendon, muscle and nerve alike and the two published translations split on it."},"dhatuSanskrit":{"type":"string","example":"asthi","description":"The same constituent in Sanskrit. Read this rather than the English wherever the two translations disagree. These seven are not the standard seven dhatus and three of them will not line up against such a list."},"doshaSource":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."},"dhatuSource":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["graha","sanskritName","doshas","dhatu","dhatuSanskrit","doshaSource","dhatuSource"],"description":"One graha of the informational seven-graha table. Rahu and Ketu are absent because the verses assign a humour to the seven grahas only, and nothing classical supplies one for the nodes."},"description":"The graha to humour and graha to constituent table, as reference. It is informational and does not vary with the request."},"summary":{"type":"string","example":"The chart reads pitta, and pitta carries the largest share of it at 60 percent.","description":"The reading in prose, composed from the factors rather than selected from stock text, and translated in place."},"conventions":{"type":"object","properties":{"signDoshaScheme":{"type":"string","example":"satyacharya","description":"Which sign table the two sign factors were read through. Echoes the request."},"ayanamsa":{"type":"string","example":"lahiri","description":"Which sidereal frame the chart was cast in. Echoes the request, and is repeated here beside the other conventions so one object answers what was chosen."}},"required":["signDoshaScheme","ayanamsa"],"description":"The conventions this reading was produced under."},"meta":{"type":"object","properties":{"disclaimer":{"type":"string","example":"For general wellness and cultural interest only. This is not medical advice, and it is unrelated to the diagnosis, cure, mitigation, prevention or treatment of any disease or condition. Consult a qualified professional.","description":"The scope of everything in this response, in the requested language. Present on every response from this API, and intended to be shown to the reader rather than stripped."}},"required":["disclaimer"],"description":"Scope of the response."}},"required":["frame","lagnaSign","moonSign","factors","composite","strengthRanking","planetDoshas","summary","conventions","meta"]}}}},"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"]}}}}}}},"/dinacharya":{"post":{"operationId":"getDinacharyaSchedule","tags":["Ayurveda"],"summary":"Dinacharya daily routine - Brahma muhurta and dosha clock API","description":"Compute the dinacharya daily routine for one date and one place: sunrise, sunset, the brahma muhurta window, and the six dosha periods of the day and the night. The default division cuts the actual day and the actual night into thirds, which is what the frame chapter states, and the modern clock grid is returned alongside it under its own label so a caller can show either. The brahma muhurta is a fixed window of 96 to 48 minutes before sunrise rather than a share of the night, which is the reading the classical commentary settles on.","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":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AyurvedaDinacharyaRequest"}}}},"responses":{"200":{"description":"The day divided, with the routine the chapter gives.","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-21","description":"The local date this schedule is for, echoing the request."},"sunrise":{"type":"string","example":"2026-06-21T03:43:12.000Z","description":"Sunrise at this place on this date, as an ISO 8601 instant in UTC. The day begins here, which is why every block below is measured from it rather than from midnight."},"sunset":{"type":"string","example":"2026-06-21T20:21:30.000Z","description":"Sunset at this place on this date, as an ISO 8601 instant in UTC."},"nextSunrise":{"type":"string","example":"2026-06-22T03:43:30.000Z","description":"The following sunrise, as an ISO 8601 instant in UTC. It closes the night, so the three night blocks are cut between this and the sunset above."},"brahmaMuhurta":{"type":"object","properties":{"start":{"type":"string","example":"2026-06-21T02:07:12.000Z","description":"When the window opens, 96 minutes before sunrise."},"end":{"type":"string","example":"2026-06-21T02:55:12.000Z","description":"When the window closes, 48 minutes before sunrise."},"muhurtaMinutes":{"type":"number","example":48,"description":"Length of one muhurta in minutes. Thirty of them make one day AND night together, not thirty in the daylight alone, and reading it the other way doubles every number here."},"muhurtasPerAhoratra":{"type":"number","example":30,"description":"Muhurtas in one full day and night. Two texts state this and agree exactly on it while differing on the smaller units."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["start","end","muhurtaMinutes","muhurtasPerAhoratra","source"],"description":"The pre-dawn window, as a fixed offset from sunrise. It is not scaled to the length of the night, and calculators that scale it are following a reading the commentary rejects."},"doshaPeriods":{"type":"array","items":{"type":"object","properties":{"dosha":{"type":"string","example":"kapha","description":"The humour this block belongs to, as the Sanskrit identifier. Never translated, so it stays safe to compare against and to use as a style key."},"start":{"type":"string","example":"2026-06-21T03:43:12.000Z","description":"When the block opens, as an ISO 8601 instant in UTC."},"end":{"type":"string","example":"2026-06-21T09:05:44.000Z","description":"When the block closes, as an ISO 8601 instant in UTC."},"span":{"type":"string","example":"day","description":"Whether the block sits in the day or the night. Always English, so it stays safe to switch on."},"third":{"type":"number","example":1,"description":"Which third of its half the block is, 1 for the first, 2 for the middle and 3 for the last. Present only on the sunrise-anchored division, because the clock grid divides no actual day and has no thirds to report."}},"required":["dosha","start","end","span"],"description":"One of the six dosha periods."},"description":"The six blocks under the convention that was requested, in chronological order."},"alternatePeriods":{"type":"array","items":{"type":"object","properties":{"dosha":{"type":"string","example":"kapha","description":"The humour this block belongs to, as the Sanskrit identifier. Never translated, so it stays safe to compare against and to use as a style key."},"start":{"type":"string","example":"2026-06-21T03:43:12.000Z","description":"When the block opens, as an ISO 8601 instant in UTC."},"end":{"type":"string","example":"2026-06-21T09:05:44.000Z","description":"When the block closes, as an ISO 8601 instant in UTC."},"span":{"type":"string","example":"day","description":"Whether the block sits in the day or the night. Always English, so it stays safe to switch on."},"third":{"type":"number","example":1,"description":"Which third of its half the block is, 1 for the first, 2 for the middle and 3 for the last. Present only on the sunrise-anchored division, because the clock grid divides no actual day and has no thirds to report."}},"required":["dosha","start","end","span"],"description":"One of the six dosha periods."},"description":"The same six blocks under the other convention, so a caller can show one and reconcile against the other without a second call."},"routine":{"type":"array","items":{"type":"object","properties":{"order":{"type":"number","example":1,"description":"Position in the sequence the chapter gives, starting at 1."},"id":{"type":"string","example":"waking","description":"Stable identifier for the step. Always English and lowercase, so it is safe to compare against and to key a translation off."},"sanskritName":{"type":"string","example":"brāhmamuhūrta","description":"The step under its Sanskrit name, in the standard diacritic transliteration. Data rather than a translation, so it is identical under every language."},"guidance":{"type":"string","example":"One who is well rises in the brahma muhurta, the window that closes as sunrise approaches, for the protection of life.","description":"What the step is, written from the source and translated in place. The chapter also names specific substances and gives lists of who should abstain; neither is carried here."},"timing":{"type":"string","example":"sunrise minus 96 minutes to sunrise minus 48 minutes","description":"Where the step sits in the sequence. Only the first step carries a real offset, because the chapter orders the day rather than scheduling it; the clock for this place is in the fields above."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["order","id","sanskritName","guidance","timing","source"],"description":"One step of the daily routine."},"description":"The daily sequence the chapter gives, in its own order."},"summary":{"type":"string","example":"The brahma muhurta opens 96 minutes before sunrise and closes 48 minutes before it, a fixed window rather than a share of the night.","description":"The day in prose, composed and translated in place."},"sources":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."},"description":"Every work behind this response, once each."},"conventions":{"type":"object","properties":{"doshaClock":{"type":"string","example":"sunrise-anchored","description":"Which division the doshaPeriods array holds. Echoes the request; the other one is in alternatePeriods."}},"required":["doshaClock"],"description":"The conventions this schedule was produced under."},"meta":{"type":"object","properties":{"disclaimer":{"type":"string","example":"For general wellness and cultural interest only. This is not medical advice, and it is unrelated to the diagnosis, cure, mitigation, prevention or treatment of any disease or condition. Consult a qualified professional.","description":"The scope of everything in this response, in the requested language. Present on every response from this API, and intended to be shown to the reader rather than stripped."}},"required":["disclaimer"],"description":"Scope of the response."}},"required":["date","sunrise","sunset","nextSunrise","brahmaMuhurta","doshaPeriods","alternatePeriods","routine","summary","sources","conventions","meta"]}}}},"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"]}}}}}}},"/ritucharya":{"post":{"operationId":"getRitucharya","tags":["Ayurveda"],"summary":"Ayurveda seasonal regimen - Ritucharya and ritu resolution API","description":"Resolve the ritucharya, the Ayurvedic season, for a date from the real solar ingress instants and return the regimen the primary text gives for it. The response carries the season with its exact opening and closing instants, the half of the year the sun is in, where each dosha stands in the seasonal cycle, the taste that grows across the season, and the behaviour items the chapter states. Season boundaries are measured in the tropical zodiac by default, which is what published almanacs use, and the sidereal reading is available as a convention and runs about 24 days later.","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":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AyurvedaRitucharyaRequest"}}}},"responses":{"200":{"description":"The season, its boundaries, and what the chapter states for it.","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","example":"2026-03-01","description":"The date this reading is for, echoing the request."},"ritu":{"type":"object","properties":{"id":{"type":"string","example":"vasanta","description":"The season as a Sanskrit identifier, always English-safe and never translated. One of sisira, vasanta, grisma, varsa, sarad and hemanta, plus pravrt which only the alternate scheme carries."},"sanskritName":{"type":"string","example":"vasanta","description":"The season in the standard diacritic transliteration."},"devanagari":{"type":"string","example":"वसन्त","description":"The season in Devanagari. Data rather than a translation, so it is identical under every language."},"gloss":{"type":"string","example":"spring","description":"What the season is called in the requested language. This is the gloss and it does translate; the identifier above does not."},"classicalRitu":{"type":"string","example":"vasanta","description":"The default-scheme season the classical layer was read from. Equal to the id in the ordinary case, and different under the alternate scheme, whose own verse states no strength cycle, taste cycle or dosha cycle for its seasons."},"start":{"type":"string","example":"2026-02-18T15:51:27.000Z","description":"When the season opened, as an ISO 8601 instant in UTC. This is the ingress into the first of its two solar months, computed rather than tabulated, so it is exact to the second."},"end":{"type":"string","example":"2026-04-20T01:39:12.000Z","description":"When the season closes, as an ISO 8601 instant in UTC. It is the ingress that opens the next season, so two consecutive calls join without a gap."},"solarMonths":{"type":"array","items":{"type":"object","properties":{"index":{"type":"number","example":11,"description":"Zero-based rasi index, 0 for Aries, so a caller can order the twelve without a name table."},"id":{"type":"string","example":"pisces","description":"The rasi as the lowercase English sign id every other RoxyAPI domain uses."},"sanskritName":{"type":"string","example":"Meena","description":"The solar month under the name a panchang prints for it. Data, identical in every language."}},"required":["index","id","sanskritName"],"description":"One of the two solar months the season spans."},"description":"The two solar months the season spans, in order. A solar month is the interval the sun spends inside one rasi, which is why every boundary above is an ingress instant."}},"required":["id","sanskritName","devanagari","gloss","classicalRitu","start","end","solarMonths"],"description":"The season in force on this date."},"ayana":{"type":"object","properties":{"id":{"type":"string","example":"uttarayana","description":"The half-year course of the sun, as a Sanskrit identifier. Never translated. It names what the sun is doing rather than what the weather is, so it is the same for every observer on the same day and is never rotated for the hemisphere."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["id","source"],"description":"Which course the sun is in."},"phase":{"type":"object","properties":{"id":{"type":"string","example":"adana","description":"Whether the sun is taking or giving across this half of the year, as a Sanskrit identifier. Never translated, and deliberately so: the published translations render the two terms with four different English words between them, so an English value would not be stable enough to compare against."},"tastes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"kashaya","description":"The taste as a Sanskrit identifier. Never translated, so it stays safe to compare against and joins straight to the tastes catalogue."},"sanskritName":{"type":"string","example":"kaṣāya","description":"The same taste in the standard diacritic transliteration."},"english":{"type":"string","example":"astringent","description":"The taste in the requested language. This is the gloss and it does translate."}},"required":["id","sanskritName","english"],"description":"One of the six tastes, referenced from the seasonal cycle."},"description":"The three tastes that grow across this half of the year, in the order the verse gives them, one per season. This is the sequence the season taste below is one member of."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["id","tastes","source"],"description":"The taking or giving half of the year."},"strength":{"type":"object","properties":{"level":{"type":"string","example":"moderate","description":"Bodily strength in this season: highest, moderate or lowest. Always English so it stays safe to switch on. The strongest pair is the cold season and the dewy season, which are adjacent in the cycle but sit at opposite ends of the two courses, and that wrap-around is the part a positional reading of the verse gets wrong."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["level","source"],"description":"Where the season sits in the strength cycle."},"tasteIncreasing":{"type":"object","properties":{"id":{"type":"string","example":"kashaya","description":"The taste as a Sanskrit identifier. Never translated, so it stays safe to compare against and joins straight to the tastes catalogue."},"sanskritName":{"type":"string","example":"kaṣāya","description":"The same taste in the standard diacritic transliteration."},"english":{"type":"string","example":"astringent","description":"The taste in the requested language. This is the gloss and it does translate."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["id","sanskritName","english","source"],"description":"The taste that grows IN NATURE across this season. It is not the taste to favour: the regimen for the same season is broadly the opposite, which is why this field is never named for a recommendation."},"doshaCycle":{"type":"array","items":{"type":"object","properties":{"dosha":{"type":"string","example":"kapha","description":"The humour, as a Sanskrit identifier. Never translated."},"state":{"type":"string","example":"aggravated","description":"Where the humour stands: accumulating, aggravated or settling. Always English so it stays safe to switch on. The three are positions and qualities rather than complaints, which is what the definitions below say."},"meaning":{"type":"string","example":"Going out of its own channel, with its own marks showing.","description":"What the state is, in the requested language, defined by where the humour sits and how it behaves."},"note":{"type":"string","example":"One public-domain translation of Charaka Sutrasthana 6.22 places the accumulation in hemanta instead.","description":"A recorded disagreement about this row, present only where one exists."}},"required":["dosha","state","meaning"],"description":"One humour and where the season puts it."},"description":"Which humours the season moves, and how. A season moves at most three of the nine slots and often fewer, so an empty entry for a humour means the cycle simply says nothing about it in this season."},"regimen":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"vasanta-activity","description":"Stable identifier for the item. Always English and lowercase, so it is safe to compare against."},"guidance":{"type":"string","example":"Take up physical exercise, dry rubbing, mouth rinsing and frequent washing in comfortably warm water.","description":"The behaviour item, written from the source and translated in place. Behaviours, qualities and tastes only: the chapter also names specific substances and prescribes clinical procedures, and neither is carried here."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["id","guidance","source"],"description":"One item of the seasonal regimen."},"description":"What the chapter states for this season. Roughly half its verses leave no item here once substances and clinical procedures are set aside, and those verses are absent rather than padded."},"summary":{"type":"string","example":"The solar months of Meena and Mesha fall in vasanta, spring.","description":"The season in prose, composed and translated in place."},"sources":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."},"description":"Every work behind this response, once each."},"conventions":{"type":"object","properties":{"ritucharyaScheme":{"type":"string","example":"sutrasthana-6","description":"Which six-season division was applied. Echoes the request."},"rituZodiac":{"type":"string","example":"sayana","description":"Which zodiac the boundaries were measured in. Echoes the request, and the two answers can differ by about 24 days."},"hemisphere":{"type":"string","example":"northern","description":"Which half of the world the season names are stated for. Echoes the request and is never inferred from a latitude."}},"required":["ritucharyaScheme","rituZodiac","hemisphere"],"description":"The conventions this reading was produced under."},"meta":{"type":"object","properties":{"disclaimer":{"type":"string","example":"For general wellness and cultural interest only. This is not medical advice, and it is unrelated to the diagnosis, cure, mitigation, prevention or treatment of any disease or condition. Consult a qualified professional.","description":"The scope of everything in this response, in the requested language. Present on every response from this API, and intended to be shown to the reader rather than stripped."}},"required":["disclaimer"],"description":"Scope of the response."}},"required":["date","ritu","ayana","phase","strength","tasteIncreasing","doshaCycle","regimen","summary","sources","conventions","meta"]}}}},"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"]}}}}}}},"/daily":{"get":{"operationId":"getDailyAyurvedaReading","tags":["Ayurveda"],"summary":"Daily Ayurveda reading - Dosha clock and brahma muhurta by location API","description":"Get one days Ayurveda reading for a place: sunrise, the brahma muhurta window, the six dosha periods cut from the actual day and night, and the season the date falls in with where each dosha stands in its yearly cycle. It composes the routine and the season routes for one location so a widget needs one call rather than two. The default conventions apply throughout and are echoed; call those two routes directly to choose a different season scheme, zodiac, hemisphere or dosha clock.","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-06-21","description":"Reading date in YYYY-MM-DD format. Past and future dates are both supported, for editorial scheduling and backfill. Defaults to the current day in the timezone parameter."},"required":false,"description":"Reading date in YYYY-MM-DD format. Past and future dates are both supported, for editorial scheduling and backfill. Defaults to the current day in the timezone parameter.","name":"date","in":"query"},{"schema":{"type":["number","null"],"minimum":-90,"maximum":90,"example":51.5074,"description":"Latitude in decimal degrees. It sets how long the day and the night actually are, which is what the dosha periods are cut from."},"required":false,"description":"Latitude in decimal degrees. It sets how long the day and the night actually are, which is what the dosha periods are cut from.","name":"latitude","in":"query"},{"schema":{"type":["number","null"],"minimum":-180,"maximum":180,"example":-0.1278,"description":"Longitude in decimal degrees. It sets the clock time of sunrise at this place."},"required":false,"description":"Longitude in decimal degrees. It sets the clock time of sunrise at this place.","name":"longitude","in":"query"},{"schema":{"type":"string","example":"Europe/London","description":"Selects which day counts as current when date is omitted, and which local day sunrise is computed for. Defaults to UTC, so the reading rolls over at 00:00 UTC. Accepts an IANA name (e.g. \"Europe/London\"), decimal hours (e.g. 5.5 for IST), or a fixed UTC offset (e.g. \"-05:00\")."},"required":false,"description":"Selects which day counts as current when date is omitted, and which local day sunrise is computed for. Defaults to UTC, so the reading rolls over at 00:00 UTC. Accepts an IANA name (e.g. \"Europe/London\"), decimal hours (e.g. 5.5 for IST), or a fixed UTC offset (e.g. \"-05:00\").","name":"timezone","in":"query"}],"responses":{"200":{"description":"The day, composed from the routine and the season.","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-21","description":"The date of this reading. Echoes the date requested, or the current day in the timezone parameter when it was omitted."},"sunrise":{"type":"string","example":"2026-06-21T03:43:12.000Z","description":"Sunrise at this place, as an ISO 8601 instant in UTC."},"sunset":{"type":"string","example":"2026-06-21T20:21:30.000Z","description":"Sunset at this place, as an ISO 8601 instant in UTC."},"brahmaMuhurta":{"type":"object","properties":{"start":{"type":"string","example":"2026-06-21T02:07:12.000Z","description":"When the window opens, 96 minutes before sunrise."},"end":{"type":"string","example":"2026-06-21T02:55:12.000Z","description":"When the window closes, 48 minutes before sunrise."}},"required":["start","end"],"description":"The pre-dawn window as a fixed offset from sunrise, not a share of the night."},"doshaPeriods":{"type":"array","items":{"type":"object","properties":{"dosha":{"type":"string","example":"kapha","description":"The humour this block belongs to, as a Sanskrit identifier."},"start":{"type":"string","example":"2026-06-21T03:43:12.000Z","description":"When the block opens, as an ISO 8601 instant in UTC."},"end":{"type":"string","example":"2026-06-21T09:05:44.000Z","description":"When the block closes, as an ISO 8601 instant in UTC."},"span":{"type":"string","example":"day","description":"Whether the block sits in the day or the night."}},"required":["dosha","start","end","span"],"description":"One of the six dosha periods."},"description":"The six blocks, cut from the actual day and night at this place into thirds."},"ritu":{"type":"object","properties":{"id":{"type":"string","example":"grisma","description":"The season as a Sanskrit identifier. Never translated."},"sanskritName":{"type":"string","example":"grīṣma","description":"The season in the standard diacritic transliteration."},"gloss":{"type":"string","example":"summer","description":"What the season is called in the requested language."},"start":{"type":"string","example":"2026-04-20T01:39:12.000Z","description":"When the season opened, as an ISO 8601 instant in UTC."},"end":{"type":"string","example":"2026-06-21T14:24:36.000Z","description":"When it closes, as an ISO 8601 instant in UTC."},"ayana":{"type":"string","example":"uttarayana","description":"The half-year course of the sun, as a Sanskrit identifier. It names what the sun is doing, so it is the same for every observer on the same day."},"phase":{"type":"string","example":"adana","description":"Whether the sun is taking or giving across this half of the year, as a Sanskrit identifier."},"strength":{"type":"string","example":"lowest","description":"Bodily strength in this season: highest, moderate or lowest. Always English so it stays safe to switch on."},"tasteIncreasing":{"type":"string","example":"katu","description":"The taste that grows in nature across this season, as a Sanskrit identifier. It is what the season brings rather than what to favour in it."}},"required":["id","sanskritName","gloss","start","end","ayana","phase","strength","tasteIncreasing"],"description":"The season this date falls in."},"doshaCycle":{"type":"array","items":{"type":"object","properties":{"dosha":{"type":"string","example":"kapha","description":"The humour, as a Sanskrit identifier."},"state":{"type":"string","example":"settling","description":"Where the season puts it: accumulating, aggravated or settling. Always English so it stays safe to switch on."}},"required":["dosha","state"],"description":"One humour and where the season puts it."},"description":"Which humours this season moves, and how. A season moves at most three of the nine slots and often fewer."},"summary":{"type":"string","example":"The day sits in grisma, and pitta holds the part of it this reading was taken in.","description":"The day in prose, composed and translated in place."},"sources":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."},"description":"Every work behind this response, once each."},"conventions":{"type":"object","properties":{"doshaClock":{"type":"string","example":"sunrise-anchored","description":"How the six periods were cut. This route always uses the default; the routine route takes the choice."},"ritucharyaScheme":{"type":"string","example":"sutrasthana-6","description":"Which six-season division was applied. This route always uses the default; the season route takes the choice."},"rituZodiac":{"type":"string","example":"sayana","description":"Which zodiac the season boundaries were measured in. This route always uses the default."},"hemisphere":{"type":"string","example":"northern","description":"Which half of the world the season name is stated for. This route always uses the default and never infers it from the latitude."}},"required":["doshaClock","ritucharyaScheme","rituZodiac","hemisphere"],"description":"The conventions this reading was produced under. All four are the defaults, stated rather than assumed."},"meta":{"type":"object","properties":{"disclaimer":{"type":"string","example":"For general wellness and cultural interest only. This is not medical advice, and it is unrelated to the diagnosis, cure, mitigation, prevention or treatment of any disease or condition. Consult a qualified professional.","description":"The scope of everything in this response, in the requested language. Present on every response from this API, and intended to be shown to the reader rather than stripped."}},"required":["disclaimer"],"description":"Scope of the response."}},"required":["date","sunrise","sunset","brahmaMuhurta","doshaPeriods","ritu","doshaCycle","summary","sources","conventions","meta"]}}}},"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"]}}}}}}},"/doshas":{"get":{"operationId":"listDoshas","tags":["Ayurveda"],"summary":"List the three doshas - Dosha catalogue API","description":"Return vata, pitta and kapha with the qualities, seats and five sub-doshas each carries, and the three states the seasonal cycle moves them through. Every quality is one of the twenty gunas and every state is described as a position and a quality rather than as a complaint, which is what lets the catalogue join to the tastes and qualities endpoints without a lookup table in between. Each entry carries the verse it comes from, and the second primary text is recorded where it reads the list differently.","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":3,"default":3,"example":3,"description":"Maximum items to return per page. Range: 1-3, default 3."},"required":false,"description":"Maximum items to return per page. Range: 1-3, default 3.","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 three doshas.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number","example":3,"description":"Total number of doshas, which is always three."},"limit":{"type":"number","example":3,"description":"Maximum doshas returned in this page."},"offset":{"type":"number","example":0,"description":"Number of doshas skipped before this page."},"doshas":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"vata","description":"The dosha as a Sanskrit identifier: vata, pitta or kapha. Never translated in any language, because a caller switches on it, and a translated dosha name is a different concept rather than the same one in another language."},"sanskritName":{"type":"string","example":"vāta","description":"The same name in the standard diacritic transliteration."},"devanagari":{"type":"string","example":"वात","description":"The same name in Devanagari. Data, identical in every language."},"alsoCalled":{"type":"array","items":{"type":"string"},"example":["vāyu","anila","māruta","samīraṇa"],"description":"Other names the primary texts use for the same dosha. Data rather than translations, and useful when reading a verse that names one of them instead."},"element":{"type":"string","example":"vayu, air","description":"The single mahabhuta the classical verses give this dosha. Classically each dosha gets one element, not a pair."},"modernElementPair":{"type":"string","example":"air with ether","description":"The two-element pairing in general modern circulation. It carries no classical citation in this API, which is why it travels in its own field instead of inside the cited one."},"qualities":{"type":"array","items":{"type":"string"},"example":["ruksa, dry","laghu, light","sita, cold"],"description":"The qualities the frame chapter gives this dosha, each as its Sanskrit word and its gloss. The three sets overlap, so the twenty gunas are not partitioned three ways between them."},"qualityGunas":{"type":"array","items":{"type":"string"},"example":["ruksha","laghu","khara","sukshma","cala"],"description":"Identifiers from the twenty gunas for the qualities the guna verse names with the SAME Sanskrit word, so this joins straight to the qualities endpoint. Where the dosha chapter uses a synonym, or a word the guna verse does not carry, the entry is absent rather than mapped by resemblance."},"seats":{"type":"array","items":{"type":"string"},"example":["the colon","the hips","the thighs"],"description":"Where the dosha sits, in the requested language."},"specialSeat":{"type":"string","example":"the colon","description":"The seat the chapter singles out above the others."},"seatsVariant":{"type":"string","example":"Charaka Sutrasthana 20.8 names the bladder and the feet where this chapter names the ear and the organ of touch.","description":"How the second primary text reads the same list. The two are recorded side by side and never merged, because the special seat of pitta genuinely differs between them."},"functions":{"type":"array","items":{"type":"string"},"example":["upholds the structure and the working of the body","impels speech"],"description":"What the dosha does when it is even. For vata the text states this for the dosha as a whole; for the other two it states it only through the five sub-doshas, and those are what appear here."},"subDoshas":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"prana","description":"Stable identifier for the sub-dosha. Always English-safe and lowercase, and never translated, so it is safe to compare against."},"sanskritName":{"type":"string","example":"prāṇa","description":"The same name in the standard diacritic transliteration."},"devanagari":{"type":"string","example":"प्राण","description":"The same name in Devanagari. Data rather than a translation, so it is identical under every language."},"seat":{"type":"string","example":"the head","description":"Where the sub-dosha sits, in the requested language."},"moves":{"type":"string","example":"the chest and the throat","description":"Where the sub-dosha moves, where the chapter states one. Present on the five vatas and absent elsewhere, because the chapter gives a range of movement only for those."},"function":{"type":"string","example":"upholds the intellect, the heart, the senses and the mind, and carries out spitting, sneezing, belching, the inward breath and the swallowing of food","description":"What the sub-dosha does, in the requested language."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["id","sanskritName","devanagari","seat","function","source"],"description":"One of the five sub-doshas."},"description":"The five sub-doshas, each with its seat and its work. The five vata NAMES are carried by two texts; every seat and function of the fifteen rests on one chapter alone."},"states":{"type":"object","properties":{"balanced":{"type":"string","example":"even, and staying within its own seat, with nothing disturbed","description":"The even state, described as a position and a quality rather than as an absence of complaints."},"accumulating":{"type":"string","example":"increasing within its own seat, with an aversion to more of its own qualities and a wish for the opposite ones","description":"The first state of the seasonal cycle, described the same way."},"aggravated":{"type":"string","example":"moving beyond its own seat, with dryness, lightness and movement conspicuous","description":"The second state of the seasonal cycle, described the same way."},"settlesWith":{"type":"string","example":"unctuous, heavy, warm, smooth and stable qualities","description":"The qualities that bring the dosha back to even, which is the like-increases-like rule applied in reverse."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["balanced","accumulating","aggravated","settlesWith","source"],"description":"The three states, as positions and qualities."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["id","sanskritName","devanagari","alsoCalled","element","modernElementPair","qualities","qualityGunas","seats","specialSeat","seatsVariant","functions","subDoshas","states","source"],"description":"One dosha with its qualities, seats, pentad and states."},"description":"The doshas for this page, in the standing order the texts name them."},"sources":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."},"description":"Every work behind this response, once each."},"meta":{"type":"object","properties":{"disclaimer":{"type":"string","example":"For general wellness and cultural interest only. This is not medical advice, and it is unrelated to the diagnosis, cure, mitigation, prevention or treatment of any disease or condition. Consult a qualified professional.","description":"The scope of everything in this response, in the requested language. Present on every response from this API, and intended to be shown to the reader rather than stripped."}},"required":["disclaimer"],"description":"Scope of the response."}},"required":["total","limit","offset","doshas","sources","meta"]}}}},"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"]}}}}}}},"/doshas/{id}":{"get":{"operationId":"getDosha","tags":["Ayurveda"],"summary":"Get one dosha - Vata pitta kapha profile API","description":"Return one dosha with its elements, qualities, seats, five sub-doshas and three states. Use it to render a dosha card or a glossary entry without pulling the whole catalogue, and read qualityGunas to join it to the twenty qualities.","security":[{"apiKey":[]}],"parameters":[{"schema":{"type":"string","enum":["vata","pitta","kapha"],"example":"vata","description":"Dosha identifier, case-insensitive. One of vata, pitta or kapha."},"required":true,"description":"Dosha identifier, case-insensitive. One of vata, pitta or kapha.","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 dosha.","content":{"application/json":{"schema":{"type":"object","properties":{"dosha":{"type":"object","properties":{"id":{"type":"string","example":"vata","description":"The dosha as a Sanskrit identifier: vata, pitta or kapha. Never translated in any language, because a caller switches on it, and a translated dosha name is a different concept rather than the same one in another language."},"sanskritName":{"type":"string","example":"vāta","description":"The same name in the standard diacritic transliteration."},"devanagari":{"type":"string","example":"वात","description":"The same name in Devanagari. Data, identical in every language."},"alsoCalled":{"type":"array","items":{"type":"string"},"example":["vāyu","anila","māruta","samīraṇa"],"description":"Other names the primary texts use for the same dosha. Data rather than translations, and useful when reading a verse that names one of them instead."},"element":{"type":"string","example":"vayu, air","description":"The single mahabhuta the classical verses give this dosha. Classically each dosha gets one element, not a pair."},"modernElementPair":{"type":"string","example":"air with ether","description":"The two-element pairing in general modern circulation. It carries no classical citation in this API, which is why it travels in its own field instead of inside the cited one."},"qualities":{"type":"array","items":{"type":"string"},"example":["ruksa, dry","laghu, light","sita, cold"],"description":"The qualities the frame chapter gives this dosha, each as its Sanskrit word and its gloss. The three sets overlap, so the twenty gunas are not partitioned three ways between them."},"qualityGunas":{"type":"array","items":{"type":"string"},"example":["ruksha","laghu","khara","sukshma","cala"],"description":"Identifiers from the twenty gunas for the qualities the guna verse names with the SAME Sanskrit word, so this joins straight to the qualities endpoint. Where the dosha chapter uses a synonym, or a word the guna verse does not carry, the entry is absent rather than mapped by resemblance."},"seats":{"type":"array","items":{"type":"string"},"example":["the colon","the hips","the thighs"],"description":"Where the dosha sits, in the requested language."},"specialSeat":{"type":"string","example":"the colon","description":"The seat the chapter singles out above the others."},"seatsVariant":{"type":"string","example":"Charaka Sutrasthana 20.8 names the bladder and the feet where this chapter names the ear and the organ of touch.","description":"How the second primary text reads the same list. The two are recorded side by side and never merged, because the special seat of pitta genuinely differs between them."},"functions":{"type":"array","items":{"type":"string"},"example":["upholds the structure and the working of the body","impels speech"],"description":"What the dosha does when it is even. For vata the text states this for the dosha as a whole; for the other two it states it only through the five sub-doshas, and those are what appear here."},"subDoshas":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"prana","description":"Stable identifier for the sub-dosha. Always English-safe and lowercase, and never translated, so it is safe to compare against."},"sanskritName":{"type":"string","example":"prāṇa","description":"The same name in the standard diacritic transliteration."},"devanagari":{"type":"string","example":"प्राण","description":"The same name in Devanagari. Data rather than a translation, so it is identical under every language."},"seat":{"type":"string","example":"the head","description":"Where the sub-dosha sits, in the requested language."},"moves":{"type":"string","example":"the chest and the throat","description":"Where the sub-dosha moves, where the chapter states one. Present on the five vatas and absent elsewhere, because the chapter gives a range of movement only for those."},"function":{"type":"string","example":"upholds the intellect, the heart, the senses and the mind, and carries out spitting, sneezing, belching, the inward breath and the swallowing of food","description":"What the sub-dosha does, in the requested language."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["id","sanskritName","devanagari","seat","function","source"],"description":"One of the five sub-doshas."},"description":"The five sub-doshas, each with its seat and its work. The five vata NAMES are carried by two texts; every seat and function of the fifteen rests on one chapter alone."},"states":{"type":"object","properties":{"balanced":{"type":"string","example":"even, and staying within its own seat, with nothing disturbed","description":"The even state, described as a position and a quality rather than as an absence of complaints."},"accumulating":{"type":"string","example":"increasing within its own seat, with an aversion to more of its own qualities and a wish for the opposite ones","description":"The first state of the seasonal cycle, described the same way."},"aggravated":{"type":"string","example":"moving beyond its own seat, with dryness, lightness and movement conspicuous","description":"The second state of the seasonal cycle, described the same way."},"settlesWith":{"type":"string","example":"unctuous, heavy, warm, smooth and stable qualities","description":"The qualities that bring the dosha back to even, which is the like-increases-like rule applied in reverse."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["balanced","accumulating","aggravated","settlesWith","source"],"description":"The three states, as positions and qualities."},"source":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."}},"required":["id","sanskritName","devanagari","alsoCalled","element","modernElementPair","qualities","qualityGunas","seats","specialSeat","seatsVariant","functions","subDoshas","states","source"],"description":"One dosha with its qualities, seats, pentad and states."},"sources":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."},"description":"Every work behind this response, once each."},"meta":{"type":"object","properties":{"disclaimer":{"type":"string","example":"For general wellness and cultural interest only. This is not medical advice, and it is unrelated to the diagnosis, cure, mitigation, prevention or treatment of any disease or condition. Consult a qualified professional.","description":"The scope of everything in this response, in the requested language. Present on every response from this API, and intended to be shown to the reader rather than stripped."}},"required":["disclaimer"],"description":"Scope of the response."}},"required":["dosha","sources","meta"]}}}},"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"]}}}}}}},"/tastes":{"get":{"operationId":"listRasas","tags":["Ayurveda"],"summary":"List the six tastes - Ayurveda rasa and dosha matrix API","description":"Return the six rasas, the tastes of Ayurveda, with the complete eighteen-cell matrix of which taste lowers and raises which dosha, in both directions. The order is the one the root verse gives, which is also the order of strength it states, and it puts bitter before pungent where most modern lists reverse them. The matrix is returned on each taste and again as a per-dosha index, so a caller can read it either way without deriving one from the other.","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":6,"default":6,"example":6,"description":"Maximum items to return per page. Range: 1-6, default 6."},"required":false,"description":"Maximum items to return per page. Range: 1-6, default 6.","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 six tastes and the matrix.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number","example":6,"description":"Total number of tastes, which is always six."},"limit":{"type":"number","example":6,"description":"Maximum tastes returned in this page."},"offset":{"type":"number","example":0,"description":"Number of tastes skipped before this page."},"strengthOrder":{"type":"array","items":{"type":"string"},"example":["madhura","amla","lavana","tikta","katu","kashaya"],"description":"The six in the order the verse names them, which the verse then says is the order in which they give strength, most first. The order is a claim rather than a presentation choice, so it is published separately from the page above."},"rasas":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","example":"madhura","description":"The taste as a Sanskrit identifier. Never translated, so it stays safe to compare against and to key a lookup on. The six are madhura, amla, lavana, tikta, katu and kashaya."},"sanskritName":{"type":"string","example":"madhura","description":"The same name in the standard diacritic transliteration."},"devanagari":{"type":"string","example":"मधुर","description":"The same name in Devanagari. Data, identical in every language."},"textForm":{"type":"string","example":"svādu","description":"The form the root verse itself uses, where it differs from the identifier. The verse spells the pungent taste one way and the rest of the literature spells it another, and both are carried so a reader checking the Sanskrit does not conclude a row is missing."},"english":{"type":"string","example":"sweet","description":"The taste in the requested language. This is the gloss and it does translate."},"elements":{"type":"array","items":{"type":"string"},"example":["ap, water"],"description":"The mahabhutas the taste arises from. Single-sourced, and from an edition that is not public domain, so the reference ships and the wording does not. That edition gives the sweet taste ONE element where material in general circulation gives it a pair."},"decreases":{"type":"array","items":{"type":"string"},"example":["vata","pitta"],"description":"The doshas this taste lowers, as Sanskrit identifiers. Each taste lowers exactly three across the three doshas and raises the others, which is the structure that makes the matrix complete."},"increases":{"type":"array","items":{"type":"string"},"example":["kapha"],"description":"The doshas this taste raises, as Sanskrit identifiers."}},"required":["id","sanskritName","devanagari","textForm","english","elements","decreases","increases"],"description":"One of the six tastes."},"description":"The tastes for this page, in the order the root verse names them."},"matrix":{"type":"object","additionalProperties":{"type":"object","properties":{"decreasedBy":{"type":"array","items":{"type":"string"},"example":["madhura","amla","lavana"],"description":"The three tastes that lower this dosha."},"increasedBy":{"type":"array","items":{"type":"string"},"example":["tikta","katu","kashaya"],"description":"The three tastes that raise it."}},"required":["decreasedBy","increasedBy"],"example":{"decreasedBy":["madhura","amla","lavana"],"increasedBy":["tikta","katu","kashaya"]},"description":"What a caller finds under any dosha key: the three tastes that lower it and the three that raise it."},"example":{"vata":{"decreasedBy":["madhura","amla","lavana"],"increasedBy":["tikta","katu","kashaya"]}},"description":"The same eighteen cells indexed by dosha rather than by taste, keyed vata, pitta and kapha. Derived from the rows above rather than restated, so the two views cannot disagree."},"sources":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."},"description":"Every work behind this response, once each."},"meta":{"type":"object","properties":{"disclaimer":{"type":"string","example":"For general wellness and cultural interest only. This is not medical advice, and it is unrelated to the diagnosis, cure, mitigation, prevention or treatment of any disease or condition. Consult a qualified professional.","description":"The scope of everything in this response, in the requested language. Present on every response from this API, and intended to be shown to the reader rather than stripped."}},"required":["disclaimer"],"description":"Scope of the response."}},"required":["total","limit","offset","strengthOrder","rasas","matrix","sources","meta"]}}}},"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"]}}}}}}},"/qualities":{"get":{"operationId":"listGunas","tags":["Ayurveda"],"summary":"List the twenty qualities - Ayurveda guna pairs API","description":"Return the twenty gunas, the qualities of Ayurveda, as the ten opposed pairs the commentaries spell out, each member with the single action word attached to it, and the half-verse that states the like-increases-like rule the whole domain runs on. Each quality carries the doshas that hold it, so the pairs join straight to the dosha catalogue. One pair carries a recorded disagreement between the two commentaries, and the response states it rather than resolving it silently, because the choice decides which dosha that pair joins to.","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":10,"default":10,"example":10,"description":"Maximum items to return per page. Range: 1-10, default 10."},"required":false,"description":"Maximum items to return per page. Range: 1-10, default 10.","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 ten pairs and the rule they operate under.","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"number","example":10,"description":"Total number of pairs, which is always ten, covering twenty qualities."},"limit":{"type":"number","example":10,"description":"Maximum pairs returned in this page."},"offset":{"type":"number","example":0,"description":"Number of pairs skipped before this page."},"rule":{"type":"string","example":"Increase of all things comes about through what is alike, and the reverse through what is opposite.","description":"The half-verse the whole domain turns on, translated in place. It is stated of ALL things rather than of food, which is why the same sentence governs the dosha states, the taste matrix, the seasonal regimen and the daily routine alike."},"pairs":{"type":"array","items":{"type":"object","properties":{"number":{"type":"number","example":1,"description":"Position of the pair, 1 to 10, in the order the root verse names the first member of each."},"a":{"type":"object","properties":{"id":{"type":"string","example":"guru","description":"The quality as a Sanskrit identifier. Never translated, so it stays safe to compare against and joins straight to the qualityGunas array on each dosha."},"sanskritName":{"type":"string","example":"guru","description":"The same name in the standard diacritic transliteration."},"english":{"type":"string","example":"heavy","description":"The quality in the requested language. This is the gloss and it does translate."},"action":{"type":"string","example":"building up","description":"What this quality does, from the one action word the commentary gives each of the twenty. This is what turns the list from a glossary into the mechanism the rest of the domain runs on."},"actionSanskrit":{"type":"string","example":"bṛṃhaṇa","description":"The same action word in Sanskrit. Data rather than a translation, so a reader can find the clause it comes from."},"doshas":{"type":"array","items":{"type":"string"},"example":["kapha"],"description":"Which doshas carry this quality, as Sanskrit identifiers, taken from the dosha catalogue rather than restated here. Empty where no dosha carries it under the same Sanskrit word, and note that the three dosha sets overlap, so the twenty are not partitioned three ways."}},"required":["id","sanskritName","english","action","actionSanskrit","doshas"],"description":"One of the twenty qualities."},"b":{"type":"object","properties":{"id":{"type":"string","example":"guru","description":"The quality as a Sanskrit identifier. Never translated, so it stays safe to compare against and joins straight to the qualityGunas array on each dosha."},"sanskritName":{"type":"string","example":"guru","description":"The same name in the standard diacritic transliteration."},"english":{"type":"string","example":"heavy","description":"The quality in the requested language. This is the gloss and it does translate."},"action":{"type":"string","example":"building up","description":"What this quality does, from the one action word the commentary gives each of the twenty. This is what turns the list from a glossary into the mechanism the rest of the domain runs on."},"actionSanskrit":{"type":"string","example":"bṛṃhaṇa","description":"The same action word in Sanskrit. Data rather than a translation, so a reader can find the clause it comes from."},"doshas":{"type":"array","items":{"type":"string"},"example":["kapha"],"description":"Which doshas carry this quality, as Sanskrit identifiers, taken from the dosha catalogue rather than restated here. Empty where no dosha carries it under the same Sanskrit word, and note that the three dosha sets overlap, so the twenty are not partitioned three ways."}},"required":["id","sanskritName","english","action","actionSanskrit","doshas"],"description":"One of the twenty qualities."},"note":{"type":"string","example":"The two commentaries name this member differently: cala here, sara in the other.","description":"A recorded disagreement about this pair, present only where one exists. It is stated rather than resolved silently because the choice changes which dosha the pair joins to."}},"required":["number","a","b"],"description":"One opposed pair of qualities."},"description":"The pairs for this page. The root verse names only the first member of each and then says twenty counting their opposites; the opposites and every action word come from the commentaries."},"sources":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string","example":"Brihat Jataka","description":"Title of the work the claim is taken from, as it should be cited."},"chapter":{"type":"string","example":"18","description":"Chapter or sthana, as printed in that edition. Use it with the verse to find the passage in any copy."},"verse":{"type":"string","example":"note to 20, the Satyacharya extract","description":"Verse or verse range, as printed. Where the claim sits in an appended note or a commentary rather than in a numbered verse, this says so."},"translation":{"type":["string","null"],"example":"N. Chidambaram Iyer","description":"The named translator, or null where the English shipped here was written from the Sanskrit because no public-domain translation of that work exists."},"year":{"type":["number","null"],"example":1885,"description":"Publication year of the named translation, or null where no translation is cited. Use it with publicDomain to judge what may be quoted."},"publicDomain":{"type":"boolean","example":true,"description":"Whether the cited translation may be quoted. When false the verse reference is the citation and the translator wording is not reproduced anywhere in this API, so a caller reproducing a source must go to the verse rather than to us."},"note":{"type":"string","example":"Chapter 18, not 19: the running head on the printed pages reads CH. 19.","description":"A recorded disagreement between sources, or a stated limit on what the citation covers. Present only where one exists, and never resolved silently in favour of one reading."}},"required":["text","chapter","verse","translation","year","publicDomain"],"description":"Where one claim in this response comes from."},"description":"Every work behind this response, once each."},"meta":{"type":"object","properties":{"disclaimer":{"type":"string","example":"For general wellness and cultural interest only. This is not medical advice, and it is unrelated to the diagnosis, cure, mitigation, prevention or treatment of any disease or condition. Consult a qualified professional.","description":"The scope of everything in this response, in the requested language. Present on every response from this API, and intended to be shown to the reader rather than stripped."}},"required":["disclaimer"],"description":"Scope of the response."}},"required":["total","limit","offset","rule","pairs","sources","meta"]}}}},"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":{}}