Skip to main content
floo watches for failed deploys and repeating runtime errors. When one fires, it bundles the context and POSTs a JSON event to a webhook URL you configure: an agent, an on-call bot, or an incident pipeline. floo detects and routes; remediation stays with the downstream agent or human. The dashboard calls this feature Error routing, the API path uses reparo, and floo events lists the events that fired. They are the same feature.

Turn it on

Error routing is off until you point it at a URL. Configure it per app on the dashboard under App → Alerts → Error routing, or with PUT /v1/apps/{app_id}/reparo/config over the HTTP API: There is no CLI command for this configuration. floo events list is the read-only view of what has already fired.

What triggers an event

  • runtime errors, repeated error conditions surfaced in logs crossing the configured threshold
  • failed deploys, a deploy that never goes live, rolled back, or exited non-zero
Events are grouped per app. Repeats of the same error roll up into one event, not one per log line.

What’s in the payload

floo sends a POST with a JSON body and these headers:
recent_deploy is the deploy whose code produced the error: the failed deploy for a failed-deploy event, or, for a runtime error, the deploy that was live in the environment that logged it when the event fired. It is null when that environment no longer exists or has nothing live. recent_logs holds up to 20 of the error’s newest log lines, oldest first, from that environment (every environment when recent_deploy is null) and the 5 minutes before the event. Secrets are redacted before floo stores a line. A failed-deploy event has none; its message is the last line of the build log. managed_resources lists the app’s Postgres, Redis, and Storage by name and type, never connection details. suggestion is a short fix hint when floo recognizes the error, otherwise null. github is null when the app has no connected repo.

Verify the signature

Compute the HMAC over the raw request body, before any JSON parsing, and compare in constant time.
Respond with any 2xx status to acknowledge the event.

Event lifecycle

Each event’s status shows whether your webhook received it:
  • triggered: detected and queued for delivery
  • in_progress: delivery in flight or being retried
  • succeeded: the webhook responded 2xx
  • failed: delivery failed permanently after retries
  • skipped: matched but suppressed (cooldown or rate limit)
List events from the CLI:

What it does not do

floo does not generate or merge code fixes. Your agent or on-call workflow owns the fix.
  1. Watch deploy and runtime health.
  2. Let floo create the event and POST it to your webhook.
  3. Your agent or workflow reads the payload, inspects logs and releases, and decides.
  4. Roll back with floo deploys rollback or ship a fix.

Logs and debugging

Runtime logs and deploy history for inspecting the incident further.

Releases and rollbacks

Recover quickly when the right move is shifting traffic back.