Одиночные сообщения
POST /v1/messages отправляет одно сообщение на один номер и сразу возвращает его идентификатор. Коды входа, сбросы пароля и уведомления о платежах отправляются в момент вызова вашего кода.
Отправить сообщениеAPI для массовой отправки SMS
BulkSMSAPI, это API для массовой рассылки SMS для разработчиков: отправляйте одно сообщение или пакет до 10 000 номеров за запрос в 227 стран через REST, отслеживайте каждое сообщение с подписанными вебхуками и оплачивайте из предоплаченного баланса.
Одно SMS в Соединенные Штаты стоит $0.00507 за сегмент.
Базовые компоненты
POST /v1/messages отправляет одно сообщение на один номер и сразу возвращает его идентификатор. Коды входа, сбросы пароля и уведомления о платежах отправляются в момент вызова вашего кода.
Отправить сообщениеPOST /v1/batches принимает до 10,000 номеров в одном запросе, с общим текстом для всех или индивидуальным для каждого номера. Дубликаты и неверные номера исключаются и перечисляются в ответе.
Отправить пакетКаждое доставленное или не доставленное сообщение вызывает ваш эндпоинт с подписанным JSON-событием. У каждого события есть 10 попыток за ~24 часа, поэтому развертывание не приведет к потере статуса.
Настроить вебхукиGET /v1/pricing возвращает цену за сегмент для каждой страны без ключа. Показывайте стоимость в своем продукте или проверяйте маршрут перед массовой рассылкой.
Получить цены через APIДобавьте send_at к любому запросу, и пакет будет ждать указанной минуты (от 2 минут до 45 дней). Отмените до начала отправки, полная стоимость вернется на баланс.
Запланировать пакетВставьте или загрузите список, напишите текст, просмотрите его для каждого получателя и отправьте без кода. Все пакеты из API отображаются в той же консоли с актуальными счетчиками.
Посмотреть консольОдно событие в вашей системе, одно сообщение одному человеку, отправленное за секунды.
Один текст или индивидуальный текст для каждого получателя в списке из тысяч номеров, одним запросом.
Отправляйте одноразовый код из вашей системы аутентификации через POST /v1/messages и проверяйте статус доставки до запроса нового кода пользователем.
Ваша система заказов вызывает API при отправке посылки, указывая временное окно и трек-номер в одном коротком сообщении.
Ночной процесс формирует список на завтра и отправляет персональные сообщения каждому пациенту или клиенту вечером накануне.
Платежи, переводы и входы с новых устройств мгновенно запускают SMS, тарифицируемые по сегментам с фиксацией статуса.
Отправляйте 50 000 номеров из консоли или пакеты по 10 000 из CRM с обязательной строкой отписки.
Мгновенно оповещайте всех затронутых клиентов об изменениях в сервисе, рейсах или маршрутах доставки с последующим уведомлением о восстановлении.
curl https://bulksmsapi.cc/v1/batches \
-H "Authorization: Bearer $BULKSMSAPI_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: spring-sale-0412" \
-d '{
"name": "Spring sale",
"text": "Spring sale at Northwind: 20% off until Sunday. Opt out: northwind.example/sms",
"to": [
"+14155550123",
"+447400123456",
"+4915123456789"
]
}'const res = await fetch("https://bulksmsapi.cc/v1/batches", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BULKSMSAPI_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": "spring-sale-0412",
},
body: JSON.stringify({
name: "Spring sale",
text: "Spring sale at Northwind: 20% off until Sunday. Opt out: northwind.example/sms",
to: ["+14155550123", "+447400123456", "+4915123456789"],
}),
});
const batch = await res.json();
console.log(res.status, batch.id, batch.recipients, batch.cost);import json, os, urllib.request
req = urllib.request.Request(
"https://bulksmsapi.cc/v1/batches",
data=json.dumps({
"name": "Spring sale",
"text": "Spring sale at Northwind: 20% off until Sunday. Opt out: northwind.example/sms",
"to": ["+14155550123", "+447400123456", "+4915123456789"],
}).encode(),
headers={
"Authorization": "Bearer " + os.environ["BULKSMSAPI_KEY"],
"Content-Type": "application/json",
"Idempotency-Key": "spring-sale-0412",
"User-Agent": "northwind-app/1.0",
},
method="POST",
)
with urllib.request.urlopen(req) as res:
batch = json.load(res)
print(res.status, batch["id"], batch["recipients"], batch["cost"])<?php
$ch = curl_init("https://bulksmsapi.cc/v1/batches");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("BULKSMSAPI_KEY"),
"Content-Type: application/json",
"Idempotency-Key: spring-sale-0412",
],
CURLOPT_POSTFIELDS => json_encode([
"name" => "Spring sale",
"text" => "Spring sale at Northwind: 20% off until Sunday. Opt out: northwind.example/sms",
"to" => ["+14155550123", "+447400123456", "+4915123456789"],
]),
]);
$batch = json_decode(curl_exec($ch), true);
echo $batch["id"], " ", $batch["recipients"], " ", $batch["cost"], "\n";package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
body, _ := json.Marshal(map[string]any{
"name": "Spring sale",
"text": "Spring sale at Northwind: 20% off until Sunday. Opt out: northwind.example/sms",
"to": []string{"+14155550123", "+447400123456", "+4915123456789"},
})
req, _ := http.NewRequest("POST", "https://bulksmsapi.cc/v1/batches", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer "+os.Getenv("BULKSMSAPI_KEY"))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Idempotency-Key", "spring-sale-0412")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var batch map[string]any
json.NewDecoder(res.Body).Decode(&batch)
fmt.Println(res.StatusCode, batch["id"], batch["recipients"], batch["cost"])
}Тарифы
GET /v1/pricing, что позволяет синхронизировать данные в вашем продукте.227 из 227 стран
Баланс $44 при первом пополнении
Около 8,678 односегментных сообщений в Соединенные Штаты
Баланс $120 при первом пополнении
Около 23,668 односегментных сообщений в Соединенные Штаты
Баланс $250 при первом пополнении
Около 49,309 односегментных сообщений в Соединенные Штаты
Баланс $390 при первом пополнении
Около 76,923 односегментных сообщений в Соединенные Штаты
Баланс $675 при первом пополнении
Около 133,136 односегментных сообщений в Соединенные Штаты
Баланс $1,400 при первом пополнении
Около 276,134 односегментных сообщений в Соединенные Штаты
Количество сообщений указано для Соединенные Штаты по цене $0.00507 за сегмент. Как работает оплата
10,000
номеров в одном пакетном запросе
Отправьте список одним вызовом, разделённый по странам с тарификацией за каждого получателя.
600
запросов в минуту на один ключ
Заголовки лимитов в каждом ответе показывают оставшееся количество в текущем окне.
1,200
сообщений в минуту на аккаунт
Очередь передаёт сообщения маршрутизатору по порядку, каждые две секунды.
Шаг 1
Ваш браузер создаёт ключ аккаунта. Сохраните его один раз, это единственный способ входа, без email или пароля.
Шаг 2
Пополните от $40 через встроенную оплату. Баланс отображается в консоли и через GET /v1/balance.
Шаг 3
Назовите ключ для каждого приложения или среды, скопируйте его один раз и отзывайте в любое время, не затрагивая другие.
Шаг 4
Вызовите /v1/messages или /v1/batches и укажите URL вебхука: события доставки и ошибок приходят с подписью.
Создайте аккаунт за секунды, пополните от $40 и вызывайте API из любого языка, поддерживающего HTTPS. Цены начинаются от $0.00247 за сообщение.