Skip to main content

Webhooks

Webhooks let you receive real-time HTTP notifications from frugally.app when events occur — Executions complete, budgets are breached, anomalies are detected, and more. Use them to integrate frugally.app with your own tools, dashboards, or automation pipelines.


What webhooks are

A webhook is an HTTP POST request sent from frugally.app to a URL you specify whenever a configured event occurs. The request body contains a JSON payload describing the event.


When to use webhooks

Use caseExample
Custom dashboardsSend Execution results to a BI tool or internal dashboard
Incident managementTrigger a PagerDuty or Opsgenie alert on Execution failure
Cost trackingSend cost anomaly data to a finance system
Audit loggingForward all events to a centralised logging platform
Custom automationTrigger a Lambda function or CI/CD pipeline on specific events

Configuring webhook endpoints

Navigate to Settings > Webhooks > Create Endpoint.

FieldDescription
URLThe HTTPS endpoint to receive webhook payloads
EventsWhich event types to send (select one or more)
DescriptionA label for this endpoint (e.g. "PagerDuty — failures only")
EnabledWhether the endpoint is active

Supported events

EventTrigger
execution.startedAn Execution has begun
execution.completedAn Execution completed successfully
execution.failedAn Execution failed
execution.partially_failedAn Execution completed with partial failures
schedule.activatedA Schedule was set to Active
schedule.pausedA Schedule was set to Inactive
budget.threshold_reachedA Budget threshold was crossed
budget.breachedA Budget was exceeded
anomaly.detectedA cost anomaly was detected
anomaly.resolvedA cost anomaly resolved
violation.createdA Guard Violation was created
violation.resolvedA Guard Violation was resolved
project.submittedA Guard Project was submitted for review
project.approvedA Guard Project was approved
project.rejectedA Guard Project was rejected
scan.completedA Guard Scan completed

Authentication (HMAC signing)

Every webhook request includes an X-Frugally-Signature header containing an HMAC-SHA256 signature of the request body. Use this to verify that the request came from frugally.app and was not tampered with.

Verifying the signature

  1. Retrieve your webhook signing secret from Settings > Webhooks > Signing Secret
  2. Compute the HMAC-SHA256 of the raw request body using the signing secret
  3. Compare the computed signature with the value in the X-Frugally-Signature header

Example (Node.js)

const crypto = require('crypto');

function verifyWebhook(body, signature, secret) {
const computed = crypto
.createHmac('sha256', secret)
.update(body, 'utf8')
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(computed)
);
}
caution

Always verify the signature before processing webhook payloads. Unverified webhooks could be spoofed by a third party.


Retry policy

If your endpoint returns a non-2xx status code or does not respond within 10 seconds, frugally.app retries the delivery:

AttemptDelay
1st retry1 minute
2nd retry5 minutes
3rd retry30 minutes
4th retry2 hours
5th retry12 hours

After 5 failed retries, the delivery is marked as failed. You can view failed deliveries and manually retry them from Settings > Webhooks > Delivery Log.

Automatic disabling

If an endpoint fails to respond to 10 consecutive deliveries, it is automatically disabled. You will receive an email notification. Re-enable it from the Webhooks settings page after fixing the issue.


Payload format

All payloads follow the same envelope structure:

{
"id": "evt_abc123",
"type": "execution.completed",
"timestamp": "2026-02-17T14:30:00Z",
"data": {
// Event-specific data
}
}
FieldDescription
idUnique event identifier (use for deduplication)
typeThe event type string
timestampISO 8601 timestamp of when the event occurred
dataEvent-specific payload

Managing webhooks

From Settings > Webhooks you can:

  • Edit — Change the URL, events, or description
  • Disable/Enable — Toggle without deleting
  • Delete — Remove the endpoint permanently
  • View delivery log — See recent deliveries with status, response code, and payload
  • Test — Send a test payload to verify your endpoint is working