Chimes
Chimes are the SMS and email messages your business sends through Inttegro: receipts, delivery updates, reminders, and other customer notifications. Send one message now, schedule it for later, or broadcast it to an audience, then use its delivery status when a customer needs help. For one-time passwords, use the OTP API instead.
Operations
The chime object
A Chime is one notification for one recipient. It records the message, recipient, sender, and delivery status.
Properties
emailobjectEmail content and safety scan result. Present when the Chime is sent by email.Click or tap to expandView headers detailsClick or tap to expand
Additional email headers after validation.View safety attributesClick or tap to expand
Result of the email content safety scan.View links attributesClick or tap to expand
Links found while scanning the message.
Send chime
Send one notification immediately. You can address it directly with a phone number or email address, or point to a saved customer and let Inttegro use that customer's phone number or email address.
AI clients can use send_customer_sms or send_customer_template for this operation. Confirmed MCP actions still require explicit form confirmation before Inttegro changes state.
The MCP tool covers saved-customer SMS sends only; it does not expose email sends, inline recipients, schedules, or broadcasts.
Rules
- Send either SMS or email in one request. SMS uses
full_messageor an SMSmessage_template; email usesemailor an emailmessage_template. - Address a saved customer with
customer_idandtransport, or provide an inline phone number or email address. Do not combine the two recipient shapes. - Inline email content requires
subject,text, andfrom.address. HTML and custom headers are checked before delivery. - A stored template must be published for the same channel as the recipient.
Required attributes
Optional attributes
message_templateobjectStored template reference. Use this instead offull_messagefor SMS recipients, or instead ofemailfor email recipients.Click or tap to expandView variables detailsClick or tap to expand
Values for the template variables. Required variables must be present and valid for their declared types.
Email attributes
To send a Chime to a saved customer, pass recipient.customer_id and choose which contact method to use:
{
"recipient": {
"customer_id": "cu_abc123def456",
"transport": "sms"
},
"full_message": "Your order has shipped."
}
To send email to an inline address, use recipient.type: "email" and include the top-level email object:
{
"recipient": {
"type": "email",
"email": {
},
"name": "Gloria Kesewaa"
},
"email": {
"subject": "Your receipt from YourBrand",
"text": "Your receipt is ready. View it at https://yourbrand.example/receipts/or_123.",
"html": "<p>Your receipt is ready. <a href=\"https://yourbrand.example/receipts/or_123\">View receipt</a>.</p>",
"from": {
"name": "YourBrand",
}
},
"purpose": "receipt"
}
To send with a stored template, use the generated template ID and keep variables inside the message_template object:
{
"recipient": {
"customer_id": "cu_abc123def456",
"transport": "sms"
},
"message_template": {
"template_id": "mtpl_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU",
"variables": {
"order_number": "OR-12345",
"tracking_url": "https://track.example.com/OR-12345"
}
}
}
The examples below use the saved-customer shape. If you want to address someone directly instead, replace transport and customer_id with type and the matching inline phone or email details.
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/chimes/send \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request_meta": {
"idempotency_key": "chime_ship_or_abc123"
},
"recipient": {
"customer_id": "cu_abc123def456",
"transport": "sms"
},
"full_message": "Your order #OR-12345 has been shipped and will arrive in 2-3 business days.",
"sender_id": "YourBrand",
"purpose": "shipping_update",
"custom_data": {
"order_id": "or_abc123",
"fulfillment_id": "ffl_xyz789"
}
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.chimes.send({
requestMeta: {
idempotencyKey: "chime_ship_or_abc123",
},
recipient: {
customerId: "cu_abc123def456",
transport: "sms",
},
fullMessage: "Your order #OR-12345 has been shipped and will arrive in 2-3 business days.",
senderId: "YourBrand",
purpose: "shipping_update",
customData: {
order_id: "or_abc123",
fulfillment_id: "ffl_xyz789",
},
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
params := inttegro.SendChimeParams{
Recipient: inttegro.ChimeRecipient{},
FullMessage: "Your order #OR-12345 has been shipped and will arrive in 2-3 business days.",
Purpose: "shipping_update",
CustomData: map[string]string{
"order_id": "or_abc123",
"fulfillment_id": "ffl_xyz789",
},
}
result, err := client.Chimes.Send(ctx, params)
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.chimes.send(inttegro.chimes.SendRequest(
request_meta=inttegro.chimes.SendRequestMeta(
idempotency_key="chime_ship_or_abc123",
),
recipient=inttegro.chimes.SavedCustomerRecipient(
customer_id="cu_abc123def456",
transport="sms",
),
full_message="Your order #OR-12345 has been shipped and will arrive in 2-3 business days.",
sender_id="YourBrand",
purpose="shipping_update",
custom_data={
"order_id": "or_abc123",
"fulfillment_id": "ffl_xyz789",
},
))
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->chimes->send([
'request_meta' => [
'idempotency_key' => 'chime_ship_or_abc123',
],
'recipient' => [
'customer_id' => 'cu_abc123def456',
'transport' => 'sms',
],
'full_message' => 'Your order #OR-12345 has been shipped and will arrive in 2-3 business days.',
'sender_id' => 'YourBrand',
'purpose' => 'shipping_update',
'custom_data' => [
'order_id' => 'or_abc123',
'fulfillment_id' => 'ffl_xyz789',
],
]);
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.chimes.send(
request_meta: {
idempotency_key: "chime_ship_or_abc123",
},
recipient: {
customer_id: "cu_abc123def456",
transport: "sms",
},
full_message: "Your order #OR-12345 has been shipped and will arrive in 2-3 business days.",
sender_id: "YourBrand",
purpose: "shipping_update",
custom_data: {
order_id: "or_abc123",
fulfillment_id: "ffl_xyz789",
}
)
import com.inttegro.Client;
import com.inttegro.chimes.SendChimeParams;
import com.inttegro.chimes.ChimeRecipient;
import java.util.Map;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var params = SendChimeParams.builder()
.recipient(ChimeRecipient.builder().build())
.fullMessage("Your order #OR-12345 has been shipped and will arrive in 2-3 business days.")
.purpose("shipping_update")
.customData(Map.<String, String>ofEntries(
Map.entry("order_id", "or_abc123"),
Map.entry("fulfillment_id", "ffl_xyz789")
))
.build();
var result = client.chimes().send(params);
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Chimes.SendAsync(new {
request_meta = new {
idempotency_key = "chime_ship_or_abc123",
},
recipient = new {
customer_id = "cu_abc123def456",
transport = "sms",
},
full_message = "Your order #OR-12345 has been shipped and will arrive in 2-3 business days.",
sender_id = "YourBrand",
purpose = "shipping_update",
custom_data = new {
order_id = "or_abc123",
fulfillment_id = "ffl_xyz789",
},
});
{
"chime": {
"id": "ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU",
"customer_id": "cu_abc123def456",
"created_at": "2030-12-10T10:30:00Z",
"full_message": "Your order #OR-12345 has been shipped and will arrive in 2-3 business days. Track at: https://track.example.com/OR-12345",
"recipient": {
"type": "phone",
"phone": {
"number": "+233544998605"
},
"name": "Gloria Kesewaa"
},
"sender_id": "YourBrand",
"purpose": "shipping_update",
"custom_data": {
"order_id": "or_abc123",
"fulfillment_id": "ffl_xyz789"
},
"transmission": {
"address": "+233544998605",
"created_at": "2030-12-10T10:30:00Z",
"gateway": "configured_gateway",
"id": "GvYUWkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGv",
"initialized_at": "2030-12-10T10:30:00Z",
"mechanism": "sms",
"sent_at": "2030-12-10T10:30:05Z",
"sent_via": "sms",
"status": "sent"
}
}
}
Lookup chime
Retrieve one Chime to see what was sent and whether it was delivered. This is useful when answering delivery questions or matching a notification to your own records.
AI clients can use get_message for this operation. MCP read tools return minimized business data and do not change Inttegro state.
Required attributes
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/chimes/lookup \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"chime_id": "ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU"
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.chimes.lookup({
chimeId: "ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU",
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
result, err := client.Chimes.Lookup(ctx, "ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU")
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.chimes.lookup("ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU")
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->chimes->lookup("ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU");
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.chimes.lookup(chime_id: "ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU")
import com.inttegro.Client;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var result = client.chimes().lookup("ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU");
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Chimes.LookupAsync("ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU");
Response
- Object
- JSON
ChimeResponse {
chime: { … },
}
{
"chime": {
"id": "ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU",
"created_at": "2030-12-10T10:30:00Z",
"full_message": "Your order #OR-12345 has been shipped and will arrive in 2-3 business days. Track at: https://track.example.com/OR-12345",
"recipient": { … },
"sender_id": "YourBrand",
"purpose": "shipping_update",
"custom_data": { … },
"transmission": { … }
}
}
Page chimes
Browse sent Chimes, newest first. Filter by customer or exact phone number or email address to review one recipient's notification history.
AI clients can use list_messages for this operation. MCP read tools return minimized business data and do not change Inttegro state.
Optional attributes
You can filter by recipient, customer_id, both, or neither.
The response size is the number of Chimes actually returned in chimes,
not the requested page capacity.
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/chimes/page \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"page_number": 1,
"page_size": 25,
"customer_id": "cu_abc123def456"
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.chimes.page({
pageNumber: 1,
pageSize: 25,
customerId: "cu_abc123def456",
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
params := inttegro.ChimePageParams{
PageNumber: 1,
PageSize: 25,
CustomerID: "cu_abc123def456",
}
result, err := client.Chimes.Page(ctx, params)
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.chimes.page(inttegro.chimes.PageRequest(
page_number=1,
page_size=25,
customer_id="cu_abc123def456",
))
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->chimes->page([
'page_number' => 1,
'page_size' => 25,
'customer_id' => 'cu_abc123def456',
]);
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.chimes.page(
page_number: 1,
page_size: 25,
customer_id: "cu_abc123def456"
)
import com.inttegro.Client;
import com.inttegro.chimes.PageChimesParams;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var params = PageChimesParams.builder()
.pageNumber(1)
.pageSize(25)
.customerId("cu_abc123def456")
.build();
var result = client.chimes().page(params);
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Chimes.PageAsync(new {
page_number = 1,
page_size = 25,
customer_id = "cu_abc123def456",
});
Schedule chime
Schedule one or more notifications for a future time. Every recipient in a schedule must use the same channel, so create separate schedules for SMS and email.
Rules
send_aftermust be in the future.- Use one content source:
full_messageor an SMS template for SMS;emailor an email template for email. - Address each recipient as a saved customer or an inline contact, using the same shapes as Send chime.
Required attributes
Optional attributes
message_templateobjectStored template reference. Use this instead offull_messagefor SMS schedules, or instead ofemailfor email schedules.Click or tap to expandView variables detailsClick or tap to expand
Values for the template variables. Required variables must be present and valid for their declared types.
Response attributes
To schedule for saved customers, include recipients with customer_id and transport:
{
"recipients": [
{ "customer_id": "cu_abc123def456", "transport": "sms" },
{ "customer_id": "cu_def456ghi789", "transport": "sms" }
],
"full_message": "Reminder: Your appointment starts tomorrow at 10 AM.",
"send_after": "2030-12-15T10:00:00Z",
"request_meta": {
"idempotency_key": "sched_appointment_cu_abc123_2025_12_15"
}
}
To schedule email for saved customers, set transport: "email" and provide the top-level email object:
{
"recipients": [
{ "customer_id": "cu_abc123def456", "transport": "email" },
{ "customer_id": "cu_def456ghi789", "transport": "email" }
],
"email": {
"subject": "Your subscription renews tomorrow",
"text": "Your subscription renews tomorrow. Update billing at https://yourbrand.example/billing.",
"from": {
}
},
"send_after": "2030-12-15T10:00:00Z",
"purpose": "reminder"
}
To schedule with a stored template, use the same message_template object shape used by Send chime:
{
"recipients": [
{ "customer_id": "cu_abc123def456", "transport": "email" }
],
"message_template": {
"template_id": "mtpl_emailRenewal123",
"variables": {
"customer_name": "Gloria",
"renewal_date": "2030-12-16"
}
},
"send_after": "2030-12-15T10:00:00Z",
"purpose": "reminder"
}
The examples below mix both recipient shapes in the same request.
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/chimes/schedule \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipients": [
{
"customer_id": "cu_abc123def456",
"transport": "sms"
},
{
"type": "phone",
"phone": {
"number": "+233501234567"
},
"name": "Backup Contact"
}
],
"full_message": "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
"send_after": "2030-12-15T09:00:00Z",
"sender_id": "YourBrand",
"purpose": "reminder"
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.chimes.schedule({
recipients: [
{
customerId: "cu_abc123def456",
transport: "sms",
},
{
type: "phone",
phone: {
number: "+233501234567",
},
name: "Backup Contact",
},
],
fullMessage: "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
sendAfter: "2030-12-15T09:00:00Z",
senderId: "YourBrand",
purpose: "reminder",
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
params := inttegro.ScheduleChimeParams{
Recipients: []string{
"",
"",
},
FullMessage: "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
SendAfter: "2030-12-15T09:00:00Z",
SenderID: "YourBrand",
Purpose: "reminder",
}
result, err := client.Chimes.Schedule(ctx, params)
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.chimes.schedule(inttegro.chimes.ScheduleRequest(
recipients=[
inttegro.chimes.SavedCustomerRecipient(
customer_id="cu_abc123def456",
transport="sms",
),
inttegro.chimes.PhoneRecipient(
type="phone",
phone=inttegro.chimes.Phone(
number="+233501234567",
),
name="Backup Contact",
),
],
full_message="Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
send_after="2030-12-15T09:00:00Z",
sender_id="YourBrand",
purpose="reminder",
))
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->chimes->schedule([
'recipients' => [
[
'customer_id' => 'cu_abc123def456',
'transport' => 'sms',
],
[
'type' => 'phone',
'phone' => [
'number' => '+233501234567',
],
'name' => 'Backup Contact',
],
],
'full_message' => 'Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.',
'send_after' => '2030-12-15T09:00:00Z',
'sender_id' => 'YourBrand',
'purpose' => 'reminder',
]);
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.chimes.schedule(
recipients: [
{
customer_id: "cu_abc123def456",
transport: "sms",
},
{
type: "phone",
phone: {
number: "+233501234567",
},
name: "Backup Contact",
},
],
full_message: "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
send_after: "2030-12-15T09:00:00Z",
sender_id: "YourBrand",
purpose: "reminder"
)
import com.inttegro.Client;
import com.inttegro.chimes.ScheduleChimeParams;
import java.util.List;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var params = ScheduleChimeParams.builder()
.recipients(List.of(
"",
""
))
.fullMessage("Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.")
.sendAfter("2030-12-15T09:00:00Z")
.senderId("YourBrand")
.purpose("reminder")
.build();
var result = client.chimes().schedule(params);
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Chimes.ScheduleAsync(new {
recipients = new object[] {
new {
customer_id = "cu_abc123def456",
transport = "sms",
},
new {
type = "phone",
phone = new {
number = "+233501234567",
},
name = "Backup Contact",
},
},
full_message = "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
send_after = "2030-12-15T09:00:00Z",
sender_id = "YourBrand",
purpose = "reminder",
});
Response
- Object
- JSON
ScheduledChimeResponse {
scheduledChime: { … },
}
{
"scheduled_chime": {
"id": "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"created_at": "2030-12-10T14:30:00Z",
"customer_ids": [ … ],
"recipients": [ … ],
"full_message": "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
"sender_id": "YourBrand",
"purpose": "reminder",
"send_after": "2030-12-15T09:00:00Z"
}
}
Lookup a scheduled chime
Check whether a scheduled notification has run. After execution, the response includes the Chime IDs created for successful recipients and any recipient-specific errors.
Required attributes
Response attributes
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/schedules/lookup \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"schedule_id": "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk"
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.schedules.lookup({
scheduleId: "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
result, err := client.Schedules.Lookup(ctx, "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.schedules.lookup("sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->schedules->lookup("sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.schedules.lookup(schedule_id: "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
import com.inttegro.Client;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var result = client.schedules().lookup("sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Schedules.LookupAsync("sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
Response
- Object
- JSON
ScheduledChimeResponse {
scheduledChime: { … },
}
{
"scheduled_chime": {
"id": "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"recipients": [ … ],
"content": "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
"sender_id": "YourBrand",
"purpose": "reminder",
"send_after": "2030-12-15T09:00:00Z",
"created_at": "2030-12-10T14:30:00Z",
"executed_at": "2030-12-15T09:00:03Z",
"chime_ids": [ … ],
"errors": [ … ]
}
}
Cancel a scheduled chime
Stop a scheduled notification before delivery begins. Cancel it before send_after; once execution starts, some or all messages may already be on their way.
Required attributes
A successful response returns the same schedule lifecycle fields as Lookup a scheduled chime, plus canceled_at with the recorded cancellation time.
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/schedules/cancel \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: cancel-schedule-kPvqTrqGsopu07wf" \
-d '{
"schedule_id": "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk"
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.schedules.cancel({
scheduleId: "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
result, err := client.Schedules.Cancel(ctx, "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.schedules.cancel("sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->schedules->cancel("sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.schedules.cancel(schedule_id: "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
import com.inttegro.Client;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var result = client.schedules().cancel("sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Schedules.CancelAsync("sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
Response
- Object
- JSON
ScheduledChimeResponse {
scheduledChime: { … },
}
{
"scheduled_chime": {
"id": "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"customer_ids": [ … ],
"recipients": [ … ],
"content": "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
"sender_id": "YourBrand",
"purpose": "reminder",
"send_after": "2030-12-15T09:00:00Z",
"created_at": "2030-12-10T14:30:00Z",
"canceled_at": "2030-12-14T16:45:00Z"
}
}
Broadcast chimes
Send one message to many recipients. The response confirms that Inttegro accepted the broadcast, not that every recipient has received a Chime; use Lookup a broadcast to follow its progress.
Rules
- All recipients must use the same channel. Create separate broadcasts for SMS and email.
- SMS uses raw text or a published SMS template. Email uses inline
emailcontent or a published email template. - Address each recipient as a saved customer or an inline contact, using the same shapes as Send chime.
- Each recipient receives a separate Chime, so delivery can be tracked individually.
- Provide
senderwhen you do not want it to be empty; broadcasts do not apply a default sender.
Required attributes
Optional attributes
Response attributes
For SMS broadcasts, message_template may be a raw SMS string for legacy inline content or an object with template_id and variables for stored templates. For email broadcasts, message_template must be an object; raw string content is SMS-only.
To broadcast to saved customers, include recipients with customer_id and transport:
{
"recipients": [
{ "customer_id": "cu_abc123def456", "transport": "email" },
{ "customer_id": "cu_def456ghi789", "transport": "email" }
],
"email": {
"subject": "Your order has shipped",
"text": "Your order has shipped. Track it at https://track.shop.example/abc123.",
"from": {
}
},
"sender": "ShopBrand",
"request_meta": {
"idempotency_key": "broadcast_shipping_2025_12_15"
}
}
To broadcast an email-only campaign, use email recipients and provide the top-level email object:
{
"recipients": [
{ "customer_id": "cu_abc123def456", "transport": "email" },
{
"type": "email",
"email": {
},
"name": "Backup Contact"
}
],
"email": {
"subject": "Your order has shipped",
"text": "Your order #12345 has shipped. Track it at https://track.shop.example/abc123.",
"from": {
}
},
"sender": "ShopBrand",
"purpose": "order_notification"
}
To broadcast with a stored template, pass message_template as an object:
{
"recipients": [
{ "customer_id": "cu_abc123def456", "transport": "email" },
{ "customer_id": "cu_def456ghi789", "transport": "email" }
],
"message_template": {
"template_id": "mtpl_emailShipping123",
"variables": {
"order_number": "OR-12345",
"tracking_url": "https://track.shop.example/OR-12345"
}
},
"sender": "ShopBrand",
"purpose": "order_notification"
}
The examples below mix both recipient shapes in the same request.
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/chimes/broadcast \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipients": [
{
"customer_id": "cu_abc123def456",
"transport": "email"
},
{
"type": "email",
"email": {
"address": "[email protected]"
},
"name": "Backup Contact"
}
],
"email": {
"subject": "Your order #12345 has shipped",
"text": "Your order #12345 has shipped. Track it at https://track.shop.com/abc123.",
"from": {
"address": "[email protected]"
}
},
"sender": "ShopName",
"purpose": "order_notification"
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.chimes.broadcast({
recipients: [
{
customerId: "cu_abc123def456",
transport: "email",
},
{
type: "email",
email: {
},
name: "Backup Contact",
},
],
email: {
subject: "Your order #12345 has shipped",
text: "Your order #12345 has shipped. Track it at https://track.shop.com/abc123.",
from: {
},
},
sender: "ShopName",
purpose: "order_notification",
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
params := inttegro.BroadcastChimeParams{
Recipients: []string{
"",
"",
},
Sender: "ShopName",
Purpose: "order_notification",
}
result, err := client.Chimes.Broadcast(ctx, params)
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.chimes.broadcast(inttegro.chimes.BroadcastRequest(
recipients=[
inttegro.chimes.SavedCustomerRecipient(
customer_id="cu_abc123def456",
transport="email",
),
inttegro.chimes.EmailRecipient(
type="email",
email=inttegro.chimes.Email(
),
name="Backup Contact",
),
],
email=inttegro.chimes.EmailMessage(
subject="Your order #12345 has shipped",
text="Your order #12345 has shipped. Track it at https://track.shop.com/abc123.",
from_=inttegro.chimes.EmailMailbox(
),
),
sender="ShopName",
purpose="order_notification",
))
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->chimes->broadcast([
'recipients' => [
[
'customer_id' => 'cu_abc123def456',
'transport' => 'email',
],
[
'type' => 'email',
'email' => [
],
'name' => 'Backup Contact',
],
],
'email' => [
'subject' => 'Your order #12345 has shipped',
'text' => 'Your order #12345 has shipped. Track it at https://track.shop.com/abc123.',
'from' => [
],
],
'sender' => 'ShopName',
'purpose' => 'order_notification',
]);
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.chimes.broadcast(
recipients: [
{
customer_id: "cu_abc123def456",
transport: "email",
},
{
type: "email",
email: {
},
name: "Backup Contact",
},
],
email: {
subject: "Your order #12345 has shipped",
text: "Your order #12345 has shipped. Track it at https://track.shop.com/abc123.",
from: {
},
},
sender: "ShopName",
purpose: "order_notification"
)
import com.inttegro.Client;
import com.inttegro.chimes.BroadcastChimeParams;
import java.util.List;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var params = BroadcastChimeParams.builder()
.recipients(List.of(
"",
""
))
.sender("ShopName")
.purpose("order_notification")
.build();
var result = client.chimes().broadcast(params);
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Chimes.BroadcastAsync(new {
recipients = new object[] {
new {
customer_id = "cu_abc123def456",
transport = "email",
},
new {
type = "email",
email = new {
},
name = "Backup Contact",
},
},
email = new {
subject = "Your order #12345 has shipped",
text = "Your order #12345 has shipped. Track it at https://track.shop.com/abc123.",
from = new {
},
},
sender = "ShopName",
purpose = "order_notification",
});
Response
- Object
- JSON
BroadcastResponse {
broadcast: { … },
}
{
"broadcast": {
"id": "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"content": "Your order #12345 has shipped. Track it at https://track.shop.com/abc123.",
"customer_ids": [ … ],
"recipients": [ … ],
"email": { … },
"sender_id": "ShopName",
"purpose": "order_notification",
"send_after": "2030-12-15T09:00:00Z",
"created_at": "2030-12-15T09:00:00Z"
}
}
Lookup a broadcast
Check a broadcast's progress. The response lists the Chimes created for successful recipients and any recipient-specific errors.
Required attributes
Response attributes
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/broadcasts/lookup \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"broadcast_id": "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk"
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.broadcasts.lookup({
broadcastId: "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
result, err := client.Broadcasts.Lookup(ctx, "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.broadcasts.lookup("brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->broadcasts->lookup("brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.broadcasts.lookup(broadcast_id: "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
import com.inttegro.Client;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var result = client.broadcasts().lookup("brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Broadcasts.LookupAsync("brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
Response
- Object
- JSON
BroadcastResponse {
broadcast: { … },
}
{
"broadcast": {
"id": "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"customer_ids": [ … ],
"recipients": [ … ],
"content": "Your order #12345 has shipped! Track: https://track.shop.com/abc123",
"sender_id": "ShopName",
"purpose": "order_notification",
"send_after": "2030-12-15T09:00:00Z",
"created_at": "2030-12-15T09:00:00Z",
"executed_at": "2030-12-15T09:00:03Z",
"chime_ids": [ … ],
"errors": [ … ]
}
}
Cancel a broadcast
Stop a broadcast that has not finished processing. Because delivery begins asynchronously, cancel as soon as possible; some recipients may already have received their Chimes.
Required attributes
A successful response returns the same broadcast lifecycle fields as Lookup a broadcast, plus canceled_at with the recorded cancellation time.
Request
- cURL
- TypeScript
- Go
- Python
- PHP
- Ruby
- Java
- C#
curl https://api.inttegro.com/broadcasts/cancel \
-H "Authorization: Bearer $INTTEGRO_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: cancel-broadcast-kPvqTrqGsopu07wf" \
-d '{
"broadcast_id": "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk"
}'
import * as Inttegro from '@inttegro/inttegro-sdk'
const inttegro = new Inttegro.InttegroClient({
apiKey: process.env.INTTEGRO_API_KEY!,
})
const result = await inttegro.broadcasts.cancel({
broadcastId: "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
})
package main
import (
"context"
"log"
"os"
inttegro "github.com/zebodotdev/inttegro-sdk-go/v4"
)
func main() {
ctx := context.Background()
client := inttegro.NewClient(os.Getenv("INTTEGRO_API_KEY"))
result, err := client.Broadcasts.Cancel(ctx, "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
if err != nil {
log.Fatal(err)
}
_ = result
}
import os
import inttegro
client = inttegro.InttegroClient(api_key=os.environ["INTTEGRO_API_KEY"])
result = client.broadcasts.cancel("brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
<?php
use Inttegro\Client;
$client = new Client($_ENV['INTTEGRO_API_KEY']);
$result = $client->broadcasts->cancel("brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
require "inttegro"
client = Inttegro::Client.new(api_key: ENV.fetch("INTTEGRO_API_KEY"))
result = client.broadcasts.cancel(broadcast_id: "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk")
import com.inttegro.Client;
public class Example {
public static void main(String[] args) throws Exception {
var client = new Client(System.getenv("INTTEGRO_API_KEY"));
var result = client.broadcasts().cancel("brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
}
}
using Inttegro;
using var inttegro = new InttegroClient(
Environment.GetEnvironmentVariable("INTTEGRO_API_KEY")!
);
var result = await inttegro.Broadcasts.CancelAsync("brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk");
Response
- Object
- JSON
BroadcastResponse {
broadcast: { … },
}
{
"broadcast": {
"id": "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"recipients": [ … ],
"content": "Your order #12345 has shipped! Track: https://track.shop.com/abc123",
"sender_id": "ShopName",
"purpose": "order_notification",
"send_after": "2030-12-15T09:00:00Z",
"created_at": "2030-12-15T09:00:00Z",
"canceled_at": "2030-12-15T09:00:02Z"
}
}
Stored message template references
Chime send, schedule, and broadcast requests can render a stored message template instead of accepting inline content. Use this shape when the content should come from a published reusable template:
{
"message_template": {
"template_id": "mtpl_receipt_ready",
"variables": {
"customer_name": "Gloria",
"receipt_url": "https://yourstore.example/receipts/or_123"
}
}
}
message_template.template_id must identify a published template. Supply every required variable using the type defined by that template. SMS templates can send only to SMS recipients, and email templates can send only to email recipients.
Provide exactly one content source for the resolved transport. For SMS sends and schedules, use either full_message or an SMS message_template; for SMS broadcasts, use message_template as either raw SMS text or a stored template object. For email sends, schedules, and broadcasts, use either email or an email message_template. Do not combine SMS content and email content in the same request.
Use Render a message template preview before sending production campaigns when variable values come from user or catalog data.