Staging and previews
See a draft on your real site before you publish it. Works with any host: Netlify, Vercel, Cloudflare Pages, your own server.
The idea: a second build of your site (staging) that reads with a preview key, so it shows the latest version of everything, drafts included. Pluma rebuilds it every time something is saved, and every entry gets a View on staging link.
1. Build a staging site
Deploy the same site a second time, reading from Pluma with a preview key instead of the delivery key. With Netlify or Vercel that's usually a branch deploy or a second site with different environment variables:
| Variable | Live site | Staging site |
|---|---|---|
PLUMA_SPACE |
your site | your site |
PLUMA_DELIVERY_KEY |
a delivery key (published only) |
a preview key (latest, drafts included) |
The code doesn't change: a preview key answers the same Delivery API with the latest version of each entry. See Preview API.
Keep the staging site private (password or noindex): it shows unpublished content.
2. Tell Pluma where both sites live
In your site, Settings → General: the live site (https://www.example.com) and the staging site (https://staging.example.com). By API: PATCH /api/v1/spaces/:space_id with production_url and preview_url. By MCP: update_site.
3. Tell Pluma where each type lives
In each content type, Page URL on your site: /blog/{slug}, /events/{slug}, /{slug}. {slug} is the entry's slug field, {id} its id. By API or MCP it's the type's url_path.
With the URLs and the path, each entry gets:
- in the dashboard, View on staging and View live links;
- in the API and MCP,
sys.url(live, only when published) andsys.preview_url(staging, only with a key that reads drafts). Your agent can hand you the exact link after a change.
4. A deploy hook for staging
In Deploy → New deploy hook, pick your host, paste the staging site's build hook and choose The staging site. A staging hook rebuilds on every save (entry.saved) as well as on publish, so a draft shows up there a minute later. Saves close together go out as a single build, 30 seconds after the last one.
By API: POST /api/v1/spaces/:space_id/webhooks with "target": "preview". See Webhooks.
Your live hook keeps rebuilding only when something is published: drafts never reach the live site.
Is it set up?
When you save the site URLs (API PATCH or MCP update_site), the response includes warnings if something is missing: a staging URL without a staging hook, or no type with a url_path yet. The Deploy page shows the same warnings.