本文へ移動
SiteKit 無料で始める
目次 公開 API

Docs

公開 API

ログイン不要で使える2つのエンドポイント(公開中の内容の JSON・フォームの受付)の仕様とレスポンス例。

エンドポイント

ふだんは script と中継が呼ぶので、直接使う必要はありません。自前で描画したいとき、サーバーから送りたいときに使います。

メソッドパス中身
GET/v1/sites/<site>/content?locale=<言語>公開中の内容(JSON)
POST/v1/sites/<site>/forms/<form>フォームの受付
GET/sitekit.jsサイトに入れる script

オリジンは https://cdn.sitekit.example です(script の src と同じ)。

管理用の API(サイトの作成・schema の反映・お問い合わせの一覧)は、API キーとあわせて準備中です 近日(CLI・MCP・API キー)。

公開中の内容(content)

curl -s "https://cdn.sitekit.example/v1/sites/hanaya/content?locale=ja"
  • locale を省略すると主言語。schema.json の locales に無い言語は 400 {"ok":false,"error":"bad_request"}
  • 無いサイトは 404 {"ok":false,"error":"not_found"}
  • ログイン不要・読み取り専用で、Access-Control-Allow-Origin: *
  • cache-control: public, max-age=60(公開してから最長1分で反映)
  • 公開中の記事だけが載ります(下書きは載らない)

レスポンスの例

{
  "values": {
    "hours.days": "月〜金",
    "hours.time": "10:00 - 19:00"
  },
  "lists": {
    "news": [
      {
        "id": "a1b2c3d4e5f6g7h8i9j0",
        "title": "秋の新メニュー",
        "date": "2026-10-01",
        "tags": ["秋"],
        "category": "新商品",
        "category_label": "新しい商品",
        "category_color": "red",
        "thumbnail": "https://cdn.sitekit.example/a/hanaya/…",
        "body": [{ "type": "…" }]
      }
    ]
  },
  "tags": { "news": [{ "tag": "秋", "count": 3 }] },
  "tags_meta": { "news": { "秋": { "color": "gold" } } },
  "tracking": { "gtm_id": "GTM-XXXXXXX" }
}
キー中身
valuesgroups の値。キーは <グループ>.<項目>。翻訳が無い・空のときは主言語の値
listscollections の公開中の記事。1つの一覧に新しい順で最大 100 件を取り、schema.json の sort(無ければ管理画面の並び)で並べる
image の項目写真の絶対 URL
select の項目保存値に加えて <項目>_label、色のある選択肢だけ <項目>_color
tagsタグを持つ collection ごとの、使われているタグと件数(多い順)
tags_meta色を決めたタグの色。色の無いタグはキーごと無い
trackingGTM ID(管理画面の設定 > schema.json の順)

記事の url(記事ページへのリンク)と、タグの {tag, url, color} への変換は、この JSON ではなく中継が足します。

フォームの受付(forms)

curl -s -X POST -H 'content-type: application/json' \
  -d '{"name":"山田","email":"yamada@example.com","message":"予約できますか"}' \
  https://cdn.sitekit.example/v1/sites/hanaya/forms/contact

送るもの

  • application/json か application/x-www-form-urlencoded。multipart は受け付けません
  • 本文は 16KB まで
  • 項目は schema.json の forms[].fields の key で。知らないキーは無視します
  • 同じキーが複数あると最後の値が使われます

次の項目は schema.json に書かずに送れます。

項目中身
_hpハニーポット。空でない値があればボットとみなして保存しない
idempotency_key100 文字まで。同じキーの再送は、2件目を作らず元の受付を返す
attribution流入元。{first, last} の形(form-urlencoded では JSON 文字列)。500 文字を超える値は捨てる。形が壊れていても送信は失敗しない
cf-turnstile-responseTurnstile のトークン

成功

状況応答
受け付けた200 {"ok":true,"id":"…","gtm_event":"sitekit_form_submit"}
ハニーポットに掛かった(保存しない)200 {"ok":true,"id":null,"gtm_event":"…"}(ボットに気づかせないため成功と同じ形)
idempotency_key の再送200 {"ok":true,"id":"<元の id>","duplicate":true,"gtm_event":"…"}
form-urlencoded で送り、schema.json に success_url がある303 でその URL へ(サイトの許可オリジンの中だけ)

gtm_event は管理画面で決めた完了イベント名です。

エラー

すべて {"ok":false,"error":"…"} の形です。

状態error意味
400invalid_request入力の誤り。errors に誤りのある項目の key が並ぶ(値は返さない)。JSON として読めない本文もこれ
403turnstile_failedTurnstile のトークンが無い、または確認できない
404not_foundサイトかフォームが無い
413payload_too_large16KB を超えた
429rate_limited同じ接続元から 10 分に 20 件を超えた

ブラウザから別のオリジンで送る場合(CORS)

ブラウザからの送信は、サイトの許可オリジンに送信元のオリジンが入っている必要があります。入っていないと CORS のヘッダが返らず、ブラウザが応答を読めません。Origin の無い送信(curl・サーバー)は許可オリジンに関係なく受け付けます。Cookie は使いません。

予定: 許可オリジンに無い Origin からの送信は、保存せず 403 origin_not_allowed を返すように変わります(他人のサイトからフォームを使われて件数を消費されないように)。上限に達したときは 429 quota_exceeded です(プランと上限)。

このページは Markdown でも読めます。AI エージェントには llms.txt(目次)か llms-full.txt(全文)を渡してください。