---
title: "Get Addon State"
method: GET
path: "/v1/projects/{project_id}/feedback-addon/state"
tags: ["feedback"]
---

# Get Addon State

`GET /v1/projects/{project_id}/feedback-addon/state`

## Request

- Base URL: `https://api.sonenta.dev`
- URL: `https://api.sonenta.dev/v1/projects/{project_id}/feedback-addon/state`
- Auth: none declared

Resolve the per-project End-User Eval add-on state.

RBAC (dual-auth — task 840):
  - Bearer USER JWT: any org member of the project's parent org can
    read. Plain org members without an explicit `project_members`
    row are intentionally allowed (the response carries no PII —
    just feature flags), matching the task 836 spec.
  - Bearer PROJECT API KEY: must be scoped to this org AND this
    project, and must hold `project:read` (or wider — `project:write`,
    `*`) scope. Lets the `@sonenta/feedback` SDK fetch state at
    widget setup time, BEFORE the end-user accepts the feedback ToS
    (master decision 2026-05-29 — option (a) on the sprint follow-up).

## Path parameters

- `project_id` string, required

## Response `200`

Successful Response

- FeedbackAddonStateOut: Resolved state of the End-User Eval add-on for ONE project. Composed of (a) the parent org's entitlement (`isActive`, `sku`) and (b) the project's per-locale allowlist (`enabledLanguages`, `languagesLimit`). `enabledLanguages` is the literal string `"all"` when the org has the Unlimited SKU — keeps the FE branch shallow.
  - `isActive` boolean, required
  - `sku` 'feedback_starter' | 'feedback_unlimited', nullable, required
  - `enabledLanguages` union, required
    - string[]
    - 'all'
  - `languagesLimit` integer, nullable, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/sonenta/apis/sonenta-api.md) · [All operations](https://skmtc.dev/sonenta/apis/sonenta-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sonenta/apis/sonenta-api/revisions/f853ea49fb05?raw)
