7Timer! API
Free 7Timer! API with no key: astronomical seeing, transparency and cloud cover forecasts for stargazing, plus general weather. No signup. Tested example.
Endpoint tested and returned HTTP 200 on 2026-08-20
What is the 7Timer! API?
7Timer! is a free, key-free forecast API offering an unusual astronomy product — cloud cover, atmospheric seeing, transparency and lifted index — designed specifically for planning astronomical observation, alongside general weather forecasts.
Most weather APIs tell you whether it will rain. 7Timer's `astro` product tells you whether the sky will be worth pointing a telescope at, forecasting atmospheric seeing and transparency alongside cloud cover — parameters no general weather API provides.
Its values use index scales rather than physical units: seeing is banded in arcseconds, transparency in magnitudes per square arcsecond, and cloud cover on a 1-9 scale. You have to read the documentation's conversion tables to interpret them, which is the main barrier to using it.
Quick facts
- Base URL
https://www.7timer.info/bin/api.pl- Authentication
- No API key required.
- Rate limit
- No published limit; the service asks for reasonable use.
- Pricing
- Free.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the 7Timer! API
Every request below was executed against the live API on 2026-08-20, and the response shown is the real body it returned — not an illustration.
1. Fetch an astronomy forecast
GET https://www.7timer.info/bin/api.pl?lon=113.17&lat=23.09&product=astro&output=json
curl 'https://www.7timer.info/bin/api.pl?lon=113.17&lat=23.09&product=astro&output=json'const res = await fetch("https://www.7timer.info/bin/api.pl?lon=113.17&lat=23.09&product=astro&output=json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://www.7timer.info/bin/api.pl?lon=113.17&lat=23.09&product=astro&output=json", timeout=20)
res.raise_for_status()
print(res.json()){
"product": "astro",
"init": "2026081912",
"dataseries": [
{
"timepoint": 3,
"cloudcover": 4,
"seeing": 7,
"transparency": 4,
"lifted_index": -1,
"rh2m": 8,
"wind10m": {
"direction": "SE",
"speed": 2
},
"temp2m": 31,
"prec_type": "none"
},
{
"timepoint": 6,
"cloudcover": 3,
"seeing": 7,
"transparency": 4,
"lifted_index": -1,
"rh2m": 9,
"wind10m": {
"direction": "SE",
"speed": 2
},
"temp2m": 29,
"prec_type": "none"
},
{
"timepoint": 9,
"cloudcover": 1,
"seeing": 6,
"transparency": 4,
"lifted_index": -1,
"rh2m": 10,
"wind10m": {
"direction": "NE",
"speed": 2
},
"temp2m": 29,
"prec_type": "none"
},
{
"timepoint": 12,
"cloudcover": 2,
"seeing": 6,
"transparency": 4,
"lifted_index": -1,
"rh2m": 8,
"wind10m": {
"direction": "E",
"speed": 3
},
"temp2m": 29,
"prec_type": "none"
},
{
"timepoint": 15,
"cloudcover": 6,
"seeing": 6,
"transparency": 3,
"lifted_index": -1,
"rh2m": 6,
"wind10m": {
"direction": "E",
"speed": 3
},
"temp2m": 33,
"prec_type": "none"
},
{
"timepoint": 18,
"cloudcover": 7,
"seeing": 6,
"transparency": 3,
"lifted_index": -1,
"rh2m": 4,
"wind10m": {
"direction": "E",
"speed": 3Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
lat / lon | float | Required | Coordinates in decimal degrees. 23.09 |
product | string | Required | astro, civil, civillight, meteo or two. astro |
output | string | Required | json or xml. json |
unit | string | Optional | metric or british. metric |
tzshift | integer | Optional | Timezone offset in hours from UTC. 0 |
Response fields
productstring- Which forecast product was returned.
initstring- Model initialisation time as YYYYMMDDHH.
dataseries[].timepointinteger- Hours ahead of the init time — not a timestamp.
dataseries[].cloudcoverinteger- Cloud cover index 1-9, where 1 is clearest.
dataseries[].seeinginteger- Atmospheric seeing index — lower is steadier.
dataseries[].transparencyinteger- Sky transparency index — lower is clearer.
dataseries[].lifted_indexinteger- Atmospheric stability; strongly negative means storms.
What you can build with the 7Timer! API
- Plan astronomical observing sessions around seeing and transparency
- Build a stargazing forecast app
- Decide when to run an automated telescope
- Add astronomy-aware weather to an astrophotography tool
Common errors and how to fix them
timepoint is not a date
It is hours offset from `init`.
Fix: Parse `init` as YYYYMMDDHH and add `timepoint` hours to get the real time.
Index values look meaningless
Values are banded indices, not physical units.
Fix: Consult the documentation's conversion tables — cloudcover 1 means 0-6% cover, not 1%.
Empty dataseries
Malformed coordinates or an unknown product.
Fix: Check product is one of astro, civil, civillight, meteo or two.
7Timer! API — frequently asked questions
What makes 7Timer different from other weather APIs?
Its astro product forecasts atmospheric seeing and transparency — how steady and clear the sky will be for telescope observation — which general weather APIs do not provide at all.
Is 7Timer free?
Yes, free with no API key or registration.
How do I convert timepoint into an actual time?
Parse the `init` field as YYYYMMDDHH, then add `timepoint` hours. The values are offsets from model initialisation, not timestamps.
Why are the values small integers?
They are banded index scales, not physical measurements. Cloud cover 1 means 0-6% cover, seeing bands map to arcsecond ranges — the documentation has the conversion tables.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
Unit Converter
Convert between units of length, weight, temperature, area, volume, speed, time and data storage instantly, with a swap button and common conversion tables.
7Timer! is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-20; always check the official documentation before relying on this API in production, as terms and limits can change.