The Layout and Placement APIs let customer automations adjust page composition and routing overlays without leaving the tenant boundary. Use content:read to inspect published layout and active placement state, and content:write to create, publish, update, or archive layout and placement records.

Set BULKHEAD_SITE_URL to your workspace URL and BULKHEAD_API_TOKEN to a scoped token from HQ → API Keys. Layout publish, published layout create, placement slug changes, and placement archive operations enqueue compile work so public pages can reflect the change.

List Layouts

curl -sS "$BULKHEAD_SITE_URL/api/v1/layouts?limit=20&offset=0" \
  -H "Authorization: Bearer $BULKHEAD_API_TOKEN"

content:read keys see published layouts. content:write keys can inspect draft and published layout state.

Create a Layout Draft

curl -sS -X POST "$BULKHEAD_SITE_URL/api/v1/layouts" \
  -H "Authorization: Bearer $BULKHEAD_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Landing Page Layout",
    "node_id": "node-1",
    "blocks": [
      {
        "type": "rich-text",
        "props": {
          "html": "<p>Use source-backed content and a reviewed layout block.</p>"
        }
      }
    ],
    "status": "draft"
  }'

Publish a Layout

curl -sS -X POST "$BULKHEAD_SITE_URL/api/v1/layouts?action=publish" \
  -H "Authorization: Bearer $BULKHEAD_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "layout-1"
  }'

List Placements

curl -sS "$BULKHEAD_SITE_URL/api/v1/placements?node_id=node-1" \
  -H "Authorization: Bearer $BULKHEAD_API_TOKEN"

Create a Placement

curl -sS -X POST "$BULKHEAD_SITE_URL/api/v1/placements" \
  -H "Authorization: Bearer $BULKHEAD_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "node_id": "node-1",
    "slug": "shipping-notes",
    "title_override": "Shipping Notes"
  }'

Update a Placement

curl -sS -X PATCH "$BULKHEAD_SITE_URL/api/v1/placements" \
  -H "Authorization: Bearer $BULKHEAD_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "placement-1",
    "slug": "shipping-notes-updated"
  }'

Archive a Placement

curl -sS -X DELETE "$BULKHEAD_SITE_URL/api/v1/placements" \
  -H "Authorization: Bearer $BULKHEAD_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "placement-1"
  }'

Response Format

Layout responses return a layout object and any compile enqueue result. Placement rename and archive responses include stale_kv_deleted for previous public route keys removed before success is reported, plus recompile_enqueued when public route output needs refreshing.

{
  "placement": {
    "id": "placement-1",
    "slug": "shipping-notes-updated",
    "kv_key": "ctx:docs:shipping-notes-updated"
  },
  "recompile_enqueued": true,
  "stale_kv_deleted": [
    "ctx:docs:shipping-notes",
    "ctx:docs:en:shipping-notes",
    "ctx:docs:ga:shipping-notes"
  ]
}

Page check

Did you find what you came for?

Choose one. If not, tell us what you were trying to do.

Loading your previous response…