Prerequisites
- A TextUs account
- Your TextUs API auth token
- The from number or email TextUs sends from
Setup
Open the in Courier, enter your auth token and from number or email, then click “Save.” Addressing a recipient and sending are the same on every SMS provider, so they are documented once: and .Overrides
covers the two levels and which one wins. Overrides change the request Courier makes to TextUs. OverrideauthToken, from, and email in config, and the body of the SMS content.
const { requestId } = await courier.send.message({
message: {
template: "nt_01kx4h2jdafq8bk9aftxak4b40",
to: {
phone_number: "+12345678901",
},
providers: {
textus: {
override: {
body: {
to: "+10987654321",
body: "Override message content",
},
config: {
from: "<override from number>",
authToken: "<override auth token>",
email: "<override email>",
},
},
},
},
},
});
response = client.send.message(
message={
"template": "nt_01kx4h2jdafq8bk9aftxak4b40",
"to": {
"phone_number": "+12345678901",
},
"providers": {
"textus": {
"override": {
"body": {
"to": "+10987654321",
"body": "Override message content",
},
"config": {
"from": "<override from number>",
"authToken": "<override auth token>",
"email": "<override email>",
},
},
},
},
},
)
curl -X POST https://api.courier.com/send \
-H "Authorization: Bearer $COURIER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": {
"template": "nt_01kx4h2jdafq8bk9aftxak4b40",
"to": {
"phone_number": "+12345678901"
},
"providers": {
"textus": {
"override": {
"body": {
"to": "+10987654321",
"body": "Override message content"
},
"config": {
"from": "<override from number>",
"authToken": "<override auth token>",
"email": "<override email>"
}
}
}
}
}
}'
response = courier.send_.message(
message: {
template: "nt_01kx4h2jdafq8bk9aftxak4b40",
to: {
phone_number: "+12345678901"
},
providers: {
textus: {
override: {
body: {
to: "+10987654321",
body: "Override message content"
},
config: {
from: "<override from number>",
authToken: "<override auth token>",
email: "<override email>"
}
}
}
}
}
)
response, err := client.Send.Message(context.TODO(), courier.SendMessageParams{
Message: courier.SendMessageParamsMessage{
To: courier.SendMessageParamsMessageToUnion{
OfUserRecipient: &shared.UserRecipientParam{
PhoneNumber: courier.String("+12345678901"),
},
},
Template: courier.String("nt_01kx4h2jdafq8bk9aftxak4b40"),
Providers: shared.MessageProvidersParam{
"textus": shared.MessageProvidersTypeParam{
Override: map[string]any{
"body": map[string]any{
"to": "+10987654321",
"body": "Override message content",
},
"config": map[string]any{
"from": "<override from number>",
"authToken": "<override auth token>",
"email": "<override email>",
},
},
},
},
},
})
SendMessageParams params = SendMessageParams.builder()
.message(SendMessageParams.Message.builder()
.to(UserRecipient.builder().phoneNumber("+12345678901").build())
.template("nt_01kx4h2jdafq8bk9aftxak4b40")
.providers(MessageProviders.builder()
.putAdditionalProperty("textus", JsonValue.from(java.util.Map.of("override", java.util.Map.of(
"body", java.util.Map.of(
"to", "+10987654321",
"body", "Override message content"
),
"config", java.util.Map.of(
"from", "<override from number>",
"authToken", "<override auth token>",
"email", "<override email>"
)
))))
.build())
.build())
.build();
SendMessageResponse response = client.send().message(params);
$response = $client->send->message(
message: [
'template' => 'nt_01kx4h2jdafq8bk9aftxak4b40',
'to' => [
'phone_number' => '+12345678901',
],
'providers' => [
'textus' => [
'override' => [
'body' => [
'to' => '+10987654321',
'body' => 'Override message content',
],
'config' => [
'from' => '<override from number>',
'authToken' => '<override auth token>',
'email' => '<override email>',
],
],
],
],
],
);
SendMessageParams parameters = new()
{
Message = new()
{
To = new UserRecipient { PhoneNumber = "+12345678901" },
Template = "nt_01kx4h2jdafq8bk9aftxak4b40",
Providers = new Dictionary<string, MessageProvidersType>()
{
{
"textus",
new()
{
Override = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(
"""
{
"body": {
"to": "+10987654321",
"body": "Override message content"
},
"config": {
"from": "<override from number>",
"authToken": "<override auth token>",
"email": "<override email>"
}
}
"""
),
}
},
},
},
};
var response = await client.Send.Message(parameters);
courier send message \
--api-key "$COURIER_API_KEY" \
--message.to '{"phone_number": "+12345678901"}' \
--message.template nt_01kx4h2jdafq8bk9aftxak4b40 \
--message.providers '{"textus": {"override": {"body": {"to": "+10987654321", "body": "Override message content"}, "config": {"from": "<override from number>", "authToken": "<override auth token>", "email": "<override email>"}}}}'
With Courier MCP, send my template to +12345678901 through TextUs from a different number.
Provider details
textus
routing.channels instead is supported, and sends through just this provider.
Send to a specific provider
When that is worth doing, and what you give up: failover, channel priority, and providers you add later.