Data and API
Everything the site shows is also JSON, from a public API: no key, no account, GET only, open to any origin. The data are rebuilt nightly, and run through the night of 2026-09-30.
Sources and their terms
ZTF and Rubin objects come from the Fink broker's alerts; transients neither survey alerted on come from the Transient Name Server and CBAT's Transient Object Confirmation Page, measured by ATLAS. Each provider's data stay under its own terms, and each asks to be credited as below when you use them. TNS, CBAT and ATLAS agreed to this site's use of their data with that credit; for anything beyond personal research, read their terms on their sites.
- Fink: ZTF and Rubin alerts: classifications, light curves and cutouts
- Möller et al. 2021, MNRAS 501, 3272; ZTF (Bellm et al. 2019) and the Vera C. Rubin Observatory LSST.
- Transient Name Server (TNS): names, types and discovery reports of transients from every survey
- The IAU Transient Name Server, operated by the Weizmann Institute of Science; reports by the surveys named on each object.
- CBAT: the Transient Object Confirmation Page: bright novae and other transients reported to the Central Bureau
- Central Bureau for Astronomical Telegrams, Transient Object Confirmation Page (TOCP).
- ATLAS: forced photometry of TNS objects, from the ATLAS forced-photometry server
- Tonry et al. 2018, PASP 130, 064505; Smith et al. 2020, PASP 132, 085002; Shingles et al. 2021, TNS AstroNote 2021-7.
- CDS, Strasbourg: sky imagery (HiPS), finder charts (hips2fits) and name resolution (Sesame)
- This research has made use of the CDS services, Strasbourg Astronomical Observatory, France.
The API
Base URL https://transients.fyi/api. The interactive documentation, with every parameter and a “Try it out” button, is at /api/docs; the schema at /api/openapi.json. A source is ztf, lsst (Rubin), tns or cbat.
| Path | Returns |
|---|---|
/table | a sorted, filtered page of objects (at most 100) with the exact total: the Objects page's query |
/object/{source}/{id} | one object's row: position, class, TNS name and type, first and last detection, peak |
/object/{source}/{id}/detections | a TNS or CBAT object's detections (ZTF's and Rubin's are Fink's to serve) |
/search/objects?q= | up to 8 objects by id prefix, TNS name or TOCP designation |
/objects | the objects in a cone (up to 0.75°), brightest first: the map's markers |
/density, /clusters | the map's regional counts per HEALPix pixel and its badges |
/manifest, /stats, /labels, /health | the build: its nights and cuts, the dashboard's numbers, labels with counts |
Every response carries X-Data-Through (the data's last night, UTC) and X-Build (when the build ran); /table also returns them in its body as data_through and generated_at, for scripts that keep the JSON. The Objects page's URL keys are close to the API's: a view's filters carry over.
curl
# supernova candidates first seen in the last 7 nights, 18 mag or brighter
curl 'https://transients.fyi/api/table?window=7d&measure=new&bucket=sn_candidate&mag=18&limit=50'
# one object, and a TNS object's photometry
curl 'https://transients.fyi/api/object/ztf/ZTF26abxkuhv'
curl 'https://transients.fyi/api/object/tns/2026yjv/detections'Python
import time
import pandas as pd
import requests
API = "https://transients.fyi/api"
params = {"window": "1M", "tns": "any", "sort": "last_mjd", "limit": 100}
rows, offset = [], 0
while True:
r = requests.get(f"{API}/table", params={**params, "offset": offset}, timeout=30)
r.raise_for_status()
page = r.json()
rows += page["rows"]
offset += len(page["rows"])
if not page["rows"] or offset >= page["total"]:
break
time.sleep(1) # one request a second, please
df = pd.DataFrame(rows)
print(f"{len(df)} objects, data through {page['data_through']}")A ZTF or Rubin object's alerts, light curve and cutouts are Fink's: its API (api.ztf.fink-portal.org, api.lsst.fink-portal.org; documented for ZTF and Rubin) serves them without a key, and the object panel reads them from there.
Feeds and exports
- Tonight: a site's plan as RSS (
/tonight.rss?site=…, one item a night), JSON (/tonight.json, for scripts and robotic telescopes) and CSV (/tonight.csv), all from the page's URL keys. The Subscribe panel on /tonight builds the addresses. - Object panel: the light curve as CSV.
- Objects: the table's page as CSV; the same view is
/api/tablewith its keys.
Forced photometry of any position
The site shows what the surveys detected. To measure a position on every image, detected or not, ask the surveys' own services, each with an account of your own:
- ZTF's forced-photometry service at IPAC: register by email, then request positions; results arrive by email (its guide).
- ATLAS's forced-photometry server: register, then queue positions in its form or through its API.
Limits and etiquette
- Please keep scripts to one request a second. Bursts beyond what the map makes are answered 429 with a Retry-After header.
limitis at most 100 (500 with a /tonightgroup),offsetat most 10,000, a region's radius at most 10°. For more, narrow the filters: a window, a source, a region.- The data change once a night; cache what you fetch, and compare X-Build before fetching again.
- Changes to version 1 are additive: new fields and parameters. A breaking change gets a new path and three months' notice in the changelog below.
How to cite
Name the site and the data's date: Transient Explorer, https://transients.fyi, data through 2026-09-30. Credit the providers whose data you use, with the references above: Fink for ZTF and Rubin alerts (and ZTF and Rubin themselves), the TNS and the reporting surveys for reports, CBAT for TOCP entries, ATLAS for its photometry.
Changelog
- 2026-09-30
- Version 1.0: the documentation at /api/docs, the X-Data-Through and X-Build headers, data_through and generated_at in /table's body, and a rate limit. Today's paths are version 1.