Simplio3D

Webhooks

Receive real-time HTTP callbacks when events occur in your Simplio3D projects. Configure multiple webhooks per project with event filtering and HMAC-SHA256 signature verification.

Supported Event Types

quote.submittedquote.updatedquote.deletedoption.changedprice.calculatedform.submittedproject.updatedproject.publishedviewer.screenshotanimation.triggered

List Webhooks

GET/projects/:projectId/webhooks

Retrieve all webhook configurations for a project.

curl -X GET \
  https://api.simplio3d.com/v1/projects/proj_123/webhooks \
  -H "Authorization: Bearer YOUR_TOKEN"

Create / Update Webhook

PUT/projects/:projectId/webhooks/:webhookId

Create a new webhook or update an existing one. The webhook ID is idempotent — use the same ID to update.

curl -X PUT \
  https://api.simplio3d.com/v1/projects/proj_123/webhooks/wh_abc \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Order Notifications",
    "url": "https://your-server.com/webhook",
    "events": ["quote.submitted", "form.submitted"],
    "secret": "whsec_your_signing_secret",
    "enabled": true
  }'

Request Body

url (required) — HTTPS endpoint to receive events

events (required) — Array of event types to subscribe to

secret — Signing secret for HMAC-SHA256 verification

name — Display name for the webhook

enabled — Whether the webhook is active (default: true)

Delete Webhook

DELETE/projects/:projectId/webhooks/:webhookId
curl -X DELETE \
  https://api.simplio3d.com/v1/projects/proj_123/webhooks/wh_abc \
  -H "Authorization: Bearer YOUR_TOKEN"

Test Webhook

POST/projects/:projectId/webhooks/:webhookId/test

Send a test webhook.test event to verify connectivity. The response includes the HTTP status from your server.

curl -X POST \
  https://api.simplio3d.com/v1/projects/proj_123/webhooks/wh_abc/test \
  -H "Authorization: Bearer YOUR_TOKEN"

# Response:
# { "success": true, "test": { "statusCode": 200, "statusText": "OK", "delivered": true } }

Delivery Logs

GET/projects/:projectId/webhooks/:webhookId/deliveries

Returns up to the last 50 delivery attempts for a specific webhook.

curl -X GET \
  https://api.simplio3d.com/v1/projects/proj_123/webhooks/wh_abc/deliveries \
  -H "Authorization: Bearer YOUR_TOKEN"

# Response:
# { "success": true, "deliveries": [
#   { "webhookId": "wh_abc", "event": "quote.submitted",
#     "statusCode": 200, "delivered": true, "timestamp": "..." },
#   ...
# ] }

Trigger Webhooks

POST/projects/:projectId/webhooks/trigger

Manually fire an event to all matching webhooks. Useful for testing integrations or replaying events.

curl -X POST \
  https://api.simplio3d.com/v1/projects/proj_123/webhooks/trigger \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "event": "quote.submitted", "data": { "quoteId": "q_456" } }'

Signature Verification

Each webhook delivery includes these headers for security:

X-Simplio3D-Event — Event type (e.g. quote.submitted)

X-Simplio3D-Delivery — Unique delivery UUID

X-Simplio3D-Signature — HMAC-SHA256 hex digest: sha256=...

// Node.js verification example
const crypto = require('crypto');

function verifySignature(payload, signature, secret) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(JSON.stringify(payload))
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(signature), Buffer.from(expected)
  );
}

Continue reading