Install the add-on, get a BLOWERIO_URL, send your
first message with a single HTTP POST. Replies arrive as
webhooks. No SDKs, no accounts to wire up, no telecom homework.
$ heroku addons:create blowerio Creating blowerio on ⬢ your-app... done BLOWERIO_URL config var set $ curl -X POST "$BLOWERIO_URL/messages" \ -d "to=+61422164266" \ -d "message=Hello from Blower" {"message":"ok"}
How it works
If your app can make an HTTP request, it can send SMS. Any language, no client library required.
One command provisions your account and a dedicated sending setup.
$ heroku addons:create blowerio
A single config var appears in your app. That's the whole integration surface.
BLOWERIO_URL=https://…@api.blower.io/messages
Two parameters: who it's for and what it says. Done.
POST $BLOWERIO_URL/messages
Show me code
Because it already speaks HTTP.
curl -X POST "$BLOWERIO_URL/messages" \ -H "Accept: application/json" \ -d "to=+61422164266" \ -d "message=Hello from Blower"
blower = RestClient::Resource.new(ENV['BLOWERIO_URL']) blower['/messages'].post(to: '+61422164266', message: 'Hello from Blower')
import os, requests requests.post( f"{os.environ['BLOWERIO_URL']}/messages", data={"to": "+61422164266", "message": "Hello from Blower"}, )
await fetch(`${process.env.BLOWERIO_URL}/messages`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: new URLSearchParams({ to: '+61422164266', message: 'Hello from Blower' }) })
$ch = curl_init($_ENV["BLOWERIO_URL"] . "/messages"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, [ 'to' => '+61422164266', 'message' => 'Hello from Blower', ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch);
Two-way
Point Blower at an endpoint in your app and inbound messages and delivery updates arrive as plain JSON webhooks.
Someone texts your number; your app gets a POST.
{
"event": "message-received",
"from": "+61422164266",
"to": "+61488880321",
"body": "Yes please!"
}
Delivery status callbacks tell you what happened, with automatic retries if your endpoint is briefly down.
{
"event": "status-change",
"to": "+61422164266",
"status": "delivered"
}
What you get
Two form parameters — to and message. No SDK to install or keep updated.
Inbound messages hit your app as JSON webhooks, so conversations are just request handlers.
Delivery-status webhooks retry with backoff if your endpoint has a bad day, and your dashboard tells you when it does.
Your app gets its own number, with international options available from the dashboard.
One environment variable, set for you at install. Attach it to staging apps and review apps the same way.
heroku addons:open blowerio — usage, message history, delivery statuses, and your personalised examples.
From $3/mo. Billed through Heroku like everything else.