Замовлення

Замовлення об'єднує одну або кілька позицій (моделей із параметрами друку), дані клієнта та, опціонально, дані доставки. Створення замовлення розраховує вартість кожної позиції тим самим механізмом, що й POST /quotes, і зберігає замовлення в системі студії — воно з'явиться в панелі студії поруч із замовленнями, створеними іншими каналами (сторінка замовлення, віджет).

Об'єкт Order#

ПолеТипОпис
idintegerУнікальний ідентифікатор замовлення
customerCustomerКлієнт, що оформив замовлення
statusstringСтатус замовлення — див. Статуси замовлення
totalPriceMoneyЗагальна вартість замовлення
itemsarrayПозиції замовлення — див. Об'єкт OrderItem
studioSlugstringПублічний ідентифікатор студії (використовується в URL сторінки замовлення)
sourcestringДжерело створення замовлення, наприклад "api"
deliveryDelivery | nullДані доставки, якщо були передані
createdAtstringДата й час створення, ISO 8601
updatedAtstringДата й час останнього оновлення, ISO 8601

Статуси замовлення#

СтатусЗначення
pendingОчікує підтвердження
confirmedПідтверджено, прийнято в роботу
printingДрукується
post_processingВиконується постобробка
readyГотове до відправки або самовивозу
shippedВідправлено клієнту
completedКлієнт отримав замовлення
cancelledСкасовано

Об'єкт Customer#

ПолеТипОпис
idintegerІдентифікатор клієнта
firstNamestringІм'я
lastNamestringПрізвище
phoneNumberstringНомер телефону в міжнародному форматі
emailstringEmail
localestringМова клієнта
totalOrdersinteger | nullКількість замовлень цього клієнта в студії
totalSpentstring | nullЗагальна сума витрат клієнта

Об'єкт OrderItem#

ПолеТипОпис
idintegerІдентифікатор позиції
filePathstring | nullВнутрішній шлях до файлу моделі
originalFileNamestring | nullОригінальна назва завантаженого файлу
downloadUrlstring | nullТимчасове підписане посилання для завантаження файлу
quantityintegerКількість копій
priceMoneyВартість позиції (за всю кількість)
materialIdinteger | nullІдентифікатор використаного матеріалу
finishingIdsinteger[]Ідентифікатори застосованих послуг постобробки
printingQualityIdinteger | nullІдентифікатор використаного профілю якості
printingTimeintegerЧас друку в хвилинах
weightstringВитрата матеріалу
productIdinteger | nullЯкщо позиція створена з товару каталогу — його ідентифікатор
productTitlestring | nullНазва товару, якщо застосовно
costBreakdownCostBreakdown | nullПовна деталізація розрахунку вартості позиції

Об'єкт Delivery#

ПолеТипОпис
methodstringСпосіб доставки
cityName, cityRefstring | nullМісто доставки (назва та внутрішній довідник Нової Пошти)
warehouseName, warehouseRefstring | nullВідділення (назва та довідник)
streetName, streetRefstring | nullВулиця, для кур'єрської доставки
buildingNumber, apartmentNumberstring | nullНомер будинку та квартири
npServiceTypestring | nullТип послуги Нової Пошти: "WarehouseWarehouse" або "WarehouseDoors"
trackingNumberstring | nullНомер ТТН
deliveryStatusstring | nullСтатус доставки від перевізника
scheduledDeliveryDate, actualDeliveryDatestring | nullОчікувана та фактична дата доставки

Створити замовлення#

POST /orders

Це запит типу multipart/form-data, а не JSON — для кожної позиції передається окремий файл моделі.

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

ПолеТипОбов'язковеОпис
models[] (або item_0, item_1, ...)fileтакПо одному файлу моделі на позицію, у тому самому порядку, що й items
itemsJSON-рядоктакМасив позицій, див. нижче
customerFirstNamestringтакІм'я клієнта — лише кириличні символи
customerLastNamestringтакПрізвище клієнта — лише кириличні символи
customerPhoneNumberstringтакНомер телефону в міжнародному форматі, наприклад +380671234567
customerEmailstringтакEmail клієнта
customerLocalestringніМова клієнта
deliveryMethodIdintegerніІдентифікатор способу доставки, налаштованого в студії
deliveryCityName, deliveryCityRefstringніМісто доставки (Нова Пошта)
deliveryWarehouseName, deliveryWarehouseRefstringніВідділення (Нова Пошта)
deliveryNpServiceTypestringні"WarehouseWarehouse" або "WarehouseDoors"
deliveryStreetName, deliveryStreetRefstringніВулиця — для кур'єрської доставки
deliveryBuildingNumber, deliveryApartmentNumberstringніНомер будинку та квартири
sourcestringніДовільна мітка джерела замовлення для вашої власної звітності

Кожен елемент масиву items — об'єкт:

ПолеТипОбов'язковеОпис
materialIdintegerтакІдентифікатор матеріалу з каталогу студії
printingQualityIdintegerтакІдентифікатор профілю якості з каталогу студії
finishingIdsinteger[]ніІдентифікатори послуг постобробки
quantityintegerніКількість копій, за замовчуванням 1

Валідація customerFirstName/customerLastName вимагає лише кириличних символів (regex /^[\p{Cyrillic}\s'-]+$/u) — так само, як і форма замовлення на сторінці студії. Латиниця в цих полях повертає 400.

Приклад запиту

curl https://placraftic.com/api/v1/orders \
  -H "Authorization: Bearer pk_live_..." \
  -F "models[][email protected]" \
  -F "models[][email protected]" \
  -F 'items=[{"materialId":2,"printingQualityId":1,"finishingIds":[7],"quantity":1},{"materialId":2,"printingQualityId":1,"finishingIds":[],"quantity":2}]' \
  -F "customerFirstName=Олена" \
  -F "customerLastName=Іванова" \
  -F "customerPhoneNumber=+380671234567" \
  -F "[email protected]" \
  -F "source=api"

Приклад відповіді

{
  "data": {
    "id": 48,
    "customer": {
      "id": 17,
      "firstName": "Олена",
      "lastName": "Іванова",
      "phoneNumber": "+380671234567",
      "email": "[email protected]",
      "locale": "uk",
      "totalOrders": 4,
      "totalSpent": "1245.00"
    },
    "status": "pending",
    "totalPrice": { "amount": "735.90", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
    "items": [
      {
        "id": 36,
        "filePath": "orders/48/model-1.stl",
        "originalFileName": "model-1.stl",
        "downloadUrl": "https://.../orders/48/model-1.stl?X-Amz-Signature=...",
        "quantity": 1,
        "price": { "amount": "245.30", "currency": { "id": 5, "code": "UAH", "symbol": "₴" } },
        "materialId": 2,
        "finishingIds": [7],
        "printingQualityId": 1,
        "printingTime": 190,
        "weight": "100",
        "productId": null,
        "productTitle": null,
        "costBreakdown": null
      }
    ],
    "studioSlug": "my-studio",
    "source": "api",
    "delivery": null,
    "createdAt": "2026-07-11T17:20:00+00:00",
    "updatedAt": "2026-07-11T17:20:00+00:00"
  }
}

Асинхронна обробка#

Так само, як і в POST /quotes, якщо слайсинг хоча б однієї позиції не завершено миттєво, відповідь повертається як 202 Accepted з jobId для опитування. Після завершення слайсингу повторіть запит з тими самими файлами — результат уже буде в кеші.

Помилки

КодПричина
400Відсутні обов'язкові поля, кількість файлів не збігається з кількістю позицій, ім'я/прізвище містять символи поза кирилицею, невалідний формат телефону чи email
404materialId, printingQualityId або finishingIds однієї з позицій не належить вашій студії

Отримати замовлення#

Повертає одне замовлення за ідентифікатором.

GET /orders/{id}

Параметри шляху

ПараметрТипОпис
idintegerІдентифікатор замовлення

Приклад запиту

curl https://placraftic.com/api/v1/orders/48 \
  -H "Authorization: Bearer pk_live_..."

Відповідь має ту саму структуру, що й у прикладі вище.

Помилки

КодПричина
404Замовлення з таким id не існує або належить іншій студії

Поки що недоступно#

  • Список замовленьGET /orders без id не підтримується; наразі доступне лише отримання одного замовлення за ідентифікатором.
  • Вебхуки — сповіщення про створення замовлення чи зміну статусу заплановані на майбутній етап розвитку API.
  • Запис у каталог — створення, редагування та видалення матеріалів, профілів якості, послуг постобробки й товарів через API поки не підтримується; ці розділи каталогу доступні лише для читання.