Deploy Hooks
A deploy hook is a URL your hosting provider gives you. When Studio sends a POST request to it, your host rebuilds and redeploys the site. Connect one so your published content reaches your live site without a manual build.
Connecting a Hook
- Create a build hook with your host (Netlify build hook, Vercel deploy hook, Cloudflare Pages deploy hook, or any HTTPS endpoint that accepts a POST)
- In Studio, open the project and go to the CDN view. The Deploy Hook section is below the CDN settings
- Choose the Host: Netlify build hook, Vercel deploy hook, Cloudflare Pages deploy hook, or Any POST endpoint
- Paste the Build hook URL
- Choose when it should fire (see below)
- Click Save hook
The section is visible to workspace owners and admins only.
TIP
The URL must be HTTPS and point to a public host. Studio stores it encrypted and afterwards shows only a hint (the host and the last characters), never the full URL. To change the URL, paste a new one; to change only the host type or the switches, leave the field empty.
When It Fires
| Trigger | Switch | Fires When |
|---|---|---|
| Content published | Deploy when content is published | Content lands on the project's contentrain branch after a save or a merged review branch |
| Schedule | Deploy at scheduled publish / expiry | A publish_at or expire_at boundary passes. See Scheduled Publishing |
| Manual | none | You click Deploy now |
Both switches default to on. Automatic triggers are debounced per project: the first merge after a quiet minute builds at once, and further merges within the next minute are coalesced into one more build when the minute is up. Deploy now bypasses the debounce.
The request body is JSON: { "source": "contentrain-studio", "reason": "...", "at": "..." }, where reason is content_published, schedule, or manual. The hook section shows Last triggered with the time and the HTTP status your host returned.
Manual Trigger
Click Deploy now in the Deploy Hook section. Studio shows Deploy triggered (status) on success, or an error if the host did not accept the request. Manual triggers are rate-limited to a few per minute per project.
Review Projects: Release Approval
On a project that uses the review workflow, a manual deploy is a release with its own approval, separate from approving the content branches. If the release still needs approval, Deploy now is refused with "This release still needs approval before it can be deployed." Once the project's approval policy is satisfied, the deploy goes through, and the release's approvals are cleared so the next release needs a fresh decision. See Branches and Review.
Owners and admins record a release decision with POST /api/workspaces/{workspaceId}/projects/{projectId}/deploy/approve (optional note), and withdraw their own with DELETE on the same path. Studio's interface does not have a dedicated release-approval button for this at the moment.
Automatic triggers (content published, schedule) are not gated by the release approval.
Removing the Hook
Click Remove hook in the Deploy Hook section. Automatic and manual triggers stop immediately.
Webhook Event
Each time Studio calls your hook, it also emits the deploy.triggered webhook event with provider, reason, ok, and status.
API
The deploy hook can also be managed over the project API (owner or admin): GET, PATCH, and DELETE on .../deploy, and POST on .../deploy/trigger. See the Deploy API reference.