Розраховує вартість друку 3D-моделі за реальним каталогом вашої студії: матеріал, профіль якості друку та (опціонально) послуги постобробки. Це той самий механізм ціноутворення, що використовує сторінка замовлення студії — на відміну від загальних технологічних пресетів публічного калькулятора на /calculator, тут ціна рахується за вашими власними матеріалами, ставками та націнкою.
Вага моделі та час друку визначаються реальним слайсингом завантаженого файлу, а не оцінкою за розміром — тому перший запит із новим файлом може зайняти від кількох секунд до хвилини (див. Асинхронна обробка нижче).
Об'єкт Quote#
| Поле | Тип | Опис |
|---|---|---|
totalPrice | Money | Повна вартість: perUnitPrice + setupCost |
perUnitPrice | Money | Вартість за одну одиницю (без разового налаштування) |
setupCost | Money | Разова вартість підготовки друку (калібрування, встановлення), якщо застосовна |
breakdown | CostBreakdown | Повна деталізація розрахунку |
Об'єкт CostBreakdown#
| Поле | Тип | Опис |
|---|---|---|
materialCost | Money | Вартість витраченого матеріалу |
printingTimeCost | Money | Вартість часу друку (погодинна ставка × час) |
electricityCost | Money | Вартість спожитої електроенергії |
electricityRatePerKwh | float | Тариф на електроенергію, що застосовано, ₴/кВт·год |
finishingCost | Money | Сумарна вартість усіх обраних послуг постобробки |
finishingItems | array | Деталізація по кожній послузі: { "finishingId": int, "name": string, "cost": Money } |
failureBufferCost | Money | Буфер на брак — компенсація можливих невдалих друків |
failureRatePercentage | float | Відсоток буфера на брак, застосований до розрахунку |
markupPercentage | float | Націнка студії, застосована до собівартості |
perUnitMarkupAmount | Money | Сума націнки на одну одиницю |
perUnitCost | Money | Собівартість за одну одиницю до націнки |
setupCostBase | Money | Базова вартість підготовки друку до націнки |
setupMarkupAmount | Money | Сума націнки на вартість підготовки |
setupCost | Money | Повна вартість підготовки друку з націнкою |
printingTimeMinutes | integer | Час друку в хвилинах, визначений слайсером |
materialUsed | float | Витрата матеріалу (у грамах для FDM, мілілітрах для SLA) |
materialUnit | string | Одиниця виміру: "g" або "ml" |
Розрахувати вартість#
POST /quotes
Це запит типу multipart/form-data, а не JSON — файл моделі є обов'язковою частиною тіла запиту.
Параметри запиту
| Поле | Тип | Обов'язкове | Опис |
|---|---|---|---|
model | file | так | Файл 3D-моделі у форматі STL або 3MF |
materialId | integer | так | Ідентифікатор матеріалу з каталогу студії |
printingQualityId | integer | так | Ідентифікатор профілю якості друку з каталогу студії |
finishingIds | integer[] | ні | Ідентифікатори послуг постобробки. Передавайте як кілька полів finishingIds[] у формі |
Приклад запиту
curl https://placraftic.com/api/v1/quotes \
-H "Authorization: Bearer pk_live_..." \
-F "[email protected]" \
-F "materialId=2" \
-F "printingQualityId=1" \
-F "finishingIds[]=7"
Приклад відповіді — розрахунок готовий одразу
Якщо вага та час друку для цього файлу з цими параметрами вже є в кеші слайсингу, відповідь повертається синхронно:
{
"data": {
"totalPrice": { "amount": "245.30", "currency": { "id": 5, "code": "UAH", "name": "Ukrainian Hryvnia", "symbol": "₴" } },
"perUnitPrice": { "amount": "245.30", "currency": { "id": 5, "code": "UAH", "name": "Ukrainian Hryvnia", "symbol": "₴" } },
"setupCost": { "amount": "0.00", "currency": { "id": 5, "code": "UAH", "name": "Ukrainian Hryvnia", "symbol": "₴" } },
"breakdown": {
"materialCost": { "amount": "60.00", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
"printingTimeCost": { "amount": "158.33", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
"electricityCost": { "amount": "3.24", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
"electricityRatePerKwh": 4.32,
"finishingCost": { "amount": "0.00", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
"finishingItems": [],
"failureBufferCost": { "amount": "10.53", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
"failureRatePercentage": 5,
"markupPercentage": 30,
"perUnitMarkupAmount": { "amount": "56.53", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
"perUnitCost": { "amount": "245.30", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
"setupCostBase": { "amount": "0.00", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
"setupMarkupAmount": { "amount": "0.00", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
"setupCost": { "amount": "0.00", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
"printingTimeMinutes": 190,
"materialUsed": 100,
"materialUnit": "g"
}
}
}
Асинхронна обробка#
Якщо файл ще не аналізувався з цими параметрами, сервер запускає слайсинг у фоні та одразу повертає 202 Accepted з ідентифікатором завдання:
{ "data": { "jobId": "bad6c24f-e6f4-480f-9064-13876a1b5b94" } }
Опитуйте статус завдання за адресою нижче (це вже наявний ендпоінт поза /api/v1 — сам ідентифікатор завдання є непередбачуваним і слугує авторизацією для опитування):
GET /studios/{studioId}/slicing-jobs/{jobId}
{ "id": "bad6c24f-e6f4-480f-9064-13876a1b5b94", "status": "processing" }
status набуває значень pending, processing, completed або failed. Щойно статус стане completed, повторіть початковий запит POST /quotes з тим самим файлом і параметрами — результат слайсингу вже в кеші, і відповідь повернеться синхронно з повним розрахунком вартості.
Помилки
| Код | Причина |
|---|---|
400 | Файл моделі відсутній, materialId/printingQualityId не передано або мають невалідний формат |
404 | materialId, printingQualityId або один із finishingIds не належить вашій студії |