---
metadata:
  - name: generator
    content: Diplodoc Platform v5.44.0
alternate:
  - https://yandex.com/dev/id/doc/en/tokens/refresh-client.md
  - https://yandex.com/dev/id/doc/ru/tokens/refresh-client.md
---
> **Documentation Index:** Fetch the complete configuration index at https://yandex.com/dev/id/doc/ru/llms.txt

# Обновление токена

Получение токена в обмен на refresh-токен:

1. Приложение отправляет [POST-запрос с refresh-токеном](#get-token).
    
1. Яндекс OAuth возвращает токен и новый refresh-токен в [теле ответа](#refresh-response).
    
{% note alert %}

При обновлении основной токен может не измениться. Так происходит, если оставшийся срок его жизни достаточно длительный и выдавать новый токен нет необходимости. Рекомендуем обновлять долгоживущие токены раз в три месяца.

{% endnote %}

<!-- source: ru/_includes/oauth/security.md -->
Полученный токен можно сохранить в приложении и использовать для запросов к API до истечения [времени его жизни](https://yandex.com/dev/id/doc/ru/concepts/ya-oauth-intro.md#ttl). Токен должен быть доступен только вашему приложению, поэтому не рекомендуется сохранять его в браузере или открытых конфигурационных файлах.
<!-- endsource: ru/_includes/oauth/security.md -->

## Обмен refresh-токена на OAuth-токен {#get-token}

### Формат запроса {#refresh-request}

Приложение отправляет refresh-токен, а также свой идентификатор и пароль в POST-запросе.

```
POST /token HTTP/1.1
Host: https://oauth.yandex.ru/
Content-type: application/x-www-form-urlencoded
Content-Length: <длина тела запроса>
[Authorization: Basic <закодированная строка client_id:client_secret>]

   grant_type=refresh_token
 & refresh_token=<refresh_token>
[& client_id=<идентификатор приложения>]
[& client_secret=<секретный ключ>]
```

#### Обязательные параметры

#|
|| **Параметр** | **Описание** ||
|| `grant_type` | Способ запроса OAuth-токена.

Если вы используете refresh-токен, укажите значение `refresh_token`. ||
|| `refresh_token` | Refresh-токен, полученный от Яндекс OAuth вместе с OAuth-токеном. [Время жизни](https://yandex.com/dev/id/doc/ru/concepts/ya-oauth-intro.md#ttl) токенов совпадает. ||
|#

#### Дополнительные параметры
#|
|| **Параметр** | **Описание** ||
|| `client_id` | Идентификатор приложения. Доступен в [свойствах приложения](https://yandex.com/dev/id/doc/ru/register-client.md#app-params). Чтобы открыть свойства, перейдите в [Яндекс OAuth](https://oauth.yandex.ru/) и нажмите на название приложения.

Секретный ключ и идентификатор приложения также можно передать в [заголовке `Authorization`](#auth-header). ||
|| `client_secret` | Секретный ключ. Доступен в [свойствах приложения](https://yandex.com/dev/id/doc/ru/register-client.md#app-params). Чтобы открыть свойства, перейдите в [Яндекс OAuth](https://oauth.yandex.ru/) и нажмите на название приложения.

Секретный ключ и идентификатор приложения также можно передать в [заголовке `Authorization`](#auth-header).
 ||
|#

<!-- source: ru/_includes/oauth/reference/auto-code-client/id-auto-code-client/auth-header.md -->
Параметры запроса должны передаваться в теле запроса и должны быть закодированы в urlencode.

{% note info %}

Чтобы передать идентификатор и секретный ключ в заголовке `Authorization`, закодируйте строку `<client_id>:<client_secret>` методом base64. 

Если Яндекс OAuth получает заголовок `Authorization`, параметры `client_id` и `client_secret` в теле запроса игнорируются. {#auth-header}

{% endnote %}
<!-- endsource: ru/_includes/oauth/reference/auto-code-client/id-auto-code-client/auth-header.md -->

### Формат ответа {#refresh-response}

{% list tabs %}

- Запрос выполнен успешно

   <!-- source: ru/_includes/oauth/reference/auto-code-client/id-auto-code-client/reply-desc.md -->
   Яндекс OAuth возвращает OAuth-токен, refresh-токен и время их жизни в JSON-формате:
   <!-- endsource: ru/_includes/oauth/reference/auto-code-client/id-auto-code-client/reply-desc.md -->

   ```json
   200 OK
   Content-type: application/json

   {
   "access_token": "AQAAAACy1C6ZAAAAfa6vDLuItEy8pg-iIpnDxIs",
   "refresh_token": "1:GN686QVt0mmakDd9:A4pYuW9LGk0_UnlrMIWklkAuJkUWbq27loFekJVmSYrdfzdePBy7:A-2dHOmBxiXgajnD-kYOwQ",
   "token_type": "bearer",
   "expires_in": 124234123534
   }
   ```
   
   #|
   || **Параметр** | **Описание** ||
   || `access_token` | OAuth-токен с правами, которые вы запросили или указали при [регистрации приложения](https://yandex.com/dev/id/doc/ru/register-client.md#access).
 ||
   || `refresh_token` | Токен, который можно использовать для [продления срока жизни](https://yandex.com/dev/id/doc/ru/tokens/refresh-client.md) соответствующего OAuth-токена. ||
   || `token_type` | Тип выданного токена. Всегда принимает значение `bearer`.
 ||
   || `expires_in` | [Время жизни](https://yandex.com/dev/id/doc/ru/concepts/ya-oauth-intro.md#ttl) токена в секундах. 
 ||
   |#

- Запрос выполнен с ошибкой

   Если выдать токен не удалось, ответ содержит описание ошибки:

   ```json
   {
      "error_description": "<описание ошибки>",
      "error": "<код ошибки>"
   }
   ```

   Возможные коды ошибок:
   
   * <!-- source: ru/_includes/oauth/errors/invalid-client.md -->
     `invalid_client` ― приложение с указанным идентификатором (параметр `client_id`) не найдено или заблокировано. Этот код также возвращается, если в параметре `client_secret` передан неверный секретный ключ.
     <!-- endsource: ru/_includes/oauth/errors/invalid-client.md -->

   * `invalid_grant` — неверный или просроченный refresh-токен. Этот код также возвращается, если в refresh-токен принадлежит другому приложению (не соответствует переданному client_id).
   
   * <!-- source: ru/_includes/oauth/errors/invalid-request.md -->
     `invalid_request` ― неверный формат запроса (один из параметров не указан, указан дважды, или передан не в теле запроса).
     <!-- endsource: ru/_includes/oauth/errors/invalid-request.md -->
   
   * <!-- source: ru/_includes/oauth/errors/unauthorized-client.md -->
     `unauthorized_client` — приложение было отклонено при модерации или только ожидает ее. Также возвращается, если приложение заблокировано.
     <!-- endsource: ru/_includes/oauth/errors/unauthorized-client.md -->
   
   * <!-- source: ru/_includes/oauth/errors/grant-type.md -->
     `unsupported_grant_type` ― недопустимое значение параметра `grant_type`.
     <!-- endsource: ru/_includes/oauth/errors/grant-type.md -->
   
   * <!-- source: ru/_includes/oauth/errors/basic-auth.md -->
     `Basic auth required` — тип авторизации, указанный в заголовке `Authorization`, отличен от <q>Basic</q>.
     <!-- endsource: ru/_includes/oauth/errors/basic-auth.md -->
   
   * <!-- source: ru/_includes/oauth/errors/mailformed.md -->
     `Malformed Authorization header` — заголовок `Authorization` не соответствует формату `<client_id>:<client_secret>`, или эта строка не закодирована методом base64.
     <!-- endsource: ru/_includes/oauth/errors/mailformed.md -->

{% endlist %}
