← на сайт · ключи в админке

API «Абик» v1

REST + JSON. Базовый адрес: /api/v1. Всё, что видит покупатель на сайте, можно читать без ключа. Изменения — только с ключом с правом записи.

Авторизация

Создайте ключ в админке → «Интеграции и API». Передавайте его в заголовке:

Authorization: Bearer abk_XXXXXXXXXXXXXXXX

Ключ «только чтение» даёт доступ к заказам, фиду и журналу. Ключ «чтение + запись» — ещё и к созданию/изменению товаров, категорий, медиа, статусов заказов и запуску выгрузок. Для фида ключ можно передать параметром ?key=.

Каталог

GET/categoriesбез ключа

Категории в порядке плиток на главной (с числом опубликованных товаров).

curl https://ВАШ-ДОМЕН/api/v1/categories
GET/categories/{slug}/productsбез ключа

Товары категории. Тот же набор параметров есть у GET /products (плюс category, q, ids).

sortpopular · new · price_asc · price_desc · rating · discount
new, sale, has_video, in_stockфильтры: =true
price_min, price_maxдиапазон цены, ₽
qпоиск по названию, артикулу, описанию
idsсписок id через запятую (корзина, избранное)
page, per_pageпагинация (по умолчанию 24, максимум 100)
GET /api/v1/categories/vases/products?sort=price_asc&has_video=true

{ "category": { "id": 1, "slug": "vases", "name": "Вазы" },
  "data": [ { "id": 3, "sku": "AB-0103", "name": "Ваза «Капля»…", "price": 690, "old_price": 890,
              "discount": 22, "stock": 40, "rating": 4.7, "reviews_count": 342, "is_new": false,
              "media": [ { "id": 7, "type": "image", "url": "/uploads/…" },
                         { "id": 9, "type": "video", "url": "/uploads/….mp4" } ] } ],
  "meta": { "page": 1, "per_page": 24, "total": 8, "pages": 1 } }
GET/products/{id или sku}без ключа

Карточка товара: описание, характеристики (attributes), фото и видео по порядку карусели, похожие товары (related).

Управление товарами

POST/productsзапись
curl -X POST https://ВАШ-ДОМЕН/api/v1/products \
  -H "Authorization: Bearer abk_…" -H "Content-Type: application/json" \
  -d '{ "name": "Ваза «Волна» 18 см", "sku": "AB-0142", "category": "vases",
        "price": 1290, "old_price": 1590, "stock": 24, "status": "published",
        "description": "…", "attributes": { "Высота": "18 см" },
        "publish_to": ["site", "ozon"], "external_ids": { "wb_nm_id": "123", "wb_barcode": "460…" } }'

status: draft · published · archived. category — slug или id.

PATCH/products/{id или sku}запись

Частичное обновление — передайте только меняющиеся поля. Удобно для синхронизации остатков и цен со складом/1С:

PATCH /api/v1/products/AB-0142
{ "stock": 30, "price": 1190 }
DELETE/products/{id}запись

Переносит в архив. ?hard=true — удаляет навсегда вместе с файлами.

Фото и видео

POST/products/{id}/mediaзапись

multipart/form-data, поле file (можно несколько, до 20). Форматы: JPG, PNG, WEBP, GIF, AVIF, SVG, MP4, WEBM, MOV. position — место в карусели (0 = обложка).

curl -X POST https://ВАШ-ДОМЕН/api/v1/products/142/media \
  -H "Authorization: Bearer abk_…" \
  -F file=@vase-front.jpg -F file=@vase-360.mp4
PATCH/products/{id}/media/orderзапись
{ "ids": [12, 9, 10] }
DELETE/media/{id}запись

Категории

POST/categories · PATCH/categories/{id} · DELETE/categories/{id}запись
{ "name": "Вазы", "slug": "vases", "description": "Для сухоцветов", "color": "#F2DDD5",
  "dark": false, "cover_url": "/uploads/…", "visible": true }

PATCH /categories/order с {"ids":[…]} — порядок плиток. Картинку загрузите через POST /uploads (поле file) и передайте полученный url.

Заказы

POST/ordersбез ключа

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

{ "customer_name": "Анна", "phone": "+7 900 000-00-00", "email": "", "address": "…", "comment": "",
  "items": [ { "product_id": 1, "qty": 2 } ] }
GET/orders · /orders/{id}чтение

Фильтры: status (new · confirmed · printing · shipped · done · cancelled), source, page, per_page.

PATCH/orders/{id}запись
{ "status": "shipped" }

Маркетплейсы и фиды

POST/integrations/{ozon|wildberries}/syncзапись

Фоновая выгрузка цен и/или остатков ({"scope":"prices"|"stocks"|"all"}) по товарам с отметкой нужного канала. Доступы маркетплейсов задаются в админке. Результат — GET /integrations/jobs.

GET/feeds/yml?key=…чтение

YML-фид каталога для Яндекс Маркета и агрегаторов.

Вебхуки

Добавьте адрес в админке. На каждое событие придёт POST с JSON { event, created_at, data } и заголовком X-Abik-Signature: sha256=… — HMAC-SHA256 тела запроса по секрету вебхука.

order.createdновый заказ
order.status_changedсмена статуса заказа
product.created / updated / deletedизменения каталога
product.stock_changedизменился остаток
// проверка подписи (Node.js)
const sig = 'sha256=' + crypto.createHmac('sha256', SECRET).update(rawBody).digest('hex');
if (sig !== req.headers['x-abik-signature']) return res.status(401).end();

Ошибки

Ответ с кодом 4xx/5xx и телом { "error": "текст" }. 401 — нет ключа, 403 — ключ только для чтения, 404 — не найдено, 409 — товара нет в наличии.