🚀 Что такое Koston API?

Koston API — это ваш прямой канал к актуальной информации о товарах, ценах, остатках и статусах заказов магазина лонгбордов Koston-boards.ru. Автоматизируйте свой магазин и работайте быстрее конкурентов.

🎯 Для кого этот API?
  • Владельцы интернет-магазинов — автоматическая синхронизация товаров и цен
  • Маркетплейсы и агрегаторы — актуальные остатки и описания в реальном времени
  • B2B-партнёры — отслеживание статусов заказов и доставки
  • Мобильные приложения — интеграция каталога Koston в ваш софт
💎 Почему с нами выгодно работать?
  • Актуальные данные — цены и остатки обновляются мгновенно
  • Широкий ассортимент — лонгборды, скейтборды, аксессуары Koston и Eagle
  • Оперативная информация — статусы заказов и доставки в реальном времени
  • Простая интеграция — REST API с HMAC-авторизацией и подробной документацией
  • Надёжность — HTTPS, лимиты запросов, полное логирование
⏰ Важно: Наш ассортимент регулярно пополняется — новые товары появляются постоянно. Рекомендуем запрашивать полный список товаров хотя бы раз в неделю, чтобы ваш каталог всегда был актуален и не содержал устаревших позиций.
🎉 Подключиться легко! Настройка API не требует глубоких технических знаний — справится даже новичок. Вставьте ключи, скопируйте пример кода из документации — и готово. А если вдруг что-то не получится — наша команда всегда на связи. Напишите менеджеру или в поддержку, и мы поможем настроить всё за вас.

📋 Обзор

REST API для партнёрских интернет-магазинов. Предоставляет информацию о товарах, ценах, остатках и статусах заказов в реальном времени.

Базовый URL: https://crm.kostonboards.ru/api/v1/
Метод: Все запросы — POST
Формат: JSON (UTF-8)
Протокол: HTTPS
Доступные эндпоинты:
URLОписание
POST /api/v1/productsСписок товаров
POST /api/v1/product/{sku}Детали одного товара
POST /api/v1/product_price_qty/{sku}Цена и количество
POST /api/v1/order_status/{order_numb}Статус заказа
POST /api/v1/delivery_status/{order_numb}Статус доставки
POST /api/v1/ordersСоздание заказа

🔑 Получение API-ключей

Чтобы начать работу с API, вам нужны два идентификатора: API Key и API Secret. Секретный ключ храните в безопасности — он не показывается повторно.

Способы получения:
Самостоятельно
  1. Зарегистрируйтесь в системе как партнёр
  2. Авторизуйтесь в личном кабинете
  3. Перейдите в раздел «Настройки» → «API Настройки»
  4. Нажмите «Создать ключ» и сохраните данные
Через менеджера

Свяжитесь с вашим менеджером Koston — он создаст ключи и передаст их вам. Это быстрый способ для новых партнёров.

⚠️ Важно: Никогда не передавайте API Secret третьим лицам. Храните его в защищённых переменных окружения, не публикуйте в открытом коде.

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

Каждый запрос должен содержать три заголовка:

ЗаголовокОписание
AuthorizationBearer <api_key>
X-SignatureHMAC-SHA256 подпись
X-TimestampUnix timestamp (разница ≤ 5 минут)
Формула подписи:
string_to_sign = method + "|" + path + "|" + timestamp + "|" + body
signature = base64(HMAC-SHA256(string_to_sign, api_secret))

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

Получает список товаров с пагинацией.

POST /api/v1/products
Запрос (JSON):
{
    "action": "products",
    "published": 1,
    "page": 1,
    "per_page": 100
}
Параметры:
ПараметрТипПо умолчаниюОписание
publishedint11=активные, 0=скрытые, 2=все
pageint1Номер страницы
per_pageint100Кол-во на страницу (10–500)
Ответ:
{
    "success": true,
    "data": {
        "products": [
            {
                "sku": "LD023-B",
                "product_name": "Дека лонгборд Koston Constellation Aurora 46/117см",
                "full_desc": "",
                "char_desc": "",
                "brand": "Koston",
                "quantity": 1,
                "price": 10900.00,
                "available_date": null,
                "all_photos": "https://static.tildacdn.com/stor6364-3530-4636-a139-393662333332/20723331.jpg",
                "published": 1
            },
            {
                "sku": "ARD964",
                "product_name": "Дека лонгборд EagleBoards Tropical 46/117см",
                "full_desc": "",
                "char_desc": "",
                "brand": "Eagle",
                "quantity": 0,
                "price": 8200.00,
                "available_date": null,
                "all_photos": "https://static.tildacdn.com/stor6163-6664-4166-b634-663035323633/11409251.jpg",
                "published": 1
            }
        ],
        "pagination": {
            "page": 1,
            "per_page": 100,
            "total": 245,
            "pages": 3
        }
    },
    "timestamp": 1722172800
}

🔍 Детали товара

Получает полную информацию о одном товаре по SKU.

POST /api/v1/product/{sku}
Запрос (JSON):
{
    "action": "product",
    "sku": "LD023-B"
}
Ответ:
{
    "success": true,
    "data": {
        "sku": "LD023-B",
        "product_name": "Дека лонгборд Koston Constellation Aurora 46/117см",
        "full_desc": "",
        "char_desc": "",
        "brand": "Koston",
        "quantity": 1,
        "price": 10900.00,
        "available_date": null,
        "published": 1,
        "all_photos": "https://static.tildacdn.com/stor6364-3530-4636-a139-393662333332/20723331.jpg"
    },
    "timestamp": 1722172800
}

💰 Цена и количество

Быстрый запрос только цены и остатка товара.

POST /api/v1/product_price_qty/{sku}
Запрос (JSON):
{
    "action": "product_price_qty",
    "sku": "LD023-B"
}
Ответ:
{
    "success": true,
    "data": {
        "sku": "LD023-B",
        "price": 10900.00,
        "quantity": 1,
        "published": 1
    },
    "timestamp": 1722172800
}

📋 Статус заказа

Получает статус заказа по номеру.

POST /api/v1/order_status/{order_numb}
Запрос (JSON):
{
    "action": "order_status",
    "order_numb": "ORD-2026-001"
}
Ответ:
{
    "success": true,
    "data": {
        "order_numb": "ORD-2026-001",
        "status": "paid",
        "name": "Иванов Иван",
        "phone": "+7 (999) 123-45-67",
        "final_summ": 10980.00,
        "created_date": "2026-07-25T15:30:00+03:00"
    },
    "timestamp": 1722172800
}
Допустимые статусы:
СтатусОписание
newНовый
paidОплачен
processingВ обработке
shippedОтправлен
deliveredДоставлен
cancelledОтменён

🛒 Создание заказа

Создаёт новый заказ в CRM Koston. Нужен метод POST и право orders.create у API-ключа.

POST /api/v1/orders
Как считается сумма: цены берутся из каталога Koston — присланная в items[].price игнорируется, если у ключа нет сторонних цен. Своя цена учитывается только при "own_prices": true. total = сумма позиций + delivery_cost.
Параметры запроса (JSON):
ПолеТипОбяз.Описание
namestring✅Имя и фамилия получателя
phonestring✅Телефон, 10–15 цифр
emailstring—E-mail (валидируется)
citystring—Город доставки
delivery_addressstring—Адрес или ПВЗ
ship_typestring—Способ доставки (свободный текст)
pay_typestring—Способ оплаты
delivery_costnumber—Стоимость доставки (≥ 0, по умолчанию 0)
commentstring—Комментарий (до 1000 символов)
sourcestring—Метка источника, по умолчанию api_partner
channelstring—Канал заказа, по умолчанию Koston API
cookie_idstring—ID посетителя (для склейки), если есть
own_pricesbool—true — принимать цены из items[].price
items[]array✅Позиции заказа (1–100)
items[].skustring✅Артикул товара Koston
items[].quantityint✅Количество, 1–1000
items[].pricenumber—Цена (только при own_prices: true)
Пример запроса:
POST https://crm.kostonboards.ru/api/v1/orders

{
    "name": "Иванов Иван",
    "phone": "+7 (999) 123-45-67",
    "email": "ivan@example.com",
    "city": "Санкт-Петербург",
    "delivery_address": "Невский пр., 1",
    "ship_type": "СДЭК",
    "pay_type": "Картой онлайн",
    "delivery_cost": 350,
    "comment": "Позвонить за час",
    "source": "api_partner",
    "items": [
        { "sku": "LB-DANCE-01", "quantity": 1 },
        { "sku": "WH-SETS-07", "quantity": 2 }
    ]
}
Ответ:
{
    "success": true,
    "data": {
        "order_id": 100234,
        "order_numb": "KOSTON-7F3A1",
        "status": "new",
        "items_count": 2,
        "subtotal": 12400.00,
        "delivery_cost": 350.00,
        "total": 12750.00,
        "currency": "RUB",
        "custom_prices": false,
        "created_at": "2026-07-25 15:30:00"
    },
    "timestamp": 1722172800
}
Коды ошибок:
КодHTTPКогда возникает
METHOD_NOT_ALLOWED405Запрос не через POST
VALIDATION_ERROR422Нет имени, некорректный телефон/email, неверные items/quantity
PRODUCT_NOT_FOUND404SKU не найден
OUT_OF_STOCK409Товара не хватает на складе
ACCESS_DENIED403У ключа нет права orders.create
INTERNAL_ERROR500Ошибка сохранения заказа

🚚 Статус доставки

Получает статус доставки по номеру заказа.

POST /api/v1/delivery_status/{order_numb}
Запрос (JSON):
{
    "action": "delivery_status",
    "order_numb": "ORD-2026-001"
}
Ответ:
{
    "success": true,
    "data": {
        "order_numb": "ORD-2026-001",
        "delivery_status": "В пути",
        "tracking_number": "1234567890"
    },
    "timestamp": 1722172800
}

⚠️ Коды ошибок

HTTPКодОписание
400INVALID_REQUESTНеверный формат запроса
401UNAUTHORIZEDНеверный API-ключ
401INVALID_SIGNATUREНеверная подпись
401EXPIRED_TIMESTAMPИстекло время подписи (>5 мин)
403ACCESS_DENIEDНет прав на действие
403KEY_DISABLEDКлюч заблокирован
404PRODUCT_NOT_FOUNDТовар не найден
404ORDER_NOT_FOUNDЗаказ не найден
429RATE_LIMIT_EXCEEDEDПревышен лимит запросов
500INTERNAL_ERRORВнутренняя ошибка сервера

🛠️ Тестер запросов

Используйте этот инструмент для тестирования API-запросов прямо в браузере. Данные шифруются на лету и никуда не отправляются — обработка происходит полностью на стороне клиента.

Как это работает:
1. Введите название вашей компании, API-ключ и секретный ключ
2. Система автоматически проверит данные (подпись вычисляется локально)
3. Выберите или введите API-запрос
4. Нажмите «Отправить» — подпись создастся и отправится на сервер
Шаг 1: Подключение

Введите данные — проверка происходит автоматически при вводе

Шаг 2: Выберите запрос
Введите JSON-запрос вручную или используйте шаблон из выбранного эндпоинта

💻 Примеры кода

PHP:
<?php
$apiKey = 'ваш_api_key';
$apiSecret = 'ваш_api_secret';
$timestamp = time();

$path = '/api/v1/products';
$method = 'POST';
$body = json_encode([
    'action' => 'products',
    'published' => 1,
    'page' => 1,
    'per_page' => 100
]);

$stringToSign = $method . '|' . $path . '|' . $timestamp . '|' . $body;
$signature = base64(hash_hmac('sha256', $stringToSign, $apiSecret, true));

$url = 'https://crm.kostonboards.ru' . $path;
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $apiKey",
    "X-Signature: $signature",
    "X-Timestamp: $timestamp",
    "Content-Type: application/json"
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);
?>
JavaScript (Node.js):
const crypto = require('crypto');

const apiKey = 'ваш_api_key';
const apiSecret = 'ваш_api_secret';
const timestamp = Math.floor(Date.now() / 1000);

const path = '/api/v1/products';
const method = 'POST';
const body = JSON.stringify({
    action: 'products',
    published: 1,
    page: 1,
    per_page: 100
});

const stringToSign = method + '|' + path + '|' + timestamp + '|' + body;
const signature = crypto.createHmac('sha256', apiSecret)
    .update(stringToSign)
    .digest('base64');

fetch('https://crm.kostonboards.ru' + path, {
    method: 'POST',
    headers: {
        'Authorization': 'Bearer ' + apiKey,
        'X-Signature': signature,
        'X-Timestamp': timestamp.toString(),
        'Content-Type': 'application/json'
    },
    body: body
})
.then(res => res.json())
.then(data => console.log(data));