認証

すべてのリクエストは Bearer API キーで認証します。 ブラウザからの利用は kanripress.com セッション cookie でも可能です。
Authorization: Bearer kpi_xxxxxxxx_...

単一URL診断

POST /api/jobs
Authorization: Bearer kpi_xxxxxxxx_...
Content-Type: application/json

{ "url": "https://example.com" }

→ 202 { "jobId": "...", "pollUrl": "/api/jobs/..." }

送信から60〜90秒程度で完了します。GET /api/jobs/:jobId でポーリングしてください。

サイトマップ一括診断

preview → 確認 → submit の2ステップ。超過課金が発生する場合は preview のconfirmToken を必ず添付してください。
POST /api/batch-jobs/preview
{ "sitemapUrl": "https://example.com/sitemap.xml" }

→ {
    "urlCount": 1234,
    "quota": { "overageCostJpy": 8800 },
    "confirmToken": "cnf_..."
  }

POST /api/batch-jobs
{ "confirmToken": "cnf_...", "webhookUrl": "https://you/api/hook" }

MCP (Model Context Protocol)

Streamable HTTP transport で POST /mcp に JSON-RPC 2.0 を送信。 セッションは Mcp-Session-Id ヘッダーで保持されます。
POST /mcp
Authorization: Bearer kpi_...
Content-Type: application/json

{
  "jsonrpc": "2.0", "id": 1, "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "clientInfo": { "name": "agent", "version": "1.0" }
  }
}

POST /mcp
Mcp-Session-Id: <returned id>

{
  "jsonrpc": "2.0", "id": 2, "method": "tools/call",
  "params": {
    "name": "diagnose_url",
    "arguments": { "url": "https://example.com" }
  }
}

Webhook 署名検証

完了通知は X-Kanripress-Signature: sha256=<hex> で署名されます。

ペイロード <timestamp>.<body> を Webhook 共有鍵で HMAC-SHA256 して比較してください。タイムスタンプはX-Kanripress-Timestamp ヘッダーに UNIX 秒で含まれます。