Skip to main content
Chamelio webhooks let you subscribe to platform events and receive HTTP POST notifications to your endpoint as they happen — no polling required.

How Webhooks Work

  1. You register a webhook endpoint URL in the Chamelio web application
  2. When a subscribed event occurs, Chamelio sends an HTTP POST request to your URL with the event payload
  3. Your server processes the payload and responds with a 2xx status code to acknowledge receipt

Registering a Webhook

Configure webhook endpoints in Settings → Integrations → Webhooks in the Chamelio web application. You can:
  • Register multiple endpoint URLs
  • Subscribe each endpoint to specific event types
  • View delivery logs and retry failed deliveries

Authentication & Verification

Each webhook request includes a signature header so you can verify it came from Chamelio:
X-Chamelio-Signature: sha256=<hmac_hex_digest>
The signature is an HMAC-SHA256 digest of the raw request body, computed using your webhook secret. Verify it on your server before processing the payload:
import hmac
import hashlib

def verify_signature(payload_body: bytes, secret: str, signature_header: str) -> bool:
    expected = "sha256=" + hmac.new(
        secret.encode(),
        payload_body,
        hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature_header)
const crypto = require('crypto');

function verifySignature(payloadBody, secret, signatureHeader) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(payloadBody)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signatureHeader)
  );
}
Always verify the signature before processing a webhook payload. Skipping this step exposes your endpoint to spoofed requests.

Retry Policy

If your endpoint does not respond with a 2xx status within 10 seconds, Chamelio will retry delivery with exponential backoff:
AttemptDelay
1st retry1 minute
2nd retry5 minutes
3rd retry30 minutes
4th retry2 hours
After 4 failed retries the event is marked as undelivered. You can manually replay events from the webhook delivery log in the Chamelio web application.

Common Payload Fields

All webhook events share a common envelope:
{
  "event": "core.document.uploaded",
  "event_id": "evt_01HXYZ1234567890",
  "organization_id": "org_abc123",
  "timestamp": "2025-06-01T14:32:00Z",
  "data": { ... }
}
FieldTypeDescription
eventstringEvent type identifier (e.g., core.document.uploaded)
event_idstringUnique identifier for this event delivery. Use this to deduplicate retries
organization_idstringID of the organization in which the event occurred
timestampstringISO 8601 UTC timestamp of when the event was generated
dataobjectEvent-specific payload. See individual event pages for the schema

Available Events

Core — Documents

EventDescription
core.document.uploadedA new document was uploaded to Core
core.document.upload_with_issuesA document was uploaded but processing encountered issues
core.document.upload_completedA document upload finished processing successfully
core.document.updatedA document’s attributes or metadata were updated
core.document.deletedA document was deleted from Core

Flows — Workflows

EventDescription
flows.workflow.new_versionA new version of a workflow was published
flows.workflow.deletedA workflow was deleted

Flows — Tasks

EventDescription
flows.tasks.createdA new workflow task was created
flows.tasks.step_changeA task moved to a different step
flows.tasks.completedA task was completed
flows.tasks.canceledA task was canceled
flows.tasks.commentedA comment was added to a task