OTP uses
otp.sent, otp.delivered, otp.verified, otp.expired, otp.failed.
sms.failed, sms.blocked and otp.failed add data.reason (a stable token such as delivery_failed) and data.refunded (a boolean that matches the credit ledger) when they are known. SMS payloads also include data.message. sms.sent / sms.delivered set data.status to sent / delivered. The tokens are listed on Delivery timeline.
Configure the URL and event list in the dashboard. Signature and payload shape: Webhooks.
You can also poll GET /v1/sms/{id}. There is no public “send test event” HTTP API; the dashboard has a test-fire control.