Статья на модерации
Содержание статьи
Lamoda использует OAuth 2.0 с типом гранта client_credentials. Для доступа к API необходимо получить токен и передавать его в заголовке каждого запроса.
- Один набор
client_id/client_secretдля обоих API - Время жизни токена: 15 минут (900 секунд) для обоих API
- Endpoints авторизации разные для каждого API
Endpoints авторизации
| API | Endpoint | TTL токена |
| Seller API |
https://public-api-seller.lamoda.ru/jsonrpcметод: v1.tokens.create
|
15 минут |
| B2B Platform API |
https://api-b2b.lamoda.ru/auth/token
|
15 минут |
Получение токена
Seller API (JSON-RPC)
curl -X POST https://public-api-seller.lamoda.ru/jsonrpc \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": "550e8400-e29b-41d4-a716-446655440000",
"method": "v1.tokens.create",
"params": {
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"grant_type": "client_credentials"
}
}'
Успешный ответ Seller API:
{
"jsonrpc": "2.0",
"id": "550e8400-e29b-41d4-a716-446655440000",
"result": {
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 900
}
}
B2B Platform API (REST)
curl -X POST https://api-b2b.lamoda.ru/auth/token \
-H "Content-Type: application/json" \
-d '{
"client_id": "your_client_id",
"client_secret": "your_client_secret",
"grant_type": "client_credentials"
}'
Успешный ответ B2B API:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 900
}
| Поле | Тип | Описание |
access_token
|
string | JWT-токен для авторизации запросов |
token_type
|
string |
Всегда Bearer
|
expires_in
|
integer | Время жизни в секундах (900 = 15 минут) |
Токен живёт только 15 минут. Если ваша интеграция выполняет длительные операции (загрузка большого каталога, batch-обновление цен), необходимо:
- Обновлять токен заранее (за 1-2 минуты до истечения)
- Или запрашивать новый токен при получении ошибки
401 Unauthorized
Использование токена
Передавайте токен в заголовке Authorization:
curl -X GET https://api-b2b.lamoda.ru/api/v1/orders \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Стратегии обновления токена
Вариант 1: Проактивное обновление (рекомендуется)
Обновляйте токен за 1-2 минуты до истечения:
import time
import requests
class LamodaAPI:
def __init__(self, client_id, client_secret, base_url):
self.client_id = client_id
self.client_secret = client_secret
self.base_url = base_url
self.token = None
self.token_expires_at = 0
def get_token(self):
# Обновляем токен за 60 секунд до истечения
if self.token and time.time() < self.token_expires_at - 60:
return self.token
response = requests.post(
f"{self.base_url}/auth/token",
json={
"client_id": self.client_id,
"client_secret": self.client_secret,
"grant_type": "client_credentials"
}
)
data = response.json()
self.token = data["access_token"]
self.token_expires_at = time.time() + data["expires_in"]
return self.token
def request(self, method, endpoint, **kwargs):
headers = kwargs.pop("headers", {})
headers["Authorization"] = f"Bearer {self.get_token()}"
return requests.request(
method,
f"{self.base_url}{endpoint}",
headers=headers,
**kwargs
)
Вариант 2: Реактивное обновление
При получении 401 Unauthorized — запросите новый токен и повторите запрос:
def request_with_retry(api, method, endpoint, data=None):
try:
return api.request(method, endpoint, json=data)
except requests.HTTPError as e:
if e.response.status_code == 401:
# Сбрасываем токен и пробуем снова
api.token = None
return api.request(method, endpoint, json=data)
raise
Ошибки авторизации
| Код | Сообщение | Причина | Решение |
50401
|
Unauthorized | Токен истёк или невалиден | Запросите новый токен |
50400
|
Партнер не найден / Partner not found |
Неверный client_id или client_secret
|
Проверьте учётные данные у менеджера |
50403
|
Forbidden | Нет прав на ресурс | Проверьте права доступа у менеджера |
Частые проблемы
«Партнер не найден» (50400)Причины:
- Неверный
client_idилиclient_secret - Партнер не активирован в системе
Это нормальное поведение! TTL токена = 900 секунд = 15 минут.
Реализуйте автоматическое обновление токена (см. примеры выше).
См. также
Помогла эта информация?
Спасибо за отзыв
0/1000
Отправить