Webhooks
WindBorne webhooks let you receive real-time HTTP POST notifications as forecast outputs become available. Instead of polling the API, register a webhook URL and configure the subscriptions you care about.
How It Works
- You register a webhook with a target URL and one or more subscriptions via POST /webhooks/v1 .
- When a subscription matches, WindBorne sends an HTTP POST to your URL with a JSON payload.
- Your server responds with a 2xx status to acknowledge receipt.
- Failed deliveries are retried with exponential backoff.
Subscription Types
| Subscription | Category | Description |
|---|---|---|
| initialization_time.available | Forecasts | Sent once every expected forecast hour for a model run is available |
| forecast_hour.available | Forecasts | Sent as each individual forecast output becomes available |
Quick Start
Create a webhook that subscribes to completed WM6 forecast cycles:
Webhook Authentication
Webhook callback authentication is separate from the API request authentication used to manage webhooks.
WindBorne generates a signing secret and returns it only when the webhook is created. Store it securely. Every delivery includes Trigger-Id , Webhook-Timestamp , and Webhook-Signature headers. Read the unmodified request body as bytes, reject stale timestamps, and verify the HMAC before processing the payload.
The timestamp check limits replay attempts to five minutes. If duplicate processing within that window matters, also retain recently processed Trigger-Id values and reject repeats.
Delivery Identifiers
| Field | Scope | Description |
|---|---|---|
| webhook_id | Webhook | Persistent identifier for the webhook configuration. |
| subscription_id | Subscription | Persistent identifier for the subscription configuration. |
| trigger_id | Trigger | Identifier for one subscription firing. It is also sent in the Trigger-Id header and remains the same across retries. |
Webhook deliveries do not include a separate delivery-attempt identifier or delivery_id field. Each retry is another attempt for the same trigger and reuses its trigger_id .
Delivery & Retries
Return a 2xx response to acknowledge a delivery. Failed deliveries are retried.