API-based email automation with Customer.io

Don't code email. Build Product.

Rest easy. Your RESTful API for automated email, SMS, and push.

Send user activity to Customer.io in real time—directly from your app or Segment—to use in automated transactional and behavioral campaigns. No more CSVs, FTPS, and pesky cron jobs to maintain.

Sending track and identify resources to our API is painless; Just POST to the desired resource for a given customer. For a full list of supported languages and libraries, check out our API documentation.

#update customer
cio.identify(
  id=5, 
  email='customer@example.com', 
  created_at=1361205308, 
  first_name='Bob', 
  plan='basic'
)
#customer event
cio.track(
  customer_id=5, 
  name="purchase", 
  price="23.45", 
  product="socks"
)
        
#update customer
curl -i https://track.customer.io/api/v1/customers/5 \
-X PUT \
-H "Content-Type: application/json" \
-u YOUR-SITE-ID-HERE:YOUR-SECRET-API-KEY-HERE \
-d '{"email":"customer@example.com","created_at":1361205308,"first_name":"Bob","plan":"basic"}'

#customer event
curl -i https://track.customer.io/api/v1/customers/5/events \
-X POST \
-u YOUR-SITE-ID-HERE:YOUR-SECRET-API-KEY-HERE \
-d name=purchase \
-d data[price]=23.45 \
-d data[product]=socks
          
//update customer
_cio.identify({
  id: 5,
  email: 'customer@example.com',
  created_at: 1361205308,
  first_name: "Bob",
  plan: "basic"
});
//customer event
_cio.track("purchase", 
  {
  price: "23.45", 
  product: "socks" 
  }
);
      
#update customer
$customerio.identify(
  id: 5,
  email: "customer@example.com",
  created_at: 1361205308,
  first_name: "Bob",
  plan: "basic"
)
#customer event
$customerio.track(
  5, 
  "purchase", 
  price: "23.45", 
  product: "socks"
)
    
#update customer
cio.Identify("5", map[string]interface{}{
  "email": "customer@example.com",
  "created_at": time.Now().Unix(),
  "first_name": "Bob",
  "plan": "basic",
})
#customer event
cio.Track("5", "purchase", map[string]interface{}{
  "price": "23.45",
  "product": "socks",
})

Already using Sendgrid, Mandrill, or Mailgun for transactional?

By default, Customer.io uses SendGrid for mail delivery, but go ahead and bring your own SMTP (BYOSMTP) to this party. Consolidate all your email campaigns under one roof and get out of the email business and back to building product.

With a simple integration, you can hand the controls to marketing to take advantage of the rich event data streaming from your product into Customer.io to create relevant winback, onboarding, and retention campaigns AND send newsletters to customers.

Skip the SQL and pass the controls to marketing.

Stop running the same SQL queries over and over...


        SELECT * FROM accounts WHERE
        account_state="free" AND suspend_trial_at IS NULL AND account_email IS NOT NULL
        AND (single_email_match=1 OR account_owner=1)
        AND account_created_at < FROM_UNIXTIME(1484028000)
      

Put Customer.io to the test

Sign up for a free, 30-day trial

And let marketing self serve.

Legacy Accounts for Conversion to Trial

This segment contains 23,747 people

Segment for people where all the following match:

account_state is equal to free
AND
suspend_trial_at does not exist
AND
account_email does not exist
AND
At least one of the following match:
single_email_match is equal to 1
OR
account_owner is equal to true
AND
account_created_at is less than 1484028000

Put Customer.io to the test

Sign up for a free, 30-day trial

POST 

https://cdef01456@app.appname.io/api/v1/service/


HEADERS


Name: Content-Type

Value: application/json


{
  "ticket": {
    "subject": "{{customer.company_name}} has cancelled their account",
    "comment": { "body": "{{event.feedback}}" },
    "requester": { 
    "name": "{{customer.contact_firstName}} {{customer.contact_lastName}}", 
    "email": "{{customer.email}}",
    "canceled_at": "{{ event.cancel_timestamp }}",
    "days_as_customer": {% assign days = {{event.cancel_timestamp | minus: customer.created_at }} %}"{{ days | divided_by: 86400 }}"
  }
}

Whenever, whatever with Webhooks

Webhook Actions allow devs and marketing teams alike to send more than email. Point your POST, GET, DELETE, or PUT requests to any open API endpoint to send a rich JSON payload (or text, or XML, or whatever!).

Want to mail a good 'ol postcard or t-shirt? Or submit a help desk ticket when someone visits the cancelation page or exports their data? What about creating tasks for the sales team in their CRM? With webhooks, it's all possible. Trigger Webhook Actions based on behavior, not just user attributes, and send event-specific data along in the payload.

launch Universal Links

Developing for mobile? Send users directly from your email to the app on their phone by setting up universal links.

swap_horizIntegration Guide

An investment in reliable data has great returns. Learn how to get started mapping out your data for use in customer communications.

faceLiquid Templating

Hey {{ customer.first_name }}, personalizing with the Liquid templating language is easy and powerful. Learn more.