Chimes
Chimes are notification messages sent to your customers via SMS, WhatsApp, or email. Send order confirmations, payment receipts, shipping updates, and marketing messages with delivery tracking, idempotency guarantees, and flexible sender customization. Built for transactional and marketing workflows that demand reliability—purchase confirmations, status updates, and time-sensitive alerts. For authentication and verification flows that require OTP tokens, use the OTP API instead.
The Chime object
A Chime represents a single notification message sent to one recipient. It captures the complete message lifecycle: creation, transmission, and delivery status. Each Chime links to your application, stores the full message content, recipient contact details, sender information, and tracks transmission through the gateway. Purpose and custom data fields let you categorize and filter Chimes for analytics and debugging.
Properties
Send Chime
Send a notification message to a single recipient immediately. The message delivers via SMS or email based on the recipient type—phone numbers route to SMS, email addresses route to email. You can override the default transport if needed (e.g., send email to a phone-type recipient). Supports idempotency to prevent duplicate sends during retries.
Use cases
- Transaction notifications: Confirm payments, orders, and account changes in real time.
- Receipt delivery: Email purchase receipts and invoices after checkout.
- Status updates: Notify customers when order status changes or shipments move.
- Marketing messages: Send promotional offers, announcements, and campaign messages.
- Reminders: Alert customers about upcoming payments, subscription renewals, or cart abandonment.
Required attributes
Optional attributes
- Name
idempotency_key- Type
- string
- Description
Unique key to prevent duplicate sends. If you retry a request with the same key, we return the original Chime instead of sending again. Auto-generated if you don't provide one. Use this for critical messages like payment confirmations and transaction receipts.
Request
curl https://api.zebo.dev/chimes/send \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"recipient": {
"type": "phone",
"phone": {
"number": "+233544998605"
},
"name": "John Doe"
},
"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",
"sender_id": "YourBrand",
"purpose": "shipping_update",
"custom_data": {
"user_id": "usr_abc123",
"flow": "signup"
}
}'
{
"chime": {
"id": "ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU",
"created_at": "2025-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": "John Doe"
},
"sender_id": "YourBrand",
"purpose": "shipping_update",
"custom_data": {
"order_id": "or_abc123",
"fulfillment_id": "ffl_xyz789"
},
"delivery": null,
"transmission": {
"created_at": "2025-12-10T10:30:00Z",
"sent_via": "sms",
"status": "sent",
"sent_at": "2025-12-10T10:30:05Z",
"delivered_at": null,
"failed_at": null
}
}
}
Lookup Chime
Retrieve the complete details of a previously sent Chime by its ID. Returns the full Chime object including transmission status, delivery details, and all custom data you attached during creation. Use this endpoint to track message delivery, verify sends during support requests, and reconcile Chimes with your internal systems.
Required attributes
Request
curl https://api.commerce.zebo.dev/chimes/lookup \
-H "Authorization: Bearer {api_key}" \
-H "Content-Type: application/json" \
-d '{
"chime_id": "ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU"
}'
Response
{
"chime": {
"id": "ch_WkPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYU",
"created_at": "2025-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": "John Doe"
},
"sender_id": "YourBrand",
"purpose": "shipping_update",
"custom_data": {
"order_id": "or_abc123",
"fulfillment_id": "ffl_xyz789"
},
"delivery": null,
"transmission": {
"created_at": "2025-12-10T10:30:00Z",
"sent_via": "sms",
"status": "delivered",
"sent_at": "2025-12-10T10:30:05Z",
"delivered_at": "2025-12-10T10:30:15Z",
"failed_at": null
}
}
}
Schedule Chime
Schedule a notification message for delivery at a specific future time. Send to a single recipient or broadcast to multiple recipients. Recipients are validated at send time, not when you schedule—if a recipient is invalid or unreachable, you'll see the failure when the Chime attempts delivery.
Required attributes
Optional attributes
Request
curl https://api.zebo.dev/chimes/schedule \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"recipients": [
"+233544998605",
"+233501234567"
],
"full_message": "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
"send_after": "2025-12-15T09:00:00Z",
"sender_id": "YourBrand",
"purpose": "reminder"
}'
Response
{
"scheduled_chime": {
"id": "chs_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"application_id": "app_abc123xyz",
"created_at": "2025-12-10T14:30:00Z",
"recipients": [
"+233544998605",
"+233501234567"
],
"full_message": "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
"sender_id": "YourBrand",
"purpose": "reminder",
"send_after": "2025-12-15T09:00:00Z"
}
}
Lookup a scheduled Chime
Retrieve a scheduled Chime and check its execution status. Returns the schedule details, IDs of all Chimes created when it executed, and any delivery failures. Use this to track broadcast delivery success, debug failed recipients, or verify cancellation status.
Required attributes
Request
curl https://api.zebo.dev/schedules/lookup \
-H "Authorization: Bearer $SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"schedule_id": "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk"
}'
Response
{
"scheduled_chime": {
"id": "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"recipients": [
"+233544998605",
"+233501234567",
"+233509999999"
],
"content": "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
"sender_id": "YourBrand",
"purpose": "reminder",
"send_after": "2025-12-15T09:00:00Z",
"created_at": "2025-12-10T14:30:00Z",
"executed_at": "2025-12-15T09:00:03Z",
"chime_ids": [
"ch_abc123xyz",
"ch_def456uvw"
],
"errors": [
{
"recipient": "+233509999999",
"type": "invalid_phone_number",
"fix_code": "f-change_request_parameters"
}
]
}
}
Cancel a scheduled Chime
Cancel a pending scheduled Chime before it executes. Prevents message delivery if called before the send_after time. Returns an error if the schedule already executed or was previously canceled. Idempotent—safe to retry.
Rules
- Only works on pending schedules (not yet executed)
- Cannot cancel after
executed_atis set - Cannot cancel schedules that are already canceled
Required attributes
Request
curl https://api.zebo.dev/schedules/cancel \
-H "Authorization: Bearer $SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"schedule_id": "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk"
}'
Response
{
"scheduled_chime": {
"id": "sch_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"recipients": [
"+233544998605",
"+233501234567"
],
"content": "Reminder: Your subscription renews tomorrow. Visit https://example.com/billing to update payment details.",
"sender_id": "YourBrand",
"purpose": "reminder",
"send_after": "2025-12-15T09:00:00Z",
"created_at": "2025-12-10T14:30:00Z",
"canceled_at": "2025-12-14T16:45:00Z",
"chime_ids": [],
"errors": []
}
}
Broadcast Chimes
Send immediate notifications to multiple recipients. Unlike scheduled Chimes, broadcasts execute within seconds of creation. Perfect for urgent announcements, order confirmations, or time-sensitive alerts. Each recipient receives an individual message.
Request body
idempotency_key- Unique key to prevent duplicate broadcasts during retries. Optional but recommended.message_templaterequired - The message content to send to all recipients.purpose- Category or intent (e.g., "order_notification", "marketing"). Helps with tracking and analytics.recipientsrequired - Array of phone numbers (E.164 format) or email addresses. Maximum 4,096 recipients per broadcast.senderrequired - Sender identifier displayed to recipients.
Request
curl https://api.zebo.dev/chimes/broadcast \
-H "Authorization: Bearer $SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipients": [
"+233544998605",
"+233501234567"
],
"message_template": "Your order #12345 has shipped! Track: https://track.shop.com/abc123",
"sender": "ShopName",
"purpose": "order_notification"
}'
Response
{
"broadcast": {
"id": "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"recipients": [
"+233544998605",
"+233501234567"
],
"content": "Your order #12345 has shipped! Track: https://track.shop.com/abc123",
"sender_id": "ShopName",
"purpose": "order_notification",
"send_after": "2025-12-15T09:00:00Z",
"created_at": "2025-12-15T09:00:00Z"
}
}
Lookup a broadcast
Retrieve a broadcast and check its execution status. Returns the broadcast details, IDs of all Chimes created when it executed, and any delivery failures. Use this to track delivery success, debug failed recipients, or verify cancellation status.
Required attributes
Request
curl https://api.zebo.dev/broadcasts/lookup \
-H "Authorization: Bearer $SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"broadcast_id": "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk"
}'
Response
{
"broadcast": {
"id": "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"recipients": [
"+233544998605",
"+233501234567",
"+233509999999"
],
"content": "Your order #12345 has shipped! Track: https://track.shop.com/abc123",
"sender_id": "ShopName",
"purpose": "order_notification",
"send_after": "2025-12-15T09:00:00Z",
"created_at": "2025-12-15T09:00:00Z",
"executed_at": "2025-12-15T09:00:03Z",
"chime_ids": [
"ch_abc123xyz",
"ch_def456uvw"
],
"errors": [
{
"recipient": "+233509999999",
"type": "invalid_phone_number",
"fix_code": "f-change_request_parameters"
}
]
}
}
Cancel a broadcast
Cancel a pending broadcast before it executes. Since broadcasts execute within seconds, cancellation only works if called immediately after creation. Returns an error if the broadcast already executed or was previously canceled. Idempotent—safe to retry.
Rules
- Only works on pending broadcasts (not yet executed)
- Cannot cancel after
executed_atis set - Cannot cancel broadcasts that are already canceled
- Narrow time window (typically <5 seconds)
Required attributes
Request
curl https://api.zebo.dev/broadcasts/cancel \
-H "Authorization: Bearer $SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"broadcast_id": "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk"
}'
Response
{
"broadcast": {
"id": "brc_kPvqTrqGsopu07wfC7ttoWqmfwt48ZW7BGvYUWk",
"recipients": [
"+233544998605",
"+233501234567"
],
"content": "Your order #12345 has shipped! Track: https://track.shop.com/abc123",
"sender_id": "ShopName",
"purpose": "order_notification",
"send_after": "2025-12-15T09:00:00Z",
"created_at": "2025-12-15T09:00:00Z",
"canceled_at": "2025-12-15T09:00:02Z",
"chime_ids": [],
"errors": []
}
}