ハルCMS 開発者ドキュメント
記事の作成・公開・取得をプログラムとAIから。REST API・MCPサーバー・配信APIのリファレンス。
書き込みは REST API と MCP(同じAPIキー・同じ検証を通る)、サイトへの表示は認証不要の配信API。記事を published にすると、配信APIに即座に載ります。
3つの入口
ハルCMSは、株式会社Web春が運営する日本語ファーストのヘッドレスCMSです。ブラウザのエディタに加えて、次の3つのプログラム向け入口を提供します。
| 入口 | URL | 認証 | 用途 |
|---|---|---|---|
| REST API | https://app.harucms.com/api/ext/v1 | APIキー(Bearer) | 記事の作成・更新・公開・画像アップロード |
| MCPサーバー | https://app.harucms.com/mcp | 同じAPIキー | Claude等のAIアシスタントから直接操作 |
| 配信API | https://{サブドメイン}.harucms.app/v1 | 不要(公開) | サイト側から公開記事を取得 |
- Markdownファースト — 本文は
body_md(Markdown)だけ送ればOK。HTML変換はサーバー側で行います。 - 公開は即時 —
status: "published"にした瞬間、配信APIに載ります。Webhook・CI設定は不要です。 - エディタと同一の検証 — API・MCP経由の操作もブラウザのエディタと同じ検証・変更履歴・監査ログを通ります。
- AI最適化 — MCP標準搭載・llms-full.txt 提供・下書き既定などの安全設計込み。
クイックスタート
0. APIキーを発行する
ダッシュボード(app.harucms.com)にログイン → 対象サイトの「APIキー」→ 用途がわかる名前を付けて発行します。キーの値が表示されるのは発行時の一度だけです(サーバーにはハッシュのみ保存)。停止・削除も同じ画面からいつでもできます。
1. 接続を確認する
curl https://app.harucms.com/api/ext/v1/me \
-H "Authorization: Bearer hcms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"const BASE = "https://app.harucms.com/api/ext/v1";
const KEY = process.env.HARUCMS_API_KEY;
const res = await fetch(`${BASE}/me`, {
headers: { Authorization: `Bearer ${KEY}` },
});
console.log(await res.json());import os, requests
BASE = "https://app.harucms.com/api/ext/v1"
KEY = os.environ["HARUCMS_API_KEY"]
r = requests.get(f"{BASE}/me", headers={"Authorization": f"Bearer {KEY}"})
print(r.json())// レスポンス
{
"ok": true,
"data": {
"site_name": "あなたのサイト名",
"api_host": "your-site.harucms.app",
"custom_domain": null,
"collections": ["news"]
}
}
2. 下書きを作る
curl -X POST "$BASE/posts" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "夏季休業のお知らせ",
"body_md": "## 休業期間\n\n8月13日〜16日はお休みをいただきます。",
"category": "お知らせ"
}'
status を省略すると必ず下書き(draft)として作成されます。サイトには載りません。
3. 公開する
curl -X PUT "$BASE/posts/作成された記事のidまたはslug" \
-H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{ "status": "published" }'
https://{サブドメイン}.harucms.app/v1/posts)に即座に載ります。エッジキャッシュ(約5分)が挟まるため、地域によっては反映まで最大5分かかることがあります。認証とAPIキー
REST・MCP共通で、すべてのリクエストに以下のヘッダーが必要です。
| ヘッダー | 値 | 必須 |
|---|---|---|
Authorization | Bearer hcms_...(`hcms_` + 32文字のAPIキー) | はい |
Content-Type | application/json(ボディがある場合) | POST / PUT |
キーの性質
- キーはサイトごとに発行され、そのサイトの記事・メディアだけを操作できます。他のサイト・アカウント設定・課金には一切アクセスできません。
- サーバー側にはキーのハッシュ(SHA-256)のみ保存されます。値が見られるのは発行時の一度だけです。紛失した場合は削除して再発行してください。
- キーの停止・削除は即時反映されます(以後の全リクエストは
401)。 - すべての操作はサイトの監査ログに記録されます(いつ・どのキーが・何をしたか)。
- キーを発行したメンバーをサイトから外すと、そのメンバーが発行したキーも自動で停止されます。
HARUCMS_API_KEY)やシークレットマネージャに保管してください。公開リポジトリへのコミットは厳禁です。漏えいが疑われる場合はダッシュボードで該当キーを停止または削除してください(即時失効します)。コンテンツモデル
コンテンツの単位は「記事(post)」です。記事は「コレクション」に属します(例: news = お知らせ、blog = ブログ)。コレクション名は半角英小文字・数字・-・_(1〜32文字)で、省略時は news。使用中の一覧は GET /me で確認できます。
記事のフィールド
| フィールド | 型 | 説明 |
|---|---|---|
id | string | 記事ID(post_ で始まる。システム発行) |
slug | string | URLになる識別子。サイト内で一意。省略時は自動採番(ランダム値) |
title | string | 記事タイトル(日本語なら25〜30字目安) |
body_md | string | 本文(Markdown)。これが原稿の正。見出しは ## から |
body_html | string | 本文HTML。未指定なら body_md からサーバーが生成(送らないことを推奨) |
excerpt | string | null | 要約(一覧・OGP・検索結果用。80字目安) |
cover_image | string | null | 表紙画像URL(メディアAPIの返すURL) |
category | string | null | カテゴリ名(自由入力。既存一覧と表記を揃える) |
status | string | draft(下書き・既定)/ published(公開)/ scheduled(予約) |
collection | string | 所属コレクション。既定 news |
publish_at | string | null | 予約公開日時(scheduled のとき必須・ISO 8601) |
published_at | string | null | 公開日時(公開時に自動設定・UTC) |
author | string | null | 投稿者表示名(API経由の操作はキーの名前が入る) |
seo | object | null | 記事単位のSEO設定(下記) |
updated_at | string | 最終更新日時(UTC) |
slugのルール: 半角英数字で始まり、英数字と - _ . だけが使えます(120文字以内)。SEOを意識するなら英小文字とハイフンでの明示指定を推奨します。
公開ステータスの遷移
| status | 挙動 |
|---|---|
draft | 下書き。配信APIには一切出ない(既定値。不正な値を送った場合もdraftになる) |
published | 即時公開。配信APIに載る |
scheduled | 予約公開。publish_at の時刻を過ぎると5分以内に自動公開され、公開日時には予約時刻が入る |
公開中の記事を draft に戻すと、配信APIからも取り下げられます。保存のたびに変更履歴が自動で残り、エディタから復元できます。
2026-09-01T10:00:00+09:00・タイムゾーン付き推奨)。レスポンスの日時は YYYY-MM-DD HH:MM:SS(UTC)で返ります。サイト表示ではJSTへの変換を忘れずに。SEO設定(seoフィールド)
作成・更新時に seo オブジェクトを渡すと、記事単位のSEO・構造化データを設定できます。すべて任意です(設定するものだけ入れる)。
| フィールド | 型 | 説明 |
|---|---|---|
meta_title | string | titleタグの上書き(全角32字以内推奨) |
meta_description | string | meta description / og:description(80〜120字推奨) |
noindex | boolean | true で検索エンジンから除外 |
canonical | string | 正規URL(http(s)の絶対URLのみ有効) |
takeaways | string[] | 記事の要点(最大10個・3〜5個推奨。AI検索の要約枠に効く) |
faq | [{q, a}] | FAQペア(最大20個・2〜5個推奨。FAQ構造化データになる) |
jsonld_extra | object[] | 任意のJSON-LDブロック(最大5個。HowTo・Product等) |
検証はサーバー側で行われ、不正な形のフィールドは黙って捨てられます(エラーにはなりません)。更新時に seo を省略すると既存値を維持、null を送るとクリアします。
meta_description・takeaways・faq を本文に基づいて埋めるのが、検索とAI検索(AI Overview等)への露出を上げる最短ルートです。/api/ext/v1/meキーが指すサイトの情報を返します。接続テストと、配信ホスト・コレクションの確認に使います。
curl "$BASE/me" -H "Authorization: Bearer $KEY"
// 200
{ "ok": true, "data": { "site_name": "サイト名", "api_host": "your-site.harucms.app",
"custom_domain": null, "collections": ["news"] } }
/api/ext/v1/posts記事一覧を新しい順に返します(本文は含みません。全文は GET /posts/:id)。下書き・予約も含む管理用の一覧です。
| クエリ | 型 | 説明 | |
|---|---|---|---|
collection | string | 任意 | 既定 news |
status | string | 任意 | draft / published / scheduled で絞り込み(省略で全部) |
limit | number | 任意 | 件数上限(既定50・最大200) |
curl "$BASE/posts?status=published&limit=10" -H "Authorization: Bearer $KEY"
// 200
{ "ok": true, "data": [
{ "id": "post_...", "slug": "summer-menu-2026", "title": "夏の新メニューのご案内",
"excerpt": "...", "cover_image": null, "category": "お知らせ",
"status": "published", "collection": "news",
"publish_at": null, "published_at": "2026-08-07 01:00:00",
"author": "連携ツール名", "updated_at": "2026-08-07 01:00:00" }
] }
/api/ext/v1/posts/:id記事1件の全文(body_md / body_html 含む)を返します。:id には記事IDでもslugでも指定できます。レスポンスの seo_json はJSON文字列です(配信APIでは seo としてパース済みで返ります)。
curl "$BASE/posts/summer-menu-2026" -H "Authorization: Bearer $KEY"
/api/ext/v1/posts記事を作成します。
| ボディ | 型 | 説明 | |
|---|---|---|---|
title | string | 必須 | 記事タイトル(25〜30字目安) |
body_md | string | 必須 | 本文Markdown。見出しは ## から |
category | string | 任意 | カテゴリ名 |
excerpt | string | 任意 | 要約(80字目安) |
cover_image | string | 任意 | 表紙画像URL |
status | string | 任意 | 既定 draft |
publish_at | string | 任意 | scheduled のとき必須(例 2026-09-01T10:00:00+09:00) |
collection | string | 任意 | 既定 news |
slug | string | 任意 | 英数字で始まり - _ . 可(120文字以内)。省略で自動採番 |
seo | object | 任意 | SEO設定 |
body_html | string | 任意 | 通常は送らない(サーバーが生成。送ってもサニタイズされる) |
curl -X POST "$BASE/posts" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{
"title": "新メニューのご案内",
"body_md": "## 夏の新メニュー\n\n7月から新メニューが始まりました。\n\n- 冷やし担々麺\n- すだちそば",
"category": "お知らせ",
"excerpt": "7月からの新メニューを2品ご紹介します"
}'const res = await fetch(`${BASE}/posts`, {
method: "POST",
headers: { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
title: "新メニューのご案内",
body_md: "## 夏の新メニュー\n\n7月から新メニューが始まりました。",
category: "お知らせ",
}),
});
const { data } = await res.json(); // data.id, data.slug, data.status === "draft"r = requests.post(f"{BASE}/posts",
headers={"Authorization": f"Bearer {KEY}"},
json={
"title": "新メニューのご案内",
"body_md": "## 夏の新メニュー\n\n7月から新メニューが始まりました。",
"category": "お知らせ",
})
post = r.json()["data"] # post["status"] == "draft"作成された記事が data で返ります(data.id・data.slug を控える)。409 = slug重複です。
/api/ext/v1/posts/:id記事を部分更新します。渡したフィールドだけが変わります(:id はIDでもslugでも可)。公開・非公開・予約の切り替えもこのエンドポイントです。excerpt / cover_image / category / seo は null でクリア、省略で維持。
# 公開する
curl -X PUT "$BASE/posts/post_abc123" -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" -d '{ "status": "published" }'
# 予約公開に変更(タイムゾーン付きのISO 8601を推奨)
curl -X PUT "$BASE/posts/post_abc123" -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{ "status": "scheduled", "publish_at": "2026-09-01T10:00:00+09:00" }'
# 非公開に戻す(配信APIからも消える)
curl -X PUT "$BASE/posts/post_abc123" -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" -d '{ "status": "draft" }'
/api/ext/v1/posts/:id記事を削除します。公開中の記事は配信APIからも消えます。取り消せません。
curl -X DELETE "$BASE/posts/post_abc123" -H "Authorization: Bearer $KEY"
// 200
{ "ok": true, "data": { "id": "post_abc123" } }
/api/ext/v1/categoriesそのサイトで使われている既存カテゴリの一覧です。表記ゆれ(「お知らせ」と「おしらせ」など)を防ぐため、記事作成前の確認を推奨します。
{ "ok": true, "data": ["イベント", "お知らせ", "キャンペーン"] }
/api/ext/v1/media画像をアップロードし、記事で使えるURLを返します。multipart/form-data の file フィールドで送信します(JPEG / PNG / GIF / WebP / AVIF・10MBまで。形式はファイルの中身で判定します)。プランのストレージ上限を超える場合は 403 が返ります。
curl -X POST "$BASE/media" -H "Authorization: Bearer $KEY" \
-F "file=@./photo.jpg"
// 200
{ "ok": true, "data": { "id": "med_...", "filename": "photo.jpg",
"url": "https://img.harucms.com/..." } }
返ってきた url を cover_image や本文の  に使います。
/api/ext/v1/media-from-url外部URLの画像を取り込みます(httpsのみ・JPEG / PNG / GIF / WebP / AVIF・10MBまで。私的IPアドレスや当社ホストへのURLは取り込めません)。バイナリを扱えない環境(AIエージェント等)向けです。レスポンスは /media と同じ形です。
curl -X POST "$BASE/media-from-url" -H "Authorization: Bearer $KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com/images/photo.jpg" }'
配信API(公開・キー不要)
サイト側(Astro・Next.js等)から公開記事を取得するAPIです。認証不要・CORS全開放なので、ブラウザからもビルド時からも直接fetchできます。公開済み(published)の記事だけが返ります。
| 項目 | 値 |
|---|---|
| ベースURL | https://{サブドメイン}.harucms.app/v1(検証済み独自ドメインも同じパス構成) |
| 認証 | 不要(下書きの確認は認証付きのREST APIで) |
| キャッシュ | エッジキャッシュ約5分。記事の保存・公開時に自動でキャッシュ削除(反映は通常すぐ・最大5分) |
自分のサイトの配信ホストは GET /me の api_host、またはダッシュボードのサイトカードで確認できます。
/v1/posts公開記事の一覧(新しい順・本文なし)。
| クエリ | 型 | 説明 | |
|---|---|---|---|
collection | string | 任意 | 既定 news |
category | string | 任意 | カテゴリ名で絞り込み |
limit | number | 任意 | 既定20・最大100 |
offset | number | 任意 | ページ送り用 |
curl "https://your-site.harucms.app/v1/posts?limit=10"
// 200
{ "posts": [
{ "id": "post_...", "slug": "summer-menu-2026", "title": "夏の新メニューのご案内",
"excerpt": "...", "cover_image": "https://img.harucms.com/...",
"category": "お知らせ", "collection": "news", "author": "山田",
"published_at": "2026-08-07 01:00:00", "updated_at": "2026-08-07 01:00:00" }
],
"total": 12, "has_more": false }
total は全件数が確定したときだけ返ります。ページ送りの判定には has_more を使ってください。
/v1/posts/:slug記事詳細です。body_md / body_html / seo(パース済みオブジェクトまたは null)を含みます。存在しないslugは 404。
curl "https://your-site.harucms.app/v1/posts/summer-menu-2026"
/v1/categories公開記事に使われているカテゴリの一覧です(?collection= で絞り込み可)。
{ "categories": ["お知らせ", "イベント"] }
Astro / Next.js から取得する
Astro(ビルド時取得=静的生成)
---
// src/pages/news/index.astro
const res = await fetch('https://your-site.harucms.app/v1/posts?limit=20');
const { posts } = await res.json();
// 詳細ページは /v1/posts/{slug}(getStaticPathsで全slugを列挙して生成)
---
<ul>
{posts.map((p) => (
<li><a href={`/news/${p.slug}/`}>{p.title}</a></li>
))}
</ul>
Next.js(App Router・ISR)
// app/news/page.tsx
export const revalidate = 300;
export default async function NewsPage() {
const res = await fetch('https://your-site.harucms.app/v1/posts?limit=20', {
next: { revalidate: 300 },
});
const { posts } = await res.json();
return (
<ul>
{posts.map((p: { id: string; slug: string; title: string }) => (
<li key={p.id}><a href={`/news/${p.slug}`}>{p.title}</a></li>
))}
</ul>
);
}
MCPサーバー
MCP(Model Context Protocol)は、AIアシスタントに外部ツールを安全に接続するための標準プロトコルです。ハルCMSはホスト型MCPサーバーを標準搭載しており、npm installもコードも不要で、AIに「記事を書いて下書きにして」と話すだけで動きます。
| 項目 | 値 |
|---|---|
| エンドポイント | https://app.harucms.com/mcp |
| トランスポート | Streamable HTTP(ステートレス・POSTのみ。SSEストリームは無し) |
| 認証 | APIキー(RESTと同じ)を Authorization: Bearer ヘッダーで |
Claude Code(CLI)
claude mcp add --transport http haru-cms https://app.harucms.com/mcp \
--header "Authorization: Bearer hcms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
登録後、Claudeに「サイトにお知らせを1本書いて下書きにして」のように話すだけで動きます。
Claude Desktop
設定 → コネクタ → 「カスタムコネクタを追加」で上記URLを入力し、ヘッダーに Authorization: Bearer hcms_... を設定します。
Cursor / その他のMCPクライアント
// mcp.json(Cursor: .cursor/mcp.json)
{
"mcpServers": {
"haru-cms": {
"url": "https://app.harucms.com/mcp",
"headers": { "Authorization": "Bearer hcms_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
}
}
}
ChatGPT
お使いのChatGPTのコネクタ設定がヘッダー認証(Bearer)に対応していれば、上記URL+Authorization: Bearer hcms_... で登録できます。ヘッダー指定ができないプラン・バージョンでは、REST APIをそのまま使ってください(llms-full.txt を読ませれば連携コードの実装まで自走します)。
MCPツールリファレンス
提供しているツールは以下の8本だけです(これ以外の名前のツールは存在しません)。
| ツール | 説明 | 引数(*は必須) |
|---|---|---|
get_site_info | サイト名・配信ホスト・コレクション一覧(最初に呼んで接続確認) | — |
list_posts | 記事一覧(新しい順) | collection status limit |
get_post | 記事1件の全文 | id*(IDかslug) |
create_post | 記事作成(status省略は下書き) | title* body_md* category excerpt cover_image status publish_at collection slug seo |
update_post | 部分更新・公開/非公開の切替 | id* + title body_md category excerpt cover_image status publish_at collection seo |
delete_post | 記事削除(公開中は配信からも消える・取り消し不可) | id* |
list_categories | 既存カテゴリ一覧(表記ゆれ防止) | — |
upload_image_from_url | httpsの画像を取り込みURLを返す(JPEG / PNG / GIF / WebP / AVIF・10MBまで。形式はファイルの中身で判定します) | url* |
安全設計
- 既定は下書き —
statusを明示しない作成は必ず下書きになります。AIが会話の流れで勝手に公開することはありません。 - スコープはサイト単位 — キーは1サイト分の権限しか持ちません。他サイト・アカウント設定・課金には一切アクセスできません。
- 全操作が監査ログに記録 — いつ・どのキーが・どの記事に何をしたかをダッシュボードで確認できます。
- 即時失効 — キーを停止・削除すればその瞬間からすべての操作が拒否されます。
- HTMLはサニタイズ —
body_htmlを直接送ってもサーバー側でサニタイズされます(XSS対策)。
create_post(下書き)→ 内容確認 → update_post で公開、の2段階を推奨します。エラーとプラン制限
エラーは共通フォーマット { "error": "日本語のメッセージ" } + HTTPステータスで返ります。
| ステータス | 意味 | 対処 |
|---|---|---|
400 | リクエスト不正(必須フィールド不足・不正なslug/日時・画像取得失敗など) | メッセージに従い修正 |
401 | 認証失敗(キーが無効・停止済み・Bearer プレフィックス欠落) | キーの値と形式を確認 |
403 | ストレージ上限超過(POST /media) | 不要なメディアを削除するかプランをアップ |
404 | 記事が見つからない | id / slug を確認 |
409 | slug重複 | 別のslugにするか、slugを省略して自動採番 |
503 | 画像ストレージ未設定 | 運営にお問い合わせ |
5xx | サーバーエラー | 指数バックオフ(1秒→2秒→4秒…)で再試行 |
レート制限とリクエスト枠
- 分単位の固定レート制限は現在ありません(
429は返りません)。ただしバッチ処理は1〜2リクエスト/秒程度に抑えるのが行儀の良い使い方です。 - プランには月間リクエスト枠があります(配信API+REST/MCPの合算。Free 100万〜Business 2億)。枠を超えてもAPIも配信も止まりません。超過分は100円/100万リクエスト(税込)で自動継続します。
- ストレージ上限(プラン別)を超えると新規アップロードだけがブロックされます。既存の記事・画像・配信には影響しません。
- 最新の料金・制限は機械可読のJSONでも取得できます(認証不要):
/api/public/pricing
5xx は指数バックオフでの再試行を推奨します。4xx(400/401/403/404/409)はリクエスト自体の問題なので、再試行しても解決しません。AIエージェント連携
このドキュメントの全文はAIが読み込みやすいプレーンテキストでも提供しています。AIエージェント(Claude Code等)に以下を渡すだけで、連携コードの実装やMCPセットアップから記事作成まで自走できます。
https://app.harucms.com/docs/llms-full.txt を読んで、
ハルCMSとの連携をセットアップしてください。
APIキー: 環境変数 HARUCMS_API_KEY に設定済み
やりたいこと: (例)毎週月曜にブログ下書きを自動生成する
| ファイル | 内容 |
|---|---|
/docs/llms.txt | インデックス(要点と目次) |
/docs/llms-full.txt | 全文(REST・MCP・配信API・エラーのすべて)。AIにはこちらを読ませてください |
例えばこんな依頼がそのまま動きます:
- 「MCPで接続して、今公開中の記事一覧を見せて」
- 「この議事録を要約してお知らせ記事の下書きにして」
- 「予約投稿で来週月曜9時に公開される記事を作って」
- 「この画像URLを取り込んで表紙にした記事を作って」
よくある質問
Webhookはありますか?
あります。管理画面の「サイト設定 → Webhook」で通知先URLを登録すると、記事の公開・更新・非公開・削除の瞬間に POST で通知します(1サイト5件まで・HMAC署名 x-harucms-signature 付き・届かないときは1分→5分→30分→120分で再試行)。ペイロードは記事のメタ(id・slug・title・status・published_at)だけで、本文は配信APIから取り直してください。
いちばん簡単な使い方は、ホスティングのデプロイフックURLをそのまま登録することです。Vercel・Netlify・Cloudflare Pages はいずれも「POSTが来たら再ビルド」するURLを発行しており、追加の設定は要りません。GitHub Actions でデプロイしている場合はフックURLが無いので、署名を検証して repository_dispatch を叩く小さな受け口を1本用意します(webharu.com はこの方式)。
読み取り専用のキーはありますか?
現在のキーは読み書き両方の権限を持ちます。取得だけの用途ならAPIキーは不要です — 公開記事は配信API(キー不要)で取得できます。下書きも読む必要がある場合だけキーを使ってください。
body_htmlを直接送ってもいい?
可能ですが推奨しません。body_md だけ送る方が、エディタとの相互編集・将来のデザイン変更に強くなります。送ったHTMLはサーバー側でサニタイズされます。
予約公開の精度は?
5分間隔のスケジューラが処理するため、指定時刻から最大5分程度の遅延があります。公開日時には予約時刻がそのまま記録されます。
公開したのにサイトに反映されない
配信APIのエッジキャッシュ(約5分)の可能性があります。5分待っても反映されない場合は、取得しているホスト(api_host)とコレクション名を確認してください。Astroの静的生成では再ビルドも必要です。
1つのキーを複数のツールで使い回してもいい?
動作はしますが、ツールごとにキーを分けることを推奨します(監査ログでの区別・漏えい時に該当ツールだけ止められるため)。
記事数の上限は?
全プラン無制限です。プランで変わるのはサイト数・メンバー数・ストレージ・月間リクエスト枠です(料金データ)。
独自ドメインで配信できる?
有料プランで独自ドメインを設定できます。検証完了後は https://あなたのドメイン/v1/posts と、同じパス構成で配信されます。