6
Стать партнером
6
{{ formatMonthYear(startMonth) }}
{{ d }}
{{ day.day }}
{{ formatMonthYear(endMonth) }}
{{ d }}
{{ day.day }}
Новость на модерации
Обновлено
18.12.2025
Содержание статьи

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

Импорт коллекции

  1. Откройте Postman
  2. Нажмите Import
  3. Выберите файл коллекции (.json)
  4. Настройте переменные окружения:
    • base_urlhttps://api-demo-b2b.lamoda.ru или https://api-b2b.lamoda.ru
    • client_id — ваш Client ID
    • client_secret — ваш Client Secret
    • access_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
  • Сопровождение модерации

Совет: Если вы испытываете сложности с интеграцией, обратитесь к технологическим партнёрам. Это позволит ускорить выход на 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)

Контакты партнёров

Партнёр Контакт Email Телефон
Айтикс Мехнецов Александр 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

См. также

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

Да Нет

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

Отправить
Коды ошибок в API
Рекомендации по надежной интеграции от партнеров