Документация API для расчёта раскроя линейных материалов
Структура запроса
| Параметр | Тип | Обязательный | Описание | Пример | Подписка |
|---|---|---|---|---|---|
| name | string | ✓ | Название артикула | "Мой раскрой" | ✨ |
| materialLength | integer | ✓ | Длина материала (мм) | 6000 | ✨ |
| cutWidth | integer | ✓ | Ширина реза (мм) | 4 | ✨ |
| edgeTrimming | integer | ✓ | Обрезка края (мм) | 25 | ✨ |
| parts | array | ✓ |
Массив деталей. Каждый элемент — или число (длина в мм), или компактная запись (“длина-количество”), или объект: {"length": 600, "count": 2, "name": "Маркировка"}Параметр name (маркировка/название детали) необязателен.
|
[1000, 500, "700-2", {"length":600,"count":2,"name":"B1"}] | ✨ |
| waste | array | ✗ | Массив доступных отходов | [1500, "1000-2"] | ✨ |
Формат компактной записи: Для передачи нескольких одинаковых деталей или отходов можно использовать формат
"длина-количество", например, "600-20" вместо 20 элементов со значением 600. Теперь вы можете передавать детали в виде объекта:
{"length": 500, "count": 3, "name": "В1"} — здесь name это опциональная маркировка/название, которое будет использоваться во всех отчетах, экспорте и визуализации.
Пример запроса для одного артикула:
{
"name": "Простой раскрой",
"materialLength": 6000,
"cutWidth": 4,
"edgeTrimming": 25,
"parts": [ 1500,
{"length": 1000, "count": 2, "name": "А"},
{"length": 500, "count": 3, "name": "В_деталь"}
]
}
Пример запроса для нескольких артикулов:
{
"articles": [
{
"name": "Артикул1",
"materialLength": 6000,
"cutWidth": 4,
"edgeTrimming": 25,
"parts": [600, 600, 600, "600-17", "500-3"],
"waste": ["1500-2"]
},
{
"name": "Артикул2",
"materialLength": 7000,
"cutWidth": 4,
"edgeTrimming": 25,
"parts": ["700-5", 500, 300]
}
]
}
Структура ответа
Ответ API - это массив объектов раскроя (по одному на каждый переданный артикул). Каждый объект содержит:
| Поле | Тип | Описание |
|---|---|---|
| name | string | Название артикула из запроса |
| cutWidth | integer | Ширина реза (мм) |
| edgeTrimming | integer | Обрезка края (мм) |
| stocks | array | Массив заготовок (палок) с размещенными деталями |
| totalStocks | integer | Общее количество используемых заготовок |
| totalParts | integer | Общее количество размещённых деталей |
| totalPartsLength | integer | Суммарная длина всех деталей (мм) |
| totalCutsCount | integer | Общее количество резов |
| totalCutsWidth | integer | Суммарная ширина всех резов (мм) |
| totalWaste | integer | Суммарная длина отходов (мм) |
| efficiency | float | Эффективность использования материала (0-100%) |
| Поле | Тип | Описание |
|---|---|---|
| parts | array of объектов | Массив деталей. Каждый элемент — объект вида {length, name}, где length — длина детали (мм), name — название (маркировка, если было задано). |
| count | integer | Количество одинаковых заготовок |
| parts_count | integer | Количество деталей в заготовке |
| cuts_count | integer | Количество резов в заготовке |
| parts_length | integer | Суммарная длина деталей (мм) |
| cuts_width | integer | Суммарная ширина резов (мм) |
| waste | integer | Длина отхода для одной заготовки (мм) |
| material_length | integer | Длина материала заготовки (мм) |
| cutWidth | integer | Ширина реза (мм) |
| edgeTrimming | integer | Обрезка края (мм) |
| isFromWaste | boolean | Признак того, что заготовка создана из отхода (необязательное поле) |
Важно: Поле
waste в заготовке всегда показывает отход на одну палку, даже если count > 1.
[
{
"name": "Простой раскрой",
"cutWidth": 4,
"edgeTrimming": 25,
"stocks": [
{
"parts": [
{"length": 600, "name": "B1"},
{"length": 500, "name": "C2"}
],
"count": 1,
"parts_count": 6,
"cuts_count": 6,
"parts_length": 5000,
"cuts_width": 24,
"waste": 926,
"material_length": 6000,
"cutWidth": 4,
"edgeTrimming": 25
}
],
"totalStocks": 1,
"totalParts": 6,
"totalPartsLength": 5000,
"totalCutsCount": 6,
"totalCutsWidth": 24,
"totalWaste": 926,
"efficiency": 83.3
}
]
Ответ для нескольких артикулов с использованием отходов:
[
{
"name": "Артикул1",
"cutWidth": 4,
"edgeTrimming": 25,
"stocks": [
{
"parts": [
600,
600,
600
],
"count": 1,
"parts_count": 3,
"cuts_count": 3,
"parts_length": 1800,
"cuts_width": 12,
"waste": 138,
"material_length": 2000,
"cutWidth": 4,
"edgeTrimming": 25,
"isFromWaste": true
},
{
"parts": [
600,
600,
600,
600,
600,
500
],
"count": 3,
"parts_count": 6,
"cuts_count": 6,
"parts_length": 3500,
"cuts_width": 24,
"waste": 426,
"material_length": 4000,
"cutWidth": 4,
"edgeTrimming": 25
},
{
"parts": [
600,
600,
500,
500
],
"count": 1,
"parts_count": 4,
"cuts_count": 4,
"parts_length": 2200,
"cuts_width": 16,
"waste": 734,
"material_length": 3000,
"cutWidth": 4,
"edgeTrimming": 25
}
],
"totalStocks": 5,
"totalParts": 27,
"totalPartsLength": 15700,
"totalCutsCount": 27,
"totalCutsWidth": 108,
"totalWaste": 2516,
"efficiency": 84.4
},
{
"name": "Артикул2",
"cutWidth": 4,
"edgeTrimming": 25,
"stocks": [
{
"parts": [
700,
700,
700,
700,
700,
500,
300
],
"count": 1,
"parts_count": 7,
"cuts_count": 7,
"parts_length": 4300,
"cuts_width": 28,
"waste": 622,
"material_length": 5000,
"cutWidth": 4,
"edgeTrimming": 25
}
],
"totalStocks": 1,
"totalParts": 7,
"totalPartsLength": 4300,
"totalCutsCount": 7,
"totalCutsWidth": 28,
"totalWaste": 622,
"efficiency": 86.0
}
]
Авторизация
Для авторизации необходимо в запросе отправлять заголовок X-API-KEY с ключом из личного кабинета.
Ключ API можно получить в личном кабинете после регистрации и активации подписки.
Пример запроса:
curl -X POST https://dx4.ru/profilecut/api/ \
-H "Content-Type: application/json" \
-H "X-API-KEY: ваш_ключ_api" \
-d '{
"name": "Простой раскрой",
"materialLength": 6000,
"cutWidth": 4,
"edgeTrimming": 25,
"parts": [1500, 1000, 1000, 500, 500, 500]
}'
Пример запроса на JavaScript:
fetch('https://dx4.ru/profilecut/api/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-KEY': 'ваш_ключ_api'
},
body: JSON.stringify({
"name": "Простой раскрой",
"materialLength": 6000,
"cutWidth": 4,
"edgeTrimming": 25,
"parts": [1500, 1000, 1000, 500, 500, 500]
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Ошибка:', error));
Обработка ошибок
{
"status": "error",
"error": {
"code": 400,
"message": "Длина детали должна быть положительным числом"
}
}
Распространённые ошибки:
- 400 - ошибка валидации входных данных (некорректные значения полей)
- 403 - доступ запрещён (проблема с API-ключом или доменом запроса)
- 429 - превышение лимитов использования API
- 500 - внутренняя ошибка сервера
Примеры ошибок валидации (400):
- "Не указано имя артикула"
- "Некорректная длина материала"
- "Некорректная ширина реза"
- "Некорректная обрезка"
- "Список деталей не может быть пустым"
- "Деталь длиной [X] мм в артикуле [Y] превышает максимально возможный размер ([Z] мм)"
Лимиты использования API
Для использования API необходима действующая подписка - API доступ.
API недоступно в бесплатном режиме.
Лимиты по тарифам:
| Тариф | Максимум деталей в запросе | Максимум артикулов в запросе |
|---|---|---|
| Бесплатный | — | — |
| С подпиской API | 10000 | 100 |
Важно: При превышении лимитов вы получите ошибку
429 Too Many Requests.
Для увеличения лимитов свяжитесь с поддержкой.