Skip to main content

Messages

Query messages across all channels.

tip

To send messages, use the channel-specific endpoints:

  • SMSPOST /sms/campaigns, POST /sms/promotional
  • ViberPOST /viber/send

Query Messages

Retrieve messages by phone number or external user ID.

GET /api/v1/messages

Query Parameters

ParameterTypeRequiredDescription
phoneNumberstringOne requiredFilter by phone number
externalUserIdstringOne requiredFilter by external user ID
startDatedatetimeNoFilter from date
endDatedatetimeNoFilter to date
pageintegerNoPage number (default: 1)
pageSizeintegerNoItems per page (default: 20, max: 100)
note

At least one of phoneNumber or externalUserId is required.

Response

{
"messages": [
{
"id": "770e8400-e29b-41d4-a716-446655440002",
"campaignId": "660e8400-e29b-41d4-a716-446655440001",
"phoneNumber": "38970123456",
"externalUserId": "order_001",
"messageContent": "Hello John! Your order #ORD-12345 is ready.",
"status": "Delivered",
"channelType": "Viber",
"details": null,
"smsErrorCode": null,
"createdAt": "2024-01-15T10:30:00Z",
"sentAt": "2024-01-15T10:30:05Z",
"deliveredAt": "2024-01-15T10:30:08Z"
}
],
"totalCount": 1,
"page": 1,
"pageSize": 20
}
Channel Types

The channelType field returns "Viber" or "Smpp" (not "Sms").

Response Fields

FieldTypeDescription
statusstringSee message statuses below.
detailsstring | nullSMS: "UNDELIVERED", "EXPIRED", "REJECTED", or null. Viber: failure reason string.
smsErrorCodestring | nullSMS only: bare carrier code from the DLR err: field (e.g. "042").

Message Statuses

StatusDescription
PendingMessage created, waiting to be processed
SendingMessage is being sent
SentMessage sent to the provider
DeliveredDelivered to recipient's device
SeenViewed by recipient (Viber only)
FailedDelivery failed — inspect details and smsErrorCode for the reason

Example

curl -X GET "https://api.transformify.mk/api/v1/messages?phoneNumber=38970123456&page=1&pageSize=20" \
-H "X-API-Key: your-api-key"

Errors

StatusErrorDescription
400Bad RequestphoneNumber or externalUserId required
401UnauthorizedInvalid API key