KPN · AsyncAPI Specification

Kpn Webhooks

Version

View Spec View on GitHub TelecommunicationsNetherlandsMobile Network OperatorBroadbandNetwork APIsCAMARAOpen GatewaySIM SwapIdentity VerificationMessagingSMSVoiceIoTLoRaWANFiberWholesale5GEuropeAsyncAPIWebhooksEvents

AsyncAPI Specification

Raw ↑
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.