---
title: "Check raw text against brand terminology"
method: POST
path: "/brand-context/terminology"
tags: ["Brand"]
---

# Check raw text against brand terminology

`POST /brand-context/terminology`

## Request

- Base URL: `https://next.frase.io/api/v1`
- URL: `https://next.frase.io/api/v1/brand-context/terminology`
- Auth: API key in header `X-API-KEY`

Term compliance on raw text (no content row needed) — the same check the in-app agent's terminology tool runs and the same evaluator the publish gate's term_compliance rules use, so a clean preflight here means that rule passes at publish. **read:content** scope; nothing is persisted.

## Request body

- object
  - `text` string, required: Required, non-empty. The text to check.
  - `site_id` string, uuid: Optional. Scopes site-specific terms.

## Response `200`

Term compliance report

- object
  - `data` object
    - `has_terms` boolean: Whether the org has any brand terms configured.
    - `is_compliant` boolean
    - `violations` object[]
      - `term` string
      - `type` string
      - `replacement` string, nullable
      - `positions` integer[]
      - `context` string, nullable
    - `preferred_terms_used` string[]
    - `suggestions` object[]
      - `original` string
      - `suggested` string
  - `request_id` string

## Other responses

- `400`: Validation failed
- `401`: Authentication failed
- `429`: Rate limited, or the org's monthly brief limit blocked minting the refreshed brief (only the FIRST supersession of a brief is billing-exempt; repeats meter normally)

---

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