Prerequisites
- An SMSCentral account
- Your SMSCentral username and password
Setup
Open the in Courier, enter your username and password, 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 body and credentials Courier sends to SMSCentral. Overrideusername and password via config, and message, originator, and reference via body.
const { requestId } = await courier.send.message({
message: {
template: "nt_01kx4h2jdafq8bk9aftxak4b40",
to: {
phone_number: "+12345678901",
},
providers: {
smscentral: {
override: {
body: {
message: "Override message content",
originator: "MyCompany",
reference: "ref-12345",
},
config: {
username: "<override username>",
password: "<override password>",
},
},
},
},
},
});
response = client.send.message(
message={
"template": "nt_01kx4h2jdafq8bk9aftxak4b40",
"to": {
"phone_number": "+12345678901",
},
"providers": {
"smscentral": {
"override": {
"body": {
"message": "Override message content",
"originator": "MyCompany",
"reference": "ref-12345",
},
"config": {
"username": "<override username>",
"password": "<override password>",
},
},
},
},
},
)
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": {
"smscentral": {
"override": {
"body": {
"message": "Override message content",
"originator": "MyCompany",
"reference": "ref-12345"
},
"config": {
"username": "<override username>",
"password": "<override password>"
}
}
}
}
}
}'
response = courier.send_.message(
message: {
template: "nt_01kx4h2jdafq8bk9aftxak4b40",
to: {
phone_number: "+12345678901"
},
providers: {
smscentral: {
override: {
body: {
message: "Override message content",
originator: "MyCompany",
reference: "ref-12345"
},
config: {
username: "<override username>",
password: "<override password>"
}
}
}
}
}
)
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{
"smscentral": shared.MessageProvidersTypeParam{
Override: map[string]any{
"body": map[string]any{
"message": "Override message content",
"originator": "MyCompany",
"reference": "ref-12345",
},
"config": map[string]any{
"username": "<override username>",
"password": "<override password>",
},
},
},
},
},
})
SendMessageParams params = SendMessageParams.builder()
.message(SendMessageParams.Message.builder()
.to(UserRecipient.builder().phoneNumber("+12345678901").build())
.template("nt_01kx4h2jdafq8bk9aftxak4b40")
.providers(MessageProviders.builder()
.putAdditionalProperty("smscentral", JsonValue.from(java.util.Map.of("override", java.util.Map.of(
"body", java.util.Map.of(
"message", "Override message content",
"originator", "MyCompany",
"reference", "ref-12345"
),
"config", java.util.Map.of(
"username", "<override username>",
"password", "<override password>"
)
))))
.build())
.build())
.build();
SendMessageResponse response = client.send().message(params);
$response = $client->send->message(
message: [
'template' => 'nt_01kx4h2jdafq8bk9aftxak4b40',
'to' => [
'phone_number' => '+12345678901',
],
'providers' => [
'smscentral' => [
'override' => [
'body' => [
'message' => 'Override message content',
'originator' => 'MyCompany',
'reference' => 'ref-12345',
],
'config' => [
'username' => '<override username>',
'password' => '<override password>',
],
],
],
],
],
);
SendMessageParams parameters = new()
{
Message = new()
{
To = new UserRecipient { PhoneNumber = "+12345678901" },
Template = "nt_01kx4h2jdafq8bk9aftxak4b40",
Providers = new Dictionary<string, MessageProvidersType>()
{
{
"smscentral",
new()
{
Override = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(
"""
{
"body": {
"message": "Override message content",
"originator": "MyCompany",
"reference": "ref-12345"
},
"config": {
"username": "<override username>",
"password": "<override password>"
}
}
"""
),
}
},
},
},
};
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 '{"smscentral": {"override": {"body": {"message": "Override message content", "originator": "MyCompany", "reference": "ref-12345"}, "config": {"username": "<override username>", "password": "<override password>"}}}}'
With Courier MCP, send my template to +12345678901 through SMSCentral with a different originator.
override.body.message, override.body.reference, override.body.originator, override.config.username, and override.config.password. Any other field is ignored.
Provider details
smscentral
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.