# Динамическая регистрация клиента OAuth 2.0 (RFC 7591)

export default function Layout(props) {
  const { OpenAPIPage } = props.components ?? {};
  return (
    <>
      {props.children}
      ## Динамическая регистрация клиента OAuth 2.0 (RFC 7591)

`POST /oauth/register`

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

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

**Тело запроса** (`application/json`, обязательное): OAuthRegisterRequest
- `application_type`: "web" | "native" — Тип приложения
- `client_name`: string — Название приложения
- `grant_types`: массив string — Запрашиваемые grant-типы
- `redirect_uris`: массив string, обязательное — Redirect URI: https или loopback (`http://127.0.0.1`), без wildcard, до 5
- `response_types`: массив string — Запрашиваемые response_type
- `scope`: string — Запрашиваемые scope через пробел (openid, profile, email, mcp:tools:execute)
- `token_endpoint_auth_method`: string — Способ аутентификации; для публичных клиентов none

**Ответы**

- `201` — Клиент зарегистрирован (`application/json`, OAuthRegisterResponse)
  - `application_type`: string, обязательное — Тип приложения
  - `client_id`: string, обязательное — Выданный client_id
  - `client_id_issued_at`: number, обязательное — Когда выдан, Unix-время
  - `client_name`: string, обязательное — Название приложения
  - `grant_types`: массив string, обязательное — Разрешённые grant-типы
  - `redirect_uris`: массив string, обязательное — Зарегистрированные redirect URI
  - `response_types`: массив string, обязательное — Разрешённые response_type
  - `scope`: string, обязательное — Разрешённые scope через пробел
  - `token_endpoint_auth_method`: string, обязательное — Способ аутентификации на token-endpoint
- `400` — Некорректные метаданные клиента (`application/json`, OAuthError)
- `429` — Превышен лимит запросов, повторите через Retry-After секунд (`application/problem+json`, ProblemDetails)

    </>
  );
}
