---
title: "Developers | Behind the CMO"
description: "Public, unauthenticated Content API for Behind the CMO. OpenAPI 3.1 spec, JSON endpoints for articles, resources, authors, and topics, plus markdown renderings for AI agents."
canonical: https://www.behindthecmo.com/developers/
url: https://www.behindthecmo.com/developers/
lastmod: 2026-10-15
publisher: Behind the CMO
license: "Article text (c) Behind the CMO; metadata free to use with attribution"
---

> Public, unauthenticated Content API for Behind the CMO. OpenAPI 3.1 spec, JSON endpoints for articles, resources, authors, and topics, plus markdown renderings for AI agents.

# Behind the CMO Content API

 

A public, read-only JSON API over our archive. No API key, no OAuth, no rate-limit tier. Built so AI agents and applications can query what we publish without scraping it.

 

v1 stable · GET only, JSON · [openapi.json](https://www.behindthecmo.com/openapi.json)

 
 

`$ curl https://www.behindthecmo.com/api/v1.json` On this page - Quick start - Endpoints - Markdown for agents - Errors - Free tier and sandbox - Versioning and deprecation - Discovery files - Terms ## Quick start Every endpoint is a GET returning JSON. Authentication is not required and not supported.

 

`$ curl https://www.behindthecmo.com/api/v1/posts.json` ### Response envelope Successful responses share one shape. `generatedAt` is the freshness bound: the API is statically generated and refreshes on each deploy.

 

`{ "apiVersion": "1.0.0", "generatedAt": "2026-08-24T03:00:00.000Z", "total": 138, "data": [ ... ] }` ## Endpoints - GET /api/v1.json getApiIndex Endpoint directory. Start here. - GET /api/v1/posts.json listPosts Every published article, newest first. - GET /api/v1/posts/{slug}.json getPost A single article by slug. - GET /api/v1/resources.json listResources Free benchmarks, frameworks, and tools. - GET /api/v1/authors.json listAuthors Authors and contributors with article counts. - GET /api/v1/topics.json listTopics The eight editorial topics with article counts. Full specification with typed response schemas: [/openapi.json](https://www.behindthecmo.com/openapi.json)

 
 

## Markdown for agents

 

Every article is also available as plain markdown, with no navigation chrome and no layout HTML. Append `.md` to any article URL, or send an `Accept: text/markdown` header.

 

`$ curl https://www.behindthecmo.com/p/the-revops-land-grab.md $ curl -H "Accept: text/markdown" \ https://www.behindthecmo.com/p/the-revops-land-grab/` ## Errors Failures return [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457) problem details as `application/problem+json`, never an HTML error page.

 

`{ "type": "https://www.behindthecmo.com/developers/#error-post_not_found", "title": "Article not found", "status": 404, "code": "post_not_found", "detail": "No article exists with slug 'nope'.", "resolution": "Call listPosts and match on the slug field." }` `post_not_found`HTTP 404 No article exists with that slug. **Call listPosts and match on the slug field.** `not_found`HTTP 404 Unknown API path. **Call getApiIndex for the current endpoint list.** ## Free tier and sandbox The API is entirely free. There is no signup, no API key, no OAuth flow, and no quota to negotiate: every endpoint is open to anonymous GET requests. Because the API is read-only, production doubles as the sandbox. You can safely call any endpoint while developing without side effects.

 

Responses carry `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset`, and `RateLimit-Policy` headers so you can self-throttle. A throttled request would return `429` with `Retry-After`.

 
 

## Versioning and deprecation policy

 

The API is versioned in the URL path, currently `/api/v1/`. Additive changes (new fields, new endpoints) ship in place without a version bump. Breaking changes ship under a new path segment, `/api/v2/`, leaving v1 in place.

 - A version is announced as deprecated at least 180 days before it is retired.
 - During that window every response from the retiring version carries a Deprecation header (RFC 9745) and a Sunset header (RFC 8594) with the exact retirement date.
 - Those responses also carry Link: <…>; rel="successor-version" pointing at the replacement endpoint.
 - The machine-readable state of all of this lives in x-api-lifecycle in the OpenAPI spec.
 

**Current status:** v1 is stable. Nothing is deprecated and no sunset date is set.

 
 

## Discovery files

 - /llms.txtMarkdown content index with when-to-use guidance
- /openapi.jsonOpenAPI 3.1 specification
- /.well-known/ai-catalog.jsonAgentic Resource Discovery catalog
- /.well-known/agent-card.jsonA2A agent card
- /.well-known/api-catalogRFC 9727 API catalog linkset
- /pricing.mdMachine-readable pricing
- /agent-instructions.mdWhen and how agents should use this site
- /.well-known/agent-skills/index.jsonAgent Skills capability index
- /rss.xmlRSS feed
 
 

## Terms

 

Metadata returned by this API is free to use, including commercially, with attribution to Behind the CMO and a link to the canonical article URL. Article text remains © Behind the CMO. Please cite the `url` field rather than reproducing full articles.

 

Questions or a use case we should know about? Email [hi@behindthecmo.com](mailto:hi@behindthecmo.com).

---

Source: https://www.behindthecmo.com/developers/
© Behind the CMO.
