Messages

Open in ClaudeOpen in ChatGPT.md

Send a batch of different messages

http
POST https://smsprovider-web.vercel.app/api/v1/messages/batch

Up to 2,500 different messages in one request (a different text per recipient).

Authentication: Authorization: Bearer bm_live_… · Required scope: sms:send

Send an Idempotency-Key header (a unique string, e.g. a UUID). Repeating the same key within 24 hours returns the same response without charging again.

Request body

FieldTypeRequiredNotes
messagesobject[]yesitems 1–2500
fromstringnolen 2–20
schedule_atstring (date-time)no
campaign_namestringnolen 1–50
allow_internationalbooleanno

Response

200 — SendResult

Errors

StatusCode
400validation_error
400idempotency_key_required
409idempotency_conflict
402insufficient_credits
403sender_not_verified
422invalid_destination
429daily_limit_exceeded
403org_suspended
401unauthorized
403insufficient_scope
429rate_limited
500internal_error

Examples

curl

bash
curl -X POST "https://smsprovider-web.vercel.app/api/v1/messages/batch" \
  -H "Authorization: Bearer $BATLER_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"from":"MyBrand","messages":[{"to":"0501234567","body":"דנה, התור שלך מחר ב-10:00","ref":"appt-1"},{"to":"0527654321","body":"יוסי, התור שלך מחר ב-11:30","ref":"appt-2"}]}'

Node.js

ts
import { BatlerSMS } from "@batler/sms";

const sms = new BatlerSMS({ apiKey: process.env.BATLER_API_KEY! });
const body = {
  "from": "MyBrand",
  "messages": [
    {
      "to": "0501234567",
      "body": "דנה, התור שלך מחר ב-10:00",
      "ref": "appt-1"
    },
    {
      "to": "0527654321",
      "body": "יוסי, התור שלך מחר ב-11:30",
      "ref": "appt-2"
    }
  ]
};
const result = await sms.messages.batch(body);

PHP

php
<?php
$ch = curl_init("https://smsprovider-web.vercel.app/api/v1/messages/batch");
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("BATLER_API_KEY"),
    "Content-Type: application/json",
    "Idempotency-Key: " . bin2hex(random_bytes(16)),
  ],
  CURLOPT_POSTFIELDS => json_encode(["from" => "MyBrand", "messages" => [["to" => "0501234567", "body" => "דנה, התור שלך מחר ב-10:00", "ref" => "appt-1"], ["to" => "0527654321", "body" => "יוסי, התור שלך מחר ב-11:30", "ref" => "appt-2"]]], JSON_UNESCAPED_UNICODE),
]);
$result = json_decode(curl_exec($ch), true);

Python

python
import os, uuid, requests

resp = requests.request(
    "POST", "https://smsprovider-web.vercel.app/api/v1/messages/batch",
    headers={"Authorization": f"Bearer {os.environ['BATLER_API_KEY']}", "Idempotency-Key": str(uuid.uuid4())},
    json={"from": "MyBrand", "messages": [{"to": "0501234567", "body": "דנה, התור שלך מחר ב-10:00", "ref": "appt-1"}, {"to": "0527654321", "body": "יוסי, התור שלך מחר ב-11:30", "ref": "appt-2"}]},
    timeout=30,
)
resp.raise_for_status()
result = resp.json()

C#

csharp
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new("Bearer", Environment.GetEnvironmentVariable("BATLER_API_KEY"));
var req = new HttpRequestMessage(HttpMethod.Post, "https://smsprovider-web.vercel.app/api/v1/messages/batch");
req.Headers.Add("Idempotency-Key", Guid.NewGuid().ToString());
req.Content = new StringContent("{\"from\":\"MyBrand\",\"messages\":[{\"to\":\"0501234567\",\"body\":\"דנה, התור שלך מחר ב-10:00\",\"ref\":\"appt-1\"},{\"to\":\"0527654321\",\"body\":\"יוסי, התור שלך מחר ב-11:30\",\"ref\":\"appt-2\"}]}", System.Text.Encoding.UTF8, "application/json");
var res = await http.SendAsync(req);
var result = await res.Content.ReadAsStringAsync();
☰