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
| Attribute | Values | Default |
|---|---|---|
data-session-token | widget session token | composer enabled |
data-embed-token | embed token | read-only standing |
data-theme | light dark | light |
data-api-base-url | API origin + /api/v1 | https://api.hatched.live/api/v1 |
Required scopes
readrenders the buddy's proposals, Council standing and quota.- Submitting a proposal requires a session token granted the
council:proposescope. A session token minted without it (for example["read", "events:track"]) is rejected with403.
Plan & capability
- Capability:
council(tenant toggle in Settings → Capabilities, on by default). When an Enterprise operator turns it off the widget endpoints return403capability_disabled. - Minimum plan: Enterprise. A non-Enterprise (un-entitled) tenant gets a
403plan_feature_lockedbefore any membership check runs — it never returns a200locked 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/minereturns200withis_council_member: falseso the widget renders its locked state.
Endpoints
| Method | Path | Purpose |
|---|---|---|
GET | /widget/council/proposals/mine | The buddy's proposals + Council standing + quota |
POST | /widget/council/proposals | Submit a narrative proposal (members only) |