SMS APIfrom €0.0298/part

Transactional SMS via API, priced per part.

Transactional and promotional from a single synchronous REST API: one POST and you get status, parts and price right away. Fixed per-part EUR pricing, prepaid balance, VAT excluded.

Synchronous response Retries never double-send Per-recipient outcome
POST/api/v1/sms/transactional
Request
$ curl -X POST https://sms-jet.com/api/v1/sms/transactional \
-H "Authorization: Bearer gsms_…" \
-H "Idempotency-Key: order-4711" \
-H "Content-Type: application/json" \
-d '{
"to": "+393331234567",
"text": "Your verification code is 123456",
"sender_type": "system"
}'
Response
{
"id": "0198f3c1-6b2a-7c41-9f0e-2d4a8b5c1e73",
"status": "accepted",
"encoding": "gsm7",
"parts": 1,
"price_eur": "0.0298"
}
$
1 part × €0.0298 = €0.0298 gsm7 · 32/160

One API, every use case

OTP & verification codesOrder notificationsAppointment remindersDelivery alertsSystem alertsAccess codesPromotions & discountsAbandoned cartsBooking confirmationsPayment reminders

The API

One endpoint per message type.

Bearer auth, JSON in, verdict out: the response tells you right away what went out, in how many parts, and what it cost.

POST /api/v1/sms/transactional· 1 recipientPOST /api/v1/sms/promotional· up to 1000
POST /api/v1/sms/transactional
curl -X POST https://sms-jet.com/api/v1/sms/transactional \
  -H "Authorization: Bearer gsms_…" \
  -H "Idempotency-Key: order-4711-confirmation" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+393331234567",
    "text": "Your verification code is 123456",
    "sender_type": "system"
  }'
200 OKResponse
{
  "id": "0198f3c1-6b2a-7c41-9f0e-2d4a8b5c1e73",
  "status": "accepted",
  "encoding": "gsm7",
  "parts": 1,
  "price_eur": "0.0298"
}
  • Synchronous verdict — the HTTP response is the outcome: accepted or rejected, with id, parts and price. No polling to find out whether the send went through.
  • Idempotency-Key — same key on the retry, same response: the message is never sent twice, even if the network dies mid-call.
  • Per-part billing, in the response — each part is one billed SMS and the response says so: parts and price_eur on every message, no end-of-month surprises.
  • Machine-readable errors — stable codes like INSUFFICIENT_BALANCE or RATE_LIMITED, with structured details you can branch on. Zero prose parsing.

Built for production

Everything around the send, already handled.

Clear pricing, clear outcomes and safe retries: the SMS infrastructure you expect from a developer tool.

Fixed prices per part

EUR rates per message part, VAT excluded. No credits to convert — the price you see is the price you pay.

Transparent prepaid balance

Top-ups by invoice, no credit card required. Every charge and top-up lands in a movement ledger you can audit from the dashboard.

System or alphanumeric sender

The system sender is active immediately, no approval needed. The alphanumeric one (max 11 chars) shows your brand, once approved.

Clear outcomes, automatic refunds

Every send returns a per-recipient verdict in the response; messages that are not accepted are automatically refunded to your balance.

Idempotency-Key support

Pass an Idempotency-Key and retry the request as many times as you need: the same message never goes out twice.

Bilingual IT/EN dashboard

The full interface in Italian and English, with a log of every send: recipient, parts, cost and delivery status.

How it works

Three steps, then it's just a POST.

No endless onboarding: we create the credentials, one token for your app, one call per SMS.

  1. Request your account

    No self-signup: we create your credentials for you. Write to us and we provision your account with a prepaid balance — top-ups by invoice, no credit card.

    [email protected]

  2. Create an app

    Sign in to the dashboard, create an app and grab its API token. Bearer auth: one header and you're in.

    Authorization: Bearer sk_live_…

  3. Send

    One POST with text and recipient, synchronous response: the verdict comes right back. Safe retries with Idempotency-Key, delivery tracked via DLR.

    POST /api/v1/sms/transactional

Pricing

Fixed prices per part. No plans, no monthly fee.

Italy at launch: EUR rates per message part, deducted from your prepaid balance. You pay only for what you send.

🇮🇹 Italyper part, VAT excluded
Per-part message prices for Italy
SenderTransactionalPromotional
System senderShared number, active immediately€0.0298€0.0391
Alphanumeric senderCustom name, requires approval€0.0391€0.0391

160 GSM-7 characters, 153 when concatenated — each part is billed as one SMS.

Prepaid balance, top-ups by invoice — no card required. More countries available on request. Contact us

FAQ

Frequently asked

The practical details, no runaround.

Accounts provisioned by our team

Ready to send your first SMS?

No self-signup, no credit card: write to us, we provision your account, and your first delivery is one POST away.

Prepaid balance, top-ups by invoice — no card required.