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 refreshed several times a day, and run through the night of 2026-11-14.
Sources and Credits
ZTF and Rubin objects come from the Fink broker's alerts; transients neither survey alerted on come from the Transient Name Server, CBAT's Transient Object Confirmation Page and ASAS-SN's list of transients, measured by ATLAS and, for bright novae and CVs, by AAVSO's observers. Each provider's data stay under its own terms, and each asks to be credited as below when you use them.
- Fink: ZTF and Rubin alerts: classifications, light curves, limits and cutouts
- Möller et al. 2021, MNRAS 501, 3272.
- Zwicky Transient Facility (ZTF): the ZTF public alert stream, through Fink
- Based on observations obtained with the Samuel Oschin Telescope 48-inch and the 60-inch Telescope at the Palomar Observatory as part of the Zwicky Transient Facility project; Bellm et al. 2019, PASP 131, 018002.
- Vera C. Rubin Observatory: the Rubin LSST alert stream and forced photometry, through Fink
- The Vera C. Rubin Observatory Legacy Survey of Space and Time; Ivezić et al. 2019, ApJ 873, 111.
- 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).
- ASAS-SN: the All-Sky Automated Survey for Supernovae's list of transients: its discoveries, mostly CV candidates, with the magnitudes it quotes
- The All-Sky Automated Survey for Supernovae (ASAS-SN); Shappee et al. 2014, ApJ 788, 48; Kochanek et al. 2017, PASP 129, 104502.
- 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.
- AAVSO: observers' V photometry of bright novae and CVs (a median a night), observing campaigns that ask for observations, and VSX's names
- We acknowledge with thanks the variable star observations from the AAVSO International Database contributed by observers worldwide and used in this research, the AAVSO's observing campaigns, and the International Variable Star Index (VSX).
- HyperLEDA: host galaxies: names, sizes, magnitudes, redshifts and distances
- We acknowledge the usage of the HyperLEDA database (http://leda.univ-lyon1.fr); Makarov et al. 2014, A&A 570, A13.
- 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, cbat or asassn.
| Path | Returns |
|---|---|
/objects | a sorted, filtered page of objects (at most 100) with the exact total: the Objects page's query |
/objects/export | /objects' view in one answer: its first 10,100 rows in the same order, and truncated when more match (six a minute) |
/objects/{source}/{id} | one object's row: position, class, TNS name and type, first and last detection, peak; a TNS, TOCP or ASAS-SN designation another object carries now answers 307 to that object |
/objects/{source}/{id}/detections | a TNS, CBAT or ASAS-SN object's detections and limits, with each point's filter, system and telescope, and the reported points of the designations an object carries, each with its designation (ZTF's and Rubin's own are Fink's) |
/objects/lookup?ids= | up to 100 objects by key in one call (ztf:ZTF26abcdef, tns:2026abc): each one's position, class, TNS name and type, last magnitude and night, hot or archived; a designation another object carries now answers that object as moved |
/objects/search?q= | up to 8 objects by id prefix, TNS name or TOCP designation |
/campaigns | AAVSO's running observing campaigns' targets, with positions and the objects each matched |
/sky/density, /sky/clusters | the map's regional counts per HEALPix pixel and its badges |
/sky/markers | the objects in a cone (r up to 45′), brightest first: the map's markers |
/manifest, /stats, /labels, /health | the current data release: 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 data were last updated); /objects 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/objects?window=7d&measure=new&bucket=sn_candidate&mag=18&limit=50'
# one object, and a TNS object's photometry
curl 'https://transients.fyi/api/objects/ztf/ZTF26abxkuhv'
curl 'https://transients.fyi/api/objects/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}/objects", 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']}")Or the view in one request: /objects/export takes the same keys without offset and returns its first 10,100 rows, with truncated true when more match.
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 with its non-detections (ZTF's 5σ limits, Rubin's forced photometry), as CSV or ECSV, with each point's sncosmo bandpass, SVO filter id and AB zero point, ready for sncosmo or Redback.
- Objects: the table's page, or the whole view (
/objects.csv?…,/objects.ecsv?…: its first 10,100 rows, every column), as CSV or ECSV; the same view is/api/objectswith its keys. A view is also a feed (/objects.rss?…: an item for each object that matches, newest discovery first). The table's Subscribe panel gives both;name=titles a view. - Targets: a view's first 100 objects, tonight's plan, your watchlist or one object, as a file for the program you observe with, from the Targets menu (J2000). A TOM Toolkit TOM's import CSV (
.tom.csv: every name, a link back, the class and redshift as extras); N.I.N.A.'s, in Telescopius's columns, for its Legacy Sequencer and Target Scheduler (.nina.csv); an ACP observing plan, 60 s once a target, to set to your filters (.acp.txt); a Stellarium observing list (.sol); a Cartes du Ciel observing list (.cdc.txt). After/objectsor/tonightwith the page's keys:/tonight.nina.csv?site=…. SkySafari is left out: it cannot place an object that is not in its catalogs. - TOM plugin: tom-transients-fyi (
pip install tom-transients-fyi), a TOM Toolkit 3 data service. Paste a view's/api/objectsURL or a/tonight.jsonURL; each object becomes a target with its names, and “Update Reduced Data” fetches its photometry with limits (reports from here, ZTF and Rubin alerts from Fink).
Both exports come in two forms written from one list of columns. The CSV is plain, for spreadsheets, and its name carries the night the data run to. The ECSV has the same columns with units and descriptions, and a header saying what the object or view is, which night the data run to and when they were generated, how the fluxes and times are defined, and whom to credit. Fluxes are signed differences in nJy (AB zero point 31.4); Rubin's times are TAI, and a utc column gives every time in UTC.
from astropy.table import Table
lc = Table.read("ztf-ZTF26abxkuhv-lightcurve-2026-09-29.ecsv")
print(lc.meta["object"]["name"], lc.meta["data_through"], lc.meta["credits"])
det = lc[lc["kind"] == "det"] # detections; "limit" rows carry lim_mag (5 sigma)
print(det["mjd", "band", "mag", "mag_err"])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'srat most 600 (10°). For more, narrow the filters: a window, a source, a region.- The data change a few times a day; cache what you fetch, and compare X-Build before fetching again.
- Changes to version 2 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: Transients.fyi (https://transients.fyi), data through 2026-11-14. 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, ASAS-SN for its discoveries, ATLAS for its photometry, AAVSO (and its observers) for theirs.
Changelog
- 2026-10-18
- /objects' reasons= now matches rows with all of the reasons given, not any of them (one reason: no change).
- 2026-10-18
- Host galaxies from HyperLEDA. host_name is now the host's name: the TNS host's, else the HyperLEDA galaxy the object lies inside (within two radii of its D25 ellipse), else Mangrove's, which counts only inside two radii where HyperLEDA has its galaxy (Fink's match as it came is mangrove_name and mangrove_dist_mpc on /objects/{source}/{id}). /objects rows gain host_source (tns, leda or mangrove), host_d25 (arcmin), host_bmag, distance_mpc and distance_z (abs_peak's distance and the redshift behind it); distance_source gains leda; filters host_size_min and host_mag_max, sort host_d25. /objects/{source}/{id} also gives host_pgc, host_sep, host_dlr, host_ratio, host_pa, host_type, host_z, host_dist_source, abs_peak, distance_source, distance_mpc and distance_z; host_dist_mpc is now the host's distance. Target lists beside the TOM CSV, from the same URL keys: /objects.nina.csv, /objects.acp.txt, /objects.sol and /objects.cdc.txt, and the same on /tonight.
- 2026-10-17
- TNS's spectra. /objects and /objects/{source}/{id} rows gain tns_spectra (how many spectra TNS lists for the object's TNS designation; 0 for none, null without a TNS name or before we have asked TNS: the newest objects first, all of them by about the end of October), spectrum_first_mjd (usually the classifying spectrum), spectrum_last_mjd and spectrum_last_by (its instrument and group).
- 2026-10-14
- Host context and Fink's anomaly score. /objects rows gain host_context (galaxy, point, nuclear, offset or none_seen: what lies under and around an object, from Pan-STARRS1, Mangrove, the Legacy Survey and Fink's ELEPHANT test), host_name (Mangrove's nearest galaxy) and anomaly_score (ZTF; lower is more unusual); filters host_context (repeat the key) and anomaly_max, sort anomaly_score. /objects/{source}/{id} also gives host_dist_mpc, ps1_sep, ps1_sgscore, ps1_rmag, host_pstar, hostless_ks and hostless_ks_sci.
- 2026-10-10
- Version 2.0, paths named after the site's pages: /table is /objects and /table/export /objects/export; /object/{source}/{id} is /objects/{source}/{id}; /search/objects is /objects/search; the map's layers are /sky/density, /sky/clusters and /sky/markers (the cone that was /objects). The survey key is source, and a region's radius is r in arcminutes (was radius, in arcseconds), as on the Objects page; responses echo source and r. Rows keep their survey column.
- 2026-10-08
- A reason, fresh: young, and a non-detection deeper than the earliest detection at most 3 days before the first one (a new explosion, not just a new report). /table rows gain first_det_mag; the non-detection columns now cover one-night objects too.
- 2026-10-08
- /table rows gain ebv and ext_mag (SFD's Galactic E(B-V) and the extinction in the peak band, now taken off abs_peak) and fit_peak_mjd, fit_peak_mag, fit_rms, fit_points (a parabola's peak in the best-sampled band).
- 2026-10-08
- /table rows gain nondet_mjd, nondet_mag and nondet_days (the last non-detection before the first detection: ZTF's from Fink, a report object's as reported) and distance_source (abs_peak's distance: TNS, the TNS host, Fink's Mangrove host, or Rubin's Legacy Survey photo-z); sort nondet_days, filter nondet_max.
- 2026-10-08
- Derived light-curve features on /table rows for objects first seen within 90 nights on 2+ nights: peak_mjd, peak_band, rise_rate, decline_rate, trend_14d (mag/day, negative while brightening), last_gr and gr_days, and an approximate abs_peak (no K-correction or extinction), trend_nights; sorts on each and trend_max, gr_max, abs_max. The rising reason (and rising=true) is now the trend: below -0.05 mag/day on 3+ nights, seen within 7.
- 2026-10-08
- /table rows gain reasons (/tonight's: bright, young, unclassified, rising, rare, outburst, nova, requested, unconfirmed, unmeasured), tonight_group and asassn_name; reasons= filters on any of them and lim= sets the limit bright counts from (default 17). rising=true is now the rising reason: 3+ nights, discovered within 21.
- 2026-10-07
- /table/export: /table's filters and sort, its first 10,100 rows in one answer (no total; truncated says whether more match), for a file instead of a page loop. The Objects page downloads a whole view from it (/objects.csv, /objects.ecsv).
- 2026-10-02
- /objects/lookup: up to 100 objects by key (source:id, designations too) in one call, each found, moved (a designation another object carries now: that object) or missing.
- 2026-10-02
- An absorbed designation resolves: /object/tns/2026abc (and cbat, asassn) answers 307 to the object that carries it now, and so does its /detections (both were 404). An alert object's /detections returns its designations' reported points (TNS's, ATLAS's and AAVSO's, as when it was a report object), each with a new designation field (was 404); they are shown, never counted. /table's tns=named selects everything reported to TNS, typed or not.
- 2026-10-01
- A fifth source, asassn: discoveries on ASAS-SN's list of transients that nothing else has (mostly CV candidates), with the magnitudes the list quotes as detections and limits (origin asassn); object rows add asassn_name, and /search/objects finds ASAS-SN names.
- 2026-10-01
- /detections adds origin aavso: a bright nova's or CV's V a night from AAVSO's observers (the median of a sample, the sample in a new remark field, "median of 20 of 165 V observations"), and nights of "fainter than" reports as limits; the object row adds aavso_name, the star's VSX name.
- 2026-09-30
- /table's research filters (disc_days, tns=none, z_max, dec_min and dec_max, mag_min, nights_max, rising, reporter, requested) and sort=discovered; rows gain the redshifts, reported_by and an AAVSO campaign; /campaigns.
- 2026-09-30
- /detections adds limits (TNS's reported non-detections, ATLAS's nights under S/N 5) and each detection's filter, mag_system, approx, lim_mag, instrument and telescope; a Vega magnitude is converted to AB by its band's offset.
- 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.