Sometimes a person needs to write one thing for your site — a guest blog post, a bio, an announcement — but you don't want to create them a StaticOwl account, burn a seat, or hand over admin access. A guest write link is a secret, branded, single-purpose editor URL. You mint it, send it to them, they write in a clean editor (no login), and it stays a draft until you review and publish.

The link is scoped to exactly one page, one content type, and a fixed list of fields — a guest can never touch anything else.


How it works

  1. You mint a link for a content type (e.g. post). StaticOwl creates an empty draft and binds a secret token to it — scoped to that one page and an allow-list of editable fields (default: title + body).
  2. You send the link to your guest. It looks like https://app.staticowl.com/api/public/guest/<token>/editor.
  3. They write. The editor is branded with your site name, logo, and colors. It has a title field and a rich-text body (bold/italic/heading/list/link) plus any other allowed fields. It autosaves as they type. No account, no seat.
  4. You publish. The draft shows up in your site like any other content. You review it and publish it on your schedule. Nothing the guest wrote goes live on its own.

The token can carry an expiry (ttlDays), and you can revoke it at any time.


Minting a link

Guest-link management is an admin operation on the site.

API

curl -X POST https://app.staticowl.com/api/guest-links \
  -H "Authorization: Bearer $STATICOWL_API_KEY" \
  -H "X-Site-Id: site:mysite" \
  -H "Content-Type: application/json" \
  -d '{
        "contentType": "post",
        "title": "Guest post — draft",
        "allowedFields": ["title", "body"],
        "ttlDays": 14,
        "note": "Jordan's guest article"
      }'

Response (the raw token is shown once — keep the editUrl):

{
  "editUrl": "https://app.staticowl.com/api/public/guest/Gbly…/editor",
  "token": "Gbly…",
  "pageId": "post:guest-post-draft",
  "record": { "...": "the created draft" }
}
Field Required Meaning
contentType yes The type the draft is created as (must exist on the site).
title no Starting title for the draft (default "Untitled draft").
slug no Key/slug for the draft; derived from the title if omitted.
allowedFields no Fields the guest may edit. Default ["title","body"]. Intersected with the type's real fields.
ttlDays no Expiry in days. Omit for no expiry.
note no A private label to help you remember who the link is for.

Only fields that actually exist on the content type end up editable — a typo in allowedFields is dropped, not an error (as long as at least one valid field remains).

MCP (AI agents)

These need an admin key on the site.


Managing links

# List active guest links for the site
curl https://app.staticowl.com/api/guest-links \
  -H "Authorization: Bearer $STATICOWL_API_KEY" -H "X-Site-Id: site:mysite"

# Revoke one (the link stops working immediately)
curl -X DELETE https://app.staticowl.com/api/guest-links/<id> \
  -H "Authorization: Bearer $STATICOWL_API_KEY" -H "X-Site-Id: site:mysite"

A revoked or expired link shows the guest a friendly "this link is no longer active" page rather than an error.


What the guest sees

The editor page (…/guest/<token>/editor) is self-contained and branded from your site's theme:

The page is marked noindex, so it won't show up in search engines.


Security model

Guest links are deliberately narrow:


Gotchas & tips


See also

Related docs

Resolved at build time via {% similar %} — cosine similarity over embeddings, not tag overlap. Zero arguments.

Deploy targets — S3, GitHub, and CDN options
59% match
Zero to deployed page — the 5-minute quickstart
59% match
StaticOwl documentation — StaticOwl Docs
59% match