{
 "site": "https://perigee.info/",
 "version": "1.15.1",
 "commit": "15dcc7e",
 "builtFrom": "2026-10-29T08:03:44-04:00",
 "licence": "Code MIT; catalogue texts written for Perigee; images under the licence named on each.",
 "disclaimer": "Educational use only: not intended for navigation, collision avoidance or conjunction assessment.",
 "description": "How machines (AI assistants, lesson pages) can use Perigee: links into the app, embed mode with a postMessage API, static catalogue documents, and the published data. Positions are computed by the client from the published data; nothing is computed on a server, and the providers (CelesTrak, JPL Horizons) are never contacted by clients.",
 "mcp": {
  "hosted": "https://perigee-mcp.perigeeinfo.workers.dev/mcp",
  "transport": "Streamable HTTP, stateless; no account; a budget of 60 units a minute per address (a tool call costs 1 to 4)",
  "local": "npx -y perigee-mcp (stdio, Node.js 20+)",
  "npm": "https://www.npmjs.com/package/perigee-mcp",
  "tools": [
   "perigee_find",
   "perigee_object",
   "perigee_state",
   "perigee_orbit",
   "perigee_passes",
   "perigee_sky",
   "perigee_events",
   "perigee_tonight",
   "perigee_sky_conjunctions",
   "perigee_shadow",
   "perigee_ground_track",
   "perigee_close_approach",
   "perigee_stats",
   "perigee_distance",
   "perigee_distance_series",
   "perigee_view",
   "perigee_describe_view",
   "perigee_define",
   "perigee_about"
  ]
 },
 "documents": {
  "catalog": "https://perigee.info/api/catalog.json",
  "images": "https://perigee.info/api/images.json",
  "glossary": "https://perigee.info/api/glossary.json",
  "interface": "https://perigee.info/api/interface.json",
  "llms": "https://perigee.info/llms.txt",
  "llmsFull": "https://perigee.info/llms-full.txt",
  "dataManifest": "https://perigee.info/data/manifest.json"
 },
 "ids": {
  "description": "Object ids, shared by the URL `sel` parameter, the embed API and the catalogue: a NORAD catalogue number (\"25544\"), a mission id (\"lro\"), a planet, dwarf planet or dwarf planet candidate id (\"mars\", \"ceres\", \"quaoar\", \"2026-ed138\"), \"sun\", \"moon:<id>\" for moons (\"moon:titan\"; \"moon\" alone in the Earth view), \"site:<id>\" for landing and impact sites on the Moon, Mars, Mercury, Venus and Titan (Mercury, Venus and Titan in the solar view, where the site opens in the second tab of the info panel), \"launch:<id>\" for launch sites (written \"site:<id>\" in the Earth view URL), \"star:<id>\" for named stars, \"comet:<id>\" for comets and \"asteroid:<id>\" for notable asteroids (solar view). The `view` and `embed` links of each catalogue object open it."
 },
 "url": {
  "base": "https://perigee.info/",
  "parameters": {
   "view": {
    "values": [
     "earth",
     "moon",
     "mars",
     "solar"
    ],
    "default": "earth"
   },
   "lang": {
    "values": [
     "en",
     "fr"
    ],
    "default": "browser language"
   },
   "sel": {
    "description": "Selected object id (see ids)."
   },
   "t": {
    "description": "Simulation instant, ISO 8601 UTC (e.g. 2026-12-01T00:00:00Z); real time if absent."
   },
   "rate": {
    "description": "Time multiplier (0 pauses, negative runs backwards, |rate| ≤ 100000)."
   },
   "frame": {
    "values": [
     "fixed",
     "inertial"
    ],
    "default": "fixed",
    "description": "Body-fixed or inertial frame."
   },
   "follow": {
    "values": [
     "1"
    ],
    "description": "Follow the selected object."
   },
   "stars": {
    "values": [
     "1"
    ],
    "description": "Name the bright stars, magnitude 2.5 or brighter (solar view)."
   },
   "nearby": {
    "values": [
     "1"
    ],
    "description": "Name the stars within 20 light-years of the Sun (solar view)."
   },
   "candidates": {
    "values": [
     "1"
    ],
    "description": "Draw and list the dwarf planet candidates (Gonggong, Quaoar, Orcus, Sedna, 2026 ED138), from JPL Horizons vectors (solar view; a selected candidate is drawn in any case)."
   },
   "asteroids": {
    "values": [
     "1"
    ],
    "description": "Draw and list the notable asteroids of the catalogue (the largest, and the spacecraft targets), from JPL Horizons vectors (solar view; a selected asteroid is drawn in any case)."
   },
   "comets": {
    "values": [
     "1"
    ],
    "description": "Draw and list the comets of the catalogue, from JPL Horizons vectors, with illustrative tails (solar view; a selected comet is drawn in any case)."
   },
   "map": {
    "values": [
     "1"
    ],
    "description": "With sel=star:<id> (solar view): open that star's 3D map with the Sun (every named star at its distance, a dashed line and the distance between the star and the Sun). With embed=1, the map fills the frame alone."
   },
   "pick": {
    "values": [
     "star:<id>"
    ],
    "description": "With map=1: another star compared on the map (its own dashed line and distance to the Sun)."
   },
   "embed": {
    "values": [
     "1"
    ],
    "description": "Embed mode: the 3D view alone, with a link to the full app."
   },
   "ui": {
    "values": [
     "panel",
     "time",
     "panel,time"
    ],
    "description": "In embed mode, keep the information panel and/or the time bar."
   }
  },
  "example": "https://perigee.info/?embed=1&lang=en&view=solar&sel=mars&follow=1&t=2026-12-01T00:00:00Z&rate=0"
 },
 "embed": {
  "iframe": "<iframe src=\"https://perigee.info/?embed=1&lang=en&view=solar&sel=mars&follow=1\" width=\"800\" height=\"500\" style=\"border:0\" allow=\"fullscreen\" title=\"Perigee: Mars\"></iframe>",
  "protocol": "perigee:v1",
  "transport": "window.postMessage to the iframe, from any origin; replies go to the caller (its origin), events to the parent page.",
  "request": {
   "type": "perigee:v1",
   "id": "any value echoed in the reply",
   "method": "string",
   "params": "object"
  },
  "reply": {
   "type": "perigee:v1",
   "id": "the request id",
   "ok": "boolean",
   "result": "on success",
   "error": "message"
  },
  "methods": {
   "ping": {
    "result": {
     "protocol": "perigee:v1"
    }
   },
   "get": {
    "params": {
     "details": "boolean (optional): add the selected object facts and position with provenance"
    },
    "result": "state: view, sel, time (ISO UTC), live, rate, frame, lang, following, url (same view in the full app); details: { id, facts, position }"
   },
   "set": {
    "params": {
     "type": "object",
     "additionalProperties": false,
     "properties": {
      "view": {
       "enum": [
        "earth",
        "moon",
        "mars",
        "solar"
       ]
      },
      "sel": {
       "type": [
        "string",
        "null"
       ],
       "description": "Object id as in the `sel` URL parameter; null clears it."
      },
      "time": {
       "type": "string",
       "description": "ISO 8601 UTC instant, or \"now\" for real time."
      },
      "rate": {
       "type": "number",
       "minimum": -100000,
       "maximum": 100000,
       "description": "0 pauses."
      },
      "frame": {
       "enum": [
        "fixed",
        "inertial"
       ]
      },
      "lang": {
       "enum": [
        "en",
        "fr"
       ]
      },
      "follow": {
       "type": "boolean"
      }
     }
    },
    "result": "the new state"
   },
   "snapshot": {
    "params": {
     "kind": "'shown' (as displayed, with labels; default) or 'objects' (bodies and spacecraft only)"
    },
    "result": "{ dataUrl (PNG data URL), title, kind, mimeType, state }"
   }
  },
  "events": {
   "ready": "the first view has loaded (data: state)",
   "view": "the view changed",
   "selection": "the selection changed",
   "time": "the time, rate or real-time mode changed"
  }
 },
 "provenance": {
  "description": "Every computed position states how it was obtained: model, method, data state, sources, dataFetchedAt (when the pipeline downloaded the data), elementEpoch and elementAgeDays (Earth satellites; negative when fitted to a predicted ephemeris), validFrom/validTo and hoursBeyondWindow (ephemerides), and a typical accuracy with its basis.",
  "states": {
   "fresh": "Propagated from recent orbital elements.",
   "interpolated": "Interpolated between published ephemeris samples (inside their window).",
   "stale": "Orbital elements older than 14 days: the position may be off by tens to hundreds of kilometres.",
   "extrapolated": "Beyond the published ephemeris window: two-body extrapolation, increasingly approximate.",
   "hidden": "Too far beyond the ephemeris window (7 days for low orbiters, 14 otherwise): no position given.",
   "modelled": "From mean orbital elements (moons), not from an ephemeris of the day.",
   "none": "No public ephemeris: the object is listed but has no position."
  },
  "models": {
   "sgp4-gp": {
    "typicalKm": 1,
    "note": "SGP4 from US Space Force general perturbations elements: about 1 km near the element epoch, growing by roughly 1 to 3 km per day for low orbits (more during strong solar activity)."
   },
   "sgp4-supgp": {
    "typicalKm": 0.1,
    "note": "SGP4 fitted by CelesTrak to the operator’s own ephemerides: about ten times more accurate than GP near the epoch."
   },
   "horizons-interpolated": {
    "typicalKm": 0.01,
    "note": "Cubic Hermite interpolation between JPL Horizons state vectors: reproduces the ephemeris to well under 1 km; the ephemeris’ own uncertainty depends on the mission’s orbit determination."
   },
   "kepler-extrapolated": {
    "note": "Two-body Kepler motion from the last Horizons state, beyond the published window: the error grows with time, from kilometres after hours to thousands of kilometres after days for low or perturbed orbits."
   },
   "vsop87": {
    "note": "astronomy-engine (VSOP87 series): documented to agree with JPL within about 1 arcminute in sky position; heliocentric distances are good to a small fraction of a percent."
   },
   "astronomy-engine-moon": {
    "typicalKm": 50,
    "note": "astronomy-engine analytical theory (the Moon, the Galilean moons): typically 10 to 90 km from JPL Horizons."
   },
   "moon-horizons": {
    "typicalKm": 1,
    "note": "Interpolation of JPL Horizons vectors of the moon relative to its planet (refreshed daily)."
   },
   "moon-mean-elements": {
    "note": "JPL mean orbital elements with uniform precession, re-anchored on Horizons about once a year: within a few degrees along the orbit (at most about 7° after a year)."
   },
   "site-coordinates": {
    "typicalKm": 0.1,
    "note": "Catalogued surface coordinates (cited source) turned with the body’s IAU rotation model."
   },
   "star-catalogue": {
    "note": "ICRS J2000 position from SIMBAD; the distance comes from the cited literature (parallax); proper motion is ignored."
   },
   "catalogue-counts": {
    "note": "Exact counts of the active satellites in the published CelesTrak data at its fetch time. Operators come from CelesTrak groups and curated name rules (unattributed satellites are counted apart); owners are SATCAT country or organisation codes; regimes from the mean elements."
   },
   "origin": {
    "typicalKm": 0,
    "note": "The reference point itself."
   }
  },
  "frame": "ICRF/J2000 equatorial (EQJ), km and km/s; distances centre to centre."
 },
 "freshness": "data/manifest.json lists each dataset with fetchedAt (UTC) and its hash. CelesTrak elements are refreshed every 4 hours, SATCAT and JPL Horizons ephemerides daily; catalogue entries carry a `verified` date (missions re-checked about monthly).",
 "attribution": "CelesTrak (T.S. Kelso) / 18th & 19th SDS via Space-Track, NASA/JPL-Caltech Horizons, NASA SVS, USGS Astrogeology, NASA Blue Marble, astronomy-engine (MIT), satellite.js (MIT). Images: credit and licence on each (api/images.json)."
}
