For developers
Catalogue API
A free, read-only HTTP catalogue of solar-system and exoplanet data, plus a streamable HTTP MCP server. No API key and no account.
Overview
This reference lists the public GET operations from the live OpenAPI document and caches that document on the server. Calls you run from the forms below are read-only GETs made by this site. Example URLs start with the catalogue base URL.
- Base URL
- https://api.publicuniverse.net/api/v1
- Specification
- solar-system-db REST API 0.1.0
- MCP
- solar-mcp · https://api.publicuniverse.net/mcp
Catalogue base URL
https://api.publicuniverse.net/api/v1
A worked example
Fuzzy text search across names/designations/discoverers
curl example for Fuzzy text search across names/designations/discoverers
curl -sS 'https://api.publicuniverse.net/api/v1/search?q=Halley&limit=3'
Endpoint reference
Paths come from the cached OpenAPI document. Example snippets use a limit of at most 3 when the operation has a limit parameter. Interactive calls use the same cap so a response fits on the page; a direct request can use the maximum printed on the operation.
catalog
GET Filter solar-system objects https://api.publicuniverse.net/api/v1/objects?limit=3
Filter the catalogue. For walks over all 1.4 M bodies use `after` (keyset pagination) rather than `offset`; `next_after` is null on the last page.
Parameters
- type query · string
- object_type filter (planet/moon/asteroid/comet/...)
- parent query · string
- parent body name/id (e.g. 'Jupiter')
- min_radius_km query · number
- max_radius_km query · number
- max_eccentricity query · number
- min_semi_major_axis_au query · number
- max_semi_major_axis_au query · number
- neo query · boolean
- pha query · boolean
- named_only query · boolean
- orbit_class query · string
- SBDB orbit class code, e.g. MBA, APO, TNO, JFc
- max_moid_au query · number
- Earth MOID at most this many AU
- minimum 0
- min_diameter_km query · number
- minimum 0
- max_condition_code query · integer
- orbit uncertainty code 0 (best) … 9
- minimum 0, maximum 9
- discovered_after query · string
- ISO date
- after query · string
- keyset pagination: last id of the previous page
- limit query · integer
- default 50, minimum 1, maximum 1000
- offset query · integer
- ignored when `after` is given
- default 0, minimum 0
Request
curl example for Filter solar-system objects
curl -sS 'https://api.publicuniverse.net/api/v1/objects?limit=3'
JavaScript example for Filter solar-system objects
const response = await fetch("https://api.publicuniverse.net/api/v1/objects?limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Filter solar-system objects
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/objects?limit=3") as response:
data = json.load(response)
print(data)
Example response
Example response for Filter solar-system objects
{
"results": [
{
"id": "comet-c-2005-j2-catalina",
"name": "Catalina",
"designation": "C/2005 J2 (Catalina)",
"object_type": "comet",
"parent_id": "sun",
"discoverer": null,
"discovery_date": null,
"wikipedia_url": null,
"radius_km": null,
"mass_kg": null,
"semi_major_axis_au": -433338614767.9136,
"eccentricity": 1.000000000009894,
"inclination_deg": 150.803020510002,
"orbital_period_days": null,
"perihelion_au": 4.287489327002505,
"aphelion_au": null,
"orbit_class_code": "HYP",
"moid_au": 3.30202,
"condition_code": null,
"geometric_albedo": null,
"absolute_magnitude_h": 9
},
{
"id": "comet-c-1988-c1-maury-phinney",
"name": "Maury-Phinney",
"designation": "C/1988 C1 (Maury-Phinney)",
"object_type": "comet",
"parent_id": "sun",
"discoverer": null,
"discovery_date": null,
"wikipedia_url": null,
"radius_km": null,
"mass_kg": null,
"semi_major_axis_au": -3647207.47036457,
"eccentricity": 1.00000052935711,
"inclination_deg": 93.15868283813296,
"orbital_period_days": null,
"perihelion_au": 1.930675205805696,
"aphelion_au": null,
"orbit_class_code": "HYP",
"moid_au": 0.959834,
"condition_code": null,
"geometric_albedo": null,
"absolute_magnitude_h": null
},
{
"id": "comet-c-2000-o1-koehn",
"name": "Koehn",
"designation": "C/2000 O1 (Koehn)",
"object_type": "comet",
"parent_id": "sun",
"discoverer": null,
"discovery_date": null,
"wikipedia_url": null,
"radius_km": null,
"mass_kg": null,
"semi_major_axis_au": -2729545.221721413,
"eccentricity": 1.000002169511477,
"inclination_deg": 148.104188645481,
"orbital_period_days": null,
"perihelion_au": 5.921779685276794,
"aphelion_au": null,
"orbit_class_code": "HYP",
"moid_au": 5.04238,
"condition_code": null,
"geometric_albedo": null,
"absolute_magnitude_h": 5.1
}
],
"limit": 3,
"offset": 0,
"next_after": null
}
Try it
GET IAU meteor showers https://api.publicuniverse.net/api/v1/meteor-showers?limit=3
Parameters
- established_only query · boolean
- Keep only MDC status codes 1 (single established shower, group) or 6 (member of the established group)
- default false
- active_on query · string
- ISO date (YYYY-MM-DD); filters to showers active on this date
- limit query · integer
- default 500, minimum 1, maximum 1000
Request
curl example for IAU meteor showers
curl -sS 'https://api.publicuniverse.net/api/v1/meteor-showers?limit=3'
JavaScript example for IAU meteor showers
const response = await fetch("https://api.publicuniverse.net/api/v1/meteor-showers?limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for IAU meteor showers
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/meteor-showers?limit=3") as response:
data = json.load(response)
print(data)
Example response
Example response for IAU meteor showers
{
"items": [
{
"iau_no": 1,
"ad_no": 0,
"code": "CAP",
"name": "alpha Capricornids",
"status_code": 1,
"status_label": "single established shower, group",
"activity": "annual",
"solar_longitude_deg": 128.9,
"ra_deg": 306.6,
"dec_deg": -8.2,
"dra_deg_per_day": 0.54,
"ddec_deg_per_day": 0.26,
"vg_km_s": 22.2,
"a_au": 2.618,
"q_au": 0.602,
"e": null,
"peri_deg": 266.67,
"node_deg": 128.9,
"incl_deg": 7.68,
"n_members": 36,
"shower_group": "00000",
"parent_body": "169P/NEAT (= 2002 EX12)",
"parent_object_id": "comet-169p-neat",
"technique": null,
"reference": "1) <A href='http://adsabs.harvard.edu/abs/2006mspc.book.....J' target=_blank>Jenniskens, 2006</A>",
"submitted_on": "SD",
"source": "IAU Meteor Data Center (Jenniskens et al. 2020; Hajdukova & Rudawska)"
},
{
"iau_no": 1,
"ad_no": 1,
"code": "CAP",
"name": "alpha Capricornids",
"status_code": 1,
"status_label": "single established shower, group",
"activity": "annual",
"solar_longitude_deg": 122.3,
"ra_deg": 306.7,
"dec_deg": -9.3,
"dra_deg_per_day": 0.91,
"ddec_deg_per_day": 0.25,
"vg_km_s": 23.4,
"a_au": null,
"q_au": 0.55,
"e": 0.768,
"peri_deg": 273.3,
"node_deg": 122.3,
"incl_deg": 7.7,
"n_members": 269,
"shower_group": "00000",
"parent_body": "169P/NEAT (= 2002 EX12)",
"parent_object_id": "comet-169p-neat",
"technique": "R",
"reference": "2) <A href='http://adsabs.harvard.edu/abs/2002dsso.conf...48G' target=_blank>Galligan and Baggaley, 2002</A>",
"submitted_on": "SD",
"source": "IAU Meteor Data Center (Jenniskens et al. 2020; Hajdukova & Rudawska)"
},
{
"iau_no": 1,
"ad_no": 2,
"code": "CAP",
"name": "alpha Capricornids",
"status_code": 1,
"status_label": "single established shower, group",
"activity": "annual",
"solar_longitude_deg": 123.8,
"ra_deg": 303.4,
"dec_deg": -10.6,
"dra_deg_per_day": 0.75,
"ddec_deg_per_day": 0.28,
"vg_km_s": 22.2,
"a_au": 2.54,
"q_au": 0.594,
"e": null,
"peri_deg": 267.6,
"node_deg": 123.8,
"incl_deg": 7.2,
"n_members": null,
"shower_group": "00000",
"parent_body": "169P/NEAT (= 2002 EX12)",
"parent_object_id": "comet-169p-neat",
"technique": "P",
"reference": "3) <A href='http://adsabs.harvard.edu/abs/2001ESASP.495...55H' target=_blank>Hasegawa, 2001</A>",
"submitted_on": "SD",
"source": "IAU Meteor Data Center (Jenniskens et al. 2020; Hajdukova & Rudawska)"
}
],
"count": 3
}
Try it
GET Get full record for one object https://api.publicuniverse.net/api/v1/objects/planet-saturn
Parameters
- name_or_designation path · string · required
Request
curl example for Get full record for one object
curl -sS 'https://api.publicuniverse.net/api/v1/objects/planet-saturn'
JavaScript example for Get full record for one object
const response = await fetch("https://api.publicuniverse.net/api/v1/objects/planet-saturn");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Get full record for one object
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/objects/planet-saturn") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for Get full record for one object
{
"id": "planet-saturn",
"name": "Saturn",
"designation": null,
"object_type": "planet",
"parent_id": "sun",
"discoverer": null,
"discovery_date": null,
"wikipedia_url": "https://en.wikipedia.org/wiki/Saturn",
"notes": null,
"created_at": "2026-10-24T03:03:46Z",
"updated_at": "2026-10-24T03:03:46Z",
"orbital": {
"object_id": "planet-saturn",
"epoch": "J2000",
"epoch_jd": 2451545,
"frame": "J2000",
"centre": "sun",
"semi_major_axis_au": 9.53667594,
"eccentricity": 0.05386179,
"inclination_deg": 2.48599187,
"longitude_ascending_node_deg": 113.66242448,
"argument_periapsis_deg": 339.392,
"mean_anomaly_deg": 317.02,
"orbital_period_days": 10759.22,
"perihelion_au": 9.04108,
"aphelion_au": 10.1238,
"mean_motion_deg_per_day": null,
"perihelion_time_jd": null,
"moid_au": null,
"moid_jupiter_au": null,
"tisserand_jupiter": null,
"condition_code": null,
"data_arc_days": null,
"first_obs": null,
"last_obs": null,
"n_obs_used": null,
"n_delay_obs_used": null,
"n_doppler_obs_used": null,
"rms_arcsec": null,
"solution_date": null,
"orbit_id": null,
"producer": null,
"orbit_source": null,
"equinox": null,
"two_body": null,
"pe_used": null,
"sb_used": null,
"orbit_class_code": null,
"orbit_class_name": null,
"sigma_e": null,
"sigma_a": null,
"sigma_q": null,
"sigma_i": null,
"sigma_om": null,
"sigma_w": null,
"sigma_ma": null,
"sigma_tp": null,
"sigma_per": null,
"sigma_n": null,
"sigma_ad": null,
"updated_at": "2026-10-24T03:03:46Z"
},
"physical": {
"object_id": "planet-saturn",
"radius_km": 58232,
"equatorial_radius_km": 60268,
"polar_radius_km": 54364,
"mass_kg": 5.6832000000000005e+26,
"density_g_cm3": 0.687,
"rotation_period_hours": 10.656,
"axial_tilt_deg": 26.73,
"surface_gravity_m_s2": 11.19,
"escape_velocity_km_s": 35.5,
"gm_km3_s2": 37931000,
"slope_g": null,
"extent_km": null,
"pole_ra_dec": null,
"diameter_sigma_km": null,
"volume_km3": 827130000000000,
"ellipticity": 0.09796,
"moment_of_inertia": 0.21,
"j2": null,
"magnetic_field": null,
"length_of_day_hours": 10.656,
"synodic_period_days": 378.09,
"mean_orbital_velocity_km_s": 9.67,
"min_orbital_velocity_km_s": 9.14,
"max_orbital_velocity_km_s": 10.14,
"tropical_period_days": 10746.94,
"mean_temperature_k": null,
"black_body_temperature_k": 81,
"solar_irradiance_w_m2": 14.82,
"updated_at": "2026-10-24T03:03:46Z"
},
"visual": {
"object_id": "planet-saturn",
"geometric_albedo": 0.499,
"bond_albedo": 0.342,
"absolute_magnitude_h": null,
"colour_b_v": null,
"spectral_type": null,
"dominant_colour_hex": "#EAD6A0",
"colour_u_b": null,
"colour_i_r": null,
"spectral_type_tholen": null,
"magnitude_v10": -8.91,
"comet_m1": null,
"comet_k1": null,
"comet_m2": null,
"comet_k2": null,
"nongra
Try it
GET List moons of a planet or dwarf planet https://api.publicuniverse.net/api/v1/planets/Saturn/moons
Parameters
- name path · string · required
Request
curl example for List moons of a planet or dwarf planet
curl -sS 'https://api.publicuniverse.net/api/v1/planets/Saturn/moons'
JavaScript example for List moons of a planet or dwarf planet
const response = await fetch("https://api.publicuniverse.net/api/v1/planets/Saturn/moons");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for List moons of a planet or dwarf planet
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/planets/Saturn/moons") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for List moons of a planet or dwarf planet
{
"results": [
{
"id": "moon-s-2009-s-2",
"name": "S/2009 S 2",
"designation": "S/2009 S 2",
"discoverer": null,
"discovery_date": null,
"radius_km": null,
"mass_kg": null,
"density_g_cm3": null,
"geometric_albedo": null,
"semi_major_axis_au": 0.0007825044531198666,
"orbital_period_days": 0.473026,
"eccentricity": 0,
"inclination_deg": 0
},
{
"id": "moon-pan",
"name": "Pan",
"designation": null,
"discoverer": "Mark R. Showalter",
"discovery_date": "1990",
"radius_km": 14,
"mass_kg": 4195196500007491,
"density_g_cm3": 0.365,
"geometric_albedo": null,
"semi_major_axis_au": 0.0008930608395350644,
"orbital_period_days": 0.575051,
"eccentricity": 0,
"inclination_deg": 0
},
{
"id": "moon-daphnis",
"name": "Daphnis",
"designation": null,
"discoverer": "Cassini Imaging Team",
"discovery_date": "2005",
"radius_km": null,
"mass_kg": null,
"density_g_cm3": null,
"geometric_albedo": null,
"semi_major_axis_au": 0.0009124461421896429,
"orbital_period_days": 0.59408,
"eccentricity": 0,
"inclination_deg": 0
},
{
"id": "moon-atlas",
"name": "Atlas",
"designation": null,
"discoverer": "Richard Terrile",
"discovery_date": "1980",
"radius_km": 15.1,
"mass_kg": 5543652517867042,
"density_g_cm3": 0.385,
"geometric_albedo": null,
"semi_major_axis_au": 0.000920467646736365,
"orbital_period_days": 0.604602,
"eccentricity": 0.001,
"inclination_deg": 0
},
{
"id": "moon-prometheus",
"name": "Prometheus",
"designation": null,
"discoverer": "Voyager Imaging Team",
"discovery_date": "1980",
"radius_km": 43.1,
"mass_kg": 1.6046626612528656e+17,
"density_g_cm3": 0.4784,
"geometric_albedo": null,
"semi_major_axis_au": 0.0009318314448442214,
"orbital_period_days": 0.615878,
"eccentricity": 0.002,
"inclination_deg": 0
},
{
"id": "moon-pandora",
"name": "Pandora",
"designation": null,
"discoverer": "Voyager Imaging Team",
"discovery_date": "1980",
"radius_km": 40.6,
"mass_kg": 1.3874114139310488e+17,
"density_g_cm3": 0.4948,
"geometric_albedo": null,
"semi_major_axis_au": 0.0009472059952254389,
"orbital_period_days": 0.631369,
"eccentricity": 0.004,
"inclination_deg": 0
},
{
"id": "moon-epimetheus",
"name": "Epimetheus",
"designation": null,
"discoverer": "Richard Walker",
"discovery_date": "1980",
"radius_km": 58.2,
"mass_kg": 5.2649716075094016e+17,
"density_g_cm3": 0.6375,
"geometric_albedo": null,
"semi_major_axis_au": 0.001012
Try it
GET List rings of a planet or dwarf planet https://api.publicuniverse.net/api/v1/planets/Saturn/rings
Parameters
- name path · string · required
Request
curl example for List rings of a planet or dwarf planet
curl -sS 'https://api.publicuniverse.net/api/v1/planets/Saturn/rings'
JavaScript example for List rings of a planet or dwarf planet
const response = await fetch("https://api.publicuniverse.net/api/v1/planets/Saturn/rings");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for List rings of a planet or dwarf planet
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/planets/Saturn/rings") as response:
data = json.load(response)
print(data)
Example response
Example response for List rings of a planet or dwarf planet
{
"results": [
{
"id": 5,
"name": "D Ring",
"inner_radius_km": 66900,
"outer_radius_km": 74510,
"width_km": null,
"thickness_km": null,
"notes": null
},
{
"id": 6,
"name": "C Ring",
"inner_radius_km": 74658,
"outer_radius_km": 92000,
"width_km": null,
"thickness_km": null,
"notes": null
},
{
"id": 7,
"name": "B Ring",
"inner_radius_km": 92000,
"outer_radius_km": 117580,
"width_km": null,
"thickness_km": null,
"notes": null
},
{
"id": 8,
"name": "Cassini Division",
"inner_radius_km": 117580,
"outer_radius_km": 122170,
"width_km": null,
"thickness_km": null,
"notes": null
},
{
"id": 9,
"name": "A Ring",
"inner_radius_km": 122170,
"outer_radius_km": 136775,
"width_km": null,
"thickness_km": null,
"notes": null
},
{
"id": 10,
"name": "F Ring",
"inner_radius_km": 140224,
"outer_radius_km": 140324,
"width_km": null,
"thickness_km": null,
"notes": null
},
{
"id": 11,
"name": "G Ring",
"inner_radius_km": 166000,
"outer_radius_km": 175000,
"width_km": null,
"thickness_km": null,
"notes": null
},
{
"id": 12,
"name": "E Ring",
"inner_radius_km": 180000,
"outer_radius_km": 480000,
"width_km": null,
"thickness_km": null,
"notes": null
},
{
"id": 13,
"name": "Phoebe Ring",
"inner_radius_km": 7600000,
"outer_radius_km": 16000000,
"width_km": null,
"thickness_km": null,
"notes": null
}
]
}
Try it
GET IAU dwarf planets (+ candidates if requested) https://api.publicuniverse.net/api/v1/dwarf-planets
Parameters
- include_candidates query · boolean
- default false
Request
curl example for IAU dwarf planets (+ candidates if requested)
curl -sS 'https://api.publicuniverse.net/api/v1/dwarf-planets'
JavaScript example for IAU dwarf planets (+ candidates if requested)
const response = await fetch("https://api.publicuniverse.net/api/v1/dwarf-planets");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for IAU dwarf planets (+ candidates if requested)
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/dwarf-planets") as response:
data = json.load(response)
print(data)
Example response
Example response for IAU dwarf planets (+ candidates if requested)
{
"results": [
{
"id": "dwarf-ceres",
"name": "Ceres",
"designation": "(1) Ceres",
"object_type": "dwarf_planet",
"radius_km": 469.73,
"mass_kg": 9.3835e+20,
"semi_major_axis_au": 2.765552595034094,
"eccentricity": 0.07969229514816586,
"orbital_period_days": 1679.853119758983
},
{
"id": "dwarf-pluto",
"name": "Pluto",
"designation": "(134340) Pluto",
"object_type": "dwarf_planet",
"radius_km": 1188,
"mass_kg": 1.303e+22,
"semi_major_axis_au": 39.58862938517124,
"eccentricity": 0.2518378778576892,
"orbital_period_days": 90981.71647718345
},
{
"id": "dwarf-haumea",
"name": "Haumea",
"designation": "(136108) Haumea",
"object_type": "dwarf_planet",
"radius_km": 780,
"mass_kg": 4.006e+21,
"semi_major_axis_au": 43.06029023650952,
"eccentricity": 0.1944430148898797,
"orbital_period_days": 103208.1173403618
},
{
"id": "dwarf-makemake",
"name": "Makemake",
"designation": "(136472) Makemake",
"object_type": "dwarf_planet",
"radius_km": 715,
"mass_kg": 3.1e+21,
"semi_major_axis_au": 45.57093317300052,
"eccentricity": 0.1588889953992523,
"orbital_period_days": 112364.8068762869
},
{
"id": "dwarf-eris",
"name": "Eris",
"designation": "(136199) Eris",
"object_type": "dwarf_planet",
"radius_km": 1163,
"mass_kg": 1.6466e+22,
"semi_major_axis_au": 67.93394687853566,
"eccentricity": 0.4382385347971672,
"orbital_period_days": 204516.6629430732
}
]
}
Try it
GET Near-Earth Objects https://api.publicuniverse.net/api/v1/neos?limit=3
Parameters
- min_diameter_km query · number
- max_diameter_km query · number
- limit query · integer
- default 200, minimum 1, maximum 1000
Request
curl example for Near-Earth Objects
curl -sS 'https://api.publicuniverse.net/api/v1/neos?limit=3'
JavaScript example for Near-Earth Objects
const response = await fetch("https://api.publicuniverse.net/api/v1/neos?limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Near-Earth Objects
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/neos?limit=3") as response:
data = json.load(response)
print(data)
Example response
Example response for Near-Earth Objects
{
"results": [
{
"id": "ast-54661108",
"name": "2010 AL153",
"designation": "(2010 AL153)",
"semi_major_axis_au": 1.0336143,
"perihelion_au": 1.0054947,
"eccentricity": 0.0272051,
"inclination_deg": 13.52858,
"radius_km": null,
"absolute_magnitude_h": null,
"is_pha": 0
},
{
"id": "ast-54659689",
"name": "2010 BH74",
"designation": "(2010 BH74)",
"semi_major_axis_au": 0.9454358,
"perihelion_au": 0.7814739,
"eccentricity": 0.1734247,
"inclination_deg": 5.35498,
"radius_km": null,
"absolute_magnitude_h": null,
"is_pha": 0
},
{
"id": "ast-54661437",
"name": "2010 CS262",
"designation": "(2010 CS262)",
"semi_major_axis_au": 0.8498681,
"perihelion_au": 0.6837273,
"eccentricity": 0.1954901,
"inclination_deg": 7.88854,
"radius_km": null,
"absolute_magnitude_h": null,
"is_pha": 0
}
]
}
Try it
GET Numbered periodic comets https://api.publicuniverse.net/api/v1/comets/periodic?limit=3
Parameters
- limit query · integer
- default 500, minimum 1, maximum 2000
Request
curl example for Numbered periodic comets
curl -sS 'https://api.publicuniverse.net/api/v1/comets/periodic?limit=3'
JavaScript example for Numbered periodic comets
const response = await fetch("https://api.publicuniverse.net/api/v1/comets/periodic?limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Numbered periodic comets
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/comets/periodic?limit=3") as response:
data = json.load(response)
print(data)
Example response
Example response for Numbered periodic comets
{
"results": [
{
"id": "comet-c-2020-p4-b",
"name": "C/2020 P4-B",
"designation": "C/2020 P4-B",
"discoverer": null,
"discovery_date": null,
"semi_major_axis_au": 1.020070950980331,
"eccentricity": 0.9092091821956565,
"inclination_deg": 28.1473125338304,
"orbital_period_days": 376.3084730293948,
"perihelion_au": 0.09261307585795861,
"aphelion_au": 1.947528826102702
},
{
"id": "comet-c-2020-p4-c",
"name": "C/2020 P4-C",
"designation": "C/2020 P4-C",
"discoverer": null,
"discovery_date": null,
"semi_major_axis_au": 1.39054041749636,
"eccentricity": 0.9394205210769577,
"inclination_deg": 37.5593616220339,
"orbital_period_days": 598.9269448141177,
"perihelion_au": 0.08423821391335916,
"aphelion_au": 2.696842621079361
},
{
"id": "comet-311p-panstarrs",
"name": "PANSTARRS",
"designation": "311P/PANSTARRS",
"discoverer": null,
"discovery_date": null,
"semi_major_axis_au": 2.188584204499729,
"eccentricity": 0.1153701977575953,
"inclination_deg": 4.96993346244621,
"orbital_period_days": 1182.614821458139,
"perihelion_au": 1.936086812017446,
"aphelion_au": 2.441081596982012
}
]
}
Try it
GET Trans-Neptunian objects + centaurs https://api.publicuniverse.net/api/v1/tnos?limit=3
Parameters
- limit query · integer
- default 500, minimum 1, maximum 2000
Request
curl example for Trans-Neptunian objects + centaurs
curl -sS 'https://api.publicuniverse.net/api/v1/tnos?limit=3'
JavaScript example for Trans-Neptunian objects + centaurs
const response = await fetch("https://api.publicuniverse.net/api/v1/tnos?limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Trans-Neptunian objects + centaurs
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/tnos?limit=3") as response:
data = json.load(response)
print(data)
Example response
Example response for Trans-Neptunian objects + centaurs
{
"results": [
{
"id": "ast-50713537",
"name": "2015 BX306",
"designation": "(2015 BX306)",
"object_type": "centaur",
"semi_major_axis_au": 5.501079307643905,
"eccentricity": 0.5141655101489397,
"inclination_deg": 11.33318697750316,
"orbital_period_days": 4712.705334679225,
"absolute_magnitude_h": 17
},
{
"id": "ast-54508193",
"name": "2015 HQ409",
"designation": "(2015 HQ409)",
"object_type": "centaur",
"semi_major_axis_au": 5.503186767696715,
"eccentricity": 0.1158115870019567,
"inclination_deg": 5.995076234057173,
"orbital_period_days": 4715.413745748458,
"absolute_magnitude_h": 16.48
},
{
"id": "ast-54534192",
"name": "2015 HK471",
"designation": "(2015 HK471)",
"object_type": "centaur",
"semi_major_axis_au": 5.505493476375868,
"eccentricity": 0.1319800399609929,
"inclination_deg": 6.718810797817242,
"orbital_period_days": 4718.378816533536,
"absolute_magnitude_h": 16.96
}
]
}
Try it
GET Fuzzy text search across names/designations/discoverers https://api.publicuniverse.net/api/v1/search?q=Halley&limit=3
Parameters
- q query · string · required
- Search query
- limit query · integer
- default 20, minimum 1, maximum 100
Request
curl example for Fuzzy text search across names/designations/discoverers
curl -sS 'https://api.publicuniverse.net/api/v1/search?q=Halley&limit=3'
JavaScript example for Fuzzy text search across names/designations/discoverers
const response = await fetch("https://api.publicuniverse.net/api/v1/search?q=Halley&limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Fuzzy text search across names/designations/discoverers
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/search?q=Halley&limit=3") as response:
data = json.load(response)
print(data)
Example response
Example response for Fuzzy text search across names/designations/discoverers
{
"query": "Halley",
"results": [
{
"id": "comet-1p-halley",
"name": "Halley",
"designation": "1P/Halley",
"object_type": "comet",
"parent_id": "sun",
"discoverer": null,
"score": -7.134338082894388
},
{
"id": "ast-20002688-halley",
"name": "Halley",
"designation": "2688 Halley (1982 HG1)",
"object_type": "asteroid",
"parent_id": "sun",
"discoverer": "Bowell, E.",
"score": -18.890210400634864
}
]
}
Try it
detail
GET Close approaches of one body to the planets / Moon https://api.publicuniverse.net/api/v1/objects/planet-saturn/close-approaches?limit=3
Parameters
- name_or_designation path · string · required
- from query · string
- to query · string
- body query · string
- limit query · integer
- default 100, minimum 1, maximum 1000
Request
curl example for Close approaches of one body to the planets / Moon
curl -sS 'https://api.publicuniverse.net/api/v1/objects/planet-saturn/close-approaches?limit=3'
JavaScript example for Close approaches of one body to the planets / Moon
const response = await fetch("https://api.publicuniverse.net/api/v1/objects/planet-saturn/close-approaches?limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Close approaches of one body to the planets / Moon
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/objects/planet-saturn/close-approaches?limit=3") as response:
data = json.load(response)
print(data)
Try it
GET Discovery circumstances https://api.publicuniverse.net/api/v1/objects/planet-saturn/discovery
Parameters
- name_or_designation path · string · required
Request
curl example for Discovery circumstances
curl -sS 'https://api.publicuniverse.net/api/v1/objects/planet-saturn/discovery'
JavaScript example for Discovery circumstances
const response = await fetch("https://api.publicuniverse.net/api/v1/objects/planet-saturn/discovery");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Discovery circumstances
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/objects/planet-saturn/discovery") as response:
data = json.load(response)
print(data)
Example response
Example response for Discovery circumstances
[]
Try it
GET Every number, name, provisional and alternate designation https://api.publicuniverse.net/api/v1/objects/planet-saturn/designations
Parameters
- name_or_designation path · string · required
Request
curl example for Every number, name, provisional and alternate designation
curl -sS 'https://api.publicuniverse.net/api/v1/objects/planet-saturn/designations'
JavaScript example for Every number, name, provisional and alternate designation
const response = await fetch("https://api.publicuniverse.net/api/v1/objects/planet-saturn/designations");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Every number, name, provisional and alternate designation
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/objects/planet-saturn/designations") as response:
data = json.load(response)
print(data)
Example response
Example response for Every number, name, provisional and alternate designation
{
"results": []
}
Try it
GET Atmosphere (NASA fact sheet) https://api.publicuniverse.net/api/v1/planets/Saturn/atmosphere
Parameters
- name path · string · required
Request
curl example for Atmosphere (NASA fact sheet)
curl -sS 'https://api.publicuniverse.net/api/v1/planets/Saturn/atmosphere'
JavaScript example for Atmosphere (NASA fact sheet)
const response = await fetch("https://api.publicuniverse.net/api/v1/planets/Saturn/atmosphere");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Atmosphere (NASA fact sheet)
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/planets/Saturn/atmosphere") as response:
data = json.load(response)
print(data)
Example response
Example response for Atmosphere (NASA fact sheet)
{
"object_id": "planet-saturn",
"surface_pressure_bar": 1000,
"pressure_note": ">>1000 bars",
"temperature_k": 134,
"temperature_note": "134 K (-139 C)",
"density_kg_m3": 0.19,
"scale_height_km": 59.5,
"mean_molecular_weight": 2.07,
"wind_note": "Up to 400 m/s (<30 degrees latitude) Up to 150 m/s (>30 degrees latitude)",
"source": "NASA Planetary Fact Sheet",
"composition": [
{
"species": "Molecular hydrogen (H2)",
"fraction": 96.3,
"unit": "%",
"uncertainty": "2.4%"
},
{
"species": "Helium (He)",
"fraction": 3.25,
"unit": "%",
"uncertainty": "2.4%"
},
{
"species": "Methane (CH4)",
"fraction": 4500,
"unit": "ppm",
"uncertainty": "2000"
},
{
"species": "Ammonia (NH3)",
"fraction": 125,
"unit": "ppm",
"uncertainty": "75"
},
{
"species": "Hydrogen Deuteride (HD)",
"fraction": 110,
"unit": "ppm",
"uncertainty": "58"
},
{
"species": "Ethane (C2H6)",
"fraction": 7,
"unit": "ppm",
"uncertainty": "1.5"
}
]
}
Try it
GET All close approaches to a body in a date window, nearest first https://api.publicuniverse.net/api/v1/close-approaches?from=2026-10-01&to=2026-10-31&limit=3
Parameters
- from query · string · required
- ISO date
- to query · string · required
- ISO date
- body query · string
- default Earth
- max_dist_au query · number
- default 0.05, maximum 1
- limit query · integer
- default 200, minimum 1, maximum 1000
Request
curl example for All close approaches to a body in a date window, nearest first
curl -sS 'https://api.publicuniverse.net/api/v1/close-approaches?from=2026-10-01&to=2026-10-31&limit=3'
JavaScript example for All close approaches to a body in a date window, nearest first
const response = await fetch("https://api.publicuniverse.net/api/v1/close-approaches?from=2026-10-01&to=2026-10-31&limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for All close approaches to a body in a date window, nearest first
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/close-approaches?from=2026-10-01&to=2026-10-31&limit=3") as response:
data = json.load(response)
print(data)
Try it
GET One IAU meteor shower by code or name https://api.publicuniverse.net/api/v1/meteor-showers/GEM
Parameters
- code path · string · required
Request
curl example for One IAU meteor shower by code or name
curl -sS 'https://api.publicuniverse.net/api/v1/meteor-showers/GEM'
JavaScript example for One IAU meteor shower by code or name
const response = await fetch("https://api.publicuniverse.net/api/v1/meteor-showers/GEM");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for One IAU meteor shower by code or name
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/meteor-showers/GEM") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for One IAU meteor shower by code or name
{
"iau_no": 4,
"code": "GEM",
"name": "Geminids",
"status_label": "single established shower, group",
"parameter_sets": [
{
"iau_no": 4,
"ad_no": 0,
"code": "GEM",
"name": "Geminids",
"status_code": 1,
"status_label": "single established shower, group",
"activity": "annual",
"solar_longitude_deg": 262.1,
"ra_deg": 113.2,
"dec_deg": 32.5,
"dra_deg_per_day": 1.02,
"ddec_deg_per_day": -0.15,
"vg_km_s": 34.58,
"a_au": 1.372,
"q_au": 0.141,
"e": null,
"peri_deg": 324.42,
"node_deg": 261.49,
"incl_deg": 24.02,
"n_members": 221,
"shower_group": "00000",
"parent_body": "3200 Phaethon (=1983 TB)",
"parent_object_id": "ast-20003200-phaethon",
"technique": "P",
"reference": "1) Dutch Meteor Society 2001",
"submitted_on": "SD",
"source": "IAU Meteor Data Center (Jenniskens et al. 2020; Hajdukova & Rudawska)"
},
{
"iau_no": 4,
"ad_no": 1,
"code": "GEM",
"name": "Geminids",
"status_code": 1,
"status_label": "single established shower, group",
"activity": "annual",
"solar_longitude_deg": 261.6,
"ra_deg": 112.9,
"dec_deg": 32.3,
"dra_deg_per_day": null,
"ddec_deg_per_day": null,
"vg_km_s": 34.6,
"a_au": null,
"q_au": 0.141,
"e": 0.898,
"peri_deg": 324.2,
"node_deg": 261.6,
"incl_deg": 23.5,
"n_members": 51,
"shower_group": "00000",
"parent_body": "3200 Phaethon (=1983 TB)",
"parent_object_id": "ast-20003200-phaethon",
"technique": "P",
"reference": "2) <A href='http://adsabs.harvard.edu/abs/2003MNRAS.344..665J' target=_blank>Jopek et al., 2003</A>",
"submitted_on": "SD",
"source": "IAU Meteor Data Center (Jenniskens et al. 2020; Hajdukova & Rudawska)"
},
{
"iau_no": 4,
"ad_no": 2,
"code": "GEM",
"name": "Geminids",
"status_code": 1,
"status_label": "single established shower, group",
"activity": "2002/06",
"solar_longitude_deg": 261.5,
"ra_deg": 112.8,
"dec_deg": 32.1,
"dra_deg_per_day": 1.1,
"ddec_deg_per_day": -0.17,
"vg_km_s": 35,
"a_au": 1.416,
"q_au": 0.136,
"e": 0.904,
"peri_deg": 324.6,
"node_deg": 261.3,
"incl_deg": 24,
"n_members": 4384,
"shower_group": "00000",
"parent_body": "3200 Phaethon (=1983 TB)",
"parent_object_id": "ast-20003200-phaethon",
"technique": "R",
"reference": "3) <A href='http://adsabs.harvard.edu/abs/2008Icar..195..317B' target=_blank>Brown et al., 2008</A>",
"submitted_on": "SD",
"source": "IAU Meteor Data Center (Jenniskens et al. 2020; Hajdukova & Rudawska)"
},
{
"iau_no": 4,
"ad_no": 3,
"code": "GEM",
"name": "Geminids",
"status_cod
Try it
observing catalogues
GET List Starter Targets https://api.publicuniverse.net/api/v1/starter-targets?limit=3
Parameters
- family query · string
- q query · string
- limit query · integer
- default 50, minimum 1, maximum 200
- offset query · integer
- default 0, minimum 0, maximum 1000
Request
curl example for List Starter Targets
curl -sS 'https://api.publicuniverse.net/api/v1/starter-targets?limit=3'
JavaScript example for List Starter Targets
const response = await fetch("https://api.publicuniverse.net/api/v1/starter-targets?limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for List Starter Targets
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/starter-targets?limit=3") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for List Starter Targets
{
"available": true,
"results": [
{
"id": "bsc5p:hr1017",
"name": "HR 1017",
"aliases": [
"33Alp Per"
],
"families": [
"bright_star"
],
"object_type": "star",
"ra_deg": 51.0808,
"dec_deg": 49.8611,
"coordinate_equinox": "J2000.0",
"coordinate_epoch": "J2000.0 reference epoch; individual observation epoch not reported",
"magnitude": 1.79,
"magnitude_band": "V (BSC5P; retain code/uncertainty flags)",
"magnitude_flag": null,
"magnitude_code": null,
"major_axis_arcmin": null,
"minor_axis_arcmin": null,
"components": null,
"separation_arcsec": null,
"separation_epoch": null,
"position_angle_deg": null,
"source": "bsc5p",
"source_data": {
"ads": "",
"ads_comp": "",
"alt_name": "33Alp Per",
"bii": "-5.8624",
"bv_color": "0.48",
"bv_uncert": "",
"cdec": "+495140",
"cdec_1950": "+494105",
"class": "2451",
"cra": "032419.4",
"cra_1950": "032044.6",
"dec": "49.8611",
"dec_1900": "49.50000000053",
"dec_1950": "49.6846",
"dm_cat": "BD",
"dm_num": "+49 917",
"fk5": "120",
"glat": "-5.86",
"glon": "146.57",
"hd": "20902",
"hr": "1017",
"ir_flag": "I",
"lii": "146.569",
"m_cnt": "",
"m_id": "",
"m_mdiff": "10",
"m_sep": "167",
"multiple": "W",
"name": "HR 1017",
"note": "*",
"par_code": "",
"parallax": "0.016",
"pmdec": "-0.025",
"pmra": "0.024",
"ra": "51.0808",
"ra_1900": "49.29500000079",
"ra_1950": "50.1858",
"radvel": "-2",
"radvel_comm": "V",
"ri_code": "",
"ri_color": "0.33",
"rotvel": "18",
"rotvel_comm": "",
"rotvel_uncert": "",
"sao": "38787",
"spect_code": "",
"spect_type": "F5Ib",
"ub_color": "0.37",
"ub_uncert": "",
"var_id": "1125",
"vmag": "1.79",
"vmag_code": "",
"vmag_uncert": ""
},
"astrometry": {
"status": "verified",
"frame": "FK5",
"equinox": "J2000.0",
"reference_epoch_jyear": 2000,
"observation_epoch_jyear": null,
"pm_ra_cosdec_arcsec_per_year": 0.024,
"pm_dec_arcsec_per_year": -0.025,
"motion_model": "linear_angular_proper_motion",
"coordinates_propagated": false,
"evidence_source": "bsc5p",
"matched_identifier": "1017",
"unsupported_reason": null
}
},
{
"id": "bsc5p:hr1457",
"name": "HR 1457",
"aliases"
Try it
GET Get Starter Target https://api.publicuniverse.net/api/v1/starter-targets/bsc5p%3Ahr1017
Parameters
- target_id path · string · required
Request
curl example for Get Starter Target
curl -sS 'https://api.publicuniverse.net/api/v1/starter-targets/bsc5p%3Ahr1017'
JavaScript example for Get Starter Target
const response = await fetch("https://api.publicuniverse.net/api/v1/starter-targets/bsc5p%3Ahr1017");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Get Starter Target
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/starter-targets/bsc5p%3Ahr1017") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for Get Starter Target
{
"id": "bsc5p:hr1017",
"name": "HR 1017",
"aliases": [
"33Alp Per"
],
"families": [
"bright_star"
],
"object_type": "star",
"ra_deg": 51.0808,
"dec_deg": 49.8611,
"coordinate_equinox": "J2000.0",
"coordinate_epoch": "J2000.0 reference epoch; individual observation epoch not reported",
"magnitude": 1.79,
"magnitude_band": "V (BSC5P; retain code/uncertainty flags)",
"magnitude_flag": null,
"magnitude_code": null,
"major_axis_arcmin": null,
"minor_axis_arcmin": null,
"components": null,
"separation_arcsec": null,
"separation_epoch": null,
"position_angle_deg": null,
"source": "bsc5p",
"source_data": {
"ads": "",
"ads_comp": "",
"alt_name": "33Alp Per",
"bii": "-5.8624",
"bv_color": "0.48",
"bv_uncert": "",
"cdec": "+495140",
"cdec_1950": "+494105",
"class": "2451",
"cra": "032419.4",
"cra_1950": "032044.6",
"dec": "49.8611",
"dec_1900": "49.50000000053",
"dec_1950": "49.6846",
"dm_cat": "BD",
"dm_num": "+49 917",
"fk5": "120",
"glat": "-5.86",
"glon": "146.57",
"hd": "20902",
"hr": "1017",
"ir_flag": "I",
"lii": "146.569",
"m_cnt": "",
"m_id": "",
"m_mdiff": "10",
"m_sep": "167",
"multiple": "W",
"name": "HR 1017",
"note": "*",
"par_code": "",
"parallax": "0.016",
"pmdec": "-0.025",
"pmra": "0.024",
"ra": "51.0808",
"ra_1900": "49.29500000079",
"ra_1950": "50.1858",
"radvel": "-2",
"radvel_comm": "V",
"ri_code": "",
"ri_color": "0.33",
"rotvel": "18",
"rotvel_comm": "",
"rotvel_uncert": "",
"sao": "38787",
"spect_code": "",
"spect_type": "F5Ib",
"ub_color": "0.37",
"ub_uncert": "",
"var_id": "1125",
"vmag": "1.79",
"vmag_code": "",
"vmag_uncert": ""
},
"astrometry": {
"status": "verified",
"frame": "FK5",
"equinox": "J2000.0",
"reference_epoch_jyear": 2000,
"observation_epoch_jyear": null,
"pm_ra_cosdec_arcsec_per_year": 0.024,
"pm_dec_arcsec_per_year": -0.025,
"motion_model": "linear_angular_proper_motion",
"coordinates_propagated": false,
"evidence_source": "bsc5p",
"matched_identifier": "1017",
"unsupported_reason": null
},
"provenance": {
"schema_version": 1,
"source": "bsc5p",
"source_url": "https://heasarc.gsfc.nasa.gov/FTP/heasarc/dbase/tdat_files/heasarc_bsc5p.tdat.gz",
"retrieved_at": "2026-10-01T21:40:09.869946+00:00",
"license": "NASA government-works; HEASARC free-use policy",
"selection": "Vmag <= 2.0, excluding 14 documented nonstellar HR identifiers",
"upstream_sha256": {
"bsc5p.tdat": "e2b2f8e9d615426f9478f88061235976143d49d8b25c6c15df3f3661c7095b53"
},
"attribution": "Hoffleit and Warren (1991), Bright Star Catalog, 5th revised preliminary edition; NASA/GSFC HEASARC",
"license_url": "https://heasarc.gsfc.nasa.gov/docs/heasarc/data_policy.html",
"snapshot_sha256": "7fe926d80b535f9422ca81f8f3fee1d6422de29adaecfbd2f14b1a93fe5134b9",
"astrometry_evidence": {
"file": "vizier-v
Try it
exoplanets
GET List Exoplanets https://api.publicuniverse.net/api/v1/exoplanets?limit=3
Parameters
- q query · string
- discovery_method query · string
- max_distance_pc query · number
- limit query · integer
- default 50, minimum 1, maximum 1000
- offset query · integer
- default 0, minimum 0, maximum 100000
Request
curl example for List Exoplanets
curl -sS 'https://api.publicuniverse.net/api/v1/exoplanets?limit=3'
JavaScript example for List Exoplanets
const response = await fetch("https://api.publicuniverse.net/api/v1/exoplanets?limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for List Exoplanets
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/exoplanets?limit=3") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for List Exoplanets
{
"available": true,
"results": [
{
"id": "exo-7935f726449d233aec89",
"name": "11 Com b",
"host_id": "host-22fe7521aec0bdbd6317",
"discovery_method": "Radial Velocity",
"discovery_year": 2007,
"radius_earth": 12.2,
"mass_earth": 4914.89848585,
"mass_provenance": "Msini",
"period_days": 323.21,
"semi_major_axis_au": 1.178,
"equilibrium_temperature_k": 803.26,
"controversial": 0,
"source": "NASA Exoplanet Archive / PSCompPars (doi:10.26133/NEA13)",
"source_url": "https://exoplanetarchive.ipac.caltech.edu/overview/11%20Com%20b",
"retrieved_at": "2026-10-24T04:15:14.282228+00:00",
"source_data": {
"pl_name": "11 Com b",
"hostname": "11 Com",
"discoverymethod": "Radial Velocity",
"disc_year": 2007,
"disc_refname": "<a refstr=LIU_ET_AL__2008 href=https://ui.adsabs.harvard.edu/abs/2008ApJ...672..553L/abstract target=ref> Liu et al. 2008 </a>",
"pl_controv_flag": 0,
"pl_bmassprov": "Msini",
"sy_snum": 2,
"sy_pnum": 1,
"cb_flag": 0,
"gaia_dr3_id": "Gaia DR3 3946945413106333696",
"ra": 185.1787793,
"dec": 17.7932516,
"ra_reflink": "<a refstr=STASSUN_ET_AL__2019 href=https://ui.adsabs.harvard.edu/abs/2019AJ....158..138S/abstract target=ref>TICv8</a>",
"dec_reflink": "<a refstr=STASSUN_ET_AL__2019 href=https://ui.adsabs.harvard.edu/abs/2019AJ....158..138S/abstract target=ref>TICv8</a>",
"sy_dist": 93.1846,
"sy_disterr1": 1.9238,
"sy_disterr2": -1.9238,
"sy_distlim": 0,
"sy_dist_reflink": "<a refstr=STASSUN_ET_AL__2019 href=https://ui.adsabs.harvard.edu/abs/2019AJ....158..138S/abstract target=ref>TICv8</a>",
"pl_rade": 12.2,
"pl_radeerr1": null,
"pl_radeerr2": null,
"pl_radelim": 0,
"pl_rade_reflink": "<a refstr=CALCULATED_VALUE href=/docs/pscp_calc.html target=_blank>Calculated Value</a>",
"pl_bmasse": 4914.89848585,
"pl_bmasseerr1": 39.09289406,
"pl_bmasseerr2": -39.72855088,
"pl_bmasselim": 0,
"pl_bmasse_reflink": "<a refstr=TENG_ET_AL_2023 href=https://ui.adsabs.harvard.edu/abs/2023PASJ...75.1030T/abstract target=ref>Teng et al. 2023</a>",
"pl_orbper": 323.21,
"pl_orbpererr1": 0.06,
"pl_orbpererr2": -0.05,
"pl_orbperlim": 0,
"pl_orbper_reflink": "<a refstr=TENG_ET_AL_2023 href=https://ui.adsabs.harvard.edu/abs/2023PASJ...75.1030T/abstract target=ref>Teng et al. 2023</a>",
"pl_orbsmax": 1.178,
"pl_orbsmaxerr1": 0,
"pl_orbsmaxerr2": 0,
"pl_orbsmaxlim": 0,
"pl_orbsmax_reflink": "<a refstr=TENG_ET_AL_2023 href=https://ui.adsabs.harvard.edu/abs/2023PASJ...75.1030T/abstract target=ref>Teng et al. 2023</a>",
"pl_eqt": 803.26,
"pl_eqterr1": null,
"pl_eqterr2": null,
"pl_eqtlim": 0,
"pl_eqt_reflink": "<a refstr=CALCULATED_VALUE href=/docs/pscp_
Try it
GET Get Exoplanet https://api.publicuniverse.net/api/v1/exoplanets/Proxima%20Cen%20b
Parameters
- name path · string · required
Request
curl example for Get Exoplanet
curl -sS 'https://api.publicuniverse.net/api/v1/exoplanets/Proxima%20Cen%20b'
JavaScript example for Get Exoplanet
const response = await fetch("https://api.publicuniverse.net/api/v1/exoplanets/Proxima%20Cen%20b");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Get Exoplanet
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/exoplanets/Proxima%20Cen%20b") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for Get Exoplanet
{
"id": "exo-32080c26d1599e72fccf",
"name": "Proxima Cen b",
"host_id": "host-1a11a204739d95cb0e20",
"discovery_method": "Radial Velocity",
"discovery_year": 2016,
"radius_earth": 1.02,
"mass_earth": 1.055,
"mass_provenance": "Msini",
"period_days": 11.18465,
"semi_major_axis_au": 0.04848,
"equilibrium_temperature_k": 218,
"controversial": 0,
"source": "NASA Exoplanet Archive / PSCompPars (doi:10.26133/NEA13)",
"source_url": "https://exoplanetarchive.ipac.caltech.edu/overview/Proxima%20Cen%20b",
"retrieved_at": "2026-10-24T04:15:14.282228+00:00",
"source_data": {
"pl_name": "Proxima Cen b",
"hostname": "Proxima Cen",
"discoverymethod": "Radial Velocity",
"disc_year": 2016,
"disc_refname": "<a refstr=ANGLADA_ESCUD_EACUTE__ET_AL__2016 href=https://ui.adsabs.harvard.edu/abs/2016Natur.536..437A/abstract target=ref>Anglada-Escudé et al. 2016</a>",
"pl_controv_flag": 0,
"pl_bmassprov": "Msini",
"sy_snum": 3,
"sy_pnum": 2,
"cb_flag": 0,
"gaia_dr3_id": "Gaia DR3 5853498713190525696",
"ra": 217.3934657,
"dec": -62.6761821,
"ra_reflink": "<a refstr=STASSUN_ET_AL__2019 href=https://ui.adsabs.harvard.edu/abs/2019AJ....158..138S/abstract target=ref>TICv8</a>",
"dec_reflink": "<a refstr=STASSUN_ET_AL__2019 href=https://ui.adsabs.harvard.edu/abs/2019AJ....158..138S/abstract target=ref>TICv8</a>",
"sy_dist": 1.30119,
"sy_disterr1": 0.00034,
"sy_disterr2": -0.00035,
"sy_distlim": 0,
"sy_dist_reflink": "<a refstr=STASSUN_ET_AL__2019 href=https://ui.adsabs.harvard.edu/abs/2019AJ....158..138S/abstract target=ref>TICv8</a>",
"pl_rade": 1.02,
"pl_radeerr1": null,
"pl_radeerr2": null,
"pl_radelim": 0,
"pl_rade_reflink": "<a refstr=CALCULATED_VALUE href=/docs/pscp_calc.html target=_blank>Calculated Value</a>",
"pl_bmasse": 1.055,
"pl_bmasseerr1": 0.055,
"pl_bmasseerr2": -0.055,
"pl_bmasselim": 0,
"pl_bmasse_reflink": "<a refstr=SU_AMP_AACUTE_REZ_MASCARE_AMP_NTILDE_O_ET_AL__2025 href=https://ui.adsabs.harvard.edu/abs/2025A&A...700A..11M/abstract target=ref>Suárez Mascareño et al. 2025</a>",
"pl_orbper": 11.18465,
"pl_orbpererr1": 0.00053,
"pl_orbpererr2": -0.00053,
"pl_orbperlim": 0,
"pl_orbper_reflink": "<a refstr=SU_AMP_AACUTE_REZ_MASCARE_AMP_NTILDE_O_ET_AL__2025 href=https://ui.adsabs.harvard.edu/abs/2025A&A...700A..11M/abstract target=ref>Suárez Mascareño et al. 2025</a>",
"pl_orbsmax": 0.04848,
"pl_orbsmaxerr1": 0.00029,
"pl_orbsmaxerr2": -0.00029,
"pl_orbsmaxlim": 0,
"pl_orbsmax_reflink": "<a refstr=SU_AMP_AACUTE_REZ_MASCARE_AMP_NTILDE_O_ET_AL__2025 href=https://ui.adsabs.harvard.edu/abs/2025A&A...700A..11M/abstract target=ref>Suárez Mascareño et al. 2025</a>",
"pl_eqt": 218,
"pl_eqterr1": 18,
"pl_eqterr2": -18,
"pl_eqtlim": 0,
"pl_eqt_reflink": "<a refstr=SU_AMP_AACUTE_REZ_MASCARE_AMP_NTILDE_O_ET_AL__2025 href=https://ui.adsabs.harvard.edu/abs/2025A&A...700A..11M/abstract target=ref>Suárez Mascareño et al. 2025</a>",
"st_teff": 2900,
"st_tefferr1": 100,
"st_tefferr2": -100,
"st_tefflim": 0,
"st_teff_reflink": "<a refstr=SU_AMP_AACUTE_REZ
Try it
GET Get Exoplanet Host https://api.publicuniverse.net/api/v1/exoplanet-hosts/Proxima%20Cen
Parameters
- name path · string · required
Request
curl example for Get Exoplanet Host
curl -sS 'https://api.publicuniverse.net/api/v1/exoplanet-hosts/Proxima%20Cen'
JavaScript example for Get Exoplanet Host
const response = await fetch("https://api.publicuniverse.net/api/v1/exoplanet-hosts/Proxima%20Cen");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Get Exoplanet Host
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/exoplanet-hosts/Proxima%20Cen") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for Get Exoplanet Host
{
"id": "host-1a11a204739d95cb0e20",
"name": "Proxima Cen",
"ra_deg": 217.3934657,
"dec_deg": -62.6761821,
"distance_pc": 1.30119,
"distance_error_plus_pc": 0.00034,
"distance_error_minus_pc": -0.00035,
"x_pc": 0.9021663308151595,
"y_pc": -0.936640084236698,
"z_pc": -0.04355089258078132,
"galactocentric_x_pc": -8121.071315090504,
"galactocentric_y_pc": -0.9366408594667782,
"galactocentric_z_pc": 20.75413876894171,
"coordinate_source_planet": "Proxima Cen b",
"coordinate_metadata": {
"input": "ICRS; archive catalogue coordinates, no proper-motion propagation",
"heliocentric": "Galactic Cartesian: x toward Galactic centre, y toward l=90 deg, z north",
"unit": "pc",
"galactocentric": {
"galcen_distance_pc": 8122,
"z_sun_pc": 20.8,
"roll_deg": 0,
"galcen_ra_deg": 266.4051,
"galcen_dec_deg": -28.936175
},
"astropy_version": "8.0.2"
},
"source": "NASA Exoplanet Archive / PSCompPars (doi:10.26133/NEA13)",
"retrieved_at": "2026-10-24T04:15:14.282228+00:00",
"planets": [
{
"id": "exo-32080c26d1599e72fccf",
"name": "Proxima Cen b",
"host_id": "host-1a11a204739d95cb0e20",
"discovery_method": "Radial Velocity",
"discovery_year": 2016,
"radius_earth": 1.02,
"mass_earth": 1.055,
"mass_provenance": "Msini",
"period_days": 11.18465,
"semi_major_axis_au": 0.04848,
"equilibrium_temperature_k": 218,
"controversial": 0,
"source": "NASA Exoplanet Archive / PSCompPars (doi:10.26133/NEA13)",
"source_url": "https://exoplanetarchive.ipac.caltech.edu/overview/Proxima%20Cen%20b",
"retrieved_at": "2026-10-24T04:15:14.282228+00:00",
"source_data": {
"pl_name": "Proxima Cen b",
"hostname": "Proxima Cen",
"discoverymethod": "Radial Velocity",
"disc_year": 2016,
"disc_refname": "<a refstr=ANGLADA_ESCUD_EACUTE__ET_AL__2016 href=https://ui.adsabs.harvard.edu/abs/2016Natur.536..437A/abstract target=ref>Anglada-Escudé et al. 2016</a>",
"pl_controv_flag": 0,
"pl_bmassprov": "Msini",
"sy_snum": 3,
"sy_pnum": 2,
"cb_flag": 0,
"gaia_dr3_id": "Gaia DR3 5853498713190525696",
"ra": 217.3934657,
"dec": -62.6761821,
"ra_reflink": "<a refstr=STASSUN_ET_AL__2019 href=https://ui.adsabs.harvard.edu/abs/2019AJ....158..138S/abstract target=ref>TICv8</a>",
"dec_reflink": "<a refstr=STASSUN_ET_AL__2019 href=https://ui.adsabs.harvard.edu/abs/2019AJ....158..138S/abstract target=ref>TICv8</a>",
"sy_dist": 1.30119,
"sy_disterr1": 0.00034,
"sy_disterr2": -0.00035,
"sy_distlim": 0,
"sy_dist_reflink": "<a refstr=STASSUN_ET_AL__2019 href=https://ui.adsabs.harvard.edu/abs/2019AJ....158..138S/abstract target=ref>TICv8</a>",
"pl_rade": 1.02,
"pl_radeerr1": null,
"pl_radeerr2": null,
"pl_radelim": 0,
"pl_rade_reflink": "<a refstr=CALCULATED_VALUE href=/docs/pscp_calc.html target=_blank>Calculated Value</a>",
Try it
GET Measured exoplanet host positions in parsecs https://api.publicuniverse.net/api/v1/galaxy?limit=3
Parameters
- max_distance_pc query · number
- limit query · integer
- default 10000, minimum 1, maximum 10000
Request
curl example for Measured exoplanet host positions in parsecs
curl -sS 'https://api.publicuniverse.net/api/v1/galaxy?limit=3'
JavaScript example for Measured exoplanet host positions in parsecs
const response = await fetch("https://api.publicuniverse.net/api/v1/galaxy?limit=3");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Measured exoplanet host positions in parsecs
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/galaxy?limit=3") as response:
data = json.load(response)
print(data)
Example response
Example response for Measured exoplanet host positions in parsecs
{
"available": true,
"results": [
{
"id": "host-1a11a204739d95cb0e20",
"name": "Proxima Cen",
"distance_pc": 1.30119,
"distance_error_plus_pc": 0.00034,
"distance_error_minus_pc": -0.00035,
"x_pc": 0.9021663308151595,
"y_pc": -0.936640084236698,
"z_pc": -0.04355089258078132,
"galactocentric_x_pc": -8121.071315090504,
"galactocentric_y_pc": -0.9366408594667782,
"galactocentric_z_pc": 20.75413876894171,
"planet_count": 2
},
{
"id": "host-934a924fc168f6d7760f",
"name": "Barnard's star",
"distance_pc": 1.82655,
"distance_error_plus_pc": 0.000975,
"distance_error_minus_pc": -0.000975,
"x_pc": 1.517815555232836,
"y_pc": 0.9137325537463832,
"z_pc": 0.444537583357522,
"galactocentric_x_pc": -8120.454416885091,
"galactocentric_y_pc": 0.9137304889067035,
"galactocentric_z_pc": 21.2406525966418,
"planet_count": 4
},
{
"id": "host-89f58465a7285aa15823",
"name": "eps Eri",
"distance_pc": 3.2026,
"distance_error_plus_pc": 0.00483,
"distance_error_minus_pc": -0.00483,
"x_pc": -2.0593770534223523,
"y_pc": -0.5843504258598228,
"z_pc": -2.382046912139831,
"galactocentric_x_pc": -8124.038833858898,
"galactocentric_y_pc": -0.5843450113573769,
"galactocentric_z_pc": 18.42323103841166,
"planet_count": 1
}
],
"frame": {
"input": "ICRS; archive catalogue coordinates, no proper-motion propagation",
"heliocentric": "Galactic Cartesian: x toward Galactic centre, y toward l=90 deg, z north",
"unit": "pc",
"galactocentric": {
"galcen_distance_pc": 8122,
"z_sun_pc": 20.8,
"roll_deg": 0,
"galcen_ra_deg": 266.4051,
"galcen_dec_deg": -28.936175
}
},
"total_hosts": 4847,
"mapped_hosts": 4819,
"unmapped_hosts": 28,
"matching_hosts": 4819,
"truncated": true
}
Try it
reference
GET Where to get the whole database as one file https://api.publicuniverse.net/api/v1/download
This operation takes no parameters.
Request
curl example for Where to get the whole database as one file
curl -sS 'https://api.publicuniverse.net/api/v1/download'
JavaScript example for Where to get the whole database as one file
const response = await fetch("https://api.publicuniverse.net/api/v1/download");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Where to get the whole database as one file
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/download") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for Where to get the whole database as one file
{
"artefact": "solar_system-20261024.sqlite.zst",
"url": "https://download.sol.wickedsick.com/solar_system-20261024.sqlite.zst",
"size_bytes": 1100300527,
"sha256": "b4ca2a77f386186496940ce1115e957f4f7b979c38062c4ae0d21c96adedaeb5",
"sqlite_sha256": "7d2a34b20a63129bd1e9a5457ccb6d4847fd1c60438a13d821c51e93ec4be246",
"catalogue_identity": {
"build": {
"finished_at": "2026-10-24T04:28:47Z",
"mode": "full",
"started_at": "2026-10-24T03:03:46Z"
},
"build_identifier": "sha256:863575869c85ed9c873ace94bba4fc90a5e0cb1ded81ee21e248bf274c518b35",
"built_at": "2026-10-24T04:28:47Z",
"catalogue_id": "sha256:2c7d4001a13d6a3f3bb20d28b09d1b2d91f3a9dfa33a5e5f258ad6d9852e2170",
"hash_policy": "catalogue-logical-v1",
"reason": null,
"row_counts": {
"atmospheres": 9,
"classifications": 1652464,
"close_approaches": 4045369,
"designations": 4583059,
"discoveries": 896109,
"exoplanet_hosts": 4847,
"exoplanets": 6451,
"impact_monitoring": 1580021,
"meteor_showers": 1497,
"objects": 1581076,
"orbital_elements": 1581074,
"physical_properties": 1581076,
"radar_observations": 4714,
"rings": 32,
"sources": 3480285,
"starter_sources": 2,
"starter_targets": 158,
"visual_properties": 1581069
},
"schema_sha256": "3657985bc6aa87fcdb684848bbbeaf39da6f4cb3be95352be09f31c7a203d951",
"schema_version": 1,
"source_manifest": {
"builder": {
"enrichment_store_requested": true,
"options": {
"cad_years": 200,
"offline": false,
"skip_cad": false,
"skip_exoplanets": false,
"skip_mpc": false,
"skip_showers": false
},
"revision": null,
"source_files": [
{
"name": "schema/schema.sql",
"sha256": "7d932e8d137840da14ce48fd4e2ac345669f576703291f3c4b976d9b076dfa8e"
},
{
"name": "scripts/__init__.py",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"name": "scripts/benchmark_catalogue_finalization.py",
"sha256": "3018d21db9d74b6e5588c14edaa2f7d786d28fd9fce3344d86932488e8573295"
},
{
"name": "scripts/build_full.py",
"sha256": "bddb05f94d6a8ec283bb09554f900ea09401302bef5272e023204bde163c7468"
},
{
"name": "scripts/catalogue_provenance.py",
"sha256": "09eeab48c085b6e30f6cc8f7fc9d6e2643d08b2d1e8f0e0f0b8144bfaca67b22"
},
{
"name": "scripts/common.py",
"sha256": "8fe5812e2c8c0665be58cdda5d0ff779f3ea138c582c836825149764f74129cc"
},
{
"name": "scripts/enrich_crawler.py",
"sha256": "07a48d3c4916adc2f430b743b
Try it
GET Finalized catalogue identity and recorded source provenance https://api.publicuniverse.net/api/v1/catalogue
This operation takes no parameters.
Request
curl example for Finalized catalogue identity and recorded source provenance
curl -sS 'https://api.publicuniverse.net/api/v1/catalogue'
JavaScript example for Finalized catalogue identity and recorded source provenance
const response = await fetch("https://api.publicuniverse.net/api/v1/catalogue");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Finalized catalogue identity and recorded source provenance
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/catalogue") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for Finalized catalogue identity and recorded source provenance
{
"build": {
"finished_at": "2026-10-24T04:28:47Z",
"mode": "full",
"started_at": "2026-10-24T03:03:46Z"
},
"build_identifier": "sha256:863575869c85ed9c873ace94bba4fc90a5e0cb1ded81ee21e248bf274c518b35",
"built_at": "2026-10-24T04:28:47Z",
"catalogue_id": "sha256:2c7d4001a13d6a3f3bb20d28b09d1b2d91f3a9dfa33a5e5f258ad6d9852e2170",
"hash_policy": "catalogue-logical-v1",
"reason": null,
"row_counts": {
"atmospheres": 9,
"classifications": 1652464,
"close_approaches": 4045369,
"designations": 4583059,
"discoveries": 896109,
"exoplanet_hosts": 4847,
"exoplanets": 6451,
"impact_monitoring": 1580021,
"meteor_showers": 1497,
"objects": 1581076,
"orbital_elements": 1581074,
"physical_properties": 1581076,
"radar_observations": 4714,
"rings": 32,
"sources": 3480285,
"starter_sources": 2,
"starter_targets": 158,
"visual_properties": 1581069
},
"schema_sha256": "3657985bc6aa87fcdb684848bbbeaf39da6f4cb3be95352be09f31c7a203d951",
"schema_version": 1,
"source_manifest": {
"builder": {
"enrichment_store_requested": true,
"options": {
"cad_years": 200,
"offline": false,
"skip_cad": false,
"skip_exoplanets": false,
"skip_mpc": false,
"skip_showers": false
},
"revision": null,
"source_files": [
{
"name": "schema/schema.sql",
"sha256": "7d932e8d137840da14ce48fd4e2ac345669f576703291f3c4b976d9b076dfa8e"
},
{
"name": "scripts/__init__.py",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"name": "scripts/benchmark_catalogue_finalization.py",
"sha256": "3018d21db9d74b6e5588c14edaa2f7d786d28fd9fce3344d86932488e8573295"
},
{
"name": "scripts/build_full.py",
"sha256": "bddb05f94d6a8ec283bb09554f900ea09401302bef5272e023204bde163c7468"
},
{
"name": "scripts/catalogue_provenance.py",
"sha256": "09eeab48c085b6e30f6cc8f7fc9d6e2643d08b2d1e8f0e0f0b8144bfaca67b22"
},
{
"name": "scripts/common.py",
"sha256": "8fe5812e2c8c0665be58cdda5d0ff779f3ea138c582c836825149764f74129cc"
},
{
"name": "scripts/enrich_crawler.py",
"sha256": "07a48d3c4916adc2f430b743b9fbdd6bb461928105e58cb34604cb8310911118"
},
{
"name": "scripts/ingest_cad.py",
"sha256": "13168d9e67f0b6e317d06dc170c1c03d9d96d463fe906113852ee8eb4c75b6fc"
},
{
"name": "scripts/ingest_enrichment.py",
"sha256": "40178e4f48bd29e463d55aebebf8226bdebec7d523c1247fa58ac040360b869e"
},
{
"name": "scripts/ingest_exoplanets.py",
"sha256": "85c5be04c073d339c18b6a228e209167977df31e08ff7ea84539a24e0ad57167"
},
{
Try it
GET Object types present in the catalogue and their counts https://api.publicuniverse.net/api/v1/object-types
This operation takes no parameters.
Request
curl example for Object types present in the catalogue and their counts
curl -sS 'https://api.publicuniverse.net/api/v1/object-types'
JavaScript example for Object types present in the catalogue and their counts
const response = await fetch("https://api.publicuniverse.net/api/v1/object-types");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Object types present in the catalogue and their counts
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/object-types") as response:
data = json.load(response)
print(data)
Example response
Example response for Object types present in the catalogue and their counts
{
"results": [
{
"object_type": "asteroid",
"n": 1567751
},
{
"object_type": "tno",
"n": 7660
},
{
"object_type": "comet",
"n": 4082
},
{
"object_type": "centaur",
"n": 1071
},
{
"object_type": "moon",
"n": 493
},
{
"object_type": "planet",
"n": 8
},
{
"object_type": "dwarf_planet",
"n": 5
},
{
"object_type": "dwarf_planet_candidate",
"n": 5
},
{
"object_type": "star",
"n": 1
}
]
}
Try it
GET Upstream data sources + last-retrieved timestamps https://api.publicuniverse.net/api/v1/sources
This operation takes no parameters.
Request
curl example for Upstream data sources + last-retrieved timestamps
curl -sS 'https://api.publicuniverse.net/api/v1/sources'
JavaScript example for Upstream data sources + last-retrieved timestamps
const response = await fetch("https://api.publicuniverse.net/api/v1/sources");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Upstream data sources + last-retrieved timestamps
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/sources") as response:
data = json.load(response)
print(data)
Example response
Example response for Upstream data sources + last-retrieved timestamps
{
"results": [
{
"source_name": "JPL SBDB (lookup)",
"n": 1898735,
"first_seen": "2026-10-24T04:16:12Z",
"last_seen": "2026-10-24T04:28:13Z"
},
{
"source_name": "JPL SBDB",
"n": 1580573,
"first_seen": "2026-10-24T03:03:53Z",
"last_seen": "2026-10-24T03:23:44Z"
},
{
"source_name": "JPL Solar System Dynamics — planetary satellites",
"n": 506,
"first_seen": "2026-10-24T03:03:48Z",
"last_seen": "2026-10-24T03:03:48Z"
},
{
"source_name": "JPL CAD",
"n": 305,
"first_seen": "2026-10-24T03:25:08Z",
"last_seen": "2026-10-24T04:15:03Z"
},
{
"source_name": "NASA Planetary Fact Sheet",
"n": 120,
"first_seen": "2026-10-24T03:03:46Z",
"last_seen": "2026-10-24T03:03:46Z"
},
{
"source_name": "NASA Planetary Fact Sheet / JPL keplerian elements",
"n": 43,
"first_seen": "2026-10-24T03:03:46Z",
"last_seen": "2026-10-24T03:03:46Z"
},
{
"source_name": "IAU Meteor Data Center (Jenniskens et al. 2020; Hajdukova & Rudawska)",
"n": 1,
"first_seen": "2026-10-24T04:15:09Z",
"last_seen": "2026-10-24T04:15:09Z"
},
{
"source_name": "IAU Minor Planet Center",
"n": 1,
"first_seen": "2026-10-24T03:24:50Z",
"last_seen": "2026-10-24T03:24:50Z"
},
{
"source_name": "NASA Exoplanet Archive / PSCompPars (doi:10.26133/NEA13)",
"n": 1,
"first_seen": "2026-10-24T04:16:02Z",
"last_seen": "2026-10-24T04:16:02Z"
}
]
}
Try it
GET SQLite schema DDL (read-only) https://api.publicuniverse.net/api/v1/schema
This operation takes no parameters.
Request
curl example for SQLite schema DDL (read-only)
curl -sS 'https://api.publicuniverse.net/api/v1/schema'
JavaScript example for SQLite schema DDL (read-only)
const response = await fetch("https://api.publicuniverse.net/api/v1/schema");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.text();
console.log(data);
Python example for SQLite schema DDL (read-only)
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/schema") as response:
text = response.read().decode()
print(text)
Example response
Showing the start of the response.
Example response for SQLite schema DDL (read-only)
CREATE TABLE atmospheres (
object_id TEXT PRIMARY KEY REFERENCES objects(id) ON DELETE CASCADE,
surface_pressure_bar REAL,
pressure_note TEXT,
temperature_k REAL,
temperature_note TEXT,
density_kg_m3 REAL,
scale_height_km REAL,
mean_molecular_weight REAL,
wind_note TEXT,
composition_json TEXT, -- [{"species":"N2","fraction":0.78,"unit":"%"},…]
source TEXT NOT NULL DEFAULT 'NASA Planetary Fact Sheet'
);
CREATE TABLE build_meta (
id INTEGER PRIMARY KEY AUTOINCREMENT,
started_at TEXT NOT NULL,
finished_at TEXT,
mode TEXT NOT NULL, -- 'full','nightly'
row_count INTEGER,
notes TEXT
);
CREATE TABLE catalogue_identity (
singleton INTEGER PRIMARY KEY CHECK(singleton=1),
payload TEXT NOT NULL
);
CREATE TABLE classifications (
object_id TEXT NOT NULL REFERENCES objects(id) ON DELETE CASCADE,
label TEXT NOT NULL, -- 'NEO','PHA','Trojan','Hilda','MBA','Centaur','KBO','SDO','Inner','Outer'
PRIMARY KEY (object_id, label)
);
CREATE TABLE close_approaches (
id INTEGER PRIMARY KEY AUTOINCREMENT,
object_id TEXT NOT NULL REFERENCES objects(id) ON DELETE CASCADE,
body TEXT NOT NULL, -- 'Earth', 'Moon', 'Venus', …
cd_jd REAL NOT NULL,
cd_iso TEXT NOT NULL,
dist_au REAL,
dist_min_au REAL,
dist_max_au REAL,
v_rel_km_s REAL,
v_inf_km_s REAL,
t_sigma TEXT, -- formatted uncertainty, e.g. '04:08'
orbit_ref TEXT,
source TEXT NOT NULL DEFAULT 'JPL CAD',
UNIQUE (object_id, body, cd_iso) -- minute resolution: CAD and SBDB-lookup rows dedupe
);
CREATE TABLE designations (
object_id TEXT NOT NULL REFERENCES objects(id) ON DELETE CASCADE,
designation TEXT NOT NULL, -- '1', 'A801 AA', '2004 MN4', '1P'
kind TEXT NOT NULL CHECK (kind IN ('number','provisional','alternate','name')),
source TEXT,
PRIMARY KEY (object_id, designation)
);
CREATE TABLE discoveries (
object_id TEXT PRIMARY KEY REFERENCES objects(id) ON DELETE CASCADE,
discovered_on TEXT, -- ISO date
discoverer TEXT,
site TEXT,
location TEXT,
citation TEXT,
reference TEXT,
source TEXT NOT NULL, -- 'MPC', 'JPL SBDB', 'seed'
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ','now'))
);
CREATE TABLE enrichment_state (
object_id TEXT PRIMARY KEY REFERENCES objects(id) ON DELETE CASCADE,
tier INTEGER NOT NULL DEFAULT 2, -- 1 = shown on the site, 2 = everything else
lookup_at TEXT,
lookup_status TEXT -- 'ok', 'not_found', 'error'
);
CREATE TABLE exoplanet_hosts (
id TEXT PRIMARY KEY,
name TEXT NOT NULL UNIQUE,
ra_deg REAL, dec_deg REAL,
distance_pc REAL CHECK (distance_pc > 0),
distance_error_plus_pc REAL, distance_error_minus_pc REAL,
x_pc REAL, y_pc REAL, z_pc REAL,
galactocentric_x_pc REAL, galactocentric_y_pc REAL, galactocentric_z_pc REAL,
coordinate_source_planet TEXT NOT NULL,
coordinate_metadata TEX
Try it
GET Catalogue stats + last refresh timestamp https://api.publicuniverse.net/api/v1/stats
This operation takes no parameters.
Request
curl example for Catalogue stats + last refresh timestamp
curl -sS 'https://api.publicuniverse.net/api/v1/stats'
JavaScript example for Catalogue stats + last refresh timestamp
const response = await fetch("https://api.publicuniverse.net/api/v1/stats");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Catalogue stats + last refresh timestamp
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/stats") as response:
data = json.load(response)
print(data)
Example response
Showing the start of the response.
Example response for Catalogue stats + last refresh timestamp
{
"total_objects": 1581076,
"by_object_type": {
"asteroid": 1567751,
"tno": 7660,
"comet": 4082,
"centaur": 1071,
"moon": 493,
"planet": 8,
"dwarf_planet": 5,
"dwarf_planet_candidate": 5,
"star": 1
},
"last_build": {
"id": 1,
"started_at": "2026-10-24T03:03:46Z",
"finished_at": "2026-10-24T04:28:47Z",
"mode": "full",
"row_count": 1581076,
"notes": "{\"seed\": {\"star\": 1, \"planet\": 8, \"dwarf_planet\": 5, \"dwarf_planet_candidate\": 5, \"moon\": 273, \"rings\": 32, \"tno_notable\": 10}, \"factsheets\": {\"factsheet_bodies\": 10, \"atmospheres\": 9}, \"satellites\": {\"moons_created\": 220, \"moons_updated\": 240}, \"sbdb\": {\"asteroid\": 1567752, \"centaur\": 1071, \"tno\": 7668, \"comet\": 4082}, \"mpc\": {\"discoveries\": 895910, \"unmatched\": 0}, \"cad\": {\"close_approaches\": 883993, \"unmatched\": 0}, \"showers\": {\"showers\": 1497, \"parents_resolved\": 123, \"parents_unresolved\": 287, \"skipped_rows\": 0}, \"starter_catalogues\": {\"bright_star\": 50, \"double_star\": 23, \"deep_sky\": 108}, \"exoplanets\": {\"exoplanets\": 6451, \"hosts\": 4847, \"mapped_hosts\": 4819, \"unmapped_hosts\": 28}, \"tiers\": {\"tier1\": 75857, \"tier2\": 1505219}, \"enrichment\": {\"applied\": 1580021, \"skipped\": 86, \"close_approaches\": 4012786, \"radar\": 4714}, \"fts_rows\": 1581076}"
},
"catalogue_identity": {
"build": {
"finished_at": "2026-10-24T04:28:47Z",
"mode": "full",
"started_at": "2026-10-24T03:03:46Z"
},
"build_identifier": "sha256:863575869c85ed9c873ace94bba4fc90a5e0cb1ded81ee21e248bf274c518b35",
"built_at": "2026-10-24T04:28:47Z",
"catalogue_id": "sha256:2c7d4001a13d6a3f3bb20d28b09d1b2d91f3a9dfa33a5e5f258ad6d9852e2170",
"hash_policy": "catalogue-logical-v1",
"reason": null,
"row_counts": {
"atmospheres": 9,
"classifications": 1652464,
"close_approaches": 4045369,
"designations": 4583059,
"discoveries": 896109,
"exoplanet_hosts": 4847,
"exoplanets": 6451,
"impact_monitoring": 1580021,
"meteor_showers": 1497,
"objects": 1581076,
"orbital_elements": 1581074,
"physical_properties": 1581076,
"radar_observations": 4714,
"rings": 32,
"sources": 3480285,
"starter_sources": 2,
"starter_targets": 158,
"visual_properties": 1581069
},
"schema_sha256": "3657985bc6aa87fcdb684848bbbeaf39da6f4cb3be95352be09f31c7a203d951",
"schema_version": 1,
"source_manifest": {
"builder": {
"enrichment_store_requested": true,
"options": {
"cad_years": 200,
"offline": false,
"skip_cad": false,
"skip_exoplanets": false,
"skip_mpc": false,
"skip_showers": false
},
"revision": null,
"source_files": [
{
"name": "schema/schema.sql",
"sha256": "7d932e8d137840da14ce48fd4e2ac345669f576703291f3c4b976d9b076dfa8e"
},
{
"name": "scripts/__init__.
Try it
positions
GET One local night of labelled geometric Moon and planet planning https://api.publicuniverse.net/api/v1/observing/night?date=2026-10-10&timezone=UTC&lat=51.5&lon=-0.1
Configured offline ephemerides; no weather or guaranteed visibility. Local noon to the next noon, including timezone transitions. Returns explicit model and Earth-orientation coverage; unavailable coverage is HTTP 503.
Parameters
- date query · string · required
- timezone query · string · required
- lat query · string · required
- lon query · string · required
- targets query · string
- default moon,jupiter,saturn
- min_altitude_deg query · string
- default 20
- sun_altitude_deg query · string
- default -12
- min_moon_separation_deg query · string
- default 0
Request
curl example for One local night of labelled geometric Moon and planet planning
curl -sS 'https://api.publicuniverse.net/api/v1/observing/night?date=2026-10-10&timezone=UTC&lat=51.5&lon=-0.1'
JavaScript example for One local night of labelled geometric Moon and planet planning
const response = await fetch("https://api.publicuniverse.net/api/v1/observing/night?date=2026-10-10&timezone=UTC&lat=51.5&lon=-0.1");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for One local night of labelled geometric Moon and planet planning
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/observing/night?date=2026-10-10&timezone=UTC&lat=51.5&lon=-0.1") as response:
data = json.load(response)
print(data)
Try it
GET Heliocentric position by two-body Kepler propagation https://api.publicuniverse.net/api/v1/positions/planet-saturn?date=2026-10-10
Parameters
- name_or_designation path · string · required
- date query · string · required
- ISO date or datetime
Request
curl example for Heliocentric position by two-body Kepler propagation
curl -sS 'https://api.publicuniverse.net/api/v1/positions/planet-saturn?date=2026-10-10'
JavaScript example for Heliocentric position by two-body Kepler propagation
const response = await fetch("https://api.publicuniverse.net/api/v1/positions/planet-saturn?date=2026-10-10");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Heliocentric position by two-body Kepler propagation
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/positions/planet-saturn?date=2026-10-10") as response:
data = json.load(response)
print(data)
Example response
Example response for Heliocentric position by two-body Kepler propagation
{
"name": "Saturn",
"designation": null,
"input_date": "2026-10-10",
"x_au": 9.249829973128437,
"y_au": 1.8274985299269007,
"z_au": -0.39967116970920724,
"distance_from_sun_au": 9.437099260501974,
"true_anomaly_deg": 278.13301263585254,
"eccentric_anomaly_deg": 281.177917300386,
"mean_anomaly_deg": 284.20542793994366,
"jd": 2461323.5,
"frame": "ecliptic J2000, heliocentric, two-body propagation",
"accuracy_note": "Two-body Kepler propagation — accurate to ~0.1% for major planets over decades, less so for highly-perturbed bodies. Use JPL Horizons for high precision."
}
Try it
GET Where an object appears in Earth's sky (RA/Dec, constellation, optional observer view) https://api.publicuniverse.net/api/v1/sky/planet-saturn
Geocentric RA/Dec (J2000), constellation, hemisphere, distance from Earth and elongation from the Sun. Supply `lat` and `lon` together to add altitude/azimuth, whether it is up after dark, and rise/transit/set for that UT day. Other moons report an explicit parent-body proxy; Earth's Moon is unavailable here. Two-body accuracy (~1°).
Parameters
- name_or_designation path · string · required
- date query · string
- ISO date or datetime (UTC); default now
- lat query · number
- Observer latitude, degrees north
- minimum -90, maximum 90
- lon query · number
- Observer longitude, degrees east
- minimum -180, maximum 180
Request
curl example for Where an object appears in Earth's sky (RA/Dec, constellation, optional observer view)
curl -sS 'https://api.publicuniverse.net/api/v1/sky/planet-saturn'
JavaScript example for Where an object appears in Earth's sky (RA/Dec, constellation, optional observer view)
const response = await fetch("https://api.publicuniverse.net/api/v1/sky/planet-saturn");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Where an object appears in Earth's sky (RA/Dec, constellation, optional observer view)
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/sky/planet-saturn") as response:
data = json.load(response)
print(data)
Example response
Example response for Where an object appears in Earth's sky (RA/Dec, constellation, optional observer view)
{
"name": "Saturn",
"designation": null,
"input_datetime": "2026-10-24T16:16:43Z",
"resolved_from": null,
"ra_deg": 9.649148822192725,
"ra_hours": 0.6432765881461816,
"ra_hms": "00h 38m 36s",
"dec_deg": 1.2251239448064795,
"dec_dms": "+01° 13′ 30″",
"distance_from_earth_au": 8.508323086751851,
"distance_from_sun_au": 9.432736958479431,
"elongation_deg": 157.18973619409897,
"constellation": {
"abbr": "Cet",
"name": "Cetus"
},
"hemisphere": "equatorial",
"visible_from": "Visible from both hemispheres.",
"jd": 2461338.178275463,
"observer": null,
"frame": "equatorial J2000, geocentric; alt/az topocentric; two-body propagation",
"accuracy_note": "Two-body approximation, good to about a degree for the planets — enough to find the constellation and know whether it is up."
}
Try it
GET Next perihelion JD https://api.publicuniverse.net/api/v1/perihelion/planet-saturn
Parameters
- name_or_designation path · string · required
Request
curl example for Next perihelion JD
curl -sS 'https://api.publicuniverse.net/api/v1/perihelion/planet-saturn'
JavaScript example for Next perihelion JD
const response = await fetch("https://api.publicuniverse.net/api/v1/perihelion/planet-saturn");
if (!response.ok) {
throw new Error("Catalogue request failed (" + response.status + ")");
}
const data = await response.json();
console.log(data);
Python example for Next perihelion JD
import json
from urllib.request import urlopen
with urlopen("https://api.publicuniverse.net/api/v1/perihelion/planet-saturn") as response:
data = json.load(response)
print(data)
Example response
Example response for Next perihelion JD
{
"name": "Saturn",
"designation": null,
"next_perihelion_jd": 2463588.7513211113,
"orbital_period_days": 10759.22
}
Try it
Limits and attribution
Rate limits
- Catalogue routes are limited to 60 requests per minute per IP. A route-specific limit replaces the application default of 60 per minute and 1,000 per day.
- Night planning, GET /api/v1/observing/night, is limited to 10 requests per minute per IP.
- The public MCP endpoint allows 60 requests per minute and request bodies up to 64 kB.
- The MCP tool plan_observing_night is limited to 10 requests per minute.
- The MCP tool discover_observing_targets is limited to 5 requests per minute.
Attribution
The API software is MIT. https://opensource.org/licenses/MIT solar-system-db
Keep the source cited on each record when you reuse a measurement. Dataset terms are separate from the API software licence.
MCP server
solar-mcp is the public streamable HTTP server at the URL below. It identifies itself to clients as solar-system-db. Connect it with that URL and no API key, no headers and no OAuth client.
Reported version 1.30.0
Queryable catalogue of known solar-system objects for astronomy and science-education use. Bodies: planets, moons, dwarf planets, asteroids, comets, TNOs, centaurs, rings. Data sourced from NASA/JPL and the IAU Minor Planet Center. Use the `search` and `find_objects` tools for discovery; `get_object` for full detail; `compute_position` for two-body orbital propagation. This is an astronomy tool — not astrology. Use list_exoplanets, get_exoplanet, get_exoplanet_host and galaxy_map for NASA Exoplanet Archive data beyond the solar system.
MCP server URL
https://api.publicuniverse.net/mcp
Cursor
- Open Cursor Settings → MCP, or create .cursor/mcp.json in a project or ~/.cursor/mcp.json for every project.
- Add the server with the URL form Cursor documents for remote streamable HTTP. Leave out headers and auth.
- Reload Cursor and confirm the server is connected before asking it to call a tool.
Cursor MCP configuration
{
"mcpServers": {
"solar-system-db": {
"url": "https://api.publicuniverse.net/mcp"
}
}
}
Grok
Grok reads remote MCP servers from ~/.grok/config.toml. The same URL works with the grok mcp command. Grok can also load a Cursor mcp.json file.
Grok MCP configuration
[mcp_servers.solar-system-db]
url = "https://api.publicuniverse.net/mcp"
Grok MCP command
grok mcp add --transport http solar-system-db https://api.publicuniverse.net/mcp
Example prompts
- Search the catalogue for Halley and cite each matching record.
- Get the full catalogue record for Saturn and name the source of the physical measurements.
- List Saturn's moons in orbital-distance order.
- Describe the Geminids from the meteor-shower catalogue, including the parent body.
- Where does Saturn appear in the sky from latitude 51.5 and longitude -0.1?
- How many objects are in the catalogue, and when was it last built?
Tools
Names, descriptions and parameters are the read-only tools the server reported. Each one advertises a read-only annotation.
list_starter_targets Bounded bright_star, double_star or deep_sky samples with source licences.
Bounded bright_star, double_star or deep_sky samples with source licences. Static catalogue coordinates, not ephemerides or visibility predictions. Double-star separations have unknown measurement dates; no current companion positions.
- family
- q
- limit
- offset
get_starter_target Exact source-namespaced starter target identity with original row and provenance.
- target_id required
list_exoplanets Search NASA confirmed exoplanets by planet/host name, discovery method and distance in parsecs.
Search NASA confirmed exoplanets by planet/host name, discovery method and distance in parsecs. Separate from solar-system find_objects. Composite measurements may mix references; source_data preserves errors, limits, references and mass provenance. catalogue_snapshot associates this page and its count with identity metadata from one SQLite read transaction; it does not pin subsequent pages.
- q
- discovery_method
- max_distance_pc
- limit
- offset
get_exoplanet Get an exoplanet by name or stable id, with original archive measurements and references.
- name required
get_exoplanet_host Get host astrometry, coordinate-frame metadata and its confirmed planets.
- name required
galaxy_map Measured host-system positions, in parsecs; missing distances are omitted, never guessed.
Measured host-system positions, in parsecs; missing distances are omitted, never guessed. Returns Sun-centred Galactic and Galactocentric coordinates with frame metadata, coverage and truncation counts. Not stellar motion or individual planet ephemerides.
- max_distance_pc
- limit
find_objects Filter solar-system objects by type, parent body, size, orbit, and classification.
Filter solar-system objects by type, parent body, size, orbit, and classification. Args: object_type: planet / moon / dwarf_planet / dwarf_planet_candidate / asteroid / comet / tno / centaur. Omit to search all. parent: parent body name or id (e.g. "Jupiter" returns Jupiter's moons). min_radius_km, max_radius_km: physical radius bounds in kilometres. max_eccentricity: orbital eccentricity upper bound. min/max_semi_major_axis_au: orbital semi-major axis bounds in AU. neo: True returns only Near-Earth Objects. pha: True returns only Potentially Hazardous Asteroids. named_only: True excludes provisional-designation-only objects. orbit_class: SBDB orbit class code, e.g. MBA, APO, TNO, or JFc. max_moid_au: maximum Earth minimum-orbit-intersection distance in AU. min_diameter_km: estimated diameter lower bound in kilometres. max_condition_code: maximum orbit uncertainty code, from 0 (best) to 9. discovered_after: earliest discovery date, as an ISO date. after: last object id from the previous page for keyset pagination. limit: 1–1000, default 50. Returns: list of object summaries with key orbital + physical fields.
- object_type
- parent
- min_radius_km
- max_radius_km
- max_eccentricity
- min_semi_major_axis_au
- max_semi_major_axis_au
- neo
- pha
- named_only
- orbit_class
- max_moid_au
- min_diameter_km
- max_condition_code
- discovered_after
- after
- limit
get_object Return the full record for one object — orbital + physical + visual
Return the full record for one object — orbital + physical + visual properties, classifications, and provenance. Resolves by exact id, exact name, exact designation, or partial match (e.g. "Halley", "1P/Halley", "Ceres", "(1) Ceres", "Pluto").
- name_or_designation required
list_moons List all moons of a given planet (or dwarf planet), ordered by orbital
List all moons of a given planet (or dwarf planet), ordered by orbital distance. Example: list_moons("Saturn") returns ~146 moons.
- planet_name required
list_dwarf_planets List the IAU-recognised dwarf planets (Ceres, Pluto, Eris, Makemake,
List the IAU-recognised dwarf planets (Ceres, Pluto, Eris, Makemake, Haumea). Set include_candidates=True to also include leading candidates (Orcus, Quaoar, Sedna, Gonggong, Salacia).
- include_candidates
list_neos List Near-Earth Objects, ordered by absolute magnitude H (brightest first).
List Near-Earth Objects, ordered by absolute magnitude H (brightest first). `min_diameter_km` / `max_diameter_km` filter on the estimated diameter.
- min_diameter_km
- max_diameter_km
list_periodic_comets List numbered / periodic comets (orbital period < 200 years), ordered by
List numbered / periodic comets (orbital period < 200 years), ordered by period. Includes 1P/Halley, 67P/Churyumov-Gerasimenko, 109P/Swift-Tuttle, etc. `limit` is 1–2000, default 500.
- limit
list_tnos List trans-Neptunian objects and centaurs, ordered by semi-major axis.
List trans-Neptunian objects and centaurs, ordered by semi-major axis. Includes Pluto's KBO cousins, Sedna, Eris, Quaoar, Chiron, Chariklo, etc. `limit` is 1–2000, default 500.
- limit
get_rings List the rings of a given planet or dwarf planet, ordered by inner
List the rings of a given planet or dwarf planet, ordered by inner radius. Example: get_rings("Saturn") returns all known Saturn ring components (D, C, B, Cassini Division, A, F, G, E, Phoebe ring).
- planet_name required
search Free-text search across object names, designations, and discoverers.
Free-text search across object names, designations, and discoverers. Use this when you don't know the exact name — e.g. search("Halley") returns both comet 1P/Halley and asteroid (2688) Halley.
- query required
- limit
get_close_approaches Close approaches of one body to the planets or the Moon (JPL CAD + SBDB).
Close approaches of one body to the planets or the Moon (JPL CAD + SBDB). Dates are ISO; `body` filters to e.g. "Earth". Nearest-in-time first.
- name_or_designation required
- date_min
- date_max
- body
- limit
find_close_approaches Every catalogued close approach to `body` between two ISO dates, nearest
Every catalogued close approach to `body` between two ISO dates, nearest first. 1 lunar distance ≈ 0.00257 AU. Example: what passes Earth this year?
- date_min required
- date_max required
- body
- max_dist_au
- limit
get_discovery Discovery circumstances: date, discoverer(s), site, and the naming
Discovery circumstances: date, discoverer(s), site, and the naming citation where one exists (MPC numbered list + SBDB).
- name_or_designation required
get_designations Every identifier a body has carried: permanent number, name, provisional
Every identifier a body has carried: permanent number, name, provisional and alternate designations, legacy ids.
- name_or_designation required
list_meteor_showers List IAU Meteor Data Center showers — one entry per parameter set (a
List IAU Meteor Data Center showers — one entry per parameter set (a shower may have several, from different observation campaigns). `established_only` keeps only showers whose MDC status code is 1 (single established shower, group) or 6 (member of the established group). `active_on` (ISO date, YYYY-MM-DD) keeps only showers whose activity peak (solar longitude) falls within 15 degrees of the Sun's position on that date.
- established_only
- active_on
- limit
get_meteor_shower One IAU Meteor Data Center shower by 3-letter code (e.g. "GEM") or name
One IAU Meteor Data Center shower by 3-letter code (e.g. "GEM") or name (e.g. "Geminids"), case-insensitively — all its parameter sets, plus its parent comet/asteroid when the MDC has linked one.
- code_or_name required
get_atmosphere Atmosphere of a planet, Pluto or Titan-class body from the NASA fact
Atmosphere of a planet, Pluto or Titan-class body from the NASA fact sheets: surface pressure, temperature, density, scale height, winds and composition by volume.
- planet required
get_download_info How to download the entire catalogue as one SQLite file: URL, size,
How to download the entire catalogue as one SQLite file: URL, size, SHA-256, build date, row counts, enrichment coverage and licence.
compute_position Compute the heliocentric ecliptic position (J2000) of an object at a
Compute the heliocentric ecliptic position (J2000) of an object at a given date by Keplerian two-body propagation. Args: name_or_designation: any object that has stored orbital elements. date: ISO 8601 date or datetime (e.g. "2027-04-15" or "2027-04-15T12:00:00Z"). Returns x/y/z in AU plus radius, true anomaly, and an accuracy note. For arcsecond precision use the JPL Horizons API directly — this is intended for general astronomy, planetarium-style visualisations, and educational use.
- name_or_designation required
- date required
plan_observing_night Geometric body/catalogue windows for one local noon-to-noon night.
Geometric body/catalogue windows for one local noon-to-noon night. Uses the configured labelled offline provider (builtin or pinned local JPL). UTC event times, timezone/DST boundaries, model and IERS coverage are explicit. Optional user-entered horizon is circularly interpolated; it is not surveyed terrain. Optional paired exact UTC window times must lie inside the local night. Weather is not included. Targets are comma-separated supported planets, moon or exact pinned bsc5p:/openngc: IDs (eight combined). Catalogue directions have no distance/parallax; verified BSC angular proper motion or static OpenNGC ICRS is labelled per target. Sun/Earth excluded. No visibility guarantee.
- date required
- timezone required
- lat required
- lon required
- targets
- min_altitude_deg
- sun_altitude_deg
- min_moon_separation_deg
- window_start_utc
- window_end_utc
- horizon_mask
discover_observing_targets Explicit bounded target discovery, not all-sky or guaranteed visibility.
Explicit bounded target discovery, not all-sky or guaranteed visibility. Chooses from the reviewed packaged starter sample plus Moon/seven planets. Equipment naked_eye/binocular/telescope changes explained editorial family preferences; no aperture/detection limit is inferred. Optional catalogue V cut excludes unknown/non-V values explicitly. Twenty-minute screening can miss short windows; only up to eight selections receive refined planning. No weather or storage writes. Exact source/provider identities are retained.
- date required
- timezone required
- lat required
- lon required
- equipment_mode required
- preference
- true_field_deg
- max_catalogue_v_magnitude
- shortlist_limit
- min_altitude_deg
- sun_altitude_deg
- min_moon_separation_deg
- window_start_utc
- window_end_utc
- horizon_mask
get_sky_position Where an object appears in Earth's sky: RA/Dec (J2000), constellation,
Where an object appears in Earth's sky: RA/Dec (J2000), constellation, hemisphere, distance from Earth and elongation from the Sun. Args: name_or_designation: any planet, dwarf planet, asteroid, comet or moon (other moons report a parent-body proxy; Earth's Moon is unavailable in this legacy endpoint), or "sun". date: ISO 8601 date or datetime, UTC. Defaults to now. lat, lon: observer's latitude (north-positive) and longitude (east-positive) in degrees. Give both to add altitude/azimuth, whether it is above the horizon after dark, and rise/transit/set for that day. Two-body accuracy (about a degree for the planets) — enough to name the constellation and say whether it is up; use JPL Horizons for precision.
- name_or_designation required
- date
- lat
- lon
next_perihelion Return the next perihelion passage (closest approach to the Sun) of an
Return the next perihelion passage (closest approach to the Sun) of an object as a Julian Date. Two-body Kepler estimate — fine for periodic comets and minor planets over short look-aheads. Long-period comets and bodies in mean-motion resonance may drift; use JPL Horizons for mission-planning precision.
- name_or_designation required
get_catalogue_identity Return finalized logical/build identifiers and recorded source provenance.
Return finalized logical/build identifiers and recorded source provenance. Unknown for older, partially built or modified files. An ID does not promise that historical snapshots remain hosted; keep a verified exported file.
list_object_types List the object_type values present in the catalogue and how many rows
List the object_type values present in the catalogue and how many rows each has. Useful as a sanity-check on coverage.
get_sources Return the upstream data sources used to populate the catalogue,
Return the upstream data sources used to populate the catalogue, summarised by source name and last-retrieved timestamp. Sources are NASA Planetary Fact Sheets, JPL Solar System Dynamics, JPL Small-Body Database, and the IAU Minor Planet Center (via SBDB).
get_schema Return the SQLite schema (DDL) for the catalogue, including views.
Return the SQLite schema (DDL) for the catalogue, including views. Useful if you want to write your own queries against a local copy of data/solar_system.sqlite.
get_stats Catalogue statistics: total objects, counts by object_type, and the
Catalogue statistics: total objects, counts by object_type, and the timestamp of the most recent build.
Resources
-
solar-system://schema
The SQLite schema, exposed as a resource.
-
solar-system://catalog-stats
Catalogue statistics, exposed as a resource (JSON).