Weather Ruse
Guides

Webhooks

Get notified when a new forecast run is ready.

Overview

Weather Ruse fires a webhook event each time a new NWP model run completes ingestion and is ready to serve. Subscribe to these events to trigger your pipeline — no polling needed.

Webhooks are powered by Svix for guaranteed delivery with automatic retries.

Event types

EventWhen fired
forecast.run.readyA new model run finished ingestion and is live

forecast.run.ready payload

{
  "event": "forecast.run.ready",
  "model": "ecmwf",
  "run_time": "2025-06-20T00:00:00Z",
  "available_at": "2025-06-20T05:32:00Z",
  "horizon_hours": 240,
  "region": "global"
}

Setting up a webhook

  1. Go to console.weather-ruse.com/webhooks
  2. Click Add endpoint
  3. Enter your HTTPS URL
  4. Select forecast.run.ready
  5. Save — delivery starts immediately on the next run

Verifying signatures

Each delivery includes a Svix-Signature header. Verify it to ensure the request is genuine:

import { Webhook } from "svix";

const wh = new Webhook(process.env.WEBHOOK_SECRET);

export async function POST(req: Request) {
  const body = await req.text();
  const headers = {
    "svix-id": req.headers.get("svix-id")!,
    "svix-timestamp": req.headers.get("svix-timestamp")!,
    "svix-signature": req.headers.get("svix-signature")!,
  };

  const event = wh.verify(body, headers);
  console.log("Verified event:", event);
}
from svix.webhooks import Webhook

wh = Webhook(os.environ["WEBHOOK_SECRET"])
event = wh.verify(body, {
    "svix-id": request.headers["svix-id"],
    "svix-timestamp": request.headers["svix-timestamp"],
    "svix-signature": request.headers["svix-signature"],
})

Retry policy

Svix retries failed deliveries with exponential backoff:

AttemptDelay
1Immediate
25 minutes
330 minutes
42 hours
55 hours

Your endpoint must return a 2xx response within 30 seconds or the delivery is considered failed.

Model run schedule

ModelRuns per dayApprox. ingestion delay
GFS4~2 h after run time
ECMWF2~4 h after run time
HRRR24~20 min after run time
NAM4~1.5 h after run time
ICON-EU8~1 h after run time
AROME8~1 h after run time

On this page