OAuth 2.0 авторизация
Lamoda использует OAuth 2.0 с типом гранта client_credentials. Для доступа к API необходимо получить токен и передавать его в заголовке каждого запроса.
Получение учётных данных (credentials)
Для авторизации в API необходимы ключи client_id и client_secret. Эти данные предоставляются вашим менеджером (KAM) при подключении к платформе.
| Что получить | От кого | Для чего |
client_id
|
Менеджер (KAM) | Идентификация клиента при авторизации |
client_secret
|
Менеджер (KAM) | Секретный ключ для авторизации |
Важно: Один набор client_id / client_secret работает для обоих API (Lamoda Seller Partner API и Lamoda B2B Platform Partner API). Храните client_secret в безопасном месте и не передавайте третьим лицам.
Endpoints авторизации
| API | Endpoint | Метод |
| Lamoda Seller Partner API |
https://public-api-seller.lamoda.ru/jsonrpc/v1/tokens.create
|
POST |
| Lamoda B2B Platform Partner API |
https://api-b2b.lamoda.ru/auth/token
|
POST |
Время жизни токена (TTL): 15 минут (900 секунд) для обоих API.
Получение токена: Lamoda Lamoda Seller Partner API
Запрос
curl -X POST 'https://public-api-seller.lamoda.ru/jsonrpc/v1/tokens.create' \
-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"
}
}'
Параметры запроса
| Параметр | Тип | Обязательный | Допустимые значения | Описание |
jsonrpc
|
string | Да |
"2.0"
|
Версия протокола JSON-RPC. Всегда "2.0"
|
id
|
string | Да | UUID v4, 36 символов | Уникальный идентификатор запроса. Возвращается в ответе для сопоставления |
method
|
string | Да |
"POST /jsonrpc/v1/tokens.create"
|
Название вызываемого метода |
params.client_id
|
string | Да | — | Идентификатор клиента, полученный от менеджера |
params.client_secret
|
string | Да | — | Секретный ключ клиента, полученный от менеджера |
params.grant_type
|
string | Да |
"client_credentials"
|
Тип авторизации OAuth 2.0. Всегда "client_credentials"
|
Успешный ответ (HTTP 200)
{
"jsonrpc": "2.0",
"id": "550e8400-e29b-41d4-a716-446655440000",
"result": {
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...",
"expires_in": 900,
"token_type": "bearer",
"scope": "partner_client r_orders c_order u_order r_nomenclatures ..."
}
}
Поля ответа
| Поле | Тип | Пример | Описание |
jsonrpc
|
string |
"2.0"
|
Версия протокола JSON-RPC |
id
|
string |
"550e8400-..."
|
ID запроса (совпадает с отправленным) |
result.access_token
|
string |
"eyJ0eXAi..."
|
JWT-токен для авторизации запросов |
result.expires_in
|
integer |
900
|
Время жизни токена в секундах (900 = 15 минут) |
result.token_type
|
string |
"bearer"
|
Тип токена. Всегда "bearer"
|
result.scope
|
string |
"partner_client r_orders ..."
|
Список прав доступа через пробел (см. таблицу scopes) |
Получение токена: Lamoda B2B Platform Partner 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"
}'
Параметры запроса
| Параметр | Тип | Обязательный | Допустимые значения | Описание |
client_id
|
string | Да | — | Идентификатор клиента, полученный от менеджера |
client_secret
|
string | Да | — | Секретный ключ клиента, полученный от менеджера |
grant_type
|
string | Да |
"client_credentials"
|
Тип авторизации OAuth 2.0. Всегда "client_credentials"
|
Успешный ответ (HTTP 200)
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 900,
"token_type": "Bearer",
"scope": "partner_client r_orders c_order ..."
}
Поля ответа
| Поле | Тип | Пример | Описание |
access_token
|
string |
"eyJhbGci..."
|
JWT-токен для авторизации запросов |
expires_in
|
integer |
900
|
Время жизни токена в секундах (900 = 15 минут) |
token_type
|
string |
"Bearer"
|
Тип токена. Всегда "Bearer"
|
scope
|
string |
"partner_client r_orders ..."
|
Список прав доступа через пробел |
Использование токена
Передавайте токен в заголовке Authorization с префиксом Bearer:
curl -X GET 'https://api-b2b.lamoda.ru/api/v1/orders' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIs...'
Важно: Между словом Bearer и токеном должен быть ровно один пробел. Не используйте кавычки вокруг токена.
Права доступа (scopes)
Поле scope в ответе содержит список прав, доступных вашему токену. Основные права:
| Scope | Описание |
partner_client
|
Базовый доступ партнёра |
r_orders
|
Чтение списка заказов |
r_order
|
Чтение деталей заказа |
c_order
|
Создание заказов |
u_order
|
Обновление заказов |
c_shipments
|
Создание отгрузок |
r_shipments
|
Чтение отгрузок |
r_nomenclatures
|
Чтение номенклатуры |
c_nomenclature
|
Создание номенклатуры |
u_nomenclature
|
Обновление номенклатуры |
r_stock
|
Чтение остатков |
c_status_change
|
Изменение статусов |
r_reports_label
|
Получение этикеток |
u_notifications
|
Управление нотификациями |
Если в ответе отсутствует нужный scope, обратитесь к вашему менеджеру для расширения прав доступа.
Время жизни токена (TTL)
TTL токена = 900 секунд = 15 минут.
Токен необходимо обновлять до истечения срока действия. Рекомендуемые стратегии:
Вариант 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 | Нет прав на ресурс (отсутствует scope) | Проверьте права доступа у менеджера |
Полный список ошибок: Справочник кодов ошибок
Частые проблемы
"Партнер не найден" (код 50400)
Возможные причины:
- Неверный
client_idилиclient_secret - Партнёр не активирован в системе
Решение: Уточните учётные данные (credentials) у вашего менеджера.
Токен перестаёт работать через 15 минут
Это нормальное поведение. TTL токена = 900 секунд = 15 минут. Реализуйте автоматическое обновление токена (см. примеры выше).
Отсутствие пробела после Bearer
Неправильно: Authorization: BearereyJhbGci...
Правильно: Authorization: Bearer eyJhbGci...
См. также
Помогла эта информация?
Спасибо за отзыв