API First CMS

Powerful CMS. Zero headache.

Drop our API-based CMS into any tech stack in minutes.

ButterCMS provides a CMS and content API for any technology stack. Use ButterCMS to enable dynamic content in your apps for page content, blogs, and more.

Above is quick video of integrating Butter's Pages API into an application.

“Best CMS on the market”

Butter's API slides right into our apps and lets us avoid having yet another WordPress site. Daniel, Founder Of Collective Idea

Marketers love Butter

  • SEO Landing Pages
  • Customer Case Studies
  • Company News & Updates
  • Events + Webinar Pages
  • Education Center
  • Location Pages
  • and more...

Butter saves you development time

Save thousands of dollars worth of development time with our easy setup.

Integrating Butter into our application took less than an hour and most of that time was spent on design work. Luke Brean, Legally

Everything you need

  • Custom Page Types
  • Customer Case Studies
  • Custom Content Modeling
  • CDN for assets
  • Testing environment
  • Location Pages
  • Webhooks
Beautiful admin interface

Easy to use. Easy to customize.

Butter works with every tech stack

Ship projects faster using your preferred language/framework.

Butter requires zero maintenance

Never worry about security upgrades, hosting, or performance.

Setup in minutes

Let us know if you're migrating from another CMS, we'll handle it for you.
require 'buttercms-ruby' ButterCMS::api_token = "api_token_BQokik" # Get blog posts, case study pages, and main menu ButterCMS::Post.list() ButterCMS::Page.list('case_studies') ButterCMS::Content.list(['main_menu'])
from butter_cms import ButterCMS client = ButterCMS('api_token_BQokik') # Get blog posts, case study pages, and main menu client.posts.all() client.pages.all('case_studies') client.content_fields.get(['main_menu'])
var butter = require('buttercms')('api_token_BQokik'); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
import Butter from 'buttercms'; const butter = Butter("api_token_BQokik"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
use ButterCMS\ButterCMS; # Get blog posts, case study pages, and main menu $butterCms->fetchPosts(); $butterCms->fetchPages('case_studies'); $butterCms->fetchContentFields(['main_menu'])
import Butter from 'buttercms'; const butter = Butter("api_token_BQokik"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
import Butter from 'buttercms'; const butter = Butter("api_token_BQokik"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
use ButterCMS\ButterCMS; # Get blog posts, case study pages, and main menu $butterCms->fetchPosts(); $butterCms->fetchPages('case_studies'); $butterCms->fetchContentFields(['main_menu'])
using ButterCMS; var client =     new ButterCMSClient("api_token_BQokik"); # Get blog posts, case study pages, and main menu client.ListPosts(); client.ListPages<CaseStudiesPage> ('case_studies') client.RetrieveContentFields<NewsPage>     ('main_menu')
require 'buttercms-ruby' ButterCMS::api_token = "api_token_BQokik" # Get blog posts, case study pages, and main menu ButterCMS::Post.list() ButterCMS::Page.list('case_studies') ButterCMS::Content.list(['main_menu'])
var butter = require('buttercms')('api_token_BQokik'); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
import Butter from 'buttercms'; const butter = Butter("api_token_BQokik"); # Get blog posts, case study pages, and main menu butter.post.list(); butter.page.list('case_studies'); butter.content.retrieve(['main_menu']);
from butter_cms import ButterCMS client = ButterCMS('api_token_BQokik') # Get blog posts, case study pages, and main menu client.posts.all() client.pages.all('case_studies') client.content_fields.get(['main_menu'])
# Get blog posts, case study pages, and main menu curl -X GET 'https://api.buttercms.com/v2/posts/?auth_token=api_token_BQokik' curl -X GET 'https://api.buttercms.com/v2/pages/case_study/?auth_token=api_token_BQokik' curl -X GET 'https://api.buttercms.com/v2/content/main_menu/?auth_token=api_token_BQokik'

About ButterCMS

ButterCMS is an API-based, or "headless", CMS. We're a hosted service and we maintain all of the infrastructure. For more information on how we compare to a traditional CMS check out API-based CMS vs Traditional CMS.

What kind of database can I use?

No database required! We're a SaaS CMS or CaaS. You simply call our Content API from your app. We host and maintain all of the CMS infrastructure.

Do you host my templates?

Unlike CMS's you might be used to, we don't control or host any of your templates. The design of your app (HTML + CSS) lives in your application along side the rest of your app. Your application calls our Content API and we return your content in JSON format. You can then render this content in any way you'd like.

Can I import my content?

Yep. To import existing content from another platform, simply send us an email.

How do you compare to Wordpress?

In short, we offer all the same easy-to-use editing capabilities of Wordpress but are significantly easier for developers to setup and maintain. This means you spend less time working on your CMS and more time focusing on things important to your business.

Can I self host Butter?

No, we're a SaaS CMS or CaaS. You simply call our Content API from your app. We host and maintain all of the CMS infrastructure.

More questions? We're happy to help.
Chat With Us

Try Butter free for 30-days