# Создать OAuth-клиента

export default function Layout(props) {
  const { OpenAPIPage } = props.components ?? {};
  return (
    <>
      {props.children}
      ## Создать OAuth-клиента

`POST /api/v1/security/oauth/clients`

**Авторизация:** dpop или oauth2: `security.clients:read`, `security.clients:write`

**Параметры**

| Имя | Где | Обязательный | Тип | Описание |
| --- | --- | --- | --- | --- |
| `idempotency-key` | header | нет | string | Ключ идемпотентности для безопасного повтора запроса: 8–255 символов из набора A-Za-z0-9_.:+/=-, ответ кэшируется на 24 ч |

**Тело запроса** (`application/json`, обязательное): CreateOAuthClientBody
- `allowedAudiences`: массив string — Ресурсы (RFC 8707), для которых клиент может получать токены: https://api.legalstack.ru или адреса MCP-сервера; пусто — все ресурсы платформы
- `applicationType`: "web" | "native" | "spa" — Тип приложения: web, native или spa
- `clientType`: "public" | "confidential", обязательное — Тип клиента: confidential — хранит секрет (сервер), public — без секрета (SPA, мобильные)
- `clientUri`: string (uri) — Сайт приложения
- `contacts`: массив string (email) — Контактные email ответственных, до 10
- `description`: string — Описание назначения клиента
- `grantTypes`: массив "client_credentials" | "authorization_code" | "refresh_token", обязательное — Разрешённые OAuth grant-типы
- `jwksUri`: string (uri) — JWKS-URL клиента для private_key_jwt
- `logoUri`: string (uri) — Логотип приложения
- `name`: string, обязательное — Название клиента
- `policyUri`: string (uri) — Политика конфиденциальности приложения
- `redirectUris`: массив string (uri) — Разрешённые redirect URI для authorization_code
- `requireDpop`: boolean — Требовать DPoP-привязку токенов
- `requirePkce`: boolean — Требовать PKCE для authorization_code
- `scopes`: массив string — Разрешённые scope (см. GET /api/v1/scopes)
- `tokenEndpointAuthMethod`: "client_secret_basic" | "client_secret_post" | "private_key_jwt" | "tls_client_auth" | "none" — Способ аутентификации на token endpoint
- `tosUri`: string (uri) — Условия использования приложения

**Ответы**

- `201` — Клиент создан (`application/json`, CreateOAuthClientResponse)
  - `client`: OAuthClient, обязательное
    - `allowedAudiences`: массив string, обязательное — Ресурсы (RFC 8707), для которых клиент может получать токены; пусто — все ресурсы платформы
    - `applicationType`: "web" | "native" | "spa" | null — Тип приложения: web, native или spa
    - `clientId`: string, обязательное — Публичный client_id для OAuth-запросов
    - `clientType`: "public" | "confidential", обязательное — Тип клиента: confidential — хранит секрет (сервер), public — без секрета (SPA, мобильные)
    - `clientUri`: string, nullable — Сайт приложения
    - `contacts`: массив string, обязательное — Контактные email ответственных
    - `createdAt`: string (date-time), обязательное — Когда создан, ISO 8601
    - `description`: string, nullable — Описание назначения клиента
    - `grantTypes`: массив string, обязательное — Разрешённые OAuth grant-типы
    - `id`: string, обязательное — Внутренний идентификатор записи клиента
    - `isActive`: boolean, обязательное — Активен ли клиент
    - `jwksUri`: string, nullable — JWKS-URL клиента для private_key_jwt
    - `lastUsedAt`: string (date-time), nullable — Последнее использование, ISO 8601
    - `logoUri`: string, nullable — Логотип приложения
    - `name`: string, обязательное — Название клиента
    - `policyUri`: string, nullable — Политика конфиденциальности приложения
    - `redirectUris`: массив string, обязательное — Разрешённые redirect URI для authorization_code
    - `requireDpop`: boolean, обязательное — Обязательна ли DPoP-привязка токенов
    - `requirePkce`: boolean, обязательное — Обязателен ли PKCE для authorization_code
    - `scopes`: массив string, обязательное — Разрешённые scope
    - `tokenEndpointAuthMethod`: string, nullable — Способ аутентификации на token endpoint (RFC 7591)
    - `tosUri`: string, nullable — Условия использования приложения
    - `updatedAt`: string (date-time), обязательное — Когда обновлён, ISO 8601
  - `clientSecret`: string — Секрет confidential-клиента — показывается только один раз, сохраните его
- `400` — Некорректный запрос: не прошла валидация параметров или тела (`application/problem+json`, ProblemDetails)
- `401` — Токен отсутствует, недействителен или истёк (`application/problem+json`, ProblemDetails)
- `403` — Недостаточно прав или scope (`application/problem+json`, ProblemDetails)
- `429` — Превышен лимит запросов, повторите через Retry-After секунд (`application/problem+json`, ProblemDetails)

    </>
  );
}
