Обновляйте прайс из своей учётной системы и забирайте заказы без ручной работы. Токен — в кабинете: Настройки → Seller API.
Каждый запрос — с заголовком Authorization: Bearer dx_…. Лимит: 120 запросов в час. Ответы — JSON.
POST /api/v1/offers/batch — до 1000 позиций за запрос. Позиции матчатся по артикулу+бренду и состоянию: существующие обновляются, новые создаются в пределах лимита тарифа. qty: 0 снимает позицию с продажи.
curl -X POST https://detalix.net/api/v1/offers/batch \
-H "Authorization: Bearer dx_ВАШ_ТОКЕН" \
-H "Content-Type: application/json" \
-d '{
"items": [
{ "article": "GDB1550", "brand": "TRW",
"name": "Колодки гальмівні передні",
"price_uah": 1490, "b2b_price_uah": 1290, "qty": 8,
"condition": "new", "delivery_days": 1 }
]
}'
// → { "created": 1, "updated": 0, "errors": [], "limitHit": false }GET /api/v1/orders?status=NEW — ваши заказы (статусы: NEW, CONFIRMED, SHIPPED, DONE, CANCELLED; без параметра — все, последние 100).
curl "https://detalix.net/api/v1/orders?status=NEW" \
-H "Authorization: Bearer dx_ВАШ_ТОКЕН"
// → { "orders": [ { "id": "…", "number": 12, "status": "NEW",
// "total_uah": 1490, "customer": { "name": "…", "phone": "…",
// "city": "Київ", "np_office": "12" },
// "items": [ { "article": "GDB1550", "qty": 1, … } ] } ] }POST /api/v1/orders/{id}/status. Разрешённые переходы: NEW→CONFIRMED/CANCELLED, CONFIRMED→SHIPPED/CANCELLED, SHIPPED→DONE. Для SHIPPED передайте ttn.
curl -X POST https://detalix.net/api/v1/orders/ORDER_ID/status \
-H "Authorization: Bearer dx_ВАШ_ТОКЕН" \
-H "Content-Type: application/json" \
-d '{ "status": "SHIPPED", "ttn": "20450012345678" }'Чтобы не опрашивать заказы по расписанию, включите вебхук в кабинете: Настройки → Вебхуки. Мы отправляем POST с JSON на ваш адрес: order.created (новый заказ) и order.status (смена статуса).
Отвечайте 2xx. Если нет — повторим шесть раз с растущей паузой (около получаса), каждая попытка видна в кабинете. Тело заказа — как в GET /api/v1/orders, но суммы в копейках: total_kop, price_kop вместо total_uah, price_uah. Дополнительно есть pay_method, pay_status и offer_id позиций; комментария и названия детали нет.
POST /ваш/шлях
x-detalix-event: order.created
x-detalix-delivery: <id доставки>
x-detalix-timestamp: 1790000000
x-detalix-signature: sha256=<підпис>
{ "event": "order.created", "sent_at": "…",
"order": { "id": "…", "number": 128, "status": "NEW", "total_kop": 149000,
"pay_method": "COD", "pay_status": null, "ttn": null,
"customer": { "name": "…", "phone": "…", "city": "…", "np_office": "…" },
"items": [ { "offer_id": "…", "article": "GDB1550", "brand": "TRW",
"qty": 1, "price_kop": 149000 } ] } }Подпись считается на вашем секрете от строки «метка времени.тело» — так же, как в Stripe. Проверяйте её и отбрасывайте запросы старше 5 минут: иначе перехваченный запрос можно повторять бесконечно.
// Node.js
const raw = await req.text(); // тіло БЕЗ переформатування
const ts = req.headers.get("x-detalix-timestamp") ?? "";
const mine = Buffer.from(crypto.createHmac("sha256", WHSEC).update(ts + "." + raw).digest("hex"));
const theirs = Buffer.from((req.headers.get("x-detalix-signature") ?? "").replace("sha256=", ""));
// timingSafeEqual падає на буферах різної довжини — спершу порівняйте довжину
const ok = mine.length === theirs.length && crypto.timingSafeEqual(mine, theirs);
if (!ok || Math.abs(Date.now() / 1000 - Number(ts)) > 300) return new Response("bad signature", { status: 400 });401 — неверный токен · 400 — невалидная схема · 404 — не ваш заказ · 409 — недопустимый переход статуса · 429 — превышен лимит запросов. Тело: { "error": "опис" }.