Huge Campaign Monitor API Update

API Ribbon

Today we launched a sweeping update to our popular API. For those who aren’t familiar with it, our API let’s you access almost all of the functionality within Campaign Monitor from your own applications. Send a campaign, sync your subscribers, add a new client and so much more, all from your own application. It’s what all our integrations and plugins are built on.

Our API is getting pretty darn popular these days with more than 70 requests per second, which grows considerably during our busiest times. Yeah, that number blew me away too.

What’s new…

This update is a complete rethink of our API infrastructure and includes a pile of new functionality that you guys have been asking for. Given the significance of this update, we’ve gone to a completely new version of the API (hello, Version 3). We’ve also redesigned our API documentation, which is now much easier to navigate and includes everything you need to get started.

See the new API documentation

While there are loads of goodies packed into this update, here are a few of the major highlights that stand out.

RESTful all the way

One of the biggest changes in this new version is that the entire API is now RESTful. This means we’ve gone for a resource oriented architecture with descriptive URIs that should be easy to follow. Input and output is now supported in both XML and JSON. If you’re interested, we’ve gone into a lot more detail about this new approach in our new docs.

Segments are here

Previously you had no way of managing segments via the API. Now you can create them, add new rules, get the subscribers that match a segment and so much more. Check out the docs to get started.

Import multiple subscribers in a batch

One of the more frustrating parts of the previous API was that subscribers had to be imported one at a time. Not a problem for a smaller list, but when you’re trying to import a list of 20,000 subscribers, things can get ugly. Now you can easily import a large list of subscribers, including custom field data in a batch. Here are the docs covering this new functionality.

Real-time activity for subscribers and campaigns

This one is awesome. You can now access your entire history with any subscriber in your account. This includes all campaigns they were sent, when they opened it, when the clicked a link and much more. For every event like an open or click, we’ll also return exactly when it happened, along with the IP address it happened from, opening the door to some very cool geo-location possibilites with the API.

The same data is also now available on a per-campaign basis. For example, you can see when all the opens for a particular campaign happened including who opened, the time of the open and the IP address it happened from. The same data is available for clicks and unsubscribes too.

Monthly billing for clients

When we launched monthly billing a couple of months back, we didn’t get a chance to update the API to match. Now you can easily set a client as paying monthly, set their mark-up percentage and even the currency they should be paying in each month. Here are all the details you need to get started.

Better draft handling

While the previous version of the API let you create and send campaigns, there was limited functionality around draft campaigns. You can now easily get a list of all draft campaigns for a client, delete a draft and easily send a preview of a draft to any number of email addresses.

Paged results

This is a huge improvement for anyone working with a large number of results from the API. Any requests that typically return a large set of results now offer paging where you can split the results over multiple pages. You even have complete control over how these results should be returned including page sizes, sort order and sort direction.

Wrappers in Ruby, Python, PHP and .NET ready to roll

We didn’t want to leave you empty handed with the new version of the API, so all popular API wrappers have been updated for the new API. Each wrapper covers all of the new functionality too, so you can get up and going in Ruby, Python, PHP and .NET extremely quickly.

Are you still supporting v2 of the API?

Absolutely. While we strongly encourage anyone working with the API to move towards the latest version, we’ll continue to support version 2 and all of the existing plugins and integrations that rely on it. You can access the Version 2 API docs at their new home here.

Go forth and build

Now that all of this new functionality is out in the wild, we can’t wait to see what you guys come up with. We’ve put a lot of work into making the snazzy new API documentation as clear as possible, but please let us know if you think we’re missing something or if anything is unclear. And as always, make sure you get in touch if you release anything that connects to it.

Posted by David Greiner

19 Comments

  • Jonathon Joyce
    1st December

    Great to hear!

    I suppose i better get a new version of the ColdFusion wrapper created :)

  • Jonathon Joyce
    1st December

    Although you still cant create a draft campaign by passing through a template ID? grrr

  • David Greiner
    1st December

    @Jonathon, an updated ColdFusion wrapper would be brilliant, thanks a lot. Regarding the draft campaigns from a template ID, we’re still listening for further improvements. In fact, the entire point of this massive update was to put a base in place that we can easily build upon without requiring new versions. We’ll definitely take the suggestion on board.

    We already have other improvements underway that we’ll be releasing early next year.

  • Nate Klaiber
    1st December

    Wow, this is an awesome update to an already wonderful API.

    Awesome work to you and your team!

  • Billee D.
    1st December

    Absolutely freekin’ awesome! The multiple subscribers functionality alone is pretty big news, but the REST interface is just fantastic news for me personally. Time to refactor and rethink my own tools built on your API.

    Thanks to you all!

  • Phil
    1st December

    Great to see the API now includes a weblink for sent campaigns. I look forward to digging a little deeper to see what we can now do!

  • julesj
    1st December

    Just finished my tool that uses the v2 version last week, but this is great news nonetheless. Thanks.

  • Chris
    1st December

    I can’t tell which is more awesomer, the new API itself or the doc pages.

  • Bruno Alexandre
    1st December

    I still miss same things ... like:

    Spam numbers;
    Set unsubscribe as “only from this list” and not the default “this list and all others from this client”;

    but general, it is much, much better than v2 :) congrats to the team!

  • Alex Dunae
    1st December

    Nice docs pages.

  • Tom
    1st December

    Yea, the doc pages are very nice. Great job on the new API!

  • Niels Fanøe
    2nd December

    And the Drupal modules for Campaign Monitor will need some work too, now. Just in time for Drupal 7 - great!

  • Jamie Burchell
    2nd December

    Hi

    I’ve noticed that you check for the presence of some PEAR classes. This causes our framework to attempt to autoload the class and subsequently fail with a fatal exception. Even if we adapt our framework to not fail with a fatal exception, we will still have warnings in the log that the PEAR classes could not be included.

    Have you considered adding the “false” parameter to class_exists in your PHP wrapper so that autoloading doesn’t take place?

    Jamie

  • Chris V
    2nd December

    This. Is. Awesome.

    I have a current project that I’ve been having to manage manually because I’m using a single list with segments per processing batch and had no way to A) import the entire batch at once and B) create the necessary segments. With this update, I should be able to finally automate the process.

    THANK YOU!

  • agenteo
    2nd December

    the CampaignMonitor’s GEM (the one they released with API v3) doesn’t work properly for me. I keep getting 101: Invalid ListID when I try to add a subscriber.

    same API and ListID works with https://github.com/patientslikeme/campaign_monitor

    this is a snippet of the call I made:

        CreateSend.api_key(APP_CONFIG['campaign_monitor']['api_key'])
        Subscriber.add(member.email, list_id, member.display_name, nil, nil)
    

    need

  • jd
    2nd December

    I think you’ll find the order of your arguments is wrong when calling the add method. You’re passing in the email address as the list ID and the list ID as the email address.

  • Claudiu
    4th December

    Yep, time to get back to the coding board. Well, it’s been fun with the previous version it should get fun with this one as well.
    By the way, is there any feed we could follow (or email list) to know in real time of any updates to the API (even small updates). It would really help.

  • Arlen Byrd
    4th December

    Do you expect that by within a year you’ll discontinue support of v2, or might it be longer? Just wanting to get a big picture feel for when we may be forced to upgrade. Thanks for the work on this!

  • David Greiner
    4th December

    @Arlen, definitely not. We plan on supporting v2 for years to come as there are many popular plugins and integrations in the wild now that rely on it. Of course, we’re encouraging everyone to move to the new version when they can, if not just for all the new functionality we’ve included and more cool stuff we’ll be releasing soon.

Sign up for free.
Then send campaigns for as little as $9/month

Create an account