Документация API для расчёта раскроя листовых материалов (v2)
| Параметр | Тип | Обязательный | Описание | Пример | Подписка |
|---|---|---|---|---|---|
| sheetWidth | integer | ✓ | Ширина листа (мм) | 2500 | ✨ |
| sheetHeight | integer | ✓ | Высота листа (мм) | 1830 | ✨ |
| trimming | integer | ✓ | Отступ от края (мм) | 10 | ✨ |
| cutType | integer | ✓ | Алгоритм (1-4) | 3 | ✨ |
| parts | array | ✓ | Массив деталей | ["600x400-3-Полка"] | ✨ |
| wastes | array | ✗ |
Исходные остатки (отходы) — массив заготовок, доступных для повторного использования. Каждый элемент задаётся в формате ШиринаxВысота-Количество (например, 700x400-2).Сначала раскрой размещается на отходах, затем на новых листах. Позволяет учесть ваши реальные остатки после предыдущих раскроев. |
["800x500-1","600x300-2"] | ✨ |
| weight | float | ✗ | Вес материала (кг/м²) | 0.75 | ✨ |
| thickness | integer | ✗ | Толщина материала (мм) для расчета объема | 16 | ✨ |
| materialCost | integer | ✗ | Стоимость детали за кв.м. (руб) | 1200 | ✨ |
| cutCost | integer | ✗ | Стоимость реза 1 пог.м. (руб) | 10 | ✨ |
| sheetCost | integer | ✗ | Стоимость материала за кв.м. (мм) | 1000 | ✨ |
| kerf | integer | ✓ | Ширина реза (мм) | 3 | ✨ |
| allowRotation | boolean | ✓ | Разрешить поворот деталей (true/false) | true | ✨ |
| edgeCost | object | ✗ | Стоимость кромки по типам (ключ - тип кромки, значение - стоимость за метр) | {"1":10,"2":20} | ✨ |
| dxf | boolean | ✗ | Запросить генерацию dxf файла | true | ✨ |
| boolean | ✗ | Запросить генерацию pdf файла | true | ✨ | |
| combineSheets | boolean | ✗ |
Объединять одинаковые листы в результате. Если true, одинаковые по своему содержимому листы будут сгруппированы в ответе как один объект с дополнительным полем count (количество таких листов).
Если false или параметр не указан — каждый лист в отдельном объекте списка.
Для экспорта и статистики удобно включать, для графических визуализаций/чертежей можно отключать для полного списка. |
true | ✨ |
ШиринаxВысота-Количество[-Маркировка][-КромкаСнизу;КромкаСлева;КромкаСверху;КромкаСправа]
Примеры:
-
Базовый:
600x400-5-Полка -
С кромкой:
800x500-2-0;ПВХ;0;Алюминий -
С кромкой и названием:
800x500-2-Стенка-0;ПВХ1мм;0;ПВХ0,4мм
Особенности:
- Максимум 4 кромки через точку с запятой
- 0 - отсутствие кромки
- Маркировка без пробелов
| Поле | Тип | Описание |
|---|---|---|
| status | string | Статус выполнения запроса (например, success). |
| data | object | Главный блок с информацией о раскрое, деталях, метриках и т.д. |
Каждый объект листа содержит:
| Поле | Тип | Описание |
|---|---|---|
| sheetWidth | number | Ширина листа (мм) |
| sheetHeight | number | Высота листа (мм) |
| parts | array of objects | Детали, размещённые на листе |
| waste | array of objects | Обрезки (отходы) на листе |
| metrics | object | Показатели использования материала на листе |
| cutMetrics | object | Данные по резам на листе |
| count | number |
Количество одинаковых листов этого типа. Присутствует только если был передан combineSheets: true.Если поле отсутствует — данный лист в ответе один. |
| Поле | Тип | Описание |
|---|---|---|
| x | number | Координата X (левый верхний угол размещения на листе, мм) |
| y | number | Координата Y (левый верхний угол размещения на листе, мм) |
| w | number | Ширина детали (мм) |
| h | number | Высота детали (мм) |
| marking | string | Маркировка/наименование детали |
| rotated | boolean | Деталь повернута (true/false) |
| sizeIndex | number | Индекс типоразмера детали |
| originalW | number | Оригинальная ширина (до разворота, мм) |
| originalH | number | Оригинальная высота (до разворота, мм) |
| edgeband | array of string | Кромка по 4 сторона |
| edgeband | array of string | Кромка по 4 сторонам [снизу, справа, сверху, слева], где "1" - есть кромка, "0" - нет кромки |
| edgebandInfo | object | Подробная информация о кромках по сторонам (тип и длина для каждой стороны) |
| Поле | Тип | Описание |
|---|---|---|
| x | number | Координата X (левый верхний угол, мм) |
| y | number | Координата Y (левый верхний угол, мм) |
| w | number | Ширина обрезка (мм) |
| h | number | Высота обрезка (мм) |
| area | number | Площадь обрезка (мм²) |
| Поле | Тип | Описание |
|---|---|---|
| totalParts | number | Количество деталей на листе |
| usedArea | number | Использованная площадь (мм²) |
| wasteArea | number | Площадь обрезков/отходов (мм²) |
| materialUsage | number | КПД использования материала, в процентах |
| details | object | Список наименований деталей с количеством и площадями |
| guillotineCuts | number | Количество гильотинных резов на листе |
Структура объекта details в метриках листа:
| Ключ | Значение |
|---|---|
| Наименование детали (например, "Стенка-1") |
Объект с полями:
|
| Поле | Тип | Описание |
|---|---|---|
| perimeterCuts | number | Количество резов по периметру |
| partCuts | number | Количество внутренних резов |
| totalCuts | number | Общее количество резов |
| Поле | Тип | Описание |
|---|---|---|
| totalSheets | number | Общее количество листов |
| materialUsage | number | Общий процент использования материала |
| totalParts | number | Общее количество всех деталей |
| wasteArea | number | Общая площадь обрезков (мм²) |
| usedArea | number | Общая используемая площадь (мм²) |
| details | object | Объект метрик по деталям (такой же, как в метриках листа) |
| cutMetrics | object | Общие метрики по резам |
| totalPartsPerimeter | number | Суммарный периметр всех деталей (мм) |
| totalPartsSideWidth | number | Суммарная ширина сторон всех деталей (мм) |
| totalPartsSideHeight | number | Суммарная высота сторон всех деталей (мм) |
| totalSheetsWeight | number | Суммарный вес всех листов (кг) |
| totalPartsWeight | number | Суммарный вес всех деталей (кг) |
| totalWasteWeight | number | Суммарный вес обрезков (кг) |
| totalSheetsVolume | number | Суммарный объём листов (м³) |
| totalPartsVolume | number | Суммарный объём деталей (м³) |
| totalWasteVolume | number | Суммарный объём обрезков (м³) |
| totalSheetsMaterialCost | number | Общая стоимость листов (единицы валюты) |
| totalCutsCost | number | Стоимость всех резов (единицы валюты) |
| totalPartsWithCutsCost | number | Общая стоимость (материал + резы) |
| costPerM2 | number | Стоимость за квадратный метр |
| costPerPart | number | Средняя стоимость детали |
| edgebandLength | object | Длина кромок по типам |
| totalEdgebandCost | number | Общая стоимость всех кромок |
| guillotineCuts | number | Общее количество гильотинных резов |
| totalPartsMaterialCost | number | Стоимость материала для всех деталей |
| totalWasteMaterialCost | number | Стоимость материала в обрезках |
Структура объекта edgebandLength в общих метриках:
| Ключ | Значение |
|---|---|
| Тип кромки (например, "1") |
Общая длина кромки данного типа (мм) |
Структура объекта cutMetrics в общих метриках:
| Поле | Тип | Описание |
|---|---|---|
| totalPerimeterCuts | number | Общее количество резов по периметру всех листов |
| totalPartCuts | number | Общее количество внутренних резов всех листов |
| totalTotalCuts | number | Суммарное количество всех резов |
Объект edgebandInfo содержит подробную информацию о кромках детали по сторонам:
| Ключи | Значение | Описание |
|---|---|---|
| top, bottom, left, right | object | Объекты, описывающие кромку по соответствующей стороне. Присутствуют только для сторон, на которых есть кромка. |
Структура информации по кромке для одной стороны:
| Поле | Тип | Описание |
|---|---|---|
| type | string | Тип кромки (идентификатор) |
| length | number | Длина кромки на данной стороне (мм) |
Для авторизации необходимо в запросе отправлять заголовок x-api-key с ключом из личного кабинета.
Пример запроса:
curl -X POST https://dx4.ru/cut/api/ \
-H "Content-Type: application/json" \
-H "x-api-key: ваш_ключ_api" \
-d '{
"sheetWidth": 1000,
"sheetHeight": 2000,
"trimming": 10,
"kerf": 3,
"cutType": 1,
"allowRotation": true,
"parts": ["300x400-2-Стенка-1;2;1;3"],
"combineSheets": true,
"wastes": ["800x400-2"],
"weight": 15,
"thickness": 16,
"sheetCost": 1000,
"cutCost": 10,
"edgeCost": {"1":10,"2":20,"3":25,"4":30}
}'
Пример запроса на JavaScript:
fetch('https://dx4.ru/cut/api/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'ваш_ключ_api'
},
body: JSON.stringify({
sheetWidth: 1000,
sheetHeight: 2000,
trimming: 10,
kerf: 3,
cutType: 1,
allowRotation: true,
parts: ["300x400-2-Стенка-1;2;1;3"],
combineSheets: true,
wastes: ["800x400-2"],
weight: 15,
thickness: 16,
sheetCost: 1000,
cutCost: 10,
edgeCost: {"1":10,"2":20,"3":25,"4":30}
})
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Ошибка:', error));
{
"status": "success",
"data": {
"sheets": [
{
"sheetWidth": 1000,
"sheetHeight": 2000,
"parts": [
{
"x": 10,
"y": 10,
"w": 300,
"h": 400,
"marking": "Стенка-1",
"rotated": false,
"sizeIndex": 1,
"originalW": 300,
"originalH": 400,
"edgeband": [
"1",
"2",
"1",
"3"
],
"edgebandInfo": {
"bottom": {
"type": "1",
"length": 300
},
"left": {
"type": "2",
"length": 400
},
"top": {
"type": "1",
"length": 300
},
"right": {
"type": "3",
"length": 400
}
}
},
{
"x": 313,
"y": 10,
"w": 300,
"h": 400,
"marking": "Стенка-2",
"rotated": false,
"sizeIndex": 1,
"originalW": 300,
"originalH": 400,
"edgeband": [
"1",
"2",
"1",
"3"
],
"edgebandInfo": {
"bottom": {
"type": "1",
"length": 300
},
"left": {
"type": "2",
"length": 400
},
"top": {
"type": "1",
"length": 300
},
"right": {
"type": "3",
"length": 400
}
}
}
],
"waste": [
{
"x": 10,
"y": 413,
"w": 980,
"h": 1577,
"area": 1545460
},
{
"x": 616,
"y": 10,
"w": 374,
"h": 400,
"area": 149600
}
],
"metrics": {
"totalParts": 2,
"usedArea": 240000,
"wasteArea": 1695060,
"materialUsage": 12.402716194846672,
"details": {
"Стенка-1": {
"count": 1,
"area": 120000
},
"Стенка-2": {
"count": 1,
"area": 120000
}
}
},
"cutMetrics": {
"perimeterCuts": 5920,
"partCuts": 1400,
"totalCuts": 7320
}
}
],
"metrics": {
"totalSheets": 1,
"materialUsage": 12.402716194846672,
"totalParts": 2,
"wasteArea": 1695060,
"usedArea": 240000,
"details": {
"Стенка-1": {
"count": 1,
"area": 120000
},
"Стенка-2": {
"count": 1,
"area": 120000
}
},
"cutMetrics": {
"totalPerimeterCuts": 5920,
"totalPartCuts": 1400,
"totalTotalCuts": 7320
},
"totalPartsPerimeter": 2800,
"totalPartsSideWidth": 1200,
"totalPartsSideHeight": 1600,
"totalSheetsWeight": 30,
"totalPartsWeight": 3.6,
"totalWasteWeight": 25.426,
"totalSheetsVolume": 0.032,
"totalPartsVolume": 0.00384,
"totalWasteVolume": 0.027121,
"totalSheetsMaterialCost": 2000,
"totalCutsCost": 73.2,
"totalPartsWithCutsCost": 2073.2,
"totalEdgebandCost": 642,
"guillotineCuts": 38,
"totalPartsMaterialCost": 5640,
"totalWasteMaterialCost": 2008.22
"costPerM2": 8638.33,
"costPerPart": 1036.6,
"edgebandLength": {
"1": 1200,
"2": 800,
"3": 800
}
}
}
}
Вы можете автоматически получить DXF-файл с картой раскроя прямо через API.
Для этого просто добавьте параметр "dxf": true в тело запроса.
В успешном ответе API появится ссылка data.dxf_url для скачивания файла.
Пример запроса на генерацию DXF:
{
"sheetWidth": 1000,
"sheetHeight": 2000,
"trimming": 10,
"kerf": 3,
"cutType": 1,
"allowRotation": true,
"parts": ["300x400-2-Стенка-1;2;1;3"],
"dxf": true
}
Пример ответа с DXF:
{
"status": "success",
"data": {
"sheets": [...],
"metrics": {...},
"dxf_url": "https://dx4.ru/cut/api/dxf_results/dx4.ru_cut_20250805_124212_9408d18b.dxf"
}
}
Открывать файл можно в любой САПР/CAD-системе (например, Компас, AutoCAD и др.).
- Ссылка
dxf_urlдействительна сразу после расчёта, файл можно скачать напрямую. - Слои и структура соответствуют стандарту: детали (слой "0"), надписи ("TEXT"), размеры ("SIZES"), номера ("NUMBERS"), маркировки ("NAMES") и пр.
Скачайте файл сразу после получения ответа.
Вы можете автоматически получить PDF-файл с картой раскроя прямо через API.
Для этого просто добавьте параметр "pdf": true в тело запроса.
В успешном ответе API появится ссылка data.pdf_url для скачивания файла.
Пример запроса на генерацию PDF:
{
"sheetWidth": 1000,
"sheetHeight": 2000,
"trimming": 10,
"kerf": 3,
"cutType": 1,
"allowRotation": true,
"parts": ["300x400-2-Стенка-1;2;1;3"],
"pdf": true
}
Пример ответа с PDF:
{
"status": "success",
"data": {
"sheets": [...],
"metrics": {...},
"pdf_url": "https://dx4.ru/cut/api-v2/pdf_results/dx4.ru_cut_20250805_124212_9408d18b.pdf"
}
}
- Ссылка
pdf_urlдействительна сразу после расчёта, файл можно скачать напрямую.
Скачайте файл сразу после получения ответа.
{
"status": "error",
"error": {
"code": 400,
"message": "Неверный формат детали: 600x400-"
}
}
Распространённые ошибки:
- 400 - ошибка валидации входных данных
- 403 - доступ запрещён
- 429 - превышение лимитов тарифа
Для использования API необходима действующая подписка - API доступ.
API недоступно в бесплатном режиме.
Лимиты по тарифам:
| Тариф | API-запросы в сутки | Максимум деталей в одном запросе | Максимум размеров деталей в одном запросе | Максимум листов в одном раскрое |
|---|---|---|---|---|
| Бесплатный | — | — | — | — |
| С подпиской | 1 000 | 5 000 | 200 | 500 |
429 Too Many Requests.
Для увеличения лимитов свяжитесь с поддержкой.