Weather Forecast and Historical Weather Data via RESTful API.
This is a community listing. If you own this API, you can request ownership.
npm install omnistream-sdkimport { OmniClient } from "omnistream-sdk";
const omni = new OmniClient({ token: process.env.OMNI_KEY! });
// One key reaches every API on the marketplace.
const data = await omni.call("visualcrossing/getvisualcrossingwebservices_rest_services_timeline");One install, one key - the same client calls every API on the marketplace.
Historical and Forecast Weather API
Historical and Forecast Weather API
Historical and Forecast Weather API
/**
* VisualCrossingWeather - generated by OmniStream from Visual Crossing Weather's OpenAPI spec.
* One typed method per endpoint. A single Omni key reaches the API.
*/
const DEFAULT_BASE = "https://grid.skinvaults.online/v1/proxy/visualcrossing";
export class VisualCrossingWeatherError extends Error {
status: number;
code?: string;
constructor(status: number, code: string | undefined, message?: string) {
super(message || `VisualCrossingWeather error ${status}`);
this.name = "VisualCrossingWeatherError";
this.status = status;
this.code = code;
}
}
export interface VisualCrossingWeatherOptions {
baseUrl?: string;
fetch?: typeof fetch;
timeoutMs?: number;
}
export class VisualCrossingWeather {
/** @param token Your OmniStream key (one key for every API). */
constructor(private token: string, private opts: VisualCrossingWeatherOptions = {}) {
if (!token) throw new Error("VisualCrossingWeather: token is required");
}
rateLimit: { remainingMinute?: number; remainingDay?: number } | null = null;
private async _request(method: string, path: string, { params, body }: { params?: Record<string, unknown>; body?: unknown } = {}): Promise<any> {
const f = this.opts.fetch ?? globalThis.fetch;
const url = new URL((this.opts.baseUrl ?? DEFAULT_BASE).replace(/\/+$/, "") + path);
if (params) for (const [k, v] of Object.entries(params)) if (v != null) url.searchParams.set(k, String(v));
const headers: Record<string, string> = { "x-omni-key": this.token };
if (body !== undefined) headers["content-type"] = "application/json";
const res = await f(url, { method, headers, body: body !== undefined ? JSON.stringify(body) : undefined });
this.rateLimit = {
remainingMinute: Number(res.headers.get("x-ratelimit-remaining-minute")) || undefined,
remainingDay: Number(res.headers.get("x-ratelimit-remaining-day")) || undefined,
};
const data = await res.json().catch(() => ({}));
if (!res.ok) throw new VisualCrossingWeatherError(res.status, data?.error?.code, data?.error?.message);
return data.data ?? data;
}
/** Historical and Forecast Weather API */
getvisualcrossingwebservicesRestServicesTimeline(params: { "location": string; "key": string; "contentType"?: string; "unitGroup"?: string; "include"?: string; "lang"?: string }): Promise<any> {
return this._request("GET", "/VisualCrossingWebServices/rest/services/timeline/{location}", { params });
}
/** Historical and Forecast Weather API */
getvisualcrossingwebservicesRestServicesTimeline(params: { "location": string; "startdate": string; "key": string; "contentType"?: string; "unitGroup"?: string; "include"?: string; "lang"?: string }): Promise<any> {
return this._request("GET", "/VisualCrossingWebServices/rest/services/timeline/{location}/{startdate}", { params });
}
/** Historical and Forecast Weather API */
getvisualcrossingwebservicesRestServicesTimeline(params: { "location": string; "startdate": string; "enddate": string; "key": string; "contentType"?: string; "unitGroup"?: string; "include"?: string; "lang"?: string }): Promise<any> {
return this._request("GET", "/VisualCrossingWebServices/rest/services/timeline/{location}/{startdate}/{enddate}", { params });
}
/** Weather Forecast API */
getvisualcrossingwebservicesRestServicesWeatherd(params: { "sendAsDatasource"?: boolean; "allowAsynch"?: boolean; "shortColumnNames"?: boolean; "locations"?: string; "aggregateHours"?: string; "contentType"?: string; "unitGroup"?: string; "key"?: string }): Promise<any> {
return this._request("GET", "/VisualCrossingWebServices/rest/services/weatherdata/forecast", { params });
}
/** Retrieves hourly or daily historical weather records. */
getvisualcrossingwebservicesRestServicesWeatherd(params: { "maxDistance"?: string; "shortColumnNames"?: boolean; "endDateTime"?: string; "aggregateHours"?: string; "collectStationContributions"?: boolean; "startDateTime"?: string; "maxStations"?: string; "allowAsynch"?: boolean; "locations"?: string; "includeNormals"?: boolean; "contentType"?: string; "unitGroup"?: string; "key"?: string }): Promise<any> {
return this._request("GET", "/VisualCrossingWebServices/rest/services/weatherdata/history", { params });
}
}
export default VisualCrossingWeather;
No reviews yet. Be the first to rate this API.
Weather Forecast API
Retrieves hourly or daily historical weather records.