Розрахунок вартості

Розраховує вартість друку 3D-моделі за реальним каталогом вашої студії: матеріал, профіль якості друку та (опціонально) послуги постобробки. Це той самий механізм ціноутворення, що використовує сторінка замовлення студії — на відміну від загальних технологічних пресетів публічного калькулятора на /calculator, тут ціна рахується за вашими власними матеріалами, ставками та націнкою.

Вага моделі та час друку визначаються реальним слайсингом завантаженого файлу, а не оцінкою за розміром — тому перший запит із новим файлом може зайняти від кількох секунд до хвилини (див. Асинхронна обробка нижче).

Об'єкт Quote#

ПолеТипОпис
totalPriceMoneyПовна вартість: perUnitPrice + setupCost
perUnitPriceMoneyВартість за одну одиницю (без разового налаштування)
setupCostMoneyРазова вартість підготовки друку (калібрування, встановлення), якщо застосовна
breakdownCostBreakdownПовна деталізація розрахунку

Об'єкт CostBreakdown#

ПолеТипОпис
materialCostMoneyВартість витраченого матеріалу
printingTimeCostMoneyВартість часу друку (погодинна ставка × час)
electricityCostMoneyВартість спожитої електроенергії
electricityRatePerKwhfloatТариф на електроенергію, що застосовано, ₴/кВт·год
finishingCostMoneyСумарна вартість усіх обраних послуг постобробки
finishingItemsarrayДеталізація по кожній послузі: { "finishingId": int, "name": string, "cost": Money }
failureBufferCostMoneyБуфер на брак — компенсація можливих невдалих друків
failureRatePercentagefloatВідсоток буфера на брак, застосований до розрахунку
markupPercentagefloatНацінка студії, застосована до собівартості
perUnitMarkupAmountMoneyСума націнки на одну одиницю
perUnitCostMoneyСобівартість за одну одиницю до націнки
setupCostBaseMoneyБазова вартість підготовки друку до націнки
setupMarkupAmountMoneyСума націнки на вартість підготовки
setupCostMoneyПовна вартість підготовки друку з націнкою
printingTimeMinutesintegerЧас друку в хвилинах, визначений слайсером
materialUsedfloatВитрата матеріалу (у грамах для FDM, мілілітрах для SLA)
materialUnitstringОдиниця виміру: "g" або "ml"

Розрахувати вартість#

POST /quotes

Це запит типу multipart/form-data, а не JSON — файл моделі є обов'язковою частиною тіла запиту.

Параметри запиту

ПолеТипОбов'язковеОпис
modelfileтакФайл 3D-моделі у форматі STL або 3MF
materialIdintegerтакІдентифікатор матеріалу з каталогу студії
printingQualityIdintegerтакІдентифікатор профілю якості друку з каталогу студії
finishingIdsinteger[]ніІдентифікатори послуг постобробки. Передавайте як кілька полів 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 не передано або мають невалідний формат
404materialId, printingQualityId або один із finishingIds не належить вашій студії