Verdmarket
Уведомления

Добро пожаловать в Verdmarket!

Рады приветствовать вас на нашей платформе! Создайте аккаунт, чтобы получить доступ к полному B2B каталогу. Для новых пользователей, зарегистрированных в апреле — специальные условия по комиссиям!

Регистрация

API поставщика Verdmarket

REST API для программного управления товарами, остатками, ценами и заказами.

Базовый URL

https://www.verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier

Доступные эндпоинты

Метод Эндпоинт Описание
GET/productsСписок товаров
GET/products/{id}Детали товара
POST/productsСоздать товар
POST/products/{id}Обновить товар
POST/products/{id}/deleteУдалить товар
GET/products/{id}/imagesСписок изображений товара
POST/products/{id}/imagesДобавить изображения по URL
POST/products/{id}/images/{imageId}/deleteУдалить изображение
POST/products/{id}/images/{imageId}/primaryУстановить главное изображение
POST/stockМассовое обновление остатков
POST/pricesМассовое обновление цен
GET/ordersСписок заказов
GET/orders/{id}Детали заказа
POST/orders/{id}/statusОбновить статус заказа
GET/categoriesСписок категорий

Аутентификация

Все API-запросы требуют Bearer-токен в заголовке Authorization.

Создайте API-ключ в разделе Панель поставщика → Профиль магазина → API-ключи.

Authorization: Bearer YOUR_API_KEY
Важно: API-ключ показывается только один раз при создании. Сохраните его в надёжном месте. Ключи хранятся в зашифрованном виде — мы не можем их восстановить. При утере отзовите старый и создайте новый.

Лимиты запросов

По умолчанию: 1 000 запросов в час на один API-ключ.

Информация о лимитах возвращается в заголовках ответа:

ЗаголовокОписание
X-RateLimit-LimitМаксимум запросов в час
X-RateLimit-RemainingОставшиеся запросы в текущем окне
X-RateLimit-ResetUnix-метка времени сброса окна
Retry-AfterСекунды до повторной попытки (только при 429)

Формат ответа

Все ответы в формате JSON. Успешные ответы:

{
  "success": true,
  "data": { ... }
}

Ответы с ошибкой:

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Name is required."
  }
}

Товары

GET /products

Список ваших товаров с пагинацией и фильтрацией.

Параметры запроса

ПараметрТипОписание
pageintНомер страницы (по умолчанию: 1)
per_pageintЭлементов на странице (макс.: 100, по умолчанию: 20)
statusstringФильтр: active, inactive, pending
searchstringПоиск по названию или SKU

Пример ответа

{
  "success": true,
  "data": {
    "products": [
      {
        "id": 42,
        "name": "Red Roses Premium",
        "sku": "ROSE-RED-001",
        "type": "flower",
        "base_price": 2.50,
        "unit": "stem",
        "stock_qty": 500,
        "stock_status": "in_stock",
        "is_active": true,
        "is_approved": true,
        "category": { "id": 3, "name": "Roses" },
        "primary_image": "/uploads/products/rose-red.jpg"
      }
    ],
    "pagination": {
      "current_page": 1,
      "total_pages": 5,
      "total_items": 94,
      "per_page": 20
    }
  }
}
GET /products/{id}

Получить один товар с изображениями и вариантами.

POST /products

Создать новый товар. Новые товары требуют одобрения администратора перед появлением в каталоге.

Тело запроса (JSON)

ПолеТипОбяз.Описание
namestring*Название товара
category_idint*ID категории
base_pricefloat*Цена в EUR
unitstring*стебель, букет, коробка, упаковка, штука, килограмм, метр, рулон
typestringflower (по умолчанию) или supply
descriptionstringОписание товара
skustringУникальный SKU (проверяется на дубликаты)
stock_qtyintКоличество на складе (по умолчанию: 0)
min_order_qtyintМин. количество заказа (по умолчанию: 1)
colorstringЦвет товара
stem_lengthintДлина стебля в см
country_of_originstringСтрана происхождения
vat_ratefloatСтавка НДС в % (по умолчанию: 21)
image_urlstringURL изображения. Поддерживаются jpg, png, webp. Несколько URL через точку с запятой (;). Максимум 10 изображений на товар.
POST /products/{id}

Обновить существующий товар. Отправляйте только поля, которые хотите изменить (частичное обновление).

POST /products/{id}/delete

Мягкое удаление товара. Тело запроса не требуется.

Изображения товаров

Ограничения: Максимум 10 изображений на товар. Форматы: JPEG, PNG, WebP. Макс. размер: 5 МБ на изображение. Изображения загружаются с указанных URL — сервер скачивает их автоматически.
GET /products/{id}/images

Получить все изображения товара. Возвращает URL-адреса и флаг основного изображения.

Пример ответа

{
  "success": true,
  "data": {
    "images": [
      {
        "id": 1,
        "url": "/uploads/products/abc123.jpg",
        "thumbnail_url": "/uploads/products/thumb_abc123.jpg",
        "is_primary": true
      },
      {
        "id": 2,
        "url": "/uploads/products/def456.jpg",
        "thumbnail_url": "/uploads/products/thumb_def456.jpg",
        "is_primary": false
      }
    ]
  }
}
POST /products/{id}/images

Добавить изображения по URL. Сервер загружает, проверяет (jpg/png/webp, макс. 5 МБ) и автоматически создаёт миниатюры. Используйте точку с запятой для нескольких URL.

Тело запроса (JSON)

ПолеТипОбяз.Описание
image_urlstring*URL изображения. Поддерживаются jpg, png, webp. Несколько URL через точку с запятой (;). Максимум 10 изображений на товар.

Тело запроса

{
  "image_url": "https://example.com/images/rose.jpg;https://example.com/images/rose-2.jpg"
}
POST /products/{id}/images/{imageId}/delete

Удалить изображение товара. Файл удаляется с сервера. Если удалённое изображение было основным, следующее становится основным автоматически.

POST /products/{id}/images/{imageId}/primary

Установить изображение как основное (главное). Основное изображение отображается в каталоге и результатах поиска.

Массовое обновление остатков

POST /stock

Обновление остатков для нескольких товаров одновременно. Идентификация по product_id или sku. Макс. 500 позиций за запрос.

Тело запроса

{
  "items": [
    { "product_id": 42, "stock_qty": 500 },
    { "sku": "ROSE-RED-001", "stock_qty": 250 },
    { "sku": "LILY-WHT-003", "stock_qty": 0 }
  ]
}

Ответ

{
  "success": true,
  "data": {
    "updated": 2,
    "failed": 1,
    "errors": [
      { "index": 2, "sku": "LILY-WHT-003", "error": "Product not found" }
    ]
  }
}

Массовое обновление цен

POST /prices

Обновление цен для нескольких товаров. Тот же формат, что и обновление остатков, но с полем base_price. Макс. 500 позиций.

Тело запроса

{
  "items": [
    { "product_id": 42, "base_price": 2.75 },
    { "sku": "ROSE-RED-001", "base_price": 3.10 }
  ]
}

Заказы

GET /orders

Список ваших групп заказов (части заказа для поставщика).

Параметры запроса

ПараметрТипОписание
pageintНомер страницы
per_pageintЭлементов на странице (макс. 100)
statusstringpending, confirmed, processing, shipped, delivered, completed, cancelled
GET /orders/{id}

Полные детали заказа, включая товары, информацию о покупателе и историю статусов.

POST /orders/{id}/status

Обновить статус заказа. Разрешены только допустимые переходы:

ИзДопустимые переходы
pendingconfirmed, cancelled
confirmedprocessing, cancelled
processingshipped, cancelled
shippeddelivered

Тело запроса

{
  "status": "confirmed",
  "comment": "Order confirmed, preparing for shipment"
}

Категории

GET /categories

Список всех активных категорий. Возвращает плоский список с родительскими ссылками.

Пример ответа

{
  "success": true,
  "data": {
    "categories": [
      { "id": 1, "name": "Flowers", "slug": "flowers", "parent_id": null, "type": "flower" },
      { "id": 3, "name": "Roses", "slug": "roses", "parent_id": 1, "type": "flower" }
    ]
  }
}

Коды ошибок

HTTPКодОписание
401UNAUTHORIZEDОтсутствующий или недействительный API-ключ
403FORBIDDENКлюч отозван или поставщик не верифицирован
404NOT_FOUNDРесурс не найден
422VALIDATION_ERRORНекорректные входные данные
429RATE_LIMITEDПревышен лимит запросов
500SERVER_ERRORВнутренняя ошибка сервера

Примеры кода

Список товаров

curl -X GET "https://www.verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/products?page=1&per_page=10" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

Создание товара

curl -X POST "https://www.verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/products" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Red Roses Premium",
    "category_id": 3,
    "base_price": 2.50,
    "unit": "stem",
    "stock_qty": 500,
    "sku": "ROSE-RED-001",
    "color": "Red",
    "stem_length": 60,
    "country_of_origin": "Netherlands",
    "image_url": "https://example.com/images/rose-red.jpg"
  }'

Добавление изображений

curl -X POST "https://www.verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/products/42/images" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://example.com/img/photo1.jpg;https://example.com/img/photo2.jpg"
  }'

Массовое обновление остатков

curl -X POST "https://www.verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier/stock" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {"sku": "ROSE-RED-001", "stock_qty": 500},
      {"sku": "LILY-WHT-003", "stock_qty": 200}
    ]
  }'

Пример на PHP

<?php
$apiKey = 'YOUR_API_KEY';
$baseUrl = 'https://www.verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier';

// List products
$ch = curl_init("$baseUrl/products?page=1&per_page=10");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer $apiKey",
        "Accept: application/json",
    ],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

// Bulk stock update
$ch = curl_init("$baseUrl/stock");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode([
        'items' => [
            ['sku' => 'ROSE-RED-001', 'stock_qty' => 500],
            ['sku' => 'LILY-WHT-003', 'stock_qty' => 200],
        ],
    ]),
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer $apiKey",
        "Content-Type: application/json",
    ],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

Пример на Python

import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://www.verdmarket.com.mature-black-wombat.65-108-70-81.cpanel.site/api/v1/supplier"
headers = {"Authorization": f"Bearer {API_KEY}"}

# List products
resp = requests.get(f"{BASE_URL}/products", headers=headers,
                    params={"page": 1, "per_page": 10})
products = resp.json()

# Bulk stock update
resp = requests.post(f"{BASE_URL}/stock", headers=headers,
                     json={"items": [
                         {"sku": "ROSE-RED-001", "stock_qty": 500},
                         {"sku": "LILY-WHT-003", "stock_qty": 200},
                     ]})
result = resp.json()

# Update order status
resp = requests.post(f"{BASE_URL}/orders/15/status", headers=headers,
                     json={"status": "confirmed",
                           "comment": "Ready for shipment"})
print(resp.json())

Настройки файлов cookie

Мы используем файлы cookie для улучшения вашего опыта. Подробнее в нашей Политике конфиденциальности.

Настроить

Необходимые

Необходимы для работы сайта. Нельзя отключить.