1. Send SMS
Messaging API
  • Root
    • OTT
      • Send OTT
    • SMS
      • Send SMS
        • SendSms
          POST
        • SendSmsBatch
          POST
    • Voice
      • Calls
        • Place a call, or launch a campaign
    • Email
      • Raíz
      • Service
        • Health check
      • Delivery
        • Queue transactional email(s) for delivery
      • Attachments
        • DEPRECATED — you do not need this to send attachments
      • Templates
        • List EmailTemplates owned by the calling client
  • Raíz
  • Schemas
    • Schemas
      • MessageChannel
      • ApiSmsRequest
      • VoiceApiRequest
      • EmailRecipient
      • OTTMessagePayload
      • EmailRequest
      • OTTMessageRequest
      • EmailResponse
      • EmailResult
    • EmailDeliverAttachment
    • VoiceDeliverRequest
    • SmsBatchRequest
    • EmailDeliverPayload
    • ErrorMessage
    • BatchError
    • EmailDeliverRequest
    • ProblemDetails
    • EmailDeliverResult
    • CampaignAccepted
    • EmailDeliverResponse
    • AttachmentUploadResponse
    • EmailTemplateSummary
  1. Send SMS

SendSmsBatch

POST
/sms/v1/deliver/batch
Last modified:2026-09-09 04:02:32
Creates a campaign with every recipient in the request and returns as soon as it is
registered. Delivery happens afterwards.

Limits#

More than one recipient and up to 5,000 per call. Every recipient must belong to
the same country: mixing a Colombian and a Mexican number in one batch is rejected.

Idempotency without doing anything#

The Idempotency-Key header is optional. When it is absent, the key is derived
from the request content within a 15-minute window, so two identical calls in a row
create one campaign and the second one gets the first back. This protects against
the double submit, which is the failure that actually happens.
Sending the header gives you explicit control: retrying with the same key and the same
body returns the original campaign; the same key with a different body returns 409.

Credit is not checked here#

Unlike POST /sms/v1/deliver, a batch is accepted with 200 and charged later, when the
worker expands the file. A client with no balance still gets a 200 and the campaign
simply never sends. Check the campaign in the portal to confirm delivery.

Request

Authorization
Add parameter in header
X-API-KEY
Example:
X-API-KEY: ********************
Header Params

Body Params application/jsonRequired

Examples

Responses

🟢200
application/json
Campaign created. This is also the response to a repeated call inside the
idempotency window: campaignId is the original campaign and nothing new was sent.
Bodyapplication/json

🟠400
🟠401
🟠403
🟠409
Request Request Example
Shell
JavaScript
Java
Swift
cURL
curl --location 'https://api.trucontact.co/sms/v1/deliver/batch' \
--header 'Idempotency-Key: order-48213-retry-1' \
--header 'X-API-KEY: <api-key>' \
--header 'Content-Type: application/json' \
--data '{
    "batchName": "Payment reminder",
    "recipients": [
        "+573001234567",
        "+573007654321"
    ],
    "messageBody": "Your invoice is due tomorrow.",
    "validateDuplicates": false
}'
Response Response Example
200 - Example 1
{
    "campaignId": "66fa1b2c3d4e5f0011223344",
    "status": "CampaignQueued",
    "acceptedCount": 2
}
Modified at 2026-09-09 04:02:32
Previous
SendSms
Next
Place a call, or launch a campaign
Built with