{"openapi":"3.1.0","info":{"title":"Observatory Codes API","version":"1.0.0","description":"The IAU Minor Planet Center list of observatory codes as an API — every site the MPC uses to identify a telescope when it publishes astrometric observations of asteroids and comets. For each of 2,700+ codes: the 3-character code, the observatory name, its east longitude and the parallax constants (rho·cos φ', rho·sin φ'). From those constants the API derives each site's geocentric latitude and a -180..180 longitude, so you can find the observatories nearest any point on Earth with a great-circle (haversine) search. Look one up by code, search by name, list them all, or find the closest sites to a latitude/longitude. Distinct from telescope-api (optics maths) — this is the registry of real observing sites and where they are. Served from memory — always fast.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/observatories-api","description":"oanor gateway"}],"tags":[{"name":"Lookup"},{"name":"Search"},{"name":"Geo"},{"name":"List"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/observatory":{"get":{"operationId":"get_v1_observatory","tags":["Lookup"],"summary":"Observatory by MPC code","description":"","parameters":[{"name":"code","in":"query","required":true,"description":"MPC observatory code","schema":{"type":"string"},"example":"309"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"observatory":{"code":"309","name":"Cerro Paranal","latitude":-24.4818,"lon_east":289.5957,"longitude":-70.4043,"rho_cos_phi":0.909943,"rho_sin_phi":-0.414336,"has_location":true}},"meta":{"timestamp":"2026-06-08T18:25:11.218Z","request_id":"5b47bf8a-734f-4729-acc1-d2a45815aaa3"},"status":"ok","message":"Observatory retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/search":{"get":{"operationId":"get_v1_search","tags":["Search"],"summary":"Search observatories by name or code","description":"","parameters":[{"name":"q","in":"query","required":true,"description":"Search query (min 2 chars)","schema":{"type":"string"},"example":"paranal"},{"name":"limit","in":"query","required":false,"description":"Max results (1-100)","schema":{"type":"string"},"example":"25"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":4,"query":"paranal","total":4,"observatories":[{"code":"309","name":"Cerro Paranal","latitude":-24.4818,"lon_east":289.5957,"longitude":-70.4043,"rho_cos_phi":0.909943,"rho_sin_phi":-0.414336,"has_location":true},{"code":"W75","name":"SPECULOOS-South Observatory, Paranal","latitude":-24.4707,"lon_east":289.6094,"longitude":-70.3906,"rho_cos_phi":0.910001,"rho_sin_phi":-0.41415,"has_location":true},{"code":"W91","name":"VHS-VISTA, Cerro Paranal","latitude":-24.4705,"lon_east":289.6026,"longitude":-70.3974,"rho_cos_phi":0.910007,"rho_sin_phi":-0.414148,"has_location":true},{"code":"X11","name":"VLT Survey Telescope, Paranal","latitude":-24.4809,"lon_east":289.596,"longitude":-70.404,"rho_cos_phi":0.909953,"rho_sin_phi":-0.414324,"has_location":true}]},"meta":{"timestamp":"2026-06-08T18:25:11.336Z","request_id":"4a43f320-e1f4-47a2-a9fe-aa26320c38b9"},"status":"ok","message":"Search results retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/nearby":{"get":{"operationId":"get_v1_nearby","tags":["Geo"],"summary":"Nearest observatories to a point","description":"","parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude (-90..90)","schema":{"type":"string"},"example":"-24.6"},{"name":"lon","in":"query","required":true,"description":"Longitude (-180..180)","schema":{"type":"string"},"example":"-70.4"},{"name":"limit","in":"query","required":false,"description":"Max results (1-100)","schema":{"type":"string"},"example":"10"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"lat":-24.6,"lon":-70.4,"count":10,"observatories":[{"code":"309","name":"Cerro Paranal","latitude":-24.4818,"lon_east":289.5957,"longitude":-70.4043,"distance_km":13.2,"rho_cos_phi":0.909943,"rho_sin_phi":-0.414336,"has_location":true},{"code":"X11","name":"VLT Survey Telescope, Paranal","latitude":-24.4809,"lon_east":289.596,"longitude":-70.404,"distance_km":13.2,"rho_cos_phi":0.909953,"rho_sin_phi":-0.414324,"has_location":true},{"code":"W75","name":"SPECULOOS-South Observatory, Paranal","latitude":-24.4707,"lon_east":289.6094,"longitude":-70.3906,"distance_km":14.4,"rho_cos_phi":0.910001,"rho_sin_phi":-0.41415,"has_location":true},{"code":"W91","name":"VHS-VISTA, Cerro Paranal","latitude":-24.4705,"lon_east":289.6026,"longitude":-70.3974,"distance_km":14.4,"rho_cos_phi":0.910007,"rho_sin_phi":-0.414148,"has_location":true},{"code":"I09","name":"Cerro Armazones","latitude":-24.4525,"lon_east":289.8038,"longitude":-70.1962,"distance_km":26.3,"rho_cos_phi":0.910166,"rho_sin_phi":-0.413875,"has_location":true},{"code":"W96","name":"CAO, San Pedro de Atacama (since 2013)","latitude":-22.8157,"lon_east":291.8201,"longitude":-68.1799,"distance_km":300.7,"rho_cos_phi":0.921637,"rho_sin_phi":-0.387717,"has_location":true},{"code":"G32","name":"Elena Remote Observatory, San Pedro de Atacama","latitude":-22.8154,"lon_east":291.8204,"longitude":-68.1796,"distance_km":300.8,"rho_cos_phi":0.921639,"rho_sin_phi":-0.387713,"has_location":true},{"code":"G39","name":"ROAD, San Pedro de Atacama","latitude":-22.8153,"lon_east":291.8204,"longitude":-68.1796,"distance_km":300.8,"rho_cos_phi":0.92164,"rho_sin_phi":-0.387711,"has_location":true},{"code":"I10","name":"CAO, San Pedro de Atacama (until 2012)","latitude":-22.8145,"lon_east":291.82,"longitude":-68.18,"distance_km":300.8,"rho_cos_phi":0.92165,"rho_sin_phi":-0.3877,"has_location":true},{"code":"I16","name":"IAA-AI Atacama, San Pedro de Atacama","latitude":-22.8155,"lon_east":291.8203,"longitude":-68.1797,"distance_km":300.8,"rho_cos_phi":0.921638,"rho_sin_phi":-0.387715,"has_location":true}]},"meta":{"timestamp":"2026-06-08T18:25:11.484Z","request_id":"0db8d3f3-02c1-43b8-94c7-cd8584e53e08"},"status":"ok","message":"Nearby observatories retrieved successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/list":{"get":{"operationId":"get_v1_list","tags":["List"],"summary":"List observatories","description":"","parameters":[{"name":"limit","in":"query","required":false,"description":"Page size (1-500)","schema":{"type":"string"},"example":"50"},{"name":"offset","in":"query","required":false,"description":"Offset","schema":{"type":"string"},"example":"0"},{"name":"located","in":"query","required":false,"description":"Only sites with coordinates","schema":{"type":"string"},"example":"true"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"count":50,"total":2675,"observatories":[{"code":"100","name":"Ahtari","latitude":62.4597,"lon_east":24.1414,"longitude":24.1414,"rho_cos_phi":0.461165,"rho_sin_phi":0.88437,"has_location":true},{"code":"101","name":"Kharkiv","latitude":49.8131,"lon_east":36.2322,"longitude":36.2322,"rho_cos_phi":0.64403,"rho_sin_phi":0.76246,"has_location":true},{"code":"102","name":"Zvenigorod","latitude":55.5201,"lon_east":36.7595,"longitude":36.7595,"rho_cos_phi":0.564841,"rho_sin_phi":0.822468,"has_location":true},{"code":"103","name":"Ljubljana","latitude":45.8515,"lon_east":14.5277,"longitude":14.5277,"rho_cos_phi":0.695365,"rho_sin_phi":0.716346,"has_location":true},{"code":"104","name":"San Marcello Pistoiese","latitude":43.8719,"lon_east":10.8038,"longitude":10.8038,"rho_cos_phi":0.719842,"rho_sin_phi":0.69204,"has_location":true},{"code":"105","name":"Moscow","latitude":55.5765,"lon_east":37.5706,"longitude":37.5706,"rho_cos_phi":0.56403,"rho_sin_phi":0.82302,"has_location":true},{"code":"106","name":"Crni Vrh","latitude":45.7536,"lon_east":14.0711,"longitude":14.0711,"rho_cos_phi":0.69662,"rho_sin_phi":0.71519,"has_location":true},{"code":"107","name":"Cavezzo","latitude":44.6705,"lon_east":11.003,"longitude":11.003,"rho_cos_phi":0.70998,"rho_sin_phi":0.70186,"has_location":true},{"code":"108","name":"Montelupo","latitude":43.5459,"lon_east":11.0278,"longitude":11.0278,"rho_cos_phi":0.72367,"rho_sin_phi":0.68784,"has_location":true},{"code":"109","name":"Algiers-Kouba","latitude":36.5488,"lon_east":3.0705,"longitude":3.0705,"rho_cos_phi":0.80241,"rho_sin_phi":0.59481,"has_location":true},{"code":"110","name":"Rostov","latitude":57.0137,"lon_east":39.415,"longitude":39.415,"rho_cos_phi":0.54316,"rho_sin_phi":0.83683,"has_location":true},{"code":"111","name":"Piazzano Observatory, Florence","latitude":43.4867,"lon_east":10.9721,"longitude":10.9721,"rho_cos_phi":0.72439,"rho_sin_phi":0.6871,"has_location":true},{"code":"112","name":"Pleiade Observatory, Verona","latitude":45.2914,"lon_east":10.9039,"longitude":10.9039,"rho_cos_phi":0.70232,"rho_sin_phi":0.7095,"has_location":true},{"code":"113","name":"Volkssternwarte Drebach, Schoenbrunn","latitude":50.4879,"lon_east":13.0166,"longitude":13.0166,"rho_cos_phi":0.63502,"rho_sin_phi":0.77001,"has_location":true},{"code":"114","name":"Engelhardt Observatory, Zelenchukskaya Station","latitude":43.4636,"lon_east":41.4277,"longitude":41.4277,"rho_cos_phi":0.72489,"rho_sin_phi":0.68702,"has_location":true},{"code":"115","name":"Zelenchukskaya","latitude":43.4546,"lon_east":41.4407,"longitude":41.4407,"rho_cos_phi":0.725004,"rho_sin_phi":0.686912,"has_location":true},{"code":"116","name":"Giesing","latitude":47.9239,"lon_east":11.5958,"longitude":11.5958,"rho_cos_phi":0.66893,"rho_sin_phi":0.74094,"has_location":true},{"code":"117","name":"Sendling","latitude":47.9214,"lon_east":11.5385,"longitude":11.5385,"rho_cos_phi":0.66897,"rho_sin_phi":0.74092,"has_location":true},{"code":"118","name":"Astronomical and Geophysical Observatory, Modra","latitude":48.182,"lon_east":17.274,"longitude":17.274,"rho_cos_phi":0.66558,"rho_sin_phi":0.74394,"has_location":true},{"code":"119","name":"Abastuman","latitude":41.5626,"lon_east":42.82,"longitude":42.82,"rho_cos_phi":0.74731,"rho_sin_phi":0.66262,"has_location":true},{"code":"120","name":"Visnjan","latitude":45.0852,"lon_east":13.7261,"longitude":13.7261,"rho_cos_phi":0.70489,"rho_sin_phi":0.70699,"has_location":true},{"code":"121","name":"Kharkiv University, Chuhuivskyi district Station","latitude":49.4508,"lon_east":36.934,"longitude":36.934,"rho_cos_phi":0.648856,"rho_sin_phi":0.758394,"has_location":true},{"code":"122","name":"Pises Observatory","latitude":43.8473,"lon_east":3.5035,"longitude":3.5035,"rho_cos_phi":0.72017,"rho_sin_phi":0.69176,"has_location":true},{"code":"123","name":"Byurakan","latitude":40.1455,"lon_east":44.2917,"longitude":44.2917,"rho_cos_phi":0.76352,"rho_sin_phi":0.64398,"has_location":true},{"code":"124","name":"Castres","latitude":43.4083,"lon_east":2.255,"longitude":2.255,"rho_cos_phi":0.72534,"rho_sin_phi":0.68612,"has_location":true},{"code":"125","name":"Tbilisi","latitude":41.5262,"lon_east":44.7895,"longitude":44.7895,"rho_cos_phi":0.747594,"rho_sin_phi":0.662026,"has_location":true},{"code":"126","name":"Monte Viseggi L. Zannoni Observatory","latitude":43.9403,"lon_east":9.7902,"longitude":9.7902,"rho_cos_phi":0.718943,"rho_sin_phi":0.692828,"has_location":true},{"code":"127","name":"Bornheim","latitude":50.5715,"lon_east":6.9797,"longitude":6.9797,"rho_cos_phi":0.63385,"rho_sin_phi":0.77088,"has_location":true},{"code":"128","name":"Saratov","latitude":51.3507,"lon_east":46.0066,"longitude":46.0066,"rho_cos_phi":0.623279,"rho_sin_phi":0.779393,"has_location":true},{"code":"129","name":"Ordubad","latitude":38.9464,"lon_east":45.92,"longitude":45.92,"rho_cos_phi":0.777,"rho_sin_phi":0.628,"has_location":true},{"code":"130","name":"Lumezzane","latitude":45.4727,"lon_east":10.2396,"longitude":10.2396,"rho_cos_phi":0.700148,"rho_sin_phi":0.711796,"has_location":true},{"code":"131","name":"Observatoire de l'Ardeche","latitude":44.4846,"lon_east":4.725,"longitude":4.725,"rho_cos_phi":0.7123,"rho_sin_phi":0.6996,"has_location":true},{"code":"132","name":"Bedoin","latitude":43.921,"lon_east":5.2461,"longitude":5.2461,"rho_cos_phi":0.71919,"rho_sin_phi":0.6926,"has_location":true},{"code":"133","name":"Les Tardieux","latitude":43.1696,"lon_east":5.0906,"longitude":5.0906,"rho_cos_phi":0.72819,"rho_sin_phi":0.68309,"has_location":true},{"code":"134","name":"Groszschwabhausen","latitude":50.74,"lon_east":11.4825,"longitude":11.4825,"rho_cos_phi":0.631607,"rho_sin_phi":0.772773,"has_location":true},{"code":"135","name":"Kasan","latitude":55.6106,"lon_east":49.121,"longitude":49.121,"rho_cos_phi":0.56353,"rho_sin_phi":0.82334,"has_location":true},{"code":"136","name":"Engelhardt Observatory, Kasan","latitude":55.6601,"lon_east":48.8156,"longitude":48.8156,"rho_cos_phi":0.56282,"rho_sin_phi":0.82383,"has_location":true},{"code":"137","name":"Givatayim Observatory","latitude":31.8969,"lon_east":34.8147,"longitude":34.8147,"rho_cos_phi":0.84821,"rho_sin_phi":0.5279,"has_location":true},{"code":"138","name":"Village-Neuf","latitude":47.4132,"lon_east":7.5717,"longitude":7.5717,"rho_cos_phi":0.6755,"rho_sin_phi":0.73494,"has_location":true},{"code":"139","name":"Antibes","latitude":43.414,"lon_east":7.1108,"longitude":7.1108,"rho_cos_phi":0.72526,"rho_sin_phi":0.68618,"has_location":true},{"code":"140","name":"Augerolles","latitude":45.5259,"lon_east":3.6294,"longitude":3.6294,"rho_cos_phi":0.69945,"rho_sin_phi":0.71241,"has_location":true},{"code":"141","name":"Hottviller","latitude":48.8764,"lon_east":7.3672,"longitude":7.3672,"rho_cos_phi":0.65646,"rho_sin_phi":0.75189,"has_location":true},{"code":"142","name":"Sinsen","latitude":51.4765,"lon_east":7.1874,"longitude":7.1874,"rho_cos_phi":0.62156,"rho_sin_phi":0.78075,"has_location":true},{"code":"143","name":"Gnosca","latitude":46.0392,"lon_east":9.0241,"longitude":9.0241,"rho_cos_phi":0.692986,"rho_sin_phi":0.71859,"has_location":true},{"code":"144","name":"Bray et Lu","latitude":48.9482,"lon_east":1.666,"longitude":1.666,"rho_cos_phi":0.65549,"rho_sin_phi":0.75268,"has_location":true},{"code":"145","name":"'s-Gravenwezel","latitude":51.052,"lon_east":4.5597,"longitude":4.5597,"rho_cos_phi":0.62734,"rho_sin_phi":0.77614,"has_location":true},{"code":"146","name":"Frignano","latitude":44.096,"lon_east":10.6673,"longitude":10.6673,"rho_cos_phi":0.71715,"rho_sin_phi":0.69487,"has_location":true},{"code":"147","name":"Osservatorio Astronomico di Suno","latitude":45.4449,"lon_east":8.5739,"longitude":8.5739,"rho_cos_phi":0.70043,"rho_sin_phi":0.711392,"has_location":true},{"code":"148","name":"Guitalens","latitude":43.4522,"lon_east":2.0375,"longitude":2.0375,"rho_cos_phi":0.72481,"rho_sin_phi":0.68667,"has_location":true},{"code":"149","name":"Beine-Nauroy","latitude":49.0597,"lon_east":4.2236,"longitude":4.2236,"rho_cos_phi":0.65403,"rho_sin_phi":0.75396,"has_location":true}]},"meta":{"timestamp":"2026-06-08T18:25:11.607Z","request_id":"59a746e9-b2db-466c-ba93-1f26ab50502f"},"status":"ok","message":"Observatories listed successfully","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Service metadata","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"source":"IAU MPC ObsCodes","service":"observatories-api","endpoints":{"GET /v1/list":"List observatories (limit, offset, located=true to skip space/geocentric codes).","GET /v1/meta":"This document.","GET /v1/nearby":"Nearest observatories to a point (lat=, lon=, limit=) — great-circle distance.","GET /v1/search":"Search observatories by name or code (q=, min 2 chars).","GET /v1/observatory":"Observatory detail by MPC code (code=, e.g. 500 or 309)."},"description":"IAU Minor Planet Center observatory codes: 3-character code, name, east longitude, parallax constants (rho·cos φ′, rho·sin φ′) and the derived geocentric latitude / -180..180 longitude. Find observatories by code or name, list them, or find the nearest sites to a point (haversine). No key.","with_location":2675,"total_observatories":2704},"meta":{"timestamp":"2026-06-08T18:25:11.711Z","request_id":"7689d53c-7145-4d8f-8611-ba795466fc57"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":12000,"rps_limit":3,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":500,"monthly_call_quota":120000,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1500,"monthly_call_quota":600000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3600,"monthly_call_quota":3000000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/observatories-api"}