Новость на модерации
Содержание статьи
Lamoda предоставляет различные инструменты для интеграции: OpenAPI-спецификации, Postman-коллекции и готовые решения от технологических партнёров.
OpenAPI-спецификации
Официальные OpenAPI-спецификации для автогенерации клиентов:
| API | Формат | Описание |
| B2B Platform API | OpenAPI 3.0 (YAML) | REST API для работы с товарами, поставками, остатками |
| Seller API | OpenAPI 3.0 (YAML) | JSON-RPC API для номенклатуры, цен, заказов |
Спецификации доступны в разделе документации и могут быть использованы для генерации клиентов на любом языке программирования.
Генерация клиента из OpenAPI
# Установка OpenAPI Generator npm install @openapitools/openapi-generator-cli -g # Генерация Python-клиента openapi-generator-cli generate \ -i lamoda_b2b_api.yaml \ -g python \ -o ./lamoda-python-client # Генерация PHP-клиента openapi-generator-cli generate \ -i lamoda_b2b_api.yaml \ -g php \ -o ./lamoda-php-client
Postman-коллекции
Готовые коллекции для тестирования API в Postman:
- Lamoda B2B Platform API — методы REST API
- Lamoda Seller API — методы JSON-RPC
Импорт коллекции
- Откройте Postman
- Нажмите Import
- Выберите файл коллекции (
.json) - Настройте переменные окружения:
base_url—https://api-demo-b2b.lamoda.ruилиhttps://api-b2b.lamoda.ruclient_id— ваш Client IDclient_secret— ваш Client Secretaccess_token— автоматически заполняется после авторизации
Технологические партнёры
Lamoda сотрудничает с компаниями, предоставляющими готовые решения для интеграции:
1C-интеграции
| Партнёр | Поддерживаемые конфигурации | Модели | Функционал |
| Айтикс | УНФ, КА 2.4, КА 2.5, УТ 10.3, УТ 11.4, УТ 11.5, УПП, ERP | FBO, FBS |
|
| 1С:Франчайзи Виктория | УНФ, КА, УТ, ERP | FBO, FBS |
|
МойСклад
| Партнёр | Модели | Функционал |
| Smart Sellers | FBS |
|
Универсальные решения
| Партнёр | Модели | Функционал |
| Adapter | FBO, FBS |
|
Совет: Если вы испытываете сложности с интеграцией, обратитесь к технологическим партнёрам. Это позволит ускорить выход на Lamoda и настроить процессы с минимальными усилиями.
Примеры кода
Python (requests)
import requests
from datetime import datetime, timedelta
class LamodaClient:
def __init__(self, client_id, client_secret, is_demo=True):
self.client_id = client_id
self.client_secret = client_secret
self.base_url = "https://api-demo-b2b.lamoda.ru" if is_demo else "https://api-b2b.lamoda.ru"
self.token = None
self.token_expires_at = None
def _get_token(self):
"""Получение OAuth-токена"""
if self.token and self.token_expires_at > datetime.now():
return self.token
response = requests.post(
f"{self.base_url}/auth/token",
data={
"grant_type": "client_credentials",
"client_id": self.client_id,
"client_secret": self.client_secret
}
)
response.raise_for_status()
data = response.json()
self.token = data["access_token"]
self.token_expires_at = datetime.now() + timedelta(seconds=data["expires_in"] - 60)
return self.token
def _request(self, method, endpoint, **kwargs):
"""Выполнение запроса с автоматическим обновлением токена"""
headers = kwargs.pop("headers", {})
headers["Authorization"] = f"Bearer {self._get_token()}"
headers["Content-Type"] = "application/json"
response = requests.request(
method,
f"{self.base_url}{endpoint}",
headers=headers,
**kwargs
)
response.raise_for_status()
return response.json()
def get_orders(self, status=None, page=1, limit=25):
"""Получение списка заказов"""
params = {"page": page, "limit": limit}
if status:
params["status"] = status
return self._request("GET", "/api/v1/orders", params=params)
def get_stock(self, page=1, limit=100):
"""Получение остатков"""
return self._request("GET", "/api/v1/stock/goods", params={
"page": page,
"limit": limit
})
def create_shipment(self, shipment_data):
"""Создание поставки FBO"""
return self._request("POST", "/api/v1/shipments/fulfilment", json=shipment_data)
# Пример использования
client = LamodaClient("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", is_demo=True)
orders = client.get_orders(status="Confirmed")
print(orders)
PHP (Guzzle)
<?php
use GuzzleHttp\Client;
class LamodaClient {
private $client;
private $clientId;
private $clientSecret;
private $baseUrl;
private $token;
private $tokenExpiresAt;
public function __construct($clientId, $clientSecret, $isDemo = true) {
$this->clientId = $clientId;
$this->clientSecret = $clientSecret;
$this->baseUrl = $isDemo
? 'https://api-demo-b2b.lamoda.ru'
: 'https://api-b2b.lamoda.ru';
$this->client = new Client(['base_uri' => $this->baseUrl]);
}
private function getToken() {
if ($this->token && $this->tokenExpiresAt > time()) {
return $this->token;
}
$response = $this->client->post('/auth/token', [
'form_params' => [
'grant_type' => 'client_credentials',
'client_id' => $this->clientId,
'client_secret' => $this->clientSecret
]
]);
$data = json_decode($response->getBody(), true);
$this->token = $data['access_token'];
$this->tokenExpiresAt = time() + $data['expires_in'] - 60;
return $this->token;
}
private function request($method, $endpoint, $options = []) {
$options['headers'] = array_merge($options['headers'] ?? [], [
'Authorization' => 'Bearer ' . $this->getToken(),
'Content-Type' => 'application/json'
]);
$response = $this->client->request($method, $endpoint, $options);
return json_decode($response->getBody(), true);
}
public function getOrders($status = null, $page = 1, $limit = 25) {
$query = ['page' => $page, 'limit' => $limit];
if ($status) $query['status'] = $status;
return $this->request('GET', '/api/v1/orders', ['query' => $query]);
}
public function getStock($page = 1, $limit = 100) {
return $this->request('GET', '/api/v1/stock/goods', [
'query' => ['page' => $page, 'limit' => $limit]
]);
}
}
// Пример использования
$client = new LamodaClient('YOUR_CLIENT_ID', 'YOUR_CLIENT_SECRET', true);
$orders = $client->getOrders('Confirmed');
print_r($orders);
JavaScript/Node.js (axios)
const axios = require('axios');
class LamodaClient {
constructor(clientId, clientSecret, isDemo = true) {
this.clientId = clientId;
this.clientSecret = clientSecret;
this.baseUrl = isDemo
? 'https://api-demo-b2b.lamoda.ru'
: 'https://api-b2b.lamoda.ru';
this.token = null;
this.tokenExpiresAt = null;
}
async getToken() {
if (this.token && this.tokenExpiresAt > Date.now()) {
return this.token;
}
const response = await axios.post(`${this.baseUrl}/auth/token`,
new URLSearchParams({
grant_type: 'client_credentials',
client_id: this.clientId,
client_secret: this.clientSecret
})
);
this.token = response.data.access_token;
this.tokenExpiresAt = Date.now() + (response.data.expires_in - 60) * 1000;
return this.token;
}
async request(method, endpoint, options = {}) {
const token = await this.getToken();
return axios({
method,
url: `${this.baseUrl}${endpoint}`,
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
...options.headers
},
...options
}).then(res => res.data);
}
async getOrders(status = null, page = 1, limit = 25) {
const params = { page, limit };
if (status) params.status = status;
return this.request('GET', '/api/v1/orders', { params });
}
async getStock(page = 1, limit = 100) {
return this.request('GET', '/api/v1/stock/goods', {
params: { page, limit }
});
}
}
// Пример использования
const client = new LamodaClient('YOUR_CLIENT_ID', 'YOUR_CLIENT_SECRET', true);
client.getOrders('Confirmed').then(console.log);
JSON-RPC клиент для Seller API
import requests
import uuid
class LamodaSellerClient:
def __init__(self, client_id, client_secret, is_demo=True):
self.client_id = client_id
self.client_secret = client_secret
self.base_url = "https://api-demo-seller.lamoda.ru" if is_demo else "https://public-api-seller.lamoda.ru/jsonrpc"
self.auth_url = "https://api-demo-b2b.lamoda.ru" if is_demo else "https://api-b2b.lamoda.ru"
self.token = None
def _get_token(self):
"""Получение токена через B2B Platform"""
response = requests.post(
f"{self.auth_url}/auth/token",
data={
"grant_type": "client_credentials",
"client_id": self.client_id,
"client_secret": self.client_secret
}
)
response.raise_for_status()
self.token = response.json()["access_token"]
return self.token
def call(self, method, params=None):
"""Вызов JSON-RPC метода"""
if not self.token:
self._get_token()
payload = {
"jsonrpc": "2.0",
"id": str(uuid.uuid4()),
"method": method,
"params": params or {}
}
response = requests.post(
f"{self.base_url}/jsonrpc",
json=payload,
headers={
"Authorization": f"Bearer {self.token}",
"Content-Type": "application/json"
}
)
response.raise_for_status()
result = response.json()
if "error" in result:
raise Exception(f"API Error: {result['error']}")
return result.get("result")
def get_nomenclatures(self, lamoda_skus=None, page=1, limit=100):
"""Получение списка номенклатур"""
params = {"pagination": {"page": page, "limit": limit}}
if lamoda_skus:
params["filter"] = {"lamoda_sku": lamoda_skus}
return self.call("v1.nomenclatures.list", params)
def set_price(self, lamoda_parent_sku, price, country="RU"):
"""Установка цены (FBS)"""
return self.call("v1.nomenclature.set-price", {
"lamoda_parent_sku": lamoda_parent_sku,
"country": country,
"price": price
})
# Пример использования
seller = LamodaSellerClient("YOUR_CLIENT_ID", "YOUR_CLIENT_SECRET", is_demo=True)
nomenclatures = seller.get_nomenclatures()
print(nomenclatures)
Контакты партнёров
| Партнёр | Контакт | Телефон | |
| Айтикс | Мехнецов Александр | Am@aitiks.pro | +7 921 946 41 61 |
| 1С:Виктория | Еремеев Даниил | sales@1c-victory.ru | +7 495 786 26 32 |
| Smart Sellers | — | info@smart-sellers.ru | — |
| Adapter | — | info@adapter.ru | +7 499 110 55 82 |
См. также
Помогла эта информация?
Спасибо за отзыв