Documentation

Start sending compliant SMS from verified sender identities

The core setup follows the same reliable pattern used by mature SMS platforms: authenticate, verify sender, confirm consent, send, and track delivery.

1

Create account

Sign up with email or Google. Use a unique password that has not been leaked in a data breach.

2

Add sender identity

Request a toll-free number, verify a personal number by OTP, or submit a sender ID for admin approval.

3

Import contacts

Create groups, upload contacts, and keep consent records current before messaging.

4

Send and measure

Draft a single SMS or campaign, choose a verified sender, then monitor message delivery.

Guides

Operational rules

These are the backend-backed rules the product enforces before allowing sends or account changes.

Numbers and sender IDs

Toll-free numbers are provisioned from inventory. Personal numbers are caller ID only after OTP verification. Sender IDs require admin review.

Sending rules

SMS sends are blocked unless the selected sender identity is verified or approved. Messages are stored with status for tracking.

Billing and wallet

Wallet credits are stored per account in USD. Each successful send writes a transaction and updates the wallet balance.

API access

API keys belong to the signed-in user and should only be used from trusted systems. Rotate keys when access changes.

API sending checklist

  • Use an active API key
  • Send from a verified number or approved sender ID
  • Store contacts with consent
  • Check wallet balance before high-volume sends
  • Read message status after send

Example request

curl -X POST https://xellvio.com/api/public/v1/messages \
  -H "Authorization: Bearer xv_api_..." \
  -H "Idempotency-Key: order-10482" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+14155550123",
    "body": "Your order is ready for pickup. Reply STOP to opt out.",
    "consent_confirmed": true
  }'

REST API reference

Base URL: https://xellvio.com/api/public/v1. Create business keys under Settings → API & webhooks. Keys are shown once, can be scoped, and can be revoked immediately.

POST
/messages

Queue one SMS

POST
/messages/bulk

Queue up to 1,000 recipients

GET
/messages/{id}

Read message status and failure details

GET
/batches/{id}

Read batch totals and recipient results

GET
/replies

Read inbound replies with cursor pagination

GET
/senders

List verified business senders

GET
/suppressions/{phone}

Check whether a number opted out

Authentication: send the business key as a Bearer token from a secure server.

Idempotency: every POST send requires a unique Idempotency-Key. Replaying the same body returns the original result without creating another charge or message.

Consent: every recipient requires consent_confirmed: true. Suppressed numbers are always rejected.

Limits: 120 API requests per minute per key by default; bulk requests accept 1–1,000 recipients. Carrier throughput depends on the verified sender and destination route.

Signed webhooks

Register a public HTTPS endpoint to receive delivery, failure, reply, STOP, START, and batch events. Failed deliveries retry with exponential backoff for up to eight attempts.

X-Xellvio-Event: message.delivered
X-Xellvio-Timestamp: 1791372000
X-Xellvio-Signature: v1=<hex HMAC-SHA256>

signed_payload = timestamp + '.' + raw_request_body

Verify the signature against the exact raw request body, reject stale timestamps, and deduplicate using the event id. Signing secrets are shown once and can be rotated from Settings.

message.sent
message.delivered
message.delivery_unconfirmed
message.failed
reply.received
contact.opted_out
contact.opted_in
batch.completed