개발자공개 콘텐츠 API

단순한 REST와 JSON. 열기 전까지는 닫혀 있습니다.

사이트별 공개 API 설정으로 무엇을 누구에게 노출할지 정확히 통제하세요. 게시된 콘텐츠, 사이트맵, 리디렉션을 어디서나 같은 예측 가능한 JSON 형태로 가져옵니다. 배워야 할 GraphQL 스키마도, 동기화를 유지해야 할 생성 클라이언트도 없습니다. 아래 요청은 모두 실제입니다. CMSHub로 만든 블로그를 curl만으로 호출했습니다.

01 / 게시된 콘텐츠 가져오기

GET 요청 한 번으로, 게시된 레코드를 JSON으로

사이트가 활성화하고 컬렉션을 허용 목록에 넣으면, 게시된 레코드는 단순한 GET 한 번이면 됩니다. Host 헤더만으로 해석되며, 공개 데이터에는 API 키가 필요 없습니다.

  • 게시된(PUBLISHED) 레코드만 반환됩니다. 초안과 미게시 리비전은 공개 경로로 절대 새어 나가지 않습니다.
  • 기본 거부: 알 수 없는 호스트, 비활성화된 사이트, 허용 목록에 없는 컬렉션은 모두 똑같이 404를 반환합니다.
  • ?locale=xx는 해당 로케일의 게시 버전을 반환하며, 없으면 워크스페이스 기본값으로 대체합니다.
GEThttps://the-signal.blog/api/posts
curl https://the-signal.blog/api/posts
RESPONSE
{
  "siteId": "the-signal-4f2a",
  "siteName": "The Signal",
  "baseUrl": "https://the-signal.blog",
  "collection": {
    "id": "3b0d6f2a-9c41-4e8a-8f2e-1d4c9a7b6e11",
    "slug": "posts",
    "name": "Posts"
  },
  "data": [
    {
      "id": "a91f2e3c-7d5b-4a10-9c3e-6f8a2b1d0e44",
      "locale": "en",
      "translationOfId": null,
      "data": {
        "title": "Shipping a public content API without a GraphQL schema",
        "slug": "shipping-a-public-content-api",
        "excerpt": "Plain REST beats a bespoke query language when a frontend just needs JSON.",
        "category": "Engineering",
        "author": "Dana Osei",
        "published_at": "2026-09-10"
      }
    },
    {
      "id": "d2c5b8a1-4e3f-4c9d-8b7a-2f1e6d5c4b33",
      "locale": "en",
      "translationOfId": null,
      "data": {
        "title": "What the quality gate actually checks before you publish",
        "slug": "the-quality-gate-explained",
        "excerpt": "Every generated page passes the same checks, whether it's post 1 or post 10,000.",
        "category": "Product",
        "author": "Dana Osei",
        "published_at": "2026-09-04"
      }
    }
  ],
  "meta": {
    "locale": "en",
    "pagination": { "start": 0, "limit": 20, "total": 2, "nextCursor": null }
  }
}
02 / 자동으로 발견

실제로 게시된 내용과 늘 일치하는 사이트맵

sitemap.xml과 robots.txt는 콘텐츠 API가 읽는 것과 같은 페이지 인벤토리에서 생성됩니다. 동기화를 유지할 별도 설정도, 손으로 다시 생성할 것도 없습니다.

  • 요청할 때마다 현재 페이지 인벤토리를 반영합니다. 페이지를 게시하면 사이트맵에 바로 들어갑니다.
  • 번역 버전이 있는 페이지에는 hreflang 대체 링크가 자동으로 추가됩니다.
  • /robots.txt는 사이트별로 크롤러를 이 sitemap으로 안내합니다.
GEThttps://the-signal.blog/sitemap.xml
curl https://the-signal.blog/sitemap.xml
RESPONSE
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
  <url><loc>https://the-signal.blog/posts/shipping-a-public-content-api</loc><lastmod>2026-09-10T14:22:00.000Z</lastmod></url>
  <url><loc>https://the-signal.blog/posts/the-quality-gate-explained</loc><lastmod>2026-09-04T09:15:00.000Z</lastmod></url>
</urlset>
03 / 기본적으로 닫혀 있음

사이트가 무엇을 노출할지는 당신이 정합니다

공개 콘텐츠 API는 사이트가 무엇을 노출할지 명시적으로 설정하기 전까지 닫혀 있습니다. 미게시 콘텐츠나 초안을 조용히 제공하는 기본 개방 엔드포인트는 없습니다.

사이트별 설정

워크스페이스의 각 사이트마다 공개 API를 따로 활성화하고 설정하세요.

게시된 콘텐츠만

공개 API는 품질 게이트를 통과해 실제로 게시된 것만 제공합니다. 초안은 절대 제공하지 않습니다.

버전 관리로 안정적

모든 경로가 버전이 붙은 경로 아래에 있으므로, 오늘 만든 연동은 CMSHub가 발전해도 계속 작동합니다.

실제 엔드포인트를 호출하세요

사이트의 공개 API를 활성화하세요.

사이트 하나에서 공개 콘텐츠 API를 켜고 생성된 페이지를 가져와 보세요.