Dugble

SMS API

SMS built for the moment a code has to arrive.

Send A2P SMS with stable message IDs, idempotency keys, real delivery states, and webhook events your backend can actually trust.

D

Dugble

SMS · shortcode 33482

Your Dugble code is 482 193. Expires in 5 minutes.

Send contract

One request in, one traceable state back.

Include the recipient, template, and an idempotency key. A successful response returns a message ID and its first delivery state, never a silent 200 with nothing to trace.

Request
{
  "to": "+233531184325",
  "template": "login_otp",
  "idempotency_key": "otp_7f2a9c"
}
200 OK
{
  "message_id": "msg_9c41af",
  "status": "queued",
  "channel": "sms",
  "created_at": "2026-07-22T09:14:02Z"
}

Lifecycle

Trace the whole lifecycle.

When a user says they did not get the code, you should know exactly where it stopped, not guess.

Stable IDs

Every accepted request returns a message_id your team can search, store, and trace.

Idempotent sends

Use idempotency_key for retries so network failures do not create duplicate OTPs.

Failure reasons

Expose provider responses and normalized errors so support is not guessing.

Webhook events

Handle message.sent, message.delivered, and message.failed in your backend.

Expected SMS states

Queued

Accepted, waiting on the carrier.

Sent

Handed off to the carrier network.

Delivered

Confirmed on the recipient's device.

Failed

Carrier rejected or could not route it.

Expired

OTP window closed before it was used.

Send your first message in the next five minutes.

Create a workspace, generate an API key, and watch the delivery event come back in the dashboard.

Start building