REST API · остатки и цены

Подключение через API

Передавайте остатки и цены напрямую из своих систем. Одного запроса достаточно, чтобы Veloseller начал рассчитывать дефицит, потерянную выручку, неликвид и рекомендации по закупке.

base urlhttps://veloseller.com
bash
$ curl -X POST https://veloseller.com/api/v1/ingest \
  -H "Authorization: Bearer vs_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "items": [
        { "sku": "ART-001", "stock_quantity": 42, "price": 590 }
      ] }'

← 200 OK
{ "ok": true, "parsed": 1, "inserted": 1 }
POST
/api/v1/ingestотправить остатки
GET
/api/v1/stockпрочитать остатки
GET
/api/v1/metricsаналитика по каждому SKU
GET
/api/v1/summaryсводка по складу
GET
/api/v1/reorderрекомендации по дозаказу
GET
/api/v1/dynamicsдинамика скорости продаж
GET
/api/v1/sku/{sku}карточка одного SKU
Быстрый старт · 3 шага
1

Создайте склад «API-источник»

В кабинете → Склады → Добавить склад → «API-источник».

2

Получите токен

На странице склада нажмите «Сгенерировать токен». Он показывается один раз — сохраните его.

3

Передавайте остатки

POST на /api/v1/ingest с токеном в заголовке. Каждый вызов — новый срез; движение остатков считаем сами.

Эндпоинты

Приём, чтение и вся аналитика

Машиночитаемая спецификация OpenAPI 3.1 — /api/v1/openapi.json (импорт в Postman/Insomnia, генерация клиентов). Списки /stock и /metrics поддерживают постраничность (?limit&offset, поля has_more/next_offset).

POST/api/v1/ingest

Отправить остатки

Токен — в заголовке Authorization: Bearer …. В теле массив items — до 50 000 позиций за раз.

Ответ: { "ok": true, "parsed": N, "inserted": M }

curl -X POST https://veloseller.com/api/v1/ingest \
  -H "Authorization: Bearer vs_live_ТОКЕН" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "sku": "ART-001", "stock_quantity": 42, "price": 590 }
    ]
  }'
GET/api/v1/stock

Прочитать остатки

Забрать то, что Veloseller сейчас видит по вашему складу — последний остаток и цену по каждому SKU. Тот же токен, удобно свериться со своей системой.

запрос
curl https://veloseller.com/api/v1/stock \
  -H "Authorization: Bearer vs_live_ВАШ_ТОКЕН"
ответ · json
{
  "warehouse": "8f3c1a2b-…",
  "count": 128,
  "items": [
    {
      "sku": "ART-001",
      "product_name": "Кружка",
      "stock_quantity": 42,
      "price": 590,
      "updated_at": "2026-07-16T12:00:00Z"
    }
  ]
}
GET/api/v1/metrics

Аналитика по каждому SKU

Вся «начинка» продукта наружу: по каждому товару — реальная скорость продаж (TVelo), на сколько дней хватит остатка, дни out-of-stock, потерянная выручка, сегмент, здоровье, достоверность и флаг «пора заказывать». ?needs_reorder=1 — только то, что пора дозаказать.

запрос
curl "https://veloseller.com/api/v1/metrics?needs_reorder=1" \
  -H "Authorization: Bearer vs_live_ВАШ_ТОКЕН"
ответ · json
{
  "warehouse": "8f3c1a2b-…",
  "period_days": 30,
  "count": 128,
  "items": [
    {
      "sku": "ART-001",
      "product_name": "Кружка",
      "stock_quantity": 42,
      "price": 590,
      "velocity_per_day": 3.2,
      "days_of_cover": 13.1,
      "stockout_days_30d": 2,
      "lost_revenue": 1180,
      "segment": "fast",
      "health_score": 82,
      "confidence": 0.9,
      "needs_reorder": true,
      "updated_at": "2026-07-16"
    }
  ]
}
GET/api/v1/summary

Сводка по складу

KPI дашборда одним запросом: здоровье склада, стоимость остатков, заморожено в неликвиде, потерянная и потенциальная выручка, счётчики SKU (заканчиваются / нет в наличии / неликвид).

ответ · json
{
  "warehouse": "8f3c1a2b-…",
  "period_days": 30,
  "health_score": 76,
  "inventory_value": 3450000,
  "frozen_value": 820000,
  "lost_revenue": 142000,
  "potential_revenue": 320000,
  "sku_counts": {
    "total": 1883, "low_stock": 7, "out_of_stock": 3,
    "dead_inventory": 12, "inactive": 24, "frequently_oos": 5
  },
  "updated_at": "2026-07-16T02:40:00Z"
}
GET/api/v1/reorder

Рекомендации по дозаказу

Готовый список закупки: сколько штук заказать по каждому SKU, чтобы хватило на нужный горизонт с учётом срока поставки. ?days=30 — на сколько дней закупить, ?lead_time=14 — срок поставки. Идеально для автозакупки.

ответ · json
{
  "warehouse": "8f3c1a2b-…",
  "days": 30,
  "lead_time": 14,
  "count": 2,
  "items": [
    {
      "sku": "AB-100", "product_name": "Кофе 250г",
      "current_stock": 8, "velocity_per_day": 3.2,
      "days_of_cover": 2.5, "recommended_qty": 133,
      "reorder_now": true
    }
  ]
}
GET/api/v1/dynamics

Динамика скорости продаж

Кто ускорился, кто просел: сравнение двух последних пересчётов TVelo с изменением в процентах. ?direction=up|down и ?limit=50. Триггерьте дозаказ на растущем спросе и распродажу на падающем.

ответ · json
{
  "warehouse": "8f3c1a2b-…",
  "count": 2,
  "items": [
    {
      "sku": "AB-100", "product_name": "Кофе 250г",
      "velocity_now": 4.1, "velocity_prev": 2.6,
      "delta_pct": 57.7, "direction": "up"
    }
  ]
}
GET/api/v1/sku/{sku}

Карточка одного SKU

Всё по одному товару: текущие метрики, история скорости продаж по 30-дн окнам (для спарклайна) и последние значимые события склада (пополнения, аномалии, пересчёты).

ответ · json
{
  "warehouse": "8f3c1a2b-…",
  "sku": "AB-100",
  "product_name": "Кофе 250г",
  "metrics": {
    "stock_quantity": 8, "price": 590,
    "velocity_per_day": 3.2, "days_of_cover": 2.5,
    "stockout_days_30d": 4, "lost_revenue": 12400,
    "segment": "fast", "health_score": 72,
    "confidence": 88, "needs_reorder": true,
    "updated_at": "2026-07-16"
  },
  "velocity_history": [
    { "date": "2026-06-16", "velocity_per_day": 2.6 },
    { "date": "2026-07-16", "velocity_per_day": 3.2 }
  ],
  "recent_events": [
    { "date": "2026-07-10", "type": "replenishment_like", "delta_stock": 200 }
  ]
}
Поля позиции
skuОбяз.да

Артикул товара — ключ, по которому мы узнаём позицию.

stock_quantityОбяз.да

Текущий остаток, целое число ≥ 0.

priceОбяз.нет

Цена в рублях. Если не передать — возьмём последнюю известную.

product_nameОбяз.нет

Наименование. Обновляется, если передано.

Коды ответов
200

Успех — { ok, parsed, inserted } или { items }

400

Проблема в данных — в ответе указан проблемный sku

401

Токен отсутствует, недействителен или отозван

429

Слишком часто (лимит 10 запросов/мин) — повторите позже

5xx

Временная ошибка — повторите с задержкой (backoff)

Каждый вызов — новый срез

Шлите актуальные остатки хоть раз в день, хоть каждый час. Движение считается между срезами.

Токен — как пароль

Показывается один раз при создании, храним только хэш. Утёк — перевыпустите, старый отзовётся.

Тарифы и лимиты

API входит во все тарифы

Отдельной платы за API нет. «API-источник» — обычный склад: считается в лимите складов тарифа, число SKU — тоже по тарифу. Нужно больше — выше тариф.

Trial
35 days free
  • · 3 warehouses
  • · 10,000 SKUs per warehouse
  • · Full feature set, free
Starter
$29 /mo
  • · 2 warehouses
  • · 1,000 SKUs per warehouse
Growth
$79 /mo
  • · 5 warehouses
  • · 2,000 SKUs per warehouse
Pro
$149 /mo
  • · 15 warehouses
  • · 10,000 SKUs per warehouse

Ещё больше — тариф «Конструктор» (1–20 складов, 1 000–20 000 SKU). Все тарифы →

10 / мин
запросов к API — при превышении 429
50 000
позиций в одном POST /api/v1/ingest
2 000
SKU за один GET /api/v1/stock
Кому подходит

Собственный интернет-магазин

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

Учётная система / 1С

Автоматически передавайте остатки и цены из учётной системы по расписанию или по событию.

Касса / POS

Передавайте остатки и продажи офлайн-магазинов для анализа в единой системе.

Собственная система

Интегрируйте Veloseller с любой системой через API. Одного запроса достаточно для передачи данных.

Готовы подключить?

Создайте API-склад, получите токен — и первый POST можно отправить прямо сейчас.

Начать бесплатно
API Veloseller — приём остатков по токену — Veloseller