단일 메시지
POST /v1/messages는 하나의 번호로 하나의 문자를 보내고 즉시 메시지 ID로 응답해요. 로그인 코드, 비밀번호 재설정, 결제 알림은 코드가 호출하는 순간 전송돼요.
메시지 보내기대량 SMS API
BulkSMSAPI는 개발자를 위한 대량 SMS API예요. REST로 문자 하나를 보내거나 한 번의 요청으로 최대 10,000개 번호에 배치를 보내 227개 국가에 발송하고, 모든 메시지를 서명된 웹훅으로 추적하며, 미리 충전한 잔액에서 메시지당 비용을 지불해요.
미국 발송 SMS는 세그먼트당 $0.00507
기능 구성 요소
POST /v1/messages는 하나의 번호로 하나의 문자를 보내고 즉시 메시지 ID로 응답해요. 로그인 코드, 비밀번호 재설정, 결제 알림은 코드가 호출하는 순간 전송돼요.
메시지 보내기POST /v1/batches는 하나의 요청으로 최대 10,000개의 번호를 처리할 수 있어요. 모두에게 동일한 문자를 보내거나 번호별로 개별 문자를 보낼 수 있어요. 중복 및 잘못된 번호는 제외되고 응답에 나열돼요.
배치 보내기전송 성공 또는 실패한 모든 메시지는 서명된 JSON 이벤트로 엔드포인트를 호출해요. 각 이벤트는 약 24시간 동안 10번 재시도되므로 배포로 인해 상태를 잃는 일은 없어요.
웹훅 설정하기GET /v1/pricing는 키 없이도 모든 국가의 세그먼트당 가격을 반환해요. 자체 제품에 비용을 표시하거나 대량 발송 전 경로를 확인할 수 있어요.
API로 가격 읽기send_at을 요청에 추가하면 배치가 해당 시간까지 대기해요. 2분부터 최대 45일까지 예약할 수 있어요. 시작 전에 취소하면 전체 비용이 잔액으로 돌아가요.
배치 예약하기목록을 붙여넣거나 업로드하고, 문자를 작성하고, 수신자별로 미리보고 코드 없이 보낼 수 있어요. API의 모든 배치는 실시간 카운트와 함께 동일한 콘솔에 표시돼요.
콘솔 보기시스템의 하나의 이벤트, 한 사람에게 하나의 문자를 몇 초 내에 보내요.
하나의 문자, 또는 한 사람당 하나의 문자를 하나의 요청으로 수천 명에게 보내요.
POST /v1/messages로 인증 서비스에서 일회용 코드를 보내고, 사용자가 새 코드를 요청하기 전에 전송 이벤트를 확인하세요.
택배가 창고를 떠날 때 주문 시스템이 API를 호출해 배송 시간대와 추적 코드를 한 줄의 짧은 문자로 보내세요.
야간 작업으로 내일 예정된 환자/고객 명단을 만들고, 전날 저녁에 개인별 맞춤 문자를 한 번에 발송하세요.
카드 결제, 계좌 이체, 새 기기 로그인 시 바로 문자를 보내요. 세그먼트 단위로 요금이 부과되고, 상태가 기록돼요.
콘솔에서 50,000명에게 또는 CRM에서 10,000명 단위로 발송하며, 모든 문자에 수신 거부 안내를 추가하세요.
서비스, 항공편, 배송 경로 변경 시 해당 고객에게 즉시 알리고, 복구 시 다시 안내하세요.
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개
| 국가 | 국가 코드 | SMS당 |
|---|---|---|
| $0.01357 | ||
| $0.01187 | ||
| $0.00957 | ||
| $0.00907 | ||
| $0.01417 | ||
| $0.04257 | ||
| $0.00847 | ||
| $0.00617 | ||
| $0.02207 | ||
| $0.00987 | ||
| $0.00587 | ||
| $0.01357 | ||
| $0.01557 | ||
| $0.00927 | ||
| $0.02947 | ||
| $0.01977 | ||
| $0.01127 | ||
| $0.00727 | ||
| $0.01817 | ||
| $0.02697 | ||
| $0.00957 | ||
| $0.01387 | ||
| $0.01357 | ||
| $0.01277 | ||
| $0.01357 | ||
| $0.01277 | ||
| $0.00277 | ||
| $0.00987 | ||
| $0.01607 | ||
| $0.01157 | ||
| $0.01447 | ||
| $0.01217 | ||
| $0.00847 | ||
| $0.01127 | ||
| $0.00987 | ||
| $0.09657 | ||
| $0.01417 | ||
| $0.00817 | ||
| $0.01417 | ||
| $0.00847 | ||
| $0.01247 | ||
| $0.00727 | ||
| $0.02697 | ||
| $0.00757 | ||
| $0.00987 | ||
| $0.01977 | ||
| $0.02517 | ||
| $0.01357 | ||
| $0.01417 | ||
| $0.01067 | ||
| $0.04477 | ||
| $0.00907 | ||
| $0.04797 | ||
| $0.01417 | ||
| $0.01297 | ||
| $0.02717 | ||
| $0.03407 | ||
| $0.01387 | ||
| $0.01557 | ||
| $0.01217 | ||
| $0.01467 | ||
| $0.02207 | ||
| $0.01157 | ||
| $0.00927 | ||
| $0.01557 | ||
| $0.03317 | ||
| $0.00507 | ||
| $0.00707 | ||
| $0.02697 | ||
| $0.01847 | ||
| $0.01977 | ||
| $0.00907 | ||
| $0.01277 | ||
| $0.00987 | ||
| $0.01017 | ||
| $0.02407 | ||
| $0.01447 | ||
| $0.01187 | ||
| $0.01187 | ||
| $0.01417 | ||
| $0.01867 | ||
| $0.03827 | ||
| $0.01557 | ||
| $0.01387 | ||
| $0.00907 | ||
| $0.02067 | ||
| $0.01037 | ||
| $0.01247 | ||
| $0.02807 | ||
| $0.00707 | ||
| $0.05677 | ||
| $0.02547 | ||
| $0.00247 | ||
| $0.00707 | ||
| $0.00907 | ||
| $0.01897 | ||
| $0.00987 | ||
| $0.07097 | ||
| $0.01417 | ||
| $0.02777 | ||
| $0.02897 | ||
| $0.01037 | ||
| $0.02207 | ||
| $0.02207 | ||
| $0.00957 | ||
| $0.01277 | ||
| $0.01037 | ||
| $0.01787 | ||
| $0.00907 | ||
| $0.04257 | ||
| $0.01037 | ||
| $0.00847 | ||
| $0.00707 | ||
| $0.00907 | ||
| $0.02237 | ||
| $0.04257 | ||
| $0.00787 | ||
| $0.01067 | ||
| $0.00447 | ||
| $0.01387 | ||
| $0.01417 | ||
| $0.01417 | ||
| $0.02177 | ||
| $0.01467 | ||
| $0.01637 | ||
| $0.01417 | ||
| $0.05557 | ||
| $0.03117 | ||
| $0.00987 | ||
| $0.01357 | ||
| $0.02267 | ||
| $0.00987 | ||
| $0.01327 | ||
| $0.01297 | ||
| $0.01667 | ||
| $0.00907 | ||
| $0.00727 | ||
| $0.02377 | ||
| $0.06157 | ||
| $0.01277 | ||
| $0.00787 | ||
| $0.01187 | ||
| $0.04537 | ||
| $0.01277 | ||
| $0.00507 | ||
| $0.00707 | ||
| $0.01157 | ||
| $0.02357 | ||
| $0.02267 | ||
| $0.01327 | ||
| $0.00957 | ||
| $0.05307 | ||
| $0.01467 | ||
| $0.02237 | ||
| $0.02117 | ||
| $0.03967 | ||
| $0.03687 | ||
| $0.00877 | ||
| $0.01557 | ||
| $0.04257 | ||
| $0.01067 | ||
| $0.01277 | ||
| $0.02777 | ||
| $0.01417 | ||
| $0.01277 | ||
| $0.02547 | ||
| $0.00587 | ||
| $0.00677 | ||
| $0.02117 | ||
| $0.00727 | ||
| $0.01667 | ||
| $0.01187 | ||
| $0.01037 | ||
| $0.00367 | ||
| $0.01127 | ||
| $0.01787 | ||
| $0.04537 | ||
| $0.00907 | ||
| $0.02117 | ||
| $0.00527 | ||
| $0.02147 | ||
| $0.01757 | ||
| $0.03407 | ||
| $0.00847 | ||
| $0.00727 | ||
| $0.01357 | ||
| $0.00417 | ||
| $0.01277 | ||
| $0.01387 | ||
| $0.01697 | ||
| $0.01847 | ||
| $0.00907 | ||
| $0.00817 | ||
| $0.02037 | ||
| $0.05107 | ||
| $0.02547 | ||
| $0.00507 | ||
| $0.04827 | ||
| $0.00877 | ||
| $0.00337 | ||
| $0.02207 | ||
| $0.00617 | ||
| $0.00707 | ||
| $0.00727 | ||
| $0.13637 | ||
| $0.05077 | ||
| $0.00307 | ||
| $0.00787 | ||
| $0.01037 | ||
| $0.00417 | ||
| $0.04197 | ||
| $0.03997 | ||
| $0.01327 | ||
| $0.04257 | ||
| $0.00677 | ||
| $0.01927 | ||
| $0.00417 | ||
| $0.01817 | ||
| $0.00507 | ||
| $0.00847 | ||
| $0.01247 | ||
| $0.01847 | ||
| $0.01327 | ||
| $0.01667 | ||
| $0.00987 | ||
| $0.01417 | ||
| $0.01247 |
첫 충전 시 잔액 $44
미국에 보내는 1세그먼트 메시지 약 8,678건
첫 충전 시 잔액 $120
미국에 보내는 1세그먼트 메시지 약 23,668건
첫 충전 시 잔액 $250
미국에 보내는 1세그먼트 메시지 약 49,309건
첫 충전 시 잔액 $390
미국에 보내는 1세그먼트 메시지 약 76,923건
첫 충전 시 잔액 $675
미국에 보내는 1세그먼트 메시지 약 133,136건
첫 충전 시 잔액 $1,400
미국에 보내는 1세그먼트 메시지 약 276,134건
10,000
배치 요청당 번호 수
한 번의 호출로 목록을 보내요. 국가별로 나누고 수신자별로 가격이 책정돼요.
600
키당 분당 요청 수
모든 응답에 포함된 Rate limit 헤더는 현재 윈도우에 남은 요청 한도를 보여줘요.
1,200
계정당 분당 메시지 수
큐는 메시지를 순서대로 경로에 전달해요, 2초마다 한 번씩.
단계 1
브라우저에서 계정 키를 생성해요. 한 번 저장하면 이 키가 유일한 로그인 수단이에요. 이메일이나 비밀번호는 필요하지 않아요.
단계 2
$40부터 호스팅된 결제로 충전할 수 있어요. 잔액은 콘솔과 GET /v1/balance 엔드포인트에서 확인할 수 있어요.
단계 3
앱이나 환경별로 키를 지정하고, 한 번 복사한 뒤 언제든지 다른 키에 영향을 주지 않고 해지할 수 있어요.
단계 4
/v1/messages나 /v1/batches를 호출하고 웹훅 URL을 추가해요: 전송 성공과 실패 이벤트가 서명된 상태로 도착해요.
몇 초 만에 계정을 만들고, $40부터 충전해서 HTTPS를 지원하는 어떤 언어로든 API를 호출할 수 있어요. 메시지당 가격은 $0.00247부터 시작해요.