---
title: "Customer.io SMS, delivered by Bird"
canonical: "https://bird.com/integrations/customer-io"
---

[Integrations](/integrations)

# Customer.io SMS, delivered by Bird

Add Bird as an SMS provider in Customer.io. Your Bird phone numbers sync as senders, your campaigns, broadcasts and transactional messages go out through Bird, and delivery status and replies come back over a webhook.

[Set up in Customer.io](https://docs.customer.io/messaging/channels/sms/get-started/#sending-with-bird)

[See the setup](#setup)

## A key, an ID and one webhook

Customer.io connects to one Bird workspace per connection and syncs its SMS-capable phone numbers as senders. Numbers still pending registration in Bird are not ready to send, so they do not sync. Add a connection per workspace if you send from more than one.

**Bird**

Developers → API keys → Create key

- API key: bk_eu1_…
- Workspace ID: ws_…

Both must come from the same workspace.

**Bird**

Webhooks → Create webhook

- URL: From Customer.io
- Events: sms.received, sms.delivered, sms.failed, …
- Signing secret: whsec_…

Also sms.rejected, sms.expired and sms.undelivered.

**Customer.io**

Workspace Settings → SMS → Add a provider → Bird

- API key: bk_eu1_…
- Workspace ID: ws_…
- Webhook signing secret: whsec_…

Saving validates the key and syncs your senders.

## What to expect once connected. Customer.io composes and reports; Bird delivers.

- SMS from your synced numbers. No MMS: a message with an image fails, so leave the image field empty. For an alphanumeric sender, claim it in Bird and add it in Customer.io as a manual sender identity.
- A category on every message. Customer.io transactional messages go out as transactional; automations and broadcasts go out as marketing. Register your sender in Bird for the categories you send where a country requires it.
- Status and replies over the webhook. Delivered maps to delivered; failed, rejected, expired and undelivered map to bounced with Bird's error code; a send refused for an opt-out maps to dropped. A STOP reply, or a Bird or carrier opt-out, marks the person as opted out of that sender.

### Worth building

- Move an existing SMS campaign onto your Bird numbers without rebuilding it.
- Send order updates as transactional messages from a Bird sender.
- Run a broadcast and watch bounces arrive with Bird's error codes.
- Connect an EU and a US Bird workspace as two providers.
- Keep opt-outs in step between Bird and Customer.io.
- Check a delivery in Bird before answering the support ticket.



## Related resources

- [Workflow automation](/automate/workflows) (product)
- [How do I use Bird from a low-code tool like n8n or Zapier?](/explained/platform/how-do-i-use-bird-from-a-low-code-tool-like-n8n-or-zapier) (answer)

[Get an implementation brief](/learn/workspace?topic=integrations)
