Have every SMS received on one of your Uniden Voice numbers delivered to your own application as an HTTP POST.
When an SMS arrives on one of your service numbers, we:
See Delivery before you build your endpoint.
Webhooks need the Webhook marketplace product on your account. Without it the page shows "Vocphone Webhook Is Not Enabled".
| Field | What it does |
|---|---|
| Phone number(s) | Your SMS-capable numbers. Pick one or more. Alphanumeric sender names aren't listed; they can't receive SMS. |
| Parameters | The fields to include in the POST. Blank means All. See Choose which fields are sent. |
| URL | Where we POST. Use HTTPS. |
| Save / Reset / Show List | Save the entry, clear the form, or view the webhooks already configured. |
Saving the same number and URL again with different parameters updates the existing entry rather than adding a second one.
We send an HTTP POST with a multipart/form-data body. The fields are form fields, not JSON. No signature or authentication header is sent.
| Field | Value |
|---|---|
To |
Your service number that received the SMS, international format without + (e.g. 61400000000). |
From |
The sender's number, international format without +. |
Body |
The message text. |
MessageId |
Integer. Our unique ID for the stored message. |
Timestamp |
When we received the message, UTC ISO 8601 (e.g. 2026-09-25T04:03:11Z). Empty string if the receive time wasn't recorded. |
With Parameters left blank, the POST carries all five fields:
To=61400000000
From=61411111111
Body=Hello, this is a test message
MessageId=123456
Timestamp=2026-09-25T04:03:11Z
To send yourself the same request while you build the endpoint:
curl -X POST https://example.com/sms/9f3c2a7e4b1d8c6f0a5e3b9d7c2f1a8e \
-F To=61400000000 \
-F From=61411111111 \
-F "Body=Hello, this is a test message" \
-F MessageId=123456 \
-F Timestamp=2026-09-25T04:03:11Z
MessageId is our message record ID, the same scheme as the message_id values the send-SMS endpoint returns (POST /api/v1/sms/send → smsRecords[].message_id). You can match it against the id of messages returned by GET /api/v1/sms/conversation/{sender}/{phone}.
MessageId, and no second webhook fires.MessageId never equals an ID you received from sending; they are different messages.We don't retry. If your endpoint fails, the message is still in the portal and in the conversation API, but your application won't hear about it again. Log failures and alert on them at your end.
Parameters is a comma-separated list of field names. Spaces are ignored, so From, Body works too.
| Parameters | Fields sent |
|---|---|
| (blank) | To, From, Body, MessageId, Timestamp |
To,From |
To, From, MessageId, Timestamp |
From,Body |
From, Body, MessageId, Timestamp |
To,From,Body |
To, From, Body, MessageId, Timestamp |
Only To, From and Body are selectable. MessageId and Timestamp are always added.
The Parameters list in the portal offers many other names (
SmsStatus,SmsMessageSid,AccountSid,FromCityand so on). They are ignored. If you select only those, the POST contains justMessageIdandTimestamp.
A minimal PHP handler. PHP parses multipart/form-data into $_POST for you.
<?php
// Served at https://example.com/sms/9f3c2a7e4b1d8c6f0a5e3b9d7c2f1a8e
$messageId = (int) ($_POST['MessageId'] ?? 0);
if ($messageId === 0) {
http_response_code(400);
exit;
}
// Safeguard: de-dupe on MessageId (replace with a lookup in your database)
if (alreadySeen($messageId)) {
http_response_code(200);
exit;
}
queueForProcessing([
'to' => $_POST['To'] ?? '',
'from' => $_POST['From'] ?? '',
'body' => $_POST['Body'] ?? '',
'messageId' => $messageId,
'timestamp' => $_POST['Timestamp'] ?? '',
]);
http_response_code(200);
Other stacks need a multipart parser, not a JSON one: in Express use multer().none(), in Rails read params, in ASP.NET read Request.Form.
MessageId as a safeguard (for example if you replay requests yourself).