touchSMS
SMS API · REST · JSON

An SMS API your developers will actually like

Send, receive and report on text messages from any app or language. A clean REST API with no SDK to install, at the same 5¢ price.

REST API· webhooks· delivery receipts· dry-run pricing
send.sh
# send your first message
curl https://app.touchsms.com.au/api/v2/sms \
  -u "$TOKEN_ID:$TOKEN_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"to":"+61412345678",
     "from":"FreshCo","body":"Order ready"}]}'

{ "data": { "meta": { "creditBalance": 1000 },
  "messages": [{ "status": "VALID" }] } }

A set of powerful SMS APIs that drop text messaging straight into your product. Build it yourself with our REST endpoints, or ask us for a tailor-made integration, either way the SMS functionality you need is already here.

From transactional sends like one-time passcodes to bulk marketing blasts of up to 1,000 messages per call, touchSMS is well documented, quick to integrate and built to grow with whatever you're shipping.

QUICK START

Up and running in three steps

1

Create your API key

Log in and open Settings → API Keys, then click Create API Key. You get a Token ID and Token Secret to authenticate your requests.

2

Send a request

POST to /api/v2/sms with a messages array, up to 1,000 in one call. Plain REST, no SDK to install.

3

Handle replies & receipts

Add a webhook subscription for message_received and delivery-status events, or poll /api/v2/inbounds when webhooks aren’t an option.

CODE

Send your first SMS in a few lines

There’s no SDK to install. Every endpoint is plain REST with predictable JSON, so you can call it from any language that can make a request.

  • Batch up to 1,000 messages per request
  • Dry-run endpoint to validate & price first
  • Attach metadata to match replies & receipts
const auth = Buffer.from(
  `${process.env.TOKEN_ID}:${process.env.TOKEN_SECRET}`
).toString("base64");

const res = await fetch(
  "https://app.touchsms.com.au/api/v2/sms", {
  method: "POST",
  headers: {
    Authorization: `Basic ${auth}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    messages: [{
      to: "+61412345678",
      from: "FreshCo",
      body: "Hi Jordan your order is ready."
    }]
  })
});
const { data } = await res.json();
ENDPOINTS

Everything you need, nicely organised

Send SMS & MMS

POST/api/v2/sms

Single or bulk sends of up to 1,000 SMS (10 MMS) per call, with personalisation, scheduling and metadata.

Validate & price

POST/api/v2/sms/dry

Runs the same validation as send and returns credit cost and message parts, without sending anything.

Poll replies

GET/api/v2/inbounds

Fetch inbound messages newer than a timestamp or ID. For real time, use webhooks instead.

Verify (OTP)

POST/api/v3/verify

Send and check one-time codes for phone verification, with expiry, templates and metadata.

Account & credits

GET/api/v2/account

Read your credit balance, default sender and settings. Also the simplest way to test your auth.

Sender IDs

GET/api/v2/account/sender-ids

List the verified sender IDs your account is allowed to send from.

Contacts & groups

CRUD/api/v2/contacts

List, create, show, update and delete contacts, optionally organised into groups.

Opt-outs & lists

CRUD/api/v2/optouts

Manage opt-outs and opt-out lists so unsubscribes are handled for compliance automatically.

BUILT FOR DEVS

Production-ready from day one

REST + JSON
Inbound replies
Real-time webhooks
Delivery receipts (DLR)
Dry-run pricing
OTP verification
Any language, just HTTP
Bulk up to 1,000/call

Using Cursor, VS Code or another AI assistant?

Point your assistant at our MCP server with your API key and it can send SMS, preview costs, read replies and manage contacts without you writing the calls.

See the MCP server
CAPABILITIES

Secure, reliable and ready to scale

Security & data protection

Every request is authenticated with account-specific API keys over enforced HTTPS, so your SMS traffic stays locked to your account. Enable or disable keys any time to instantly cut off access. Our servers run onshore across multiple AWS data centres, and your data is encrypted at rest.

Account-specific API keysHTTPS enforced on every callOnshore AWS · encrypted at rest

Webhooks & callbacks

Need to process inbound replies or track what actually got delivered? Our webhook infrastructure pushes inbound messages and delivery receipts (DLRs) straight to your configured endpoints in real time. Prefer to pull instead of receive? Polling endpoints are available too.

Inbound message webhooksDelivery receipt (DLR) callbacksPolling endpoints as a fallback

Dedicated virtual numbers

Your number is the Caller ID your messages send from, and the address customers reply to. It is not mandatory for API use, but leasing a dedicated virtual number gives you a consistent two-way identity to send and receive messages through the API.

A number your customers recogniseTwo-way send and receiveOptional, but recommended

No developer onboard? We'll build the integration for you.

Interested in an SMS integration but short on engineering time? Talk to our local team about a tailor-made solution that fits the tools you already use.

Talk to us

Ship SMS today. No SDK to install.

get a key in minutes · REST API · local support