Developers
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.
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
| Operation | Path | Description |
|---|---|---|
getApiIndex | /api/v1.json | Endpoint directory. Start here. |
listPosts | /api/v1/posts.json | Every published article, newest first. |
getPost | /api/v1/posts/{slug}.json | A single article by slug. |
listResources | /api/v1/resources.json | Free benchmarks, frameworks, and tools. |
listAuthors | /api/v1/authors.json | Authors and contributors with article counts. |
listTopics | /api/v1/topics.json | The eight editorial topics with article counts. |
Full specification with typed response schemas: /openapi.json
Markdown for agents
Every article is also available as plain markdown — no navigation chrome, 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 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_foundHTTP 404 - No article exists with that slug. Call listPosts and match on the slug field.
-
not_foundHTTP 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.
- 1.A version is announced as deprecated at least 180 days before it is retired.
- 2.During that window every response from the retiring version carries a
Deprecationheader (RFC 9745) and aSunsetheader (RFC 8594) with the exact retirement date. - 3.Those responses also carry
Link: <…>; rel="successor-version"pointing at the replacement endpoint. - 4.The machine-readable state of all of this lives in
x-api-lifecyclein 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 [email protected].