Настройка webhook
В Настройки → Интеграции → Разработчикам → Уведомления о заказах можно добавить сразу несколько каналов одновременно — например, Home Assistant и Discord вместе. У каждого канала свой формат тела запроса:
- 3D Print Pricing / HA — общий JSON с HMAC-подписью, см. раздел ниже.
- Discord / Slack — их родной формат incoming webhook (без подписи — весь секрет уже зашит в самом URL, который выдаёт Discord/Slack).
Добавьте канал, вставьте URL приёмника, включите — 3D Print Pricing покажет секрет один раз (только у формата «3D Print Pricing / HA»), скопируйте его сразу. Кнопка «Отправить тестовое событие» у каждого канала шлёт синтетическое событие webhook.test прямо сейчас, не дожидаясь реального заказа.
События order.created / order.status_changed
3D Print Pricing отправляет POST с JSON-телом на ваш URL при создании заказа и при каждой смене workflow_status. Доставка — best-effort (без повторных попыток при ошибке в MVP), поэтому не полагайтесь только на webhook — для сверки используйте GET /print-jobs.
POST <ваш URL>
Content-Type: application/json
X-3DP-Event: order.status_changed
X-3DP-Signature: sha256=<hex-подпись тела запроса>
{
"event": "order.status_changed",
"occurred_at": "2026-08-27T18:32:10.000Z",
"data": {
"id": "b6b6c8b0-...",
"model_name": "Кронштейн",
"quantity_pieces": 4,
"material_name": "PETG",
"color_hex": "#000000",
"material_grams": 86.0,
"print_hours": 3.5,
"due_date": "2026-09-01",
"order_notes": "",
"workflow_status": "assigned",
"printer_id": null,
"printer_name": null
}
}Проверка подписи (псевдокод)
signature_header = "sha256=" + hex(HMAC_SHA256(webhook_secret, raw_request_body))
if signature_header != request.headers["X-3DP-Signature"]:
reject() # тело подделано или секрет не совпадаетУправление подписками через API
То же самое, что карточка Настройки → Интеграции → Разработчикам, но программно — например, чтобы n8n/скрипт сам завёл канал при первом запуске, не заходя в веб-интерфейс. Максимум 10 каналов на аккаунт.
/webhook-subscriptionsСписок подписок
Все каналы аккаунта (без секретов — они отдаются только один раз, при создании/пересоздании).
/webhook-subscriptionsСоздать подписку
Секрет (для формата «3D Print Pricing / HA») вернётся в ответе один раз — сохраните его сразу.
/webhook-subscriptions/{id}/testОтправить тестовое событие
Шлёт синтетическое событие webhook.test на URL уже существующей подписки — реальные заказы не трогает.
/webhook-subscriptions/{id}/deliveriesИстория доставок
Последние 20 попыток отправки по этой подписке (статус, ошибка, время).
/webhook-subscriptions/{id}Удалить подписку
Использует то же id подписки, что и поля выше.