3
Стать партнером
3
{{ formatMonthYear(startMonth) }}
{{ d }}
{{ day.day }}
{{ formatMonthYear(endMonth) }}
{{ d }}
{{ day.day }}
Новость на модерации
Обновлено
18.12.2025
Содержание статьи
<p>Lamoda использует OAuth 2.0 с типом гранта <code>client_credentials</code>. Для доступа к API необходимо получить токен и передавать его в заголовке каждого запроса.</p><br />
<br />
<b> Важно: единые credentials, единый TTL</b><br />
<ul><br />
<li>Один набор <code>client_id</code> / <code>client_secret</code> для обоих API</li><br />
<li>Время жизни токена: <b>15 минут (900 секунд)</b> для обоих API</li><br />
<li>Endpoints авторизации разные для каждого API</li><br />
</ul><br />
<h2>Endpoints авторизации</h2><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>API</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Endpoint</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>TTL токена</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">Seller API</td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code><a class="txttohtmllink" href="https://public-api-seller.lamoda.ru/jsonrpc">https://public-api-seller.lamoda.ru/jsonrpc</a></code><br>метод: <code>v1.tokens.create</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">15 минут</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;">B2B Platform API</td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code><a class="txttohtmllink" href="https://api-b2b.lamoda.ru/auth/token">https://api-b2b.lamoda.ru/auth/token</a></code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">15 минут</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<h2>Получение токена</h2><br />
<br />
<h3>Seller API (JSON-RPC)</h3><br />
<br />
<pre><code>curl -X POST <a class="txttohtmllink" href="https://public-api-seller.lamoda.ru/jsonrpc">https://public-api-seller.lamoda.ru/jsonrpc</a> \<br />
  -H "Content-Type: application/json" \<br />
  -d '{<br />
    "jsonrpc": "2.0",<br />
    "id": "550e8400-e29b-41d4-a716-446655440000",<br />
    "method": "v1.tokens.create",<br />
    "params": {<br />
      "client_id": "your_client_id",<br />
      "client_secret": "your_client_secret",<br />
      "grant_type": "client_credentials"<br />
    }<br />
}'</code></pre><br />
<br />
<p><b>Успешный ответ Seller API:</b></p><br />
<br />
<pre><code>{<br />
  "jsonrpc": "2.0",<br />
  "id": "550e8400-e29b-41d4-a716-446655440000",<br />
  "result": {<br />
    "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",<br />
    "token_type": "bearer",<br />
    "expires_in": 900<br />
  }<br />
}</code></pre><br />
<br />
<h3>B2B Platform API (REST)</h3><br />
<br />
<pre><code>curl -X POST <a class="txttohtmllink" href="https://api-b2b.lamoda.ru/auth/token">https://api-b2b.lamoda.ru/auth/token</a> \<br />
  -H "Content-Type: application/json" \<br />
  -d '{<br />
    "client_id": "your_client_id",<br />
    "client_secret": "your_client_secret",<br />
    "grant_type": "client_credentials"<br />
}'</code></pre><br />
<br />
<p><b>Успешный ответ B2B API:</b></p><br />
<br />
<pre><code>{<br />
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",<br />
  "token_type": "Bearer",<br />
  "expires_in": 900<br />
}</code></pre><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Поле</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Тип</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Описание</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>access_token</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">string</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">JWT-токен для авторизации запросов</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>token_type</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">string</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Всегда <code>Bearer</code></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>expires_in</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">integer</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Время жизни в секундах (900 = 15 минут)</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<b> TTL = 15 минут!</b><br><br><br />
Токен живёт только <b>15 минут</b>. Если ваша интеграция выполняет длительные операции (загрузка большого каталога, batch-обновление цен), необходимо:<br />
<ul><br />
<li>Обновлять токен заранее (за 1-2 минуты до истечения)</li><br />
<li>Или запрашивать новый токен при получении ошибки <code>401 Unauthorized</code></li><br />
</ul><br />
<h2>Использование токена</h2><br />
<br />
<p>Передавайте токен в заголовке <code>Authorization</code>:</p><br />
<br />
<pre><code>curl -X GET <a class="txttohtmllink" href="https://api-b2b.lamoda.ru/api/v1/orders">https://api-b2b.lamoda.ru/api/v1/orders</a> \<br />
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."</code></pre><br />
<br />
<h2>Стратегии обновления токена</h2><br />
<br />
<h3>Вариант 1: Проактивное обновление (рекомендуется)</h3><br />
<br />
<p>Обновляйте токен за 1-2 минуты до истечения:</p><br />
<br />
<pre><code>import time<br />
import requests<br />
<br />
class LamodaAPI:<br />
    def __init__(self, client_id, client_secret, base_url):<br />
        self.client_id = client_id<br />
        self.client_secret = client_secret<br />
        self.base_url = base_url<br />
        self.token = None<br />
        self.token_expires_at = 0<br />
    <br />
    def get_token(self):<br />
        # Обновляем токен за 60 секунд до истечения<br />
        if self.token and time.time() < self.token_expires_at - 60:<br />
            return self.token<br />
        <br />
        response = requests.post(<br />
            f"{self.base_url}/auth/token",<br />
            json={<br />
                "client_id": self.client_id,<br />
                "client_secret": self.client_secret,<br />
                "grant_type": "client_credentials"<br />
            }<br />
        )<br />
        data = response.json()<br />
        <br />
        self.token = data["access_token"]<br />
        self.token_expires_at = time.time() + data["expires_in"]<br />
        <br />
        return self.token<br />
    <br />
    def request(self, method, endpoint, **kwargs):<br />
        headers = kwargs.pop("headers", {})<br />
        headers["Authorization"] = f"Bearer {self.get_token()}"<br />
        <br />
        return requests.request(<br />
            method,<br />
            f"{self.base_url}{endpoint}",<br />
            headers=headers,<br />
            **kwargs<br />
)</code></pre><br />
<br />
<h3>Вариант 2: Реактивное обновление</h3><br />
<br />
<p>При получении <code>401 Unauthorized</code> — запросите новый токен и повторите запрос:</p><br />
<br />
<pre><code>def request_with_retry(api, method, endpoint, data=None):<br />
    try:<br />
        return api.request(method, endpoint, json=data)<br />
    except requests.HTTPError as e:<br />
        if e.response.status_code == 401:<br />
            # Сбрасываем токен и пробуем снова<br />
            api.token = None<br />
            return api.request(method, endpoint, json=data)<br />
raise</code></pre><br />
<br />
<h2>Ошибки авторизации</h2><br />
<br />
<table style="border-collapse: collapse; width: 100%;"><br />
<tbody><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Код</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Сообщение</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Причина</b></td><br />
<td style="border: 1px solid #ddd; padding: 8px;"><b>Решение</b></td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>50401</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Unauthorized</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Токен истёк или невалиден</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Запросите новый токен</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>50400</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Партнер не найден / Partner not found</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Неверный <code>client_id</code> или <code>client_secret</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Проверьте учётные данные у менеджера</td><br />
</tr><br />
<tr><br />
<td style="border: 1px solid #ddd; padding: 8px;"><code>50403</code></td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Forbidden</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Нет прав на ресурс</td><br />
<td style="border: 1px solid #ddd; padding: 8px;">Проверьте права доступа у менеджера</td><br />
</tr><br />
</tbody><br />
</table><br />
<br />
<p>Полный список ошибок: <a href="17_2_error_codes.html">Справочник кодов ошибок</a></p><br />
<br />
<h2>Частые проблемы</h2><br />
<br />
<b> "Партнер не найден" (50400)</b><br><br><br />
<b>Причины:</b><br />
<ul><br />
<li>Неверный <code>client_id</code> или <code>client_secret</code></li><br />
<li>Партнёр не активирован в системе</li><br />
</ul><br />
<b>Решение:</b> Уточните credentials у вашего менеджера Lamoda<br />
<b> Токен перестаёт работать через 15 минут</b><br><br><br />
Это нормальное поведение! TTL токена = 900 секунд = 15 минут.<br><br />
Реализуйте автоматическое обновление токена (см. примеры выше).<br />
<h2>См. также</h2><br />
<br />
<ul><br />
<li><a href="1_4_auth_errors.html">Типичные ошибки авторизации</a></li><br />
<li><a href="17_2_error_codes.html">Справочник кодов ошибок</a></li><br />
<li><a href="16_1_postman_collection.html">Postman-коллекции</a></li><br />
</ul>

Помогла эта информация?

Да Нет

Спасибо за отзыв

Отправить
Атрибуты и справочники
Seller Partner API vs B2B
Спросить у Lamoda Seller Assistant в Telegram