コンテンツにスキップ

エントリーを取り出す(一覧、1 件、シングル)

Content API で、公開中のエントリーを取り出します。コレクションのコンテンツタイプからは一覧と 1 件を、シングルのコンテンツタイプからはその 1 件を取り出せます。

  • [読み取り]の権限のある API キー。発行のしかたは API キーを作る、権限を決める にあります
  • 取り出すエントリーが[公開中]になっていること。下書きは返りません。下書きを取るときは 下書きを取る(プレビュー) を見てください
  • コンテンツタイプ ID。コンテンツタイプの画面で[エンドポイント]と出ている値です(例:「posts」)

下の例では、次の値を置き換えてください。

  • <ホスト名>:あなたの環境のホスト名。管理画面のアドレス https://<ホスト名>.hakocms.net の部分です
  • <API キー>:hako_ で始まる API キー
取り出すもの URL
コレクションの一覧 /api/v1/content/<コンテンツタイプ ID>
コレクションの 1 件 /api/v1/content/<コンテンツタイプ ID>/<エントリー ID>
シングル /api/v1/content/<コンテンツタイプ ID>

スペースは、API キーから決まります。URL にスペースを入れる必要はありません。

コンテンツタイプ「posts」の公開中のエントリーを、一覧で取り出します。

ターミナルウィンドウ
curl https://<ホスト名>.hakocms.net/api/v1/content/posts \
-H "Authorization: Bearer <API キー>"

次のように返ります。

{
"items": [
{
"sys": {
"id": "hello",
"contentType": "posts",
"createdAt": "2026-10-08T05:00:00.000Z",
"updatedAt": "2026-10-08T06:10:00.000Z",
"publishedAt": "2026-10-08T06:10:00.000Z",
"firstPublishedAt": "2026-10-08T05:00:00.000Z",
"version": 3
},
"title": "こんにちは",
"tags": ["news"]
}
],
"total": 1,
"limit": 20,
"offset": 0
}
項目 中身
items エントリーの配列。既定では、公開した日時の新しい順
total 条件に当てはまるエントリーの数。limit と offset で区切る前の数
limit offset 使った値

1 回に返るのは、既定で 20 件までです。続きを取る、並べ替える、絞り込むときは、絞り込む、並べる、ページに分ける を見てください。

エントリー ID が「hello」のエントリーを取り出します。URL の最後にエントリー ID を付けます。

ターミナルウィンドウ
curl https://<ホスト名>.hakocms.net/api/v1/content/posts/hello \
-H "Authorization: Bearer <API キー>"

エントリーが 1 つ、そのまま返ります。一覧の items の 1 つと同じ形です。

{
"sys": {
"id": "hello",
"contentType": "posts",
"createdAt": "2026-10-08T05:00:00.000Z",
"updatedAt": "2026-10-08T06:10:00.000Z",
"publishedAt": "2026-10-08T06:10:00.000Z",
"firstPublishedAt": "2026-10-08T05:00:00.000Z",
"version": 3
},
"title": "こんにちは",
"tags": ["news"]
}

エントリーがないとき、または公開していないときは 404 が返ります。

シングルのコンテンツタイプ(例:サイトの設定を入れる「site-settings」)は、エントリー ID を付けずに取り出します。

ターミナルウィンドウ
curl https://<ホスト名>.hakocms.net/api/v1/content/site-settings \
-H "Authorization: Bearer <API キー>"

エントリーが 1 つ、そのまま返ります。まだ公開していなければ 404 が返ります。シングルの URL にエントリー ID を付けても 404 になります。

ブラウザでも、サーバーでも、fetch で同じように取り出せます。Content API は、どのオリジンからでも呼べます。

const res = await fetch(
"https://<ホスト名>.hakocms.net/api/v1/content/posts",
{ headers: { Authorization: "Bearer <API キー>" } },
);
if (!res.ok) {
const { error } = await res.json();
throw new Error(`${res.status} ${error.code}: ${error.message}`);
}
const { items, total } = await res.json();
console.log(total, items.map((entry) => entry.title));

ブラウザに渡してよいのは、[読み取り]だけのキーです。ほかの権限を持つキーは、サーバーの中だけで使ってください。

エントリーは、sys のあとに、コンテンツタイプのフィールドがスキーマの順に並びます。

sys の項目 中身
id エントリー ID。シングルにもあります
contentType コンテンツタイプ ID
createdAt 作った日時
updatedAt 最後に保存した日時
publishedAt 今の公開版を公開した日時
firstPublishedAt 最初に公開した日時
version 返した値の版の番号。書き込むときの確かめに使います

日時は、すべて UTC の ISO 8601 で、ミリ秒まで入ります(2026-10-08T06:10:00.000Z)。

フィールドの値は、フィールドの種類で形が決まります。

フィールドの種類 値 値がないとき
テキスト、テキストエリア 文字列。改行は \n キーがない
リッチテキスト JSON(Hako Rich Text v1) キーがない
画像 { "url", "width", "height", "alt" } キーがない
複数画像 画像の配列 []
ファイル { "url", "fileSize" } キーがない
日時 UTC の ISO 8601 キーがない
真偽値 true か false false
セレクト 選んだ値の配列。1 つでも配列 []
数値 数値 キーがない
参照 参照先のエントリー キーがない
複数参照 参照先のエントリーの配列 []
カスタム fieldId(カスタムフィールドの ID)と、中のフィールドを持つオブジェクト キーがない
繰り返し カスタムの値の配列 []

画像の width、height、alt は、ないこともあります。配列になる種類と真偽値は、値がなくてもいつも返ります。そのほかの種類は、値がないとキーごと返りません。

参照の扱いは 参照の先も一緒に取る、画像の大きさや形式を変えて出すしかたは 画像を変換して出す にあります。各種類の詳しい形は フィールドの種類と値の形 にあります。

本文(リッチテキスト)を HTML で受け取る

Section titled “本文(リッチテキスト)を HTML で受け取る”

リッチテキストのフィールドは、既定では JSON で返ります。

"body": {
"type": "doc",
"content": [
{
"type": "paragraph",
"content": [{ "type": "text", "text": "こんにちは。" }]
}
]
}

HTML の文字列で受け取るときは、richText=html を付けます。

ターミナルウィンドウ
curl -G https://<ホスト名>.hakocms.net/api/v1/content/posts/hello \
-H "Authorization: Bearer <API キー>" \
-d richText=html

body が HTML の文字列で返ります。JSON の形は リッチテキストの形(Hako Rich Text v1) にあります。

要るフィールドだけを受け取る

Section titled “要るフィールドだけを受け取る”

select に、返してほしいキーをカンマ区切りで書くと、そのキーだけが返ります。sys の中は、ドットでたどります。一覧と 1 件のどちらにも使えます。

ターミナルウィンドウ
curl -G https://<ホスト名>.hakocms.net/api/v1/content/posts/hello \
-H "Authorization: Bearer <API キー>" \
--data-urlencode "select=sys.id,title"

次のように返ります。

{ "sys": { "id": "hello" }, "title": "こんにちは" }

参照先のフィールドも、author.name のようにドットでたどって選べます。カスタムフィールドの中も同じです。

1 回の応答は 5 MB までです。超えると 400 が返ります。一覧が大きいときは、limit や select で減らしてください。

一覧で total が 1 以上なら、公開中のエントリーを取り出せています。思ったように返らないときは、次の表を見てください。

返ってきたもの 原因 直し方
401 unauthorized API キーがない、違う、または失効している Authorization: Bearer のあとに、hako_ で始まるキーをそのまま入れているか確かめます
403 forbidden キーに、そのコンテンツタイプを読む権限がない [API キー]の画面で、キーの[読み取り]を確かめます。[個別に設定]のコンテンツタイプは、個別の権限だけで決まります
404 not_found コンテンツタイプかエントリーがない、または公開していない URL のコンテンツタイプ ID が[エンドポイント]と同じか、エントリーが[公開中]か確かめます
400 bad_request で unknown parameter 知らないパラメーター、または一覧だけのパラメーターを 1 件に付けた message に、使えるパラメーターが出ます。綴りを確かめます

ほかのエラーは エラーの一覧 にあります。