REST API + MCPサーバー

SEOレポートAPI
開発者とAIエージェント

REST でレポートを作成し、完了までポーリングし、ウェブサイトでチームが閲覧するのと同じ保存済みレポートを読み取ります。同じ API キー(有料プラン)で MCP 対応エージェントを接続します。

アクセスモデル

有料プラン + API キー

APIアクセスはアカウントにリンクされ、キーで制御されます。プランを選択し、アカウントでAPIキーを作成すると、APIを通じて実行するすべての新しいサイトは、ウェブサイトと同様にプランのクレジットを使用します。クレジットは各月の1日(UTC)にリセットされ、繰り越しされません。

1つのレポートオブジェクト

ウェブサイトのセッション、API コール、およびエージェントセッションは、同じ保存されたレポート状態から読み取られます。

シンプルなフロー

レポートを作成し、ステータスをポーリングし、同じオブジェクトから完全な結果を読み取ります。

利用可能なエンドポイント

POST/api/v1/reports/preview

有料プランでパートナー統合用のスコアプレビューを作成します。

POST/api/v1/reports

新しいレポートを作成するか、既に存在するレポートを再利用します。代わりにサイトを再スキャンするには "forceRerun": true を追加します。

GET/api/v1/reports/:id

最新のレポートステータスとセクションを取得します.

GET/api/v1/reports/:id/result

完全レポート結果を読み取ります。

GET/api/v1/reports/:id/download?format=json

レポートペイロードをJSONとしてエクスポートし、プログラム的統合に使用します。

Quickstart: curl で SEO レポートを取得

3 つのリクエストで全フローをカバーし、有料プランの API キーを使用します。最初はレポートを作成し、2 番目はステータスが queued または running でなくなるまでポーリングし、3 番目はエクスポートします。新しいサイトは 1 クレジットを使用します。既にレポートがあるサイトを再度実行してもクレジットは使用されません。

レポートの作成、ポーリング、エクスポートBash
export SEOREPORT_API_KEY="sr__live_your_api_key"
# Send the key as a header file so it never sits in curl's argv, where ps shows
# it to every local user. printf is a shell builtin, so it spawns no process.
auth() { printf 'Authorization: Bearer %s\n' "$SEOREPORT_API_KEY"; }

# 1. Create a report and keep its job ID
JOB_ID=$(curl -s -X POST https://seoreport.dev/api/v1/reports \
  -H @<(auth) \
  -H "Content-Type: application/json" \
  -d '{"url": "example.com"}' | jq -r '.report.jobId')

# 2. Poll until the report is no longer queued or running
while :; do
  STATUS=$(curl -s "https://seoreport.dev/api/v1/reports/$JOB_ID" \
    -H @<(auth) | jq -r '.report.status')
  case "$STATUS" in queued|running) sleep 3 ;; *) break ;; esac
done
echo "status: $STATUS"

# 3. Export the finished report (format=pdf, md and txt also work)
curl -s "https://seoreport.dev/api/v1/reports/$JOB_ID/download?format=json" \
  -H @<(auth) -o report.json

SEOレポートAPIが返す内容

完了したレポートは、1つのJSONドキュメントとしてエクスポートされます。総合スコアとその評価帯、領域ごとのスコア、分析したページ数、重大度別の未解決の問題、そして修正すべき順に並んだすべての指摘事項です。各指摘事項には、重要な理由、修正方法、修正の確認方法、根拠となるエビデンスと該当ページが含まれます。Markdown、テキスト、PDFも同じ診断から生成されます。

GET /api/v1/reports/:id/download?format=json(抜粋)JSON
{
  "exportVersion": 1,
  "jobId": "3f6c2a1e-8d4b-4c7a-9e21-5b0d7f4a6c18",
  "targetUrl": "https://example.com",
  "status": "completed",
  "isSnapshotReady": true,
  "auditedAt": "2026-10-14T09:12:41.000Z",
  "locale": "en",
  "score": { "overall": 72, "band": "stable" },
  "areas": [
    { "id": "access_crawl", "name": "Crawl & Index", "score": 61 },
    { "id": "metadata_onpage", "name": "On-Page SEO", "score": 78 },
    { "id": "security", "name": "Security", "score": 84 }
  ],
  "pagesAnalyzed": 24,
  "openIssues": { "critical": 0, "high": 2, "medium": 5, "low": 3, "total": 10 },
  "findings": [
    {
      "rank": 1,
      "title": "Render parity mismatch",
      "status": "fail",
      "severity": "high",
      "area": { "id": "access_crawl", "name": "Crawl & Index" },
      "whyItMatters": "Raw HTML and rendered DOM should tell the same SEO story so crawlers and AI systems do not see conflicting versions of the page.",
      "fix": "Ensure raw HTML and rendered DOM contain the same critical SEO elements (title, H1, canonical, meta description, structured data). If content is injected by JavaScript, move it to server-side rendering so crawlers see it immediately.",
      "verification": [
        "Recheck these recorded examples: https://example.com/pricing. Method: compare the raw HTML with the rendered DOM. Previously observed: H1 present only after rendering",
        "Expected after the change: the same critical elements in both. Obtain a fresh capture and compare the same check and URLs; a changed sample alone does not verify a fix."
      ],
      "evidence": ["Raw HTML and rendered DOM were compared for critical elements."],
      "pages": ["https://example.com/pricing"]
    }
  ]
}

エラーと制限

以下の拒否には必ずコードが付きます。これらを処理すれば、スクリプトがむやみに再試行することはありません。

402PAYMENT_REQUIREDリクエストに有料プランがありません。キーがない、無効、または取り消されているか、アカウントに有効なプランがありません。キーがない場合は 401 ではなく 402 が返ります。
402REPORT_CREDITS_EXHAUSTED今月の新規サイト用クレジットを使い切りました。すでにレポートのあるサイトの再実行は引き続き可能で、クレジットは毎月 1 日(UTC)にリセットされます。
429FRESH_RUN_LIMIT1 つのアカウントで 1 時間に 30 回を超える新規実行(forceRerun)がありました。Retry-After ヘッダーの時間だけ待ってください。
200status: failed | dead_letteredレポートを完了できませんでした。原因が記録されている場合、GET /api/v1/reports/:id は error.code、error.message、error.retryable を返します。retryable が true のときだけ再試行してください。
200pollAfterMs次にステータスを確認するまで待つ時間です。レポートが完了すると 0 になります。

SEO モニタリング API

監視対象に登録されたドメインは毎週再監査されます。何かが変わると、アラートアドレスにメールが届きます:新しいクリティカルまたはハイシビリティの発見、クリティカル発見の解決、または別のスコアバンドへの移動です。変更がない週は何も送信されません。

PUT/api/v1/monitors

ドメインの週次監視を開始します;"enabled": false で一時停止します。

GET/api/v1/monitors

このアカウントが監視しているドメインを一覧表示します。

DELETE/api/v1/monitors?url=

ドメインの監視を停止し、保存された結果を削除します。

ドメインを監視Bash
# Uses the auth() helper from the quickstart above.
# Re-audit a domain every week and email [email protected] when it changes
curl -X PUT https://seoreport.dev/api/v1/monitors \
  -H @<(auth) \
  -H "Content-Type: application/json" \
  -d '{"url": "example.com", "alertEmail": "[email protected]"}'

# List monitored domains
curl https://seoreport.dev/api/v1/monitors \
  -H @<(auth)

# Stop monitoring (pass the host the list returns)
curl -X DELETE "https://seoreport.dev/api/v1/monitors?url=example.com" \
  -H @<(auth)

監視は有料プランに含まれ、レポートクレジットを消費しません。

公式 TypeScript クライアント

REST API 用の型付きクライアント。プランの API キーで認証し、TypeScript からレポートを作成、ポーリング、エクスポートします。

コマンドライン

API キーでターミナルからレポートを実行します。グローバルインストール 1 回で完了。

Bash
npm install -g @seoreport/client

MCPサーバー — 同じAPI、同じキー

MCP対応のクライアントを https://seoreport.dev/mcp に向け、RESTと同じBearer APIキーで認証します。接続時にレポート用ツールとアカウント用ツールが自動的に提示されるため、追加のコードなしでエージェントが監査を実行し、結果を読み取れます。

MCPクライアント設定JSON
{
  "mcpServers": {
    "seoreport": {
      "url": "https://seoreport.dev/mcp",
      "headers": {
        "Authorization": "Bearer sr__live_your_api_key"
      }
    }
  }
}
seoreport_create_report

URLのレポートを開始し、ジョブIDを取得します。

seoreport_get_report_status

レポートが完成するまでジョブをポーリングします。

seoreport_get_report

完成したレポートのスコアと指摘事項を読み取ります。

seoreport_list_reports

アカウントのレポート一覧を取得します。

seoreport_get_report_download

JSON・Markdown・テキスト・PDFのダウンロードURLを取得します。

seoreport_get_account

アカウントのプラン、残りクレジット、更新日を確認します。

チェックアウトは直接請求せず、ブラウザで開くリンクを返します。エージェントは開始できますが、支払えるのは人だけです。プランの解約、APIキーの管理、アカウントの削除はダッシュボードで行います。

準備ができました?

プランを選択し、API キーを作成し、SEO レポートを製品に統合し始めます。