Skip to content
New to this? Read the Batches guide.

Get a batch

GET
/v2/sms/batches/{id}
curl --request GET \
--url https://api.connect.ms/v2/sms/batches/example \
--header 'Authorization: Bearer <token>'

Returns one batch with its current status and message counts.

id
required
string

The id of the batch.

Connect-Version
string

The API version to use, for example 2026-10-01. Defaults to the version set on your API key.

The batch.

Media typeapplication/json

A batch of SMS messages. The same shape is returned by every batch endpoint and carried by batch.* events.

object
id
required

The unique id of the batch.

string
source
required
One of:

How the batch was created: api (a list of messages), import (an uploaded file) or list (contact lists).

string
Allowed values: api import list
status
required
One of:

The batch status: queued (nothing has been sent yet), sending (some messages have been sent, failed or cancelled and the batch is not yet complete), paused (paced delivery paused or messages held for payment), completed or cancelled.

string
Allowed values: queued sending paused completed cancelled
counts
required
One of:

Message counts for the batch by status. sent includes delivered; total is every row including skipped ones.

object
total
required

Every row in the batch, including skipped ones.

integer format: int32
queued
required

Messages not yet handed to the network.

integer format: int32
sent
required

Messages handed to the network and not since failed, including those delivered.

integer format: int32
delivered
required

Messages confirmed delivered.

integer format: int32
failed
required

Messages that failed.

integer format: int32
skipped
required

Rows that were never queued; see skipped for why.

integer format: int32
cancelled
required

Messages that were cancelled.

integer format: int32
skipped
required
One of:

Why rows were skipped rather than queued.

object
suppressed
required

Recipients on the suppression list.

integer format: int32
recentlyMessaged
required

Recipients messaged within the skipMessagedWithinHours window.

integer format: int32
invalid
required

Rows that failed validation.

integer format: int32
paced
One of:

Paced delivery details.

object
ratePerPeriod
required

How many messages are sent per period.

integer format: int32
period
required
One of:

The period a pacing rate applies to: hour or day.

string
Allowed values: hour day
pauseReason
One of:

Why paced delivery is paused: user (paused from the dashboard), sending_blocked (the workspace cannot send), sender_revoked (the sender is no longer approved), api_key_limit (the API key’s send limit was reached) or payment_required (the workspace is out of credit).

string
Allowed values: user sending_blocked sender_revoked api_key_limit payment_required
estimatedCompletionAt

When (UTC) the last message is expected to send at the current rate, or null when not known.

string format: date-time
nullable
hold
One of:

Why a message is waiting rather than sending.

object
reason
required
One of:

Why a message is being held: payment_required (the workspace is out of credit; the message sends once credit is restored or fails when its validity window passes).

string
Allowed values: payment_required
since
required

When (UTC) the hold began.

string format: date-time
until

When (UTC) the message fails if the hold is not lifted, or null when it has no validity window. Always null on a batch.

string format: date-time
nullable
errors
required

Rows that were rejected, by position. Only populated on the response that created the batch; empty everywhere else.

Array<object>

A row of the request that was not accepted.

object
index
required

The zero-based position of the row in the submitted messages.

integer format: int32
detail
required

What was wrong with the row.

string
clientTag

The grouping tag applied to the batch, for usage reporting. A message can carry its own tag instead.

string
nullable
scheduledAt

When (UTC) the batch was asked to send, or null when no send time was given.

string format: date-time
nullable
createdAt
required

When (UTC) the batch was created.

string format: date-time
completedAt

When (UTC) the last message reached a final state, or null while messages remain.

string format: date-time
nullable
cancelledAt

When (UTC) the batch was cancelled, or null.

string format: date-time
nullable

Example

{
"source": "api",
"status": "queued",
"paced": {
"period": "hour",
"pauseReason": "user"
},
"hold": {
"reason": "payment_required"
}
}

The request is not valid. The detail field says why, and errors lists any problems by field name.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

The API key or bearer token is missing or not valid, or the request signature could not be verified.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

The caller is not allowed to do this.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

No batch with that id.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}

The service is temporarily unavailable. Retry after the Retry-After header.

Media typeapplication/problem+json

Why a request failed, in the RFC 9457 problem details format.

object
type
required

A URI identifying the kind of problem, ending in a code such as validation_failed, not_found, sending_blocked or rate_limited.

string
title
required

A short, fixed summary of the kind of problem.

string
status
required

The HTTP status code of the response.

integer format: int32
detail

What went wrong with this particular request, when there is more to say than the title.

string
nullable
errors

For validation failures, the problems found, keyed by field name (nested fields as template.name, list items as messages[3]).

object
key
additional properties
Array<string>
requestId
required

The id recorded for this error, matching the Request-Id header when one is sent. Quote it when contacting support.

string

Example generated

{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"errors": {
"additionalProperty": [
"example"
]
},
"requestId": "example"
}