KPN · AsyncAPI Specification
Kpn Webhooks
Version
View Spec
View on GitHub
TelecommunicationsNetherlandsMobile Network OperatorBroadbandNetwork APIsCAMARAOpen GatewaySIM SwapIdentity VerificationMessagingSMSVoiceIoTLoRaWANFiberWholesale5GEuropeAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-07-25'
method: searched
source: https://developer.kpn.com/documentation/kpn-sms-api-documentation
also_derived_from:
- openapi/kpn-sms-inbound-openapi.yml
- openapi/kpn-webhook-signing-keys-openapi.yml
- openapi/kpn-webhook-privacy-config-manager-openapi.yml
spec_type: Webhooks
asyncapi_published: false
asyncapi_note: KPN publishes no AsyncAPI document. The event surface below is captured from the webhook documentation
and the three webhook-related OpenAPI definitions; nothing here is synthesised.
transport: HTTPS POST to a subscriber-configured URL
configuration:
api: openapi/kpn-webhook-privacy-config-manager-openapi.yml
scopes:
- organization
- team
- application
resolution: Application config overrides Team config, which overrides Organization config.
privacy_control: privacy_config.excluded_fields maps a service name to fields omitted from that service outbound
payload, e.g. {"privacy_config":{"excluded_fields":{"sms_dlr":["RecipientPhonenumber","Message"]}}}
security:
signing: HMAC-SHA256 hex digest over the raw request body, compared in constant time
headers:
- name: X-KPN-Webhook-Signature
description: HMAC-SHA256 signature of the payload
- name: X-KPN-Webhook-Timestamp
description: Unix epoch seconds, for replay protection
- name: X-KPN-Webhook-Key-Id
description: Identifies which signing key was used
- name: X-KPN-Webhook-Attempt
description: Delivery attempt number, 1-based
key_management:
api: openapi/kpn-webhook-signing-keys-openapi.yml
levels:
- organization
- team
- application
lifecycle:
- staged
- active
- retiring
- retired
rotation: Create a staged key, reveal its secret, accept both keys on the receiver, activate the new key (the
old one moves to retiring), then retire and delete it.
bootstrap: KPN auto-provisions an organization-level key on the first webhook delivery.
delivery:
attempts: 4
retry_schedule_seconds:
- 0
- 60
- 120
- 240
guarantee: at-least-once - receivers must de-duplicate on message_id
events:
- name: sms_dlr
title: SMS delivery report
description: Outbound delivery status notification for a message sent through the KPN SMS API.
status_codes:
- code: 1
meaning: Delivered
- code: 2
meaning: Queued
- code: 3
meaning: Accepted
- code: 4
meaning: Failed
- code: 5
meaning: Rejected
- code: 6
meaning: Expired
failure_codes: errors/kpn-sms-error-codes.yml
source: https://developer.kpn.com/documentation/kpn-sms-api-documentation
- name: inbound_sms
title: Inbound SMS
description: An SMS sent by an end user to your KPN virtual number, delivered to your configured webhook endpoint.
payload_schema: openapi/kpn-sms-inbound-openapi.yml#components/schemas/InboundSms
fields:
- sender
- recipient
- message_id
- content
- timestamp_utc
- type
source: openapi/kpn-sms-inbound-openapi.yml
callbacks_in_specs:
- api: Vonage Voice (via KPN)
source: openapi/vonage-voice-openapi.yml
note: answer_url / event_url callbacks are configured per application.
- api: Vonage Messages (via KPN)
source: openapi/vonage-messages-openapi.yml
note: Inbound and status callbacks declared in the definition.