Документация 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
pdf 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.
Если поле отсутствует — данный лист в ответе один.

Поле Тип Описание
xnumberКоордината X (левый верхний угол размещения на листе, мм)
ynumberКоордината Y (левый верхний угол размещения на листе, мм)
wnumberШирина детали (мм)
hnumberВысота детали (мм)
markingstringМаркировка/наименование детали
rotatedbooleanДеталь повернута (true/false)
sizeIndexnumberИндекс типоразмера детали
originalWnumberОригинальная ширина (до разворота, мм)
originalHnumberОригинальная высота (до разворота, мм)
edgeband array of string Кромка по 4 сторона
edgeband array of string Кромка по 4 сторонам [снизу, справа, сверху, слева], где "1" - есть кромка, "0" - нет кромки
edgebandInfo object Подробная информация о кромках по сторонам (тип и длина для каждой стороны)

Поле Тип Описание
xnumberКоордината X (левый верхний угол, мм)
ynumberКоордината Y (левый верхний угол, мм)
wnumberШирина обрезка (мм)
hnumberВысота обрезка (мм)
areanumberПлощадь обрезка (мм²)

Поле Тип Описание
totalPartsnumberКоличество деталей на листе
usedAreanumberИспользованная площадь (мм²)
wasteAreanumberПлощадь обрезков/отходов (мм²)
materialUsagenumberКПД использования материала, в процентах
detailsobjectСписок наименований деталей с количеством и площадями
guillotineCutsnumberКоличество гильотинных резов на листе
Структура объекта details в метриках листа:
Ключ Значение
Наименование детали
(например, "Стенка-1")
Объект с полями:
  • count: число штук
  • area: суммарная площадь (мм²)

Поле Тип Описание
perimeterCutsnumberКоличество резов по периметру
partCutsnumberКоличество внутренних резов
totalCutsnumberОбщее количество резов

Поле Тип Описание
totalSheetsnumberОбщее количество листов
materialUsagenumberОбщий процент использования материала
totalPartsnumberОбщее количество всех деталей
wasteAreanumberОбщая площадь обрезков (мм²)
usedAreanumberОбщая используемая площадь (мм²)
detailsobjectОбъект метрик по деталям (такой же, как в метриках листа)
cutMetricsobjectОбщие метрики по резам
totalPartsPerimeternumberСуммарный периметр всех деталей (мм)
totalPartsSideWidthnumberСуммарная ширина сторон всех деталей (мм)
totalPartsSideHeightnumberСуммарная высота сторон всех деталей (мм)
totalSheetsWeightnumberСуммарный вес всех листов (кг)
totalPartsWeightnumberСуммарный вес всех деталей (кг)
totalWasteWeightnumberСуммарный вес обрезков (кг)
totalSheetsVolumenumberСуммарный объём листов (м³)
totalPartsVolumenumberСуммарный объём деталей (м³)
totalWasteVolumenumberСуммарный объём обрезков (м³)
totalSheetsMaterialCostnumberОбщая стоимость листов (единицы валюты)
totalCutsCostnumberСтоимость всех резов (единицы валюты)
totalPartsWithCutsCostnumberОбщая стоимость (материал + резы)
costPerM2numberСтоимость за квадратный метр
costPerPartnumberСредняя стоимость детали
edgebandLengthobjectДлина кромок по типам
totalEdgebandCostnumberОбщая стоимость всех кромок
guillotineCutsnumberОбщее количество гильотинных резов
totalPartsMaterialCostnumberСтоимость материала для всех деталей
totalWasteMaterialCostnumberСтоимость материала в обрезках
Структура объекта edgebandLength в общих метриках:
Ключ Значение
Тип кромки
(например, "1")
Общая длина кромки данного типа (мм)
Структура объекта cutMetrics в общих метриках:
Поле Тип Описание
totalPerimeterCutsnumberОбщее количество резов по периметру всех листов
totalPartCutsnumberОбщее количество внутренних резов всех листов
totalTotalCutsnumberСуммарное количество всех резов

Объект 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-файл с картой раскроя прямо через 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"
  }
}
DXF-файл генерируется сервером как полная электронная карта раскроя (аналогично генерации со страницы).
Открывать файл можно в любой САПР/CAD-системе (например, Компас, AutoCAD и др.).
  • Ссылка dxf_url действительна сразу после расчёта, файл можно скачать напрямую.
  • Слои и структура соответствуют стандарту: детали (слой "0"), надписи ("TEXT"), размеры ("SIZES"), номера ("NUMBERS"), маркировки ("NAMES") и пр.
DXF-файлы хранятся на сервере ограниченный срок и могут быть удалены автоматически.
Скачайте файл сразу после получения ответа.
Генерация PDF-файлов через API

Вы можете автоматически получить 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-файл генерируется сервером как карта раскроя с дополнительными полями с данными.
  • Ссылка pdf_url действительна сразу после расчёта, файл можно скачать напрямую.
PDF-файлы хранятся на сервере ограниченный срок и могут быть удалены автоматически.
Скачайте файл сразу после получения ответа.
Обработка ошибок

{
  "status": "error",
  "error": {
    "code": 400,
    "message": "Неверный формат детали: 600x400-"
  }
}
    
Распространённые ошибки:
  • 400 - ошибка валидации входных данных
  • 403 - доступ запрещён
  • 429 - превышение лимитов тарифа
Лимиты использования API

Для использования API необходима действующая подписка - API доступ.
API недоступно в бесплатном режиме.

Лимиты по тарифам:
Тариф API-запросы в сутки Максимум деталей в одном запросе Максимум размеров деталей в одном запросе Максимум листов в одном раскрое
Бесплатный
С подпиской 1 000 5 000 200 500
Важно: При превышении лимитов вы получите ошибку 429 Too Many Requests.

Для увеличения лимитов свяжитесь с поддержкой.