Skip to content

Webhooks

Quivvo can send a signed HTTP POST to your server when a machine changes state, so you don't have to poll. Register a URL with the API, and keep the secret it returns.

curl -X POST https://tryquivvo.com/api/v1/webhooks \
  -H "Authorization: Bearer $QUIVVO_API_KEY" -H "content-type: application/json" \
  -d '{"url":"https://example.com/hooks/quivvo"}'

A workspace can have 10 webhooks. The URL must be public https, up to 2048 characters. Private, loopback and link-local addresses, internal names and a username or password in the URL are refused, and a name that resolves to a private address isn't delivered to. Redirects aren't followed, so point it at the final address.

What events are there?

Event When
machine.ready A machine finished booting
machine.suspended A machine suspended and kept its memory, by request or because it was idle
machine.stopped A machine stopped, including a suspend that couldn't keep memory and became a stop
machine.failed A machine failed to boot or crashed
machine.deleted A machine was deleted

Pass events when registering to receive only some of them.

How do I verify a delivery?

Each POST carries a Quivvo-Signature: t=<unix>,v1=<hex> header. Compute HMAC-SHA256 of t + "." + body with your secret and compare it to v1. The body looks like this:

{ "id": "evt_...", "type": "machine.ready", "created_at": "...", "data": { "machine": {} } }

data.machine is the same object the REST API returns.

Deliveries are best effort and aren't retried yet, so treat webhooks as a hint and read the machine's state when it matters.

Updated 31 October 2026

Give your agent a computer

npx quivvo@latest sh
Get a free VM