HatchedDocs
ReferenceWidgets

Council widget

Elite-circle surface — Council members co-author user-facing narrative copy.

Mount

<script src="https://cdn.hatched.live/widget.js" data-session-token="SESSION_TOKEN" defer></script>

<div data-hatched-mount="council"></div>

Reading your own proposals and Council standing works with an embed token. Submitting a proposal is a write and is restricted to Council members, so the composer requires a session token.

Script attributes

AttributeValuesDefault
data-session-tokenwidget session tokencomposer enabled
data-embed-tokenembed tokenread-only standing
data-themelight darklight
data-api-base-urlAPI origin + /api/v1https://api.hatched.live/api/v1

Required scopes

  • read renders the buddy's proposals, Council standing and quota.
  • Submitting a proposal requires a session token granted the council:propose scope. A session token minted without it (for example ["read", "events:track"]) is rejected with 403.

Plan & capability

  • Capability: council (tenant toggle in Settings → Capabilities, on by default). When an Enterprise operator turns it off the widget endpoints return 403 capability_disabled.
  • Minimum plan: Enterprise. A non-Enterprise (un-entitled) tenant gets a 403 plan_feature_locked before any membership check runs — it never returns a 200 locked state.
  • Membership is the gate on top of the plan: for an Enterprise tenant whose buddy is not a Council member, GET /widget/council/proposals/mine returns 200 with is_council_member: false so the widget renders its locked state.

Endpoints

MethodPathPurpose
GET/widget/council/proposals/mineThe buddy's proposals + Council standing + quota
POST/widget/council/proposalsSubmit a narrative proposal (members only)