Messente Statistics API
Request messaging statistics reports by country and destination network (MCC/MNC) over a date range at /statistics/reports, reporting sent, delivered, and failed message counts.
Request messaging statistics reports by country and destination network (MCC/MNC) over a date range at /statistics/reports, reporting sent, delivered, and failed message counts.
openapi: 3.0.3
info:
title: Messente API
version: 2.1.0
description: >-
Messente is a global CPaaS provider of messaging and user verification
services based in Estonia. Send and receive SMS, Viber, and WhatsApp
messages through a single Omnimessage endpoint with an automatic fallback
chain, manage contacts and groups in the Phonebook, look up phone number
(HLR) information, run PIN-based number verification / 2FA, retrieve
delivery reports, and pull messaging statistics. This is a faithful,
representative OpenAPI description of the public Messente REST API; consult
the official documentation for the authoritative contract.
contact:
name: Messente Support
url: https://messente.com/documentation
email: messente@messente.com
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: https://api.messente.com/v1
description: Messente production API
security:
- basicAuth: []
tags:
- name: Omnimessage
description: Send SMS, Viber, WhatsApp, and Telegram messages with an automatic fallback chain.
- name: Bulk Messaging
description: Send an Omnimessage to many recipients in a single request.
- name: Delivery Report
description: Retrieve delivery status for a sent Omnimessage.
- name: Contacts
description: Manage contacts in the Messente Phonebook.
- name: Groups
description: Manage contact groups in the Messente Phonebook.
- name: Blacklist
description: Manage the phone number blacklist.
- name: Number Lookup
description: Fetch HLR / network information about phone numbers.
- name: Number Verification
description: PIN-based phone number verification (2FA / one-time passwords).
- name: Statistics
description: Request messaging statistics reports by country.
- name: Pricing
description: Retrieve account pricelist and per-country prices.
- name: Account Balance
description: Retrieve the current account balance.
paths:
/omnimessage:
post:
tags:
- Omnimessage
summary: Sends an Omnimessage
description: >-
Sends an Omnimessage across one or more channels (SMS, Viber, WhatsApp,
Telegram). Channels are attempted in the order supplied as a fallback
chain until delivery succeeds.
operationId: sendOmnimessage
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Omnimessage'
responses:
'202':
description: Omnimessage accepted for sending
content:
application/json:
schema:
$ref: '#/components/schemas/OmniMessageCreateSuccessResponse'
'400':
description: Invalid input
'401':
description: Unauthorized
/omnimessage/{omnimessageId}:
delete:
tags:
- Omnimessage
summary: Cancels a scheduled Omnimessage
operationId: cancelScheduledMessage
parameters:
- name: omnimessageId
in: path
required: true
description: The identifier of the Omnimessage to cancel.
schema:
type: string
format: uuid
responses:
'204':
description: Omnimessage cancelled
'404':
description: Omnimessage not found
/omnimessage/{omnimessageId}/status:
get:
tags:
- Delivery Report
summary: Retrieves the delivery report for an Omnimessage
operationId: retrieveDeliveryReport
parameters:
- name: omnimessageId
in: path
required: true
description: The identifier of the Omnimessage.
schema:
type: string
format: uuid
responses:
'200':
description: Delivery report retrieved
content:
application/json:
schema:
$ref: '#/components/schemas/DeliveryReportResponse'
'404':
description: Omnimessage not found
/omnimessages:
post:
tags:
- Bulk Messaging
summary: Sends a bulk Omnimessage
description: Sends an Omnimessage to multiple recipients in a single request.
operationId: sendBulkOmnimessage
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BulkOmnimessage'
responses:
'202':
description: Bulk Omnimessage accepted for sending
'400':
description: Invalid input
/phonebook/contacts:
get:
tags:
- Contacts
summary: Returns all contacts
operationId: fetchContacts
parameters:
- name: groupIds
in: query
required: false
description: Optional list of group IDs to filter contacts by.
schema:
type: array
items:
type: string
responses:
'200':
description: A list of contacts
content:
application/json:
schema:
$ref: '#/components/schemas/ContactListEnvelope'
post:
tags:
- Contacts
summary: Creates a new contact
operationId: createContact
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContactFields'
responses:
'201':
description: Contact created
content:
application/json:
schema:
$ref: '#/components/schemas/ContactEnvelope'
/phonebook/contacts/{phone}:
get:
tags:
- Contacts
summary: Lists a contact
operationId: fetchContact
parameters:
- $ref: '#/components/parameters/Phone'
responses:
'200':
description: A contact
content:
application/json:
schema:
$ref: '#/components/schemas/ContactEnvelope'
patch:
tags:
- Contacts
summary: Updates a contact
operationId: updateContact
parameters:
- $ref: '#/components/parameters/Phone'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContactUpdateFields'
responses:
'200':
description: Contact updated
delete:
tags:
- Contacts
summary: Deletes a contact
operationId: deleteContact
parameters:
- $ref: '#/components/parameters/Phone'
responses:
'204':
description: Contact deleted
/phonebook/contacts/{phone}/groups:
get:
tags:
- Contacts
summary: Lists a contact's group memberships
operationId: fetchContactGroups
parameters:
- $ref: '#/components/parameters/Phone'
responses:
'200':
description: Group memberships for the contact
content:
application/json:
schema:
$ref: '#/components/schemas/GroupListEnvelope'
/phonebook/groups/{groupId}/contacts/{phone}:
post:
tags:
- Contacts
summary: Adds a contact to a group
operationId: addContactToGroup
parameters:
- $ref: '#/components/parameters/GroupId'
- $ref: '#/components/parameters/Phone'
responses:
'200':
description: Contact added to group
delete:
tags:
- Contacts
summary: Removes a contact from a group
operationId: removeContactFromGroup
parameters:
- $ref: '#/components/parameters/GroupId'
- $ref: '#/components/parameters/Phone'
responses:
'204':
description: Contact removed from group
/phonebook/groups:
get:
tags:
- Groups
summary: Returns all groups
operationId: fetchGroups
responses:
'200':
description: A list of groups
content:
application/json:
schema:
$ref: '#/components/schemas/GroupListEnvelope'
post:
tags:
- Groups
summary: Creates a new group
operationId: createGroup
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GroupName'
responses:
'201':
description: Group created
content:
application/json:
schema:
$ref: '#/components/schemas/GroupEnvelope'
/phonebook/groups/{groupId}:
get:
tags:
- Groups
summary: Lists a group
operationId: fetchGroup
parameters:
- $ref: '#/components/parameters/GroupId'
responses:
'200':
description: A group
content:
application/json:
schema:
$ref: '#/components/schemas/GroupEnvelope'
put:
tags:
- Groups
summary: Updates a group
operationId: updateGroup
parameters:
- $ref: '#/components/parameters/GroupId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GroupName'
responses:
'200':
description: Group updated
delete:
tags:
- Groups
summary: Deletes a group
operationId: deleteGroup
parameters:
- $ref: '#/components/parameters/GroupId'
responses:
'204':
description: Group deleted
/phonebook/blacklist:
get:
tags:
- Blacklist
summary: Returns all blacklisted phone numbers
operationId: fetchBlacklist
responses:
'200':
description: The blacklist
content:
application/json:
schema:
$ref: '#/components/schemas/FetchBlacklistSuccess'
post:
tags:
- Blacklist
summary: Adds a phone number to the blacklist
operationId: addToBlacklist
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NumberToBlacklist'
responses:
'201':
description: Number added to blacklist
/phonebook/blacklist/{phone}:
get:
tags:
- Blacklist
summary: Checks if a phone number is blacklisted
operationId: isBlacklisted
parameters:
- $ref: '#/components/parameters/Phone'
responses:
'204':
description: Number is blacklisted
'404':
description: Number is not blacklisted
delete:
tags:
- Blacklist
summary: Removes a phone number from the blacklist
operationId: deleteFromBlacklist
parameters:
- $ref: '#/components/parameters/Phone'
responses:
'204':
description: Number removed from blacklist
/hlr/sync:
post:
tags:
- Number Lookup
summary: Requests phone number information (HLR lookup)
description: >-
Performs a synchronous HLR lookup returning network, roaming, and
portability information for one or more phone numbers.
operationId: fetchInfoSync
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NumbersToInvestigate'
responses:
'200':
description: Number lookup results
content:
application/json:
schema:
$ref: '#/components/schemas/SyncNumberLookupSuccess'
/verify/start:
post:
tags:
- Number Verification
summary: Initiates phone number verification
description: Sends a PIN code to a phone number to begin verification.
operationId: verifyNumber
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Omnimessage'
responses:
'200':
description: Verification initiated
content:
application/json:
schema:
$ref: '#/components/schemas/OmniMessageCreateSuccessResponse'
/verify/pin:
post:
tags:
- Number Verification
summary: Verifies a PIN code
description: Checks a PIN entered by the user against a verification session.
operationId: verifyPin
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
verificationId:
type: string
format: uuid
pin:
type: string
responses:
'200':
description: PIN verified
'400':
description: Invalid or expired PIN
/statistics/reports:
post:
tags:
- Statistics
summary: Requests statistics reports by country
operationId: createStatisticsReport
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/StatisticsReportSettings'
responses:
'200':
description: Statistics report
content:
application/json:
schema:
$ref: '#/components/schemas/StatisticsReportSuccess'
/pricelist:
get:
tags:
- Pricing
summary: Retrieves the account pricelist
operationId: getPricelist
responses:
'200':
description: The account pricelist
content:
application/json:
schema:
$ref: '#/components/schemas/PriceInfo'
/prices:
get:
tags:
- Pricing
summary: Gets prices for a specific country
operationId: getPrices
parameters:
- name: country
in: query
required: true
description: Two-letter ISO 3166-1 alpha-2 country code.
schema:
type: string
responses:
'200':
description: Prices for the country
content:
application/json:
schema:
$ref: '#/components/schemas/PriceInfo'
/get_balance:
get:
tags:
- Account Balance
summary: Retrieves the account balance
operationId: getAccountBalance
responses:
'200':
description: Account balance
content:
application/json:
schema:
$ref: '#/components/schemas/AccountBalance'
components:
securitySchemes:
basicAuth:
type: http
scheme: basic
description: >-
HTTP Basic authentication using the API username and password from the
Messente dashboard API settings.
parameters:
Phone:
name: phone
in: path
required: true
description: A phone number in international E.164 format.
schema:
type: string
GroupId:
name: groupId
in: path
required: true
description: The identifier of the group.
schema:
type: string
format: uuid
schemas:
Omnimessage:
type: object
description: >-
A message delivered over one or more channels. The messages array
defines the fallback chain in priority order.
required:
- to
- messages
properties:
to:
type: string
description: Recipient phone number in international E.164 format.
messages:
type: array
description: Ordered list of channel-specific messages forming the fallback chain.
items:
oneOf:
- $ref: '#/components/schemas/SMS'
- $ref: '#/components/schemas/Viber'
- $ref: '#/components/schemas/WhatsApp'
text_store:
type: string
enum:
- nostore
- plaintext
- sha256
SMS:
type: object
description: An SMS channel message.
required:
- text
properties:
channel:
type: string
enum:
- sms
default: sms
sender:
type: string
description: Sender ID.
text:
type: string
validity:
type: integer
description: Message validity period in minutes.
autoconvert:
type: string
enum:
- full
- "on"
- "off"
Viber:
type: object
description: A Viber channel message.
required:
- text
properties:
channel:
type: string
enum:
- viber
default: viber
sender:
type: string
text:
type: string
image_url:
type: string
button_url:
type: string
button_text:
type: string
validity:
type: integer
WhatsApp:
type: object
description: A WhatsApp channel message.
properties:
channel:
type: string
enum:
- whatsapp
default: whatsapp
sender:
type: string
text:
$ref: '#/components/schemas/WhatsAppText'
WhatsAppText:
type: object
properties:
body:
type: string
preview_url:
type: boolean
BulkOmnimessage:
type: object
properties:
messages:
type: array
items:
$ref: '#/components/schemas/Omnimessage'
OmniMessageCreateSuccessResponse:
type: object
properties:
messages:
type: array
items:
type: object
properties:
channel:
type: string
message_id:
type: string
sender:
type: string
to:
type: string
omnimessage:
type: string
format: uuid
DeliveryReportResponse:
type: object
properties:
statuses:
type: array
items:
type: object
properties:
channel:
type: string
message_id:
type: string
sender:
type: string
status:
type: string
err:
type: string
to:
type: string
omnimessage_id:
type: string
format: uuid
ContactFields:
type: object
required:
- phoneNumber
properties:
phoneNumber:
type: string
email:
type: string
firstName:
type: string
lastName:
type: string
company:
type: string
title:
type: string
custom:
type: string
custom2:
type: string
custom3:
type: string
custom4:
type: string
ContactUpdateFields:
type: object
properties:
email:
type: string
firstName:
type: string
lastName:
type: string
company:
type: string
title:
type: string
ContactResponseFields:
allOf:
- $ref: '#/components/schemas/ContactFields'
- type: object
properties:
scheduledDeletionDate:
type: string
ContactEnvelope:
type: object
properties:
contact:
$ref: '#/components/schemas/ContactResponseFields'
ContactListEnvelope:
type: object
properties:
contacts:
type: array
items:
$ref: '#/components/schemas/ContactResponseFields'
GroupName:
type: object
required:
- name
properties:
name:
type: string
GroupResponseFields:
type: object
properties:
id:
type: string
format: uuid
name:
type: string
contactsCount:
type: integer
createdOn:
type: string
GroupEnvelope:
type: object
properties:
group:
$ref: '#/components/schemas/GroupResponseFields'
GroupListEnvelope:
type: object
properties:
groups:
type: array
items:
$ref: '#/components/schemas/GroupResponseFields'
NumberToBlacklist:
type: object
required:
- phoneNumber
properties:
phoneNumber:
type: string
FetchBlacklistSuccess:
type: object
properties:
phoneNumbers:
type: array
items:
type: object
properties:
phoneNumber:
type: string
NumbersToInvestigate:
type: object
required:
- numbers
properties:
numbers:
type: array
items:
type: string
SyncNumberLookupResult:
type: object
properties:
number:
type: string
roaming:
type: boolean
ported:
type: boolean
roamingNetwork:
$ref: '#/components/schemas/MobileNetwork'
originalNetwork:
$ref: '#/components/schemas/MobileNetwork'
currentNetwork:
$ref: '#/components/schemas/MobileNetwork'
error:
type: string
status:
type: string
SyncNumberLookupSuccess:
type: object
properties:
result:
type: array
items:
$ref: '#/components/schemas/SyncNumberLookupResult'
MobileNetwork:
type: object
properties:
mcc:
type: string
mnc:
type: string
networkName:
type: string
countryName:
type: string
countryPrefix:
type: string
StatisticsReportSettings:
type: object
properties:
startDate:
type: string
endDate:
type: string
mccmnc:
type: array
items:
type: string
StatisticsReport:
type: object
properties:
country:
type: string
mccmnc:
type: string
sent:
type: integer
delivered:
type: integer
failed:
type: integer
StatisticsReportSuccess:
type: object
properties:
reports:
type: array
items:
$ref: '#/components/schemas/StatisticsReport'
Price:
type: object
properties:
mcc:
type: string
mnc:
type: string
networkName:
type: string
price:
type: number
currency:
type: string
PriceInfo:
type: object
properties:
prices:
type: array
items:
$ref: '#/components/schemas/Price'
AccountBalance:
type: object
properties:
balance:
type: number
currency:
type: string