# Council widget

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

Source: https://docs.hatched.live/docs/reference/widgets/council

## Mount

```html
<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

- `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

| 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)       |
