All documentation
Automation

Webhooks

A URL that deploys a site, and outgoing deliveries when something happens.

Deploy hooks (incoming)

A deploy hook is a per-site URL that starts a deployment of that site. Create it under Deploy trigger URL in the site's Settings. Use it for repositories the GitHub App does not cover, and call it from a CI job, a self-hosted Git host, or a cron entry.

curl -fsS -X POST https://provisore.com/v1/deploy-hooks/<token>
  • The URL is the whole credential, and it can do one thing: deploy that site. It cannot read the site, list the team, or reach anything else.
  • It is shown once. Rotating replaces it, and the previous URL stops working at that moment. Deleting revokes it.
  • An unknown or revoked token returns 404 with no detail.
  • Repeated calls within the same minute start one deploy, so a webhook that retries does not queue a duplicate. These deploys are recorded with the push trigger.
  • The usual conditions apply. A read-only team gets 402, and a site being deleted or a server that is not active gets 409.
  • On a site that requires passing checks, the hook deploys the branch head once its checks have passed and gets 409 until they have. See Checks & promotions.

Outgoing webhooks

A notification channel of type "webhook" sends JSON to an HTTPS endpoint of yours for each event it subscribes to:

POST https://example.com/hooks/provisore
Content-Type: application/json

{
  "event":      "deployment.failed",
  "status":     "failed",
  "team":       "0f9c…",
  "resourceId": "7b21…",
  "resource":   "example.com",
  "timestamp":  "2026-08-18T09:14:03Z",
  "url":        "https://provisore.com"
}

The endpoint must use HTTPS. Provisore rejects private, loopback, and link-local addresses.

Treat a delivery as a prompt to look, not as the record

A delivery carries no signature header, so your endpoint cannot verify that Provisore sent it. Confirm anything that matters against the API before you act on it. Each delivery is sent once, with no retry and no log to replay it from, so an endpoint that was down misses it. Poll the API for anything you cannot afford to miss.