Enterprise-grade email at a startup pace!

Schedule Demo

NEW: Send dynamic AMP messages without learning to code!

Learn More

Take control with Automation flows

  • Send a conditional follow up message
  • Raise a CRM event
  • Segment customers based on actions
Learn More
Marketing Marketing Marketing

Powerful and friendly Email Marketing

  • Email editor
  • Campaign reporting
  • A/B split testing
  • Assisted IP warming
Learn More

Transactional messages

Use the best editor in the industry to send receipts, password resets and custom notifications.

Your marketing team designs templates, your developers send us triggers, we merge and send!

Learn More
    curl -X POST -H "X-auth-key: 00000000-0000-0000-0000-000000000000"
        -H "Content-type: application/json"
        -d \
            "template_id": 123,
            "reply_to": "john@example.net",
            "from": "John",
            "to": "jane@example.net",
            "subject": "Dinner served"
    import org.javalite.http.Http;
    import static org.javalite.common.Collections.map;
    import static org.javalite.common.Collections.list;
    import static org.javalite.common.JsonHelper.toJsonString;
    import static org.javalite.common.JsonHelper.toMap;

    String content = toJsonString(map("template_id", 123,
        "reply_to", "john@example.net",
        "from", "John",
        "to", "jane@example.net",
        "subject", "Dinner served"
    String response = Http.post("https://api.expresspigeon.com/messages", content)
        .header("X-auth-key", AUTH_KEY)
        .header("Content-type", "application/json")
    Map<String, Object> result = toMap(response);
    $data = array(
      'template_id' => 123,
      'reply_to' => 'john@example.net',
      'from' => 'John',
      'to' => 'jane@example.net',
      'subject' => 'Dinner served'
    $options = array(
      'http' => array(
        'method' => 'POST',
        'content' => json_encode($data),
        'header' => "Content-Type: application/json\r\n" .
                    "X-auth-key: 00000000-0000-0000-0000-000000000000\r\n"
    $context = stream_context_create($options);
    $result = file_get_contents('https://api.expresspigeon.com/messages', false, $context);
    $response = json_decode($result);
    require 'expresspigeon-ruby'

    response = ExpressPigeon::API.messages.send_message template_id,
        'john@example.com', 'jane@example.com', 'Jane Doe',
        "Let's go out for dinner?",
        { first_name: 'John', meetup_place: 'Downtown' }
    from expresspigeon import ExpressPigeon

    api = ExpressPigeon()
    response = api.messages.send_message(template_id=123,
    reply_to="john@example.net", from_name="John", subject="Dinner served")

Our Customers Love Us

See why industry leading companies are choosing ExpressPigeon. Read G2Crowd ExpressPigeon Reviews from our current users.

Johnson & Johnson
Chicago public schools
Context Media Health
Walker Sands Communications
University of Pennsylvania

Get Started Today

Let ExpressPigeon get your email channels off the ground!