Customer.io Send Messages API

Use these endpoints to send broadcasts or transactional messages to your audience. They use the same authentication method, but review the limits for both types of workflows to make sure you'll successfully trigger your messages. You can't trigger campaigns through our APIs. ## API triggered broadcast limits While [API triggered broadcasts](#operation/triggerBroadcast) are limited to 1 request every 10 seconds, they're also limited by the number of triggers you can have queued at a time, as shown in the table below. | Data Type | Limit | Description | | -- | -- | -- | | Trigger Payload | 25MB | Max length of the entire Trigger call, larger calls are typically to support `per_user_data` | | Trigger Data | 50000 bytes | Max length of the data section in the Trigger call | | Recipient List1 | 10000 recipients | Max number of ids or emails included in the Trigger call | | Custom Per User Data1 | 10000 entries | Max number of entries in `per_user_data` | | Custom Per User Data1 | 2MB | Max length per user in the file referenced by `data_file_url`. | | Custom Per User Data1 | 10GB | Max length of the entire size of the file referenced by `data_file_url` | | Trigger Queue | 5 triggers | Max number of triggers waiting to be processed consecutively | 1For larger data sets, use `data_file_url` to supply a link to a file that contains your merge data. Attempting to send too much data in a single API call will fail. ## Transactional Message Limits The `/send-*` endpoints are limited to 100 requests per second. | Data Type | Limit | Description | | -- | -- | -- | | Payload | 1MB | Max length of the payload, excepting attachments | | Attachments (email) | 2MB | Maximum size of attachments | | Recipients | 15 | Total number of recipients across the `to`, `cc`, and `bcc` fields. |

Operations 8

Each operation below carries the questions people ask an LLM about it and the instructions they give an agent to run it. Generated by API Evangelist overlay

POST /v1/campaigns/{broadcast_id}/triggers Trigger an API-triggered broadcast · Send an API-triggered broadcast #
Ask an LLM
“How do I kick off an API-triggered broadcast with custom data?”
“Can I pass liquid data into a broadcast when I trigger it?”
Tell an agent
Trigger broadcast {broadcast_id}.
Send broadcast {broadcast_id} now with this trigger data.
POST /v1/newsletters/{newsletter_id}/send Send a draft newsletter now · Send a newsletter #
Ask an LLM
“How do I send a draft newsletter immediately?”
“Can I rate-limit how fast a newsletter goes out?”
Tell an agent
Send newsletter {newsletter_id} now.
Send newsletter {newsletter_id} at {rate_limit_email_rate} emails per {rate_limit_time_period}.
POST /v1/newsletters/{newsletter_id}/schedule Schedule a draft newsletter · Schedule a newsletter #
Ask an LLM
“How do I schedule a newsletter to go out at a specific time?”
“Can a scheduled newsletter send in each recipient's own timezone?”
Tell an agent
Schedule newsletter {newsletter_id} for {scheduled_at}.
Schedule newsletter {newsletter_id} at {scheduled_at} in timezone {timezone}.
POST /v1/send/email Send a transactional email · Send a transactional email #
Ask an LLM
“How do I send a password reset email to one person?”
“Can I attach files or CC someone on a transactional email?”
Tell an agent
Send transactional email {transactional_message_id} to {to}.
Email {to} with subject {subject} and body {body}.
POST /v1/send/in_app Send a transactional in-app message · Send a transactional in-app message #
Ask an LLM
“How do I show a one-off in-app message to a specific user?”
“Can I personalize a transactional in-app message with data?”
Tell an agent
Send in-app message {transactional_message_id} to {identifiers}.
Show in-app message {transactional_message_id} to {identifiers} with data {message_data}.
POST /v1/send/inbox_message Send a transactional inbox message · Send a transactional inbox message #
Ask an LLM
“How do I deliver a notification to a user's in-app inbox?”
“Can I send a raw JSON payload to a person's notification inbox?”
Tell an agent
Send inbox message {transactional_message_id} to {identifiers}.
Drop inbox notification {transactional_message_id} for {identifiers} with data {message_data}.
POST /v1/send/push Send a transactional push notification · Send a transactional push #
Ask an LLM
“How do I send a one-off push notification to a person's devices?”
“Can I override the title and image of a transactional push?”
Tell an agent
Send push {transactional_message_id} to {identifiers}.
Push {transactional_message_id} with title {title} and message {message}.
POST /v1/send/sms Send a transactional SMS · Send a transactional SMS #
Ask an LLM
“How do I text a verification code to a phone number?”
“Can I choose which number a transactional SMS is sent from?”
Tell an agent
Send SMS {transactional_message_id} to {to}.
Text {to} using SMS template {transactional_message_id} from {from}.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/customer-io:customer-io-send-messages-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

customer-io-send-messages-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 1.0.0
  title: Customer.io App Send Messages API
  description: Our App API provides ways to trigger messages and retrieve information about people, campaigns, broadcasts, and more.
servers:
- url: https://api.customer.io
  description: The base URL for broadcasts, transactional messages, and data-retrieval APIs. These endpoints use bearer authorization, and require a [token that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
- url: https://api-eu.customer.io
  description: The base URL for broadcasts, transactional messages, and data-retrieval APIs (EU region). These endpoints use bearer authorization, and require a [token that you generate in the UI](https://fly.customer.io/settings/api_credentials?keyType=app).
tags:


# --- truncated at 32 KB (239 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/customer-io/refs/heads/main/openapi/customer-io-send-messages-api-openapi.yml