---
title: "Public AI Widget config for an app"
method: GET
path: "/v2/widget/config"
tags: ["AI Widget"]
---

# Public AI Widget config for an app

`GET /v2/widget/config`

## Request

- Base URL: `https://api.chat.ethora.com`
- URL: `https://api.chat.ethora.com/v2/widget/config`
- Auth: none required

Public, unauthenticated endpoint the embedded widget calls at load, before it
draws the launcher. Returns the appearance the App's admins saved with
`PUT /v2/apps/{appId}/widget/appearance`.

An unknown or inactive App returns an empty `appearance` rather than an
error, so the endpoint does not reveal which App ids exist. Everything it
returns is already public on any page that carries the widget snippet.

Responses carry `Cache-Control: public, max-age=60`, so a change can take a
minute to reach visitors. Rate-limited per IP (default 300 requests / minute).

## Query parameters

- `appId` string, required

## Response `200`

```
{
  ok: true,
  appearance: { [attribute: string]: string }   // e.g. { 'data-primary-color': '#0052cc' }, {} when none
}
```

## Other responses

- `400`: `appId` missing or not a 24-hex id. ``` { ok: false, error: 'appId required' } ```
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `422`: Unprocessable Entity
- `429`: Rate limit exceeded. ``` { success: false, error: 'Too many requests', code: 'RATE_LIMITED' } ```
- `500`: Internal Server Error

---

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