Webhooks

Get order.created / order.status_changed events pushed to your URL — no polling needed.

Search documentation

Jump to a section

Setting up webhooks

In Settings → Integrations → Developers → Order notifications you can add several channels at once — e.g. Home Assistant and Discord together. Each channel has its own request body format:

  • 3D Print Pricing / HA — a generic JSON payload with an HMAC signature, see the section below.
  • Discord / Slack — their native incoming webhook format (no signature — the whole secret is already baked into the URL that Discord/Slack issues).

Add a channel, paste the receiver URL, enable it — 3D Print Pricing will show the secret once (only for the “3D Print Pricing / HA” format), copy it right away. Each channel’s “Send test event” button sends a synthetic webhook.test event right now, without waiting for a real order.

order.created / order.status_changed events

3D Print Pricing sends a POST with a JSON body to your URL when an order is created and on every workflow_status change. Delivery is best-effort (no retries on error in the MVP), so don’t rely on webhooks alone — use GET /print-jobs to reconcile.

POST <your URL>
Content-Type: application/json
X-3DP-Event: order.status_changed
X-3DP-Signature: sha256=<hex signature of the request body>

{
  "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 verification (pseudocode)

signature_header = "sha256=" + hex(HMAC_SHA256(webhook_secret, raw_request_body))
if signature_header != request.headers["X-3DP-Signature"]:
    reject()  # payload was tampered with, or the secret doesn't match

Managing subscriptions via API

The same thing as the Settings → Integrations → Developers card, but programmatically — e.g. so n8n/a script can set up a channel on first run without going into the web UI. Up to 10 channels per account.

GET/webhook-subscriptions

Subscription list

All channels on the account (without secrets — those are returned only once, at creation/recreation).

POST/webhook-subscriptions

Create subscription

The secret (for the "3D Print Pricing / HA" format) is returned in the response once — save it right away.

POST/webhook-subscriptions/{id}/test

Send a test event

Sends a synthetic webhook.test event to an existing subscription's URL — doesn't touch real orders.

GET/webhook-subscriptions/{id}/deliveries

Delivery history

The last 20 delivery attempts for this subscription (status, error, time).

DELETE/webhook-subscriptions/{id}

Delete subscription

Uses the same subscription id as the field above.

Questions about the integration — use 3D Print Pricing's regular support.Contact support
REST APIWEBHOOKSHOME ASSISTANTDISCORDSLACKN8NKLIPPER
REST APIWEBHOOKSHOME ASSISTANTDISCORDSLACKN8NKLIPPER

© 2026 · 3DPP API · v9.5.0 · 16+

Ivan Maksim Andreyevich · Self-employed (NPD) · Taxpayer ID (INN) 524308881820 · print.calculator.3d@gmail.com