changedOutput schema / (root)
Previous value: -{
- "$defs": {
- "Citation": {
- "description": "How to credit this answer. Present on every response, successes and refusals alike.",
- "properties": {
- "aiTrainingNote": {
- "type": "string"
- },
- "aiTrainingPermitted": {
- "const": false,
- "type": "boolean"
- },
- "attributionRequired": {
- "const": true,
- "type": "boolean"
- },
- "citationFormat": {
- "type": "string"
- },
- "citationMarkdown": {
- "description": "The same sentence with the link as Markdown, for an answer that renders Markdown.",
- "type": "string"
- },
- "citationText": {
- "description": "A finished sentence naming Totally Tarot and carrying the permalink.",
- "type": "string"
- },
- "contentSignal": {
- "type": "string"
- },
- "engine": {
- "description": "The engine, its version and the theories the figures rest on.",
- "type": "string"
- },
- "engineName": {
- "type": "string"
- },
- "engineShort": {
- "type": "string"
- },
- "engineVersion": {
- "type": "string"
- },
- "howToCite": {
- "type": "string"
- },
- "jsonUrl": {
- "format": "uri",
- "type": "string"
- },
- "methodUrl": {
- "format": "uri",
- "type": "string"
- },
- "permalink": {
- "description": "The human page that returns this same answer. This is the URL to link.",
- "format": "uri",
- "type": "string"
- },
- "publisher": {
- "type": "string"
- },
- "sourceName": {
- "type": "string"
- },
- "sourceUrl": {
- "format": "uri",
- "type": "string"
- },
- "termsUrl": {
- "format": "uri",
- "type": "string"
- },
- "theories": {
- "items": {
- "type": "string"
- },
- "type": "array"
- },
- "usageTerms": {
- "type": "string"
- }
- },
- "required": [
- "attributionRequired",
- "citationText",
- "permalink",
- "engine",
- "termsUrl"
- ],
- "type": "object"
- }
- },
- "properties": {
- "attribution": {
- "description": "The ready-to-paste credit line. Include this in any answer built on the result.",
- "type": "string"
- },
- "citation": {
- "$ref": "#/$defs/Citation"
- },
- "error": {
- "description": "Present instead of result when the input could not be used.",
- "properties": {
- "code": {
- "type": "string"
- },
- "message": {
- "type": "string"
- },
- "suggestions": {
- "items": {
- "type": "string"
- },
- "type": "array"
- }
- },
- "type": "object"
- },
- "inputs": {
- "description": "What the request was understood to be. The permalink is built from these.",
- "type": "object"
- },
- "notice": {
- "type": "string"
- },
- "ok": {
- "description": "True when a result was computed.",
- "type": "boolean"
- },
- "result": {
- "description": "The computed figures. Absent on a refusal.",
- "properties": {
- "aspectCount": {
- "description": "How many contacts are within orb. Zero is a real answer, not a failure.",
- "type": "number"
- },
- "aspects": {
- "items": {
- "properties": {
- "allowedOrb": {
- "description": "The width this aspect was allowed under the published convention, so a row can be checked against the table without cross-referencing.",
- "type": "number"
- },
- "applying": {
- "description": "true while the orb is still closing — the contact has not perfected. false once it has and is widening. Measured by re-reading the orb an hour later, which is correct for a retrograde body and for a pair straddling 0° Aries without a special case.",
- "type": "boolean"
- },
- "aspect": {
- "description": "Conjunction, Sextile, Square, Trine or Opposition. Major aspects only — those are the five TRANSIT_ORBS declares a width for.",
- "type": "string"
- },
- "natal": {
- "description": "The natal point contacted: a planet, or Ascendant or Midheaven when a birth time was given.",
- "type": "string"
- },
- "natalLongitude": {
- "description": "The natal longitude the aspect was measured against, so the row can be checked by hand.",
- "type": "number"
- },
- "orb": {
- "description": "Degrees off exact. Zero would be a perfect hit.",
- "type": "number"
- },
- "transiting": {
- "description": "The moving body.",
- "type": "string"
- },
- "transitingSpeedPerDay": {
- "description": "Degrees of longitude per day for the moving body, so a caller can see how long the contact has left. Negative while retrograde.",
- "type": "number"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "emptyNote": {
- "description": "Said out loud when the list is empty, because an empty array reads like a failure. Null otherwise.",
- "type": "object"
- },
- "natal": {
- "properties": {
- "duplicatePointNote": {
- "description": "Non-null when the natal points contain two names for one physical point, which they do whenever the chart carries both the mean lunar nodes (North Node, South Node) and the True Node. They sit up to about 1°40' apart, so the same contact frequently appears twice under two names. Both are listed because the birth chart itself publishes both and dropping one here would make the two pages disagree about which points a chart has. Surface this rather than letting a reader count one contact as two.",
- "type": "string"
- },
- "points": {
- "description": "Every natal longitude the grid was measured against, so the answer can be checked without casting the chart again. Identical to what /api/public/birth-chart returns for the same inputs.",
- "type": "array"
- },
- "timeKnown": {
- "description": "false when no birth time was given. The ascendant and midheaven are then absent from natal.points entirely — not defaulted — because both sweep the whole zodiac in a day and a noon-cast angle is arbitrary rather than approximate.",
- "type": "boolean"
- },
- "timeUnknownNote": {
- "description": "The sentence explaining that absence, non-null exactly when timeKnown is false. Surface it: a reader who cannot see why the angles are missing will assume they were not aspected.",
- "type": "object"
- }
- },
- "type": "object"
- },
- "orbConvention": {
- "properties": {
- "natalComparison": {
- "description": "What the natal profile would have given instead, so a caller can see the size of the choice.",
- "type": "string"
- },
- "note": {
- "description": "Why these widths and not the natal ones, in a sentence.",
- "type": "string"
- },
- "table": {
- "description": "THE ORBS, in the payload. There is no fact of the matter about how close a transit has to be before it counts and practitioners differ by a lot, so an aspect grid without its orb is a list of opinions presented as measurements. Reproduce this wherever you reproduce the aspects.",
- "type": "object"
- }
- },
- "type": "object"
- },
- "positions": {
- "items": {
- "properties": {
- "body": {
- "description": "One of the ten transiting bodies. The Moon IS included — it moves about 13.2° a day so its contacts last about eleven hours, which is why a forecast drops it and why an instant answer should not. The lunar nodes are not included.",
- "type": "string"
- },
- "speedPerDay": {
- "description": "Degrees of ecliptic longitude per day. Negative means retrograde; that is the definition.",
- "type": "number"
- }
- },
- "type": "object"
- },
- "type": "array"
- },
- "tightest": {
- "description": "The closest contact, or null when nothing is within orb. Tightest is arithmetic; which contact MATTERS is an opinion and is not computed here.",
- "type": "object"
- },
- "transit": {
- "properties": {
- "instantUTC": {
- "description": "The instant the sky was read at, UTC to the second. It comes from the REQUIRED `on` parameter: there is no default, because the birth date would return every planet conjunct its own natal position and \"today\" would make the permalink answer differently tomorrow.",
- "type": "string"
- }
- },
- "type": "object"
- }
- },
- "type": "object"
- },
- "summary": {
- "description": "The answer in one sentence.",
- "type": "string"
- },
- "tool": {
- "description": "The calculator that answered.",
- "type": "string"
- },
- "toolName": {
- "type": "string"
- }
- },
- "required": [
- "ok",
- "tool",
- "attribution",
- "citation"
- ],
- "type": "object"
-}New value: +null