ドキュメント / スタンダードプランの機能

APIリファレンス(v1)

自社のシステムやスクリプトから、カルテと処方を読み書きするためのREST APIです。AIツールから使う場合は MCP連携 の方が簡単です。

基本

項目内容
ベースURLhttps://kensakukarte.kotoformlabs.com/api/v1
形式リクエスト・レスポンスともJSON(UTF-8)。本文を送るときは Content-Type: application/json
日付週は月曜日の YYYY-MM-DD。日時は UTC の ISO 8601 か YYYY-MM-DD HH:MM:SS(UTC)
数値クリック・表示回数は整数。順位は小数1桁。CTR は ctr_percent(%)
データの期間カルテの数値は対象週(月〜日)。処方と「あと少しで1ページ目」は直近28日
ブラウザから利用できません(CORSに対応していません)。サーバー側から呼んでください

認証

すべてのリクエストに、設定で発行したAPIキーを付けます。

curl -H "Authorization: Bearer $KENSAKUKARTE_KEY" \
  https://kensakukarte.kotoformlabs.com/api/v1/sites
  • キーは環境変数やシークレット管理に入れ、コードに直接書かないでください。
  • 権限:読み取りのみ はGETだけ。読み取りと対応状況の変更 はPATCH・POSTも使えます。
  • 有効期限が切れたキーは 401 key_expired になります。
  • 使えるIPアドレスを限定できます(キーを発行したあと、設定のキーごとに、IPまたはCIDRを10件まで追加)。限定したキーを他のIPから使うと 403 ip_not_allowed になります。サーバーから呼ぶなら、そのサーバーのIPに限定してください。
  • AIアプリ用の接続(Googleログインで許可したもの)の鍵はMCP専用で、REST APIでは使えません。

エラー

エラーは次の形で返します。message は日本語の説明です。

{
  "error": {
    "code": "not_found",
    "message": "処方が見つかりません。"
  }
}
HTTPcode意味
400bad_requestパラメータや本文の誤り
400cannot_checkページを点検できない(ページを読めない、点検の対象外の処方)
401unauthorizedキーがない・誤り・削除済み
401key_expiredキーの有効期限切れ
403plan_requiredスタンダードプラン以外のアカウント
403insufficient_scope読み取り専用キーで変更しようとした
403forbidden_originブラウザの別サイトからの呼び出し
403ip_not_allowedキーに許可していないIPアドレスからの呼び出し
404not_foundサイト・カルテ・処方がない(他の人のものも、存在しないものとして扱います)
413too_large本文が64KBを超えた
429rate_limited回数制限を超えた
500internalサーバーのエラー

回数制限

  • 1キーあたり1分120回
  • ページの点検し直し(recheck)は、1アカウントあたり10分30回
  • 超えると 429。少し待ってからやり直してください

サイト

GET /sites 権限:読み取り

連携しているサイトの一覧。

リクエスト例

curl -H "Authorization: Bearer $KENSAKUKARTE_KEY" \
  https://kensakukarte.kotoformlabs.com/api/v1/sites

レスポンス例

{
  "sites": [
    {
      "id": 3,
      "property": "https://example.com/",
      "latest_week": "2026-11-02"
    }
  ]
}

カルテ

GET /sites/{id}/karte 権限:読み取り

週次カルテ。週を省くと最新。

パラメータ内容
week任意。対象週の月曜日 YYYY-MM-DD

リクエスト例

curl -H "Authorization: Bearer $KENSAKUKARTE_KEY" \
  "https://kensakukarte.kotoformlabs.com/api/v1/sites/3/karte?week=2026-11-02"

レスポンス例

{
  "site_id": 3,
  "property": "https://example.com/",
  "week": {
    "start": "2026-11-02",
    "note": "月曜はじまりの1週間(Search Consoleで確定済みの直近の週)"
  },
  "totals": {
    "clicks": 812,
    "impressions": 38120,
    "ctr_percent": 2.1,
    "position": 7.4
  },
  "previous_week": {
    "clicks": 725,
    "impressions": 31770,
    "ctr_percent": 2.3,
    "position": 7.6
  },
  "new_prescriptions": [
    "(処方の形。下の「データの形」を参照)"
  ],
  "near_first_page": [
    {
      "keyword": "テント 初心者 おすすめ",
      "page_url": "https://example.com/guide/tent-beginner/",
      "position": 9.4,
      "impressions": 320,
      "clicks": 4,
      "page_check": [
        {
          "ok": false,
          "part": "題名",
          "text": "題名に「初心者」を足す(…)"
        }
      ]
    }
  ],
  "checks": {
    "ssl_expiry": {
      "date": "2027-01-20",
      "daysLeft": 71
    },
    "domain_expiry": {
      "date": "2027-08-03",
      "daysLeft": 266
    },
    "domain": "example.com"
  },
  "generated_at": "2026-11-11T22:00:12.000Z"
}

GET /sites/{id}/kartes 権限:読み取り

過去のカルテの一覧(新しい順)。

リクエスト例

curl -H "Authorization: Bearer $KENSAKUKARTE_KEY" \
  https://kensakukarte.kotoformlabs.com/api/v1/sites/3/kartes

レスポンス例

{
  "kartes": [
    {
      "week_start": "2026-11-02",
      "clicks": 812,
      "impressions": 38120,
      "position": 7.4,
      "prescriptions": 3,
      "mailed_at": "2026-11-11 22:00:30"
    }
  ]
}

処方

GET /sites/{id}/prescriptions 権限:読み取り

処方の一覧。対応中が先、その中は古い順。

パラメータ内容
status任意。active(既定:対応中+未対応)・open・doing・done・dismissed・resolved・all

リクエスト例

curl -H "Authorization: Bearer $KENSAKUKARTE_KEY" \
  "https://kensakukarte.kotoformlabs.com/api/v1/sites/3/prescriptions?status=active"

レスポンス例

{
  "prescriptions": [
    {
      "id": 12,
      "site_id": 3,
      "status": "open",
      "status_label": "未対応",
      "kind": "ctr",
      "kind_label": "あと一歩",
      "page_url": "https://example.com/guide/tent-beginner/",
      "keyword": "テント 初心者 おすすめ",
      "heading": "/guide/tent-beginner/",
      "facts": "順位 9.4 表示 320回 クリック 4(CTR 1.3%)・28日",
      "instruction": "題名に「初心者」を足す(今の題名:テントの選び方…)",
      "metrics": {
        "position": 9.4,
        "impressions": 320,
        "clicks": 4,
        "period": "直近28日"
      },
      "page_check": {
        "fetched": true,
        "page_title": "テントの選び方と人気モデル|Example",
        "checked_at": "2026-11-10T08:53:40.809Z",
        "items": [
          {
            "ok": false,
            "part": "題名",
            "text": "題名に「初心者」を足す(今の題名:テントの選び方と人気モデル|Example)"
          },
          {
            "ok": true,
            "part": "見出し",
            "text": "検索語を含む見出しがある"
          },
          {
            "ok": false,
            "part": "説明文",
            "text": "説明文に「初心者」と答えの要点を入れる"
          }
        ]
      },
      "affected_pages": null,
      "first_week": "2026-11-02",
      "last_seen_week": "2026-11-02",
      "status_changed_at": null,
      "effect_since_done": null
    }
  ]
}

GET /prescriptions/{id} 権限:読み取り

処方1件の詳細。

リクエスト例

curl -H "Authorization: Bearer $KENSAKUKARTE_KEY" \
  https://kensakukarte.kotoformlabs.com/api/v1/prescriptions/12

レスポンス例

{
  "id": 12,
  "site_id": 3,
  "status": "open",
  "status_label": "未対応",
  "kind": "ctr",
  "kind_label": "あと一歩",
  "page_url": "https://example.com/guide/tent-beginner/",
  "keyword": "テント 初心者 おすすめ",
  "heading": "/guide/tent-beginner/",
  "facts": "順位 9.4 表示 320回 クリック 4(CTR 1.3%)・28日",
  "instruction": "題名に「初心者」を足す(今の題名:テントの選び方…)",
  "metrics": {
    "position": 9.4,
    "impressions": 320,
    "clicks": 4,
    "period": "直近28日"
  },
  "page_check": {
    "fetched": true,
    "page_title": "テントの選び方と人気モデル|Example",
    "checked_at": "2026-11-10T08:53:40.809Z",
    "items": [
      {
        "ok": false,
        "part": "題名",
        "text": "題名に「初心者」を足す(今の題名:テントの選び方と人気モデル|Example)"
      },
      {
        "ok": true,
        "part": "見出し",
        "text": "検索語を含む見出しがある"
      },
      {
        "ok": false,
        "part": "説明文",
        "text": "説明文に「初心者」と答えの要点を入れる"
      }
    ]
  },
  "affected_pages": null,
  "first_week": "2026-11-02",
  "last_seen_week": "2026-11-02",
  "status_changed_at": null,
  "effect_since_done": null
}

PATCH /prescriptions/{id} 権限:変更

対応状況を変える。done にすると、その時点の順位とクリックを記録し、翌週以降の effect_since_done に変化が入ります。

パラメータ内容
status必須。open(未対応)・doing(対応中)・done(対応済み)・dismissed(見送り)

リクエスト例

curl -X PATCH -H "Authorization: Bearer $KENSAKUKARTE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status":"done"}' \
  https://kensakukarte.kotoformlabs.com/api/v1/prescriptions/12

レスポンス例

{
  "id": 12,
  "site_id": 3,
  "status": "done",
  "status_label": "対応済み",
  "kind": "ctr",
  "kind_label": "あと一歩",
  "page_url": "https://example.com/guide/tent-beginner/",
  "keyword": "テント 初心者 おすすめ",
  "heading": "/guide/tent-beginner/",
  "facts": "順位 9.4 表示 320回 クリック 4(CTR 1.3%)・28日",
  "instruction": "題名に「初心者」を足す(今の題名:テントの選び方…)",
  "metrics": {
    "position": 9.4,
    "impressions": 320,
    "clicks": 4,
    "period": "直近28日"
  },
  "page_check": {
    "fetched": true,
    "page_title": "テントの選び方と人気モデル|Example",
    "checked_at": "2026-11-10T08:53:40.809Z",
    "items": [
      {
        "ok": false,
        "part": "題名",
        "text": "題名に「初心者」を足す(今の題名:テントの選び方と人気モデル|Example)"
      },
      {
        "ok": true,
        "part": "見出し",
        "text": "検索語を含む見出しがある"
      },
      {
        "ok": false,
        "part": "説明文",
        "text": "説明文に「初心者」と答えの要点を入れる"
      }
    ]
  },
  "affected_pages": null,
  "first_week": "2026-11-02",
  "last_seen_week": "2026-11-02",
  "status_changed_at": "2026-11-12 01:20:00",
  "effect_since_done": null
}

POST /prescriptions/{id}/recheck 権限:変更

公開中のページを読み直し、点検をやり直す。ページとキーワードの組み合わせの処方だけが対象です。

リクエスト例

curl -X POST -H "Authorization: Bearer $KENSAKUKARTE_KEY" \
  https://kensakukarte.kotoformlabs.com/api/v1/prescriptions/12/recheck

レスポンス例

{
  "id": 12,
  "site_id": 3,
  "status": "open",
  "status_label": "未対応",
  "kind": "ctr",
  "kind_label": "あと一歩",
  "page_url": "https://example.com/guide/tent-beginner/",
  "keyword": "テント 初心者 おすすめ",
  "heading": "/guide/tent-beginner/",
  "facts": "順位 9.4 表示 320回 クリック 4(CTR 1.3%)・28日",
  "instruction": "題名に「初心者」を足す(今の題名:テントの選び方…)",
  "metrics": {
    "position": 9.4,
    "impressions": 320,
    "clicks": 4,
    "period": "直近28日"
  },
  "page_check": {
    "fetched": true,
    "page_title": "テントの選び方と人気モデル|Example",
    "checked_at": "2026-11-12T01:19:41.000Z",
    "items": [
      {
        "ok": true,
        "part": "題名",
        "text": "題名に「初心者」を足す(今の題名:テントの選び方と人気モデル|Example)"
      },
      {
        "ok": true,
        "part": "見出し",
        "text": "検索語を含む見出しがある"
      },
      {
        "ok": true,
        "part": "説明文",
        "text": "説明文に「初心者」と答えの要点を入れる"
      }
    ]
  },
  "affected_pages": null,
  "first_week": "2026-11-02",
  "last_seen_week": "2026-11-02",
  "status_changed_at": null,
  "effect_since_done": null
}

POST /sites/{id}/prescriptions 権限:変更

最新カルテの「あと少しで1ページ目」のキーワードを、対応中の処方として記録する。同じページとキーワードの処方がすでにあれば、それを返します。

パラメータ内容
page_url必須。カルテの near_first_page にあるページURL
keyword必須。同じくキーワード

リクエスト例

curl -X POST -H "Authorization: Bearer $KENSAKUKARTE_KEY" \
  -H "Content-Type: application/json" \
  -d '{"page_url":"https://example.com/guide/tent-beginner/","keyword":"テント 初心者 おすすめ"}' \
  https://kensakukarte.kotoformlabs.com/api/v1/sites/3/prescriptions

レスポンス例

{
  "id": 12,
  "site_id": 3,
  "status": "doing",
  "status_label": "対応中",
  "kind": "ctr",
  "kind_label": "あと一歩",
  "page_url": "https://example.com/guide/tent-beginner/",
  "keyword": "テント 初心者 おすすめ",
  "heading": "/guide/tent-beginner/",
  "facts": "順位 9.4 表示 320回 クリック 4(CTR 1.3%)・28日",
  "instruction": "題名に「初心者」を足す(今の題名:テントの選び方…)",
  "metrics": {
    "position": 9.4,
    "impressions": 320,
    "clicks": 4,
    "period": "直近28日"
  },
  "page_check": {
    "fetched": true,
    "page_title": "テントの選び方と人気モデル|Example",
    "checked_at": "2026-11-10T08:53:40.809Z",
    "items": [
      {
        "ok": false,
        "part": "題名",
        "text": "題名に「初心者」を足す(今の題名:テントの選び方と人気モデル|Example)"
      },
      {
        "ok": true,
        "part": "見出し",
        "text": "検索語を含む見出しがある"
      },
      {
        "ok": false,
        "part": "説明文",
        "text": "説明文に「初心者」と答えの要点を入れる"
      }
    ]
  },
  "affected_pages": null,
  "first_week": "2026-11-02",
  "last_seen_week": "2026-11-02",
  "status_changed_at": null,
  "effect_since_done": null
}

データの形(処方)

項目内容
id / site_id処方とサイトのID
statusopen 未対応・doing 対応中・done 対応済み・dismissed 見送り・resolved 自然に解消(2週続けて条件を満たさなくなった)
kindctr あと一歩・zero クリック0・new 伸び始め・deep 新記事の種・drop 急減・cannibal 重複・sitemap サイトマップ・index 未登録
page_url / keyword対象のページと検索キーワード(サイト全体の処方では keyword が null)
heading / facts / instruction見出し、根拠の数値、何をするか(画面とメールと同じ文言)
metrics直近28日の順位・表示・クリック
page_checkページ点検の結果。items[].ok が false の項目が直す点
affected_pages重複・未登録のときの対象ページ
effect_since_done対応済みにした後の変化(翌週以降)

keyword・page_title・page_check の文言には、検索した人や公開ページから来た外部の文字列が含まれます。画面に出すときはHTMLとしてではなく文字として扱い、AIに渡すときは指示として扱わせないでください。

セキュリティ

キーの守り方、権限と有効期限、検索カルテ側の対策は セキュリティと安全な使い方 にまとめています。

お問い合わせ:support@kotoformlabs.com

運営:KotoForm Labs プライバシーポリシー 利用規約 特定商取引法に基づく表記