Business SMS, sent and proven
Bulk, transactional and one-time-password messages over an HTTP API or SMPP, with a delivery receipt you can check.
Every message you send, on one account
Campaigns, one-time passwords, API traffic and replies share the same routes, the same balance and the same reports.
One-time sends reach a list or a segment on the schedule you set, inside your quiet hours, with a report for every country.
Transactional and OTP messages travel on a priority lane of their own, apart from campaign traffic.
Signed webhooks push each change of a message's status to your endpoint, signed with your secret so your system can check where it came from.
A two-way inbox keeps each reply beside the message it answers, and a STOP takes the number off every future send.
Delivery receipts and reports show what the operator accepted and what reached the handset, for each message, each send and each country.
Roles, credentials and an audit log decide who may send, spend and change settings, give each integration its own key or SMPP account, and record who did what.
Messages in the apps your customers already open
WhatsApp, Viber and Telegram run on the same account as your SMS, with the same API key, balance and reports. When an app cannot deliver, the message goes out as an SMS instead.
Fallback to SMS sends the same message as an SMS when the app has not delivered it in the time you set, so a code or an alert still arrives.
Rich, branded messages carry your name and logo, and can hold an image and buttons that open a link or send a reply, where the app supports them.
Delivered and read
Each message reports when it reached the phone and, where the app shares it, when it was read — in the report and as a signed webhook.
One inbox, one opt-out
A reply from any app lands beside your SMS replies, and a number that opts out comes off SMS and every messenger.
Nothing new to integrate
A messenger send uses the same API key, the same balance and the same reports as an SMS.
Tell us which apps and countries you need, and we will take you through setting up the senders.
Talk to us →Email campaigns with the same proof
Newsletters, promotions and transactional email go out from the same workspace as your SMS. Each send reports what was delivered, opened and clicked, and an unsubscribe holds on every future send.
Campaigns and transactional email go out from your own domain, built from a template or your own HTML, to a list or a segment on the schedule you set.
The autumn collection is 20% off for loyalty members until Sunday.
A report for every send shows what was delivered, opened and clicked, and which addresses bounced or unsubscribed, for each campaign and each recipient.
Your domain, authenticated
We give you the SPF, DKIM and DMARC records for your sending domain and check them before the first send.
Unsubscribes that hold
Every campaign carries a signed unsubscribe link and a one-click unsubscribe header, and the address comes off every future send.
Bounces and complaints
An address that bounces or complains is suppressed automatically, which protects the reputation of your domain.
Tell us your sending domain and volumes, and we will take you through the setup.
Talk to us →From the first request to the proof of delivery
Connect
Create an API key or an SMPP account in your workspace. Test Mode runs every check of a real send — route, price, balance, filters — and sends nothing.
Send
Send from your code, from a one-time send or over an SMPP bind. Every message is routed and priced before it leaves.
Prove
Each message keeps its status from submission to the handset. Reports, exports and signed webhooks give you the same record.
Send your first message
One POST with an API key, or a bind to our SMPP server. Both reach the same routes, the same prices and the same reports.
- PROTOCOLS
- HTTPS · SMPP 3.4
- TRANSPORT
- TLS on both
- DRY RUN
- Test Mode
curl -X POST https://zezep.com/v1/public/sms/send \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"sender_id": "Acme",
"phone": "+447700900123",
"message": "Your Acme verification code is 482913"
}' const res = await fetch('https://zezep.com/v1/public/sms/send', {
method: 'POST',
headers: {
'X-API-Key': process.env.API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
sender_id: 'Acme',
phone: '+447700900123',
message: 'Your Acme verification code is 482913',
}),
})
console.log(res.status, await res.json()) import os
import requests
res = requests.post(
"https://zezep.com/v1/public/sms/send",
headers={"X-API-Key": os.environ["API_KEY"]},
json={
"sender_id": "Acme",
"phone": "+447700900123",
"message": "Your Acme verification code is 482913",
},
timeout=10,
)
print(res.status_code, res.json()) <?php
$ch = curl_init('https://zezep.com/v1/public/sms/send');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'X-API-Key: ' . getenv('API_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => json_encode([
'sender_id' => 'Acme',
'phone' => '+447700900123',
'message' => 'Your Acme verification code is 482913',
]),
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch); # SMPP 3.4 at zezep.com: TLS on port 22776, plain TCP on port 22775
bind_transceiver
system_id = "acme_prod"
password = "••••••••"
submit_sm
source_addr = "Acme"
destination_addr = "447700900123"
short_message = "Your Acme verification code is 482913"
registered_delivery = 1
deliver_sm stat:DELIVRD err:000 {
"message_id": "0190b7a2-4c1e-7d3a-9f10-2a6b5c8d9e01",
"status": "accepted",
"parts": 1,
"cost": {
"amount": "0.0210",
"currency": "EUR"
},
"uplink_id": "0190b7a2-4c1e-7d3a-9f10-2a6b5c8d9e02"
} Routes to 800+ networks
Published prices per country, from 0.0160 EUR per SMS. Unless your account is set up otherwise, each message part is charged when the operator accepts it.
Prices are per message part, in euros, excluding VAT.
All prices →Different messages. The same routes.
Each kind of traffic gets the handling it needs, on one account and one balance.
One-time passwords and 2FA
Codes go out on the priority lane, ahead of campaign traffic, and a code that would fall into quiet hours can be refused at once instead of arriving late.
Alerts and notifications
Delivery windows, outages and appointment reminders leave your system the moment the event fires, and each alert keeps its own receipt.
Campaigns that respect the list
Send to a list or a segment on a schedule, held inside your quiet hours, with STOP handled on every send and a report for every country.
Conversations in one thread
Replies land in an inbox beside the message they answer, so a customer conversation stays in one place and a STOP is honoured everywhere.
SMPP for high-volume senders
Bind over SMPP 3.4 with TLS, send at the throughput your account is set up for, and get delivery receipts back as deliver_sm.
What you can hold us to
The clients and technology partners we work with, the figures we publish, and the controls you can inspect in your own workspace.
TLS on the API and SMPP
The API is served over HTTPS only, and every SMPP account can bind over TLS.
Secrets kept out of reach
API keys are stored only as hashes; SMPP and integration secrets are encrypted with a key held outside the database.
Roles and an audit log
Roles built from permission scopes limit who may send, spend or change settings, and the audit log records each change.
Opt-outs that hold
A STOP suppresses the number on every send, and an unsubscribe link is signed, so nobody can opt out a number that is not theirs.
Test Mode
A dry run on every send path: routing, price, balance and filters are checked, and nothing is sent or charged.
Filters and caps
Rules stop traffic that looks like fraud or runs past a spending cap before it reaches an operator.
Questions
The questions we hear most. For anything specific to your traffic, write to us.
Talk to us →What is Zezep?
A business SMS platform: bulk, transactional and one-time-password messages over an HTTP API or SMPP, with delivery receipts, reports and analytics on one account. Messengers and email run on the same account.
How does SMS marketing work with Zezep?
Upload or sync a list, build a segment, schedule the send inside your quiet hours and follow the report per country. Opt-outs are applied to every future send automatically.
Why SMS rather than email?
SMS reaches any mobile handset without an app or inbox, and the delivery receipt tells you whether the message actually arrived.
Which industries use it?
Banks and fintechs for codes, marketplaces and retailers for campaigns and order updates, logistics and healthcare for alerts, and aggregators over SMPP.
Which messengers can I send to?
WhatsApp, Viber and Telegram, from the same account as your SMS. Write to us if you need another app.
What happens if a messenger cannot deliver?
If the message is not delivered in the time you set, it goes out as an SMS instead, and the report shows which channel reached the customer.
Can I send email from my own domain?
Yes. We give you the SPF, DKIM and DMARC records for the domain and check them before the first send.
Do opt-outs carry across channels?
A number that opts out is suppressed on SMS and on every messenger. An email address that unsubscribes comes off every future email send.
Which protocols are supported?
An HTTP API served over HTTPS, and SMPP 3.4 with a TLS bind. Both reach the same routes, prices and reports.
Can I test without sending?
Yes. Test Mode runs a dry run on every send path — routing, price, balance and filters are checked, and nothing is sent or charged.
How do status updates reach my system?
Through signed webhooks for each change of status, or as deliver_sm on your SMPP bind.
How is a message charged?
Per message part, when the operator accepts it — unless your account is set up otherwise.
Where can I see prices?
Prices are published per country, from 0.0160 EUR per SMS, in euros and excluding VAT.
How are opt-outs handled?
A STOP suppresses the number on every send, and unsubscribe links are signed so nobody can opt out a number that is not theirs.
How are credentials protected?
API keys are stored only as hashes; SMPP and integration secrets are encrypted with a key held outside the database.
Who can send from our account?
Roles built from permission scopes decide who may send, spend or change settings, and the audit log records each change.
Send the message.
Keep the proof.
Open a workspace, run your traffic through Test Mode, and go live when the checks come back clean.
Get started →