Skip to main content
For an already configured webhook, use its receiving URL and signing secret to handle call events.

Verify the signature

Verify the signature before processing the event. Use the original request body bytes and decode the hexadecimal signing secret into bytes.
This Python example uses a five-minute timestamp tolerance to reject stale deliveries. The tolerance is a receiver policy, not a webhook expiry time.
Pass your framework’s case-insensitive request headers. Use the webhook signing secret for this check, not your Karta API key.

Accept the event

After verifying the signature, parse the JSON and save the event for processing. Return 200 OK; no response body is required. Use X-Webhook-Id to avoid processing the same delivery twice. A retry keeps the same delivery ID and receives a new timestamp and signature.

Handle retries

HTTP 4xx, 5xx, timeouts, and network failures trigger retry handling. Return 200 OK for an event you have already accepted. See Call events for headers, event names, and the payload schema.