Skip to main content
DLRs apply to all message sending methods — the InteractSMS API v2, the legacy v1 APIs, and messages sent directly through the Phonovation web interface. If a message is sent, a DLR can be generated.
When a message is delivered (or fails), the Phonovation gateway sends an HTTP POST to a URL you provide. This lets you track delivery status in real time for every message you send.

Setup

Provide your DLR callback URL to support@phonovation.com. The endpoint must:
  • Accept HTTP POST requests
  • Support up to TLS 1.2
  • Return a 200 OK response

DLR parameters

The POST body contains the following fields:
ParameterExampleDescription
SMS-TypeNotificationAlways Notification
SMS-NotifyId321354The notifyId you assigned to the recipient
SMS-SuccessTrueTrue if delivered, False if not
SMS-To353871111111Destination number (GSM format)
SMS-From353877777777Sender ID as it appeared on the recipient’s handset
SMS-Verify9db038748b3088971d913616c13e769bMD5 hash for payload verification — see below
SMS-TotalToSend1Total number of messages in the send
SMS-TotalSent1Number successfully sent
SMS-TotalFailed0Number that failed
SMS-TimeStamp2024-01-10 14:17:44Delivery time (yyyy-MM-dd HH:mm:ss, UTC)

Success logic

SMS-Success is True only when all messages were delivered:
TotalSent == TotalToSend AND TotalFailed == 0  →  True
Otherwise  →  False
TotalToSendTotalSentTotalFailedSMS-Success
220True
211False

DLR timing

The vast majority of DLRs — 90%+ — arrive within seconds to a few minutes of sending. However, DLRs are ultimately dependent on the downstream mobile network and the recipient’s device. In some cases a DLR may be delayed by up to 48 hours due to:
  • Network congestion or outages
  • High traffic volumes
  • The recipient’s device being powered off or out of coverage
Design your integration to handle late DLRs. Do not assume a message has failed simply because a DLR has not arrived quickly. If you require a hard timeout, 48 hours is a safe threshold after which you can treat a missing DLR as unconfirmed.

Example DLR payload

SMS-Type=Notification
SMS-NotifyId=
SMS-Success=True
SMS-To=353896073106
SMS-From=353870934726
SMS-Verify=5fb4926bd7e461eddc6dc629f472bab4
SMS-TotalToSend=1
SMS-TotalSent=1
SMS-TotalFailed=0
SMS-TimeStamp=2026-04-09 16:03:16
URL-encode the POST body before sending. Some field values may contain characters that break unencoded requests.

Verifying the payload

The SMS-Verify field is an MD5 hash you can use to confirm the DLR genuinely came from Phonovation:
MD5(SMS-NotifyId + SMS-Success + YourPassword)
const crypto = require('crypto');

function verifyDlr({ notifyId, success, password, verify }) {
  const expected = crypto
    .createHash('md5')
    .update(notifyId + success + password)
    .digest('hex');
  return expected === verify;
}

Tracking recipients with notifyId

Set a notifyId per recipient when sending and Phonovation will echo it back in every DLR for that recipient via SMS-NotifyId. The same identifier also appears in webhooks, making it the single thread that ties your outbound send, webhook confirmation, DLR, and inbound replies together. See notifyId for full details, use cases, and end-to-end flow examples.
Last modified on April 9, 2026