Skip to main content
Webhooks allow you to receive HTTP POST notifications when key events happen in your Klara applications. Instead of polling the API, configure a webhook endpoint and Klara will push events to you in real time.

Supported events

EventTrigger
application.openedEnd user opens the Klara portal for the first time
application.submittedEnd user submits their application
webhook.testManually sent test ping from the dashboard

Payload format

All webhook payloads follow the same envelope structure:
{
  "id": "evt_abc123",
  "type": "application.submitted",
  "timestamp": "2026-01-15T10:30:00Z",
  "applicationId": "550e8400-e29b-41d4-a716-446655440000",
  "organizationId": "org_123",
  "data": {
    // Event-specific fields
  }
}
FieldTypeDescription
idstringUnique event ID (use for idempotency)
typestringEvent type (e.g., application.submitted)
timestampstringISO 8601 timestamp of when the event occurred
applicationIdstringUUID of the related application
organizationIdstringUUID of your organization
dataobjectEvent-specific payload (see below)

application.opened

Fired when the end user opens their Klara portal link for the first time.
{
  "id": "evt_abc123",
  "type": "application.opened",
  "timestamp": "2026-01-15T10:30:00Z",
  "applicationId": "550e8400-e29b-41d4-a716-446655440000",
  "organizationId": "org_123",
  "data": {
    "applicationRef": "APP-001",
    "openedAt": "2026-01-15T10:30:00Z"
  }
}

application.submitted

Fired when the end user submits their application.
{
  "id": "evt_def456",
  "type": "application.submitted",
  "timestamp": "2026-01-16T14:20:00Z",
  "applicationId": "550e8400-e29b-41d4-a716-446655440000",
  "organizationId": "org_123",
  "data": {
    "applicationId": "550e8400-e29b-41d4-a716-446655440000",
    "submittedAt": "2026-01-16T14:20:00Z",
    "fields": {
      "company_name": "Acme Ltd",
      "company_number": "12345678",
      "company_country": "GB",
      "industry": "technology",
      "expected_monthly_volume": 50000
      // ... additional fields vary by client configuration.
      // Sensitive fields are excluded.
    },
    "people": [
      {
        "full_name": "Jane Smith",
        "nationality": "GB",
        "roles": ["director", "ubo"]
      }
    ]
  }
}

data fields

FieldTypeDescription
applicationIdstringUUID of the submitted application
submittedAtstringISO 8601 submission timestamp
fieldsobjectNon-sensitive application fields (see note below)
peoplearrayConfirmed people — full_name, nationality, roles only

webhook.test

Sent when you click Send test in the dashboard.
{
  "id": "evt_test789",
  "type": "webhook.test",
  "timestamp": "2026-01-15T12:00:00Z",
  "applicationId": null,
  "organizationId": "org_123",
  "data": {
    "message": "This is a test webhook from Klara."
  }
}

Configuring webhooks

  1. Go to Settings → Integrations → Webhooks in your Klara dashboard
  2. Click Add Endpoint
  3. Enter your HTTPS URL and select the events you want to receive
  4. Copy the signing secret — you’ll need it to verify payloads
You can configure up to 5 webhook endpoints per organization. Webhook URLs must use HTTPS.

Delivery & retries

Klara delivers webhooks asynchronously. If your endpoint is unavailable, delivery is retried automatically:
PropertyValue
Timeout30 seconds per attempt
Max attempts5 (1 initial + 4 retries)
BackoffExponential (~12s, 2.5m, 30m, 6h)
SuccessAny HTTP 2xx response

Auto-disable

If an endpoint fails 5 consecutive deliveries (across any events), it is automatically disabled. You must re-enable it manually from the dashboard. The failure counter resets on any successful delivery.

Verifying signatures

Every webhook includes HMAC-SHA256 signatures so you can verify payloads are genuinely from Klara. See the Webhook Signatures guide for implementation details.

Best practices

  • Respond quickly — return a 200 response before processing the event. Use a queue for heavy work.
  • Handle duplicates — use the id field for idempotency. The same event may be delivered more than once.
  • Verify signatures — always validate the X-Klara-Signature header before trusting the payload.
  • Use HTTPS — webhook URLs must use HTTPS. HTTP URLs are rejected.