セッションと結果 API リファレンス

This page is not available in the language you requested. You have been redirected to the English version of the page.
Link to this page copied to clipboard

セッションリストや完全なアクセシビリティ結果を REST API を使用してプログラムで取得

Not for use with personal data

セッションと結果 API は、Axe Developer Hub のセッションとそのアクセシビリティ結果にプログラムでアクセスするための手段を提供します。プロジェクトのセッションを見つけるにはセッションエンドポイントを使用し、特定のセッションの詳細な結果を取得するには結果エンドポイントを使用します。

どちらのエンドポイントもプロジェクトIDが必要です。Axe Developer Hubで見つけるか、プロジェクト名でプロジェクト APIを使用して検索してください。

認証

すべてのリクエストには API キーが必要です。X-API-Key ヘッダーを使用して提供してください。

X-API-Key: <DEQUE_API_KEY>

Axe アカウントポータルで API キーを見つけてください。Web や CI/CD プロジェクトには Axe Developer Hub API キーを、モバイルプロジェクトには Axe DevTools Mobile API キーを選んでください。

アクセス制御

次のアクセスルールは両方のエンドポイントに適用されます:

  • プロジェクトメンバーは所属するプロジェクトのセッションと結果にアクセスできます。
  • 組織管理者はアクティブな Axe Developer Hub や Axe DevTools Mobile のサブスクリプションを持っていれば、プロジェクトへの所属に関わらず、組織内の全プロジェクトのセッションと結果にアクセスできます。アクセスは API キーのプロダクトに基づいて制限されます: Axe Developer Hub API キーは Axe Developer Hub のデータのみを返し、Axe DevTools Mobile API キーは Axe DevTools Mobile のデータのみを返します。組織管理者は、Axe DevTools Mobile の API キーを使って Axe Developer Hub のデータを取得したり、Axe Developer Hub の API キーを使って Axe DevTools Mobile のデータを取得したりすることはできません。
  • 非メンバー、非管理者ユーザーにはアクセス拒否の応答が返されます。
  • 非アクティブなサブスクリプション401 Unauthorizedを返します。

セッションエンドポイント

指定されたプロジェクトのセッションのページ付けされた、フィルタ可能なリストを返します。

リクエスト

  • エンドポイント: GET https://axe.deque.com/api-pub/v1/results/projects/{project_id}/sessions
  • ヘッダー (必須):
    • X-API-Key: <DEQUE_API_KEY>
    • Accept: application/json

{project_id}を、取得したいセッションのプロジェクト ID に置き換えてください。Axe Developer Hubでプロジェクト ID を見つけてください。

クエリパラメータ

すべてのクエリパラメータはオプションです。

パラメータ 説明
page_size ページごとに返すセッションの数。デフォルト: 30。最大値: 100。最大値を超える数値は100に制限されます。
after 次のページを取得するために、前回の応答からのカーソル値を使用します。カーソルページネーションを参照してください。
created_after このタイムスタンプ以降に作成されたセッションのみを返します (ISO 8601 UTC、半開; 正確な境界は除外)。例: 2025-01-01T00:00:00Z
created_before このタイムスタンプ以前に作成されたセッションのみを返します (ISO 8601 UTC、半開; 正確な境界は除外)。例: 2026-01-01T00:00:00Z
is_canonical_source true時、カノニカルソースとしてマークされたセッションのみを返します。trueまたはfalseでなければなりません。
git_branch 指定された Git ブランチ名に関連付けられたセッションのみを返します。Git なしのセッションは一致しません。
commit_sha 指定された Git コミット SHA に関連付けられたセッションのみを返します。Git なしのセッションは一致しません。
git_url 指定された Git リポジトリ URL に関連付けられたセッションのみを返します。Git なしのセッションは一致しません。
created_by_user_email このメールアドレスのユーザーによって作成されたセッションのみを返します。メールフィルターの制限を参照してください。

レスポンスボディ

成功したレスポンスは、sessions配列を含む JSON オブジェクトを返します。各セッションオブジェクトには以下のフィールドが含まれます。

フィールド 説明
session_id 文字列 セッションの一意の識別子。
name 文字列 人が読める形のセッション名 (設定した場合)。未設定の場合は省略されます; 合成された代替は提供されません。
created_at 文字列 セッションが作成された時刻のISO 8601 UTCタイムスタンプ。
is_canonical_source ブール型 このセッションが標準ソースとしてマークされているかどうか。
git_branch 文字列 セッションに関連付けられたGitブランチ。Gitを使用しないセッションの場合はnull
git_url 文字列 セッションに関連付けられたGitリポジトリのURL。Gitを使用しないセッションの場合はnull
commit_sha 文字列 セッションに関連付けられたGitコミットSHA。Gitを使用しないセッションの場合はnull
created_by_user_name 文字列 セッションを作成したユーザーの表示名。ユーザーのAPIキーが削除された場合は省略されます。
created_by_user_email 文字列 セッションを作成したユーザーのメールアドレス。ユーザーのAPIキーが削除された場合は省略されます。
created_by_user_api_key_name 文字列 セッションの作成に使用されたAPIキーの名前。APIキーが削除された場合は"Unknown Member"を返します。

例のレスポンスボディ

{
  "sessions": [
    {
      "session_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "name": "Main CI run for PR 451",
      "created_at": "2026-06-01T14:23:00.000Z",
      "is_canonical_source": true,
      "git_branch": "feature/new-nav",
      "git_url": "https://github.com/example/webapp",
      "commit_sha": "9eabf5b536662000f79978c4d1b6e4eff5c8d785",
      "created_by_user_name": "Jane Smith",
      "created_by_user_email": "jane.smith@example.com",
      "created_by_user_api_key_name": "CI Pipeline Key"
    },
    {
      "session_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef",
      "created_at": "2026-05-30T09:00:00.000Z",
      "is_canonical_source": false,
      "git_branch": null,
      "git_url": null,
      "commit_sha": null,
      "created_by_user_api_key_name": "Unknown Member"
    }
  ]
}

カーソルページネーション

セッションエンドポイントはカーソルベースのページネーションを使用します。現在のページを超える結果がある場合、x-pagination-cursorレスポンスヘッダーに不透明なカーソル値が返されます。この値を次のリクエストでafterクエリパラメーターとして渡して、次のページを取得してください。

レスポンスにx-pagination-cursorヘッダーがない場合、最後のページに到達しています。

メールフィルターの制限

important

created_by_user_emailフィルターは、サーバー側で作成者のメールが保持されるようになった日付以降に作成されたセッションのみに一致します。その日付以前に作成されたセッションには、保存された作成者のメールがないため、メールでフィルターされた結果には表示されません。新しいセッションが増えるにつれて、フィルターは徐々に完了します。

セッションエンドポイントエラーレスポンス

ステータス 原因
400 Bad Request クエリパラメーターの値が無効です(たとえば、ISO 8601タイムスタンプが不完全である場合や、page_sizeが最大値を超えている場合)。
401 Unauthorized APIキーが無効であるか、欠落しているか、または関連するサブスクリプションが非アクティブです。
403 Forbidden APIキーは指定されたプロジェクトにアクセスする権限がありません。
404 Not Found 指定されたプロジェクトIDは存在しません。

結果エンドポイント

特定のセッションに対するアクセシビリティの結果を返します。結果は非同期で返されます:結果がまだ準備されていない場合、エンドポイントは204 No Contentを返し、結果が準備されるまでポーリングします。

リクエスト

  • エンドポイント: GET https://axe.deque.com/api-pub/v1/results/sessions/{session_id}/results
  • ヘッダー (必須):
    • X-API-Key: <DEQUE_API_KEY>
    • Accept: application/json

セッションエンドポイントから返されたsession_id値を{session_id}に置き換えます。これは有効なUUIDでなければなりません。

クエリパラメータ

パラメータ 必須 説明
format いいえ レスポンス形式。デフォルトの場合はsummaryで、レガシーのダウンロード可能なレポートエンドポイントと同じJSON形式を返します。fullは完全なユニバーサルJSON(共通エクスポート形式)を返します。

セッション状態とポーリングパターン

セッションの結果がまだ処理されていない場合、結果エンドポイントは自動的に処理を開始し、204 No Content(レスポンスボディなし)で応答します。クライアントは200 OKレスポンスを受け取るまで同じエンドポイントをポーリングする必要があります。

ステート HTTPレスポンス 何をするか
done 200 OKと結果ペイロード 結果が準備されています。レスポンスボディを使用します。
processing 204 No Content 結果はまだ生成中です。少し待ってから再試行してください。
error 204 No Content 処理中にエラーが発生しました。リクエストを再試行することができます。

429 Too Many Requestsの処理

負荷が高い期間中、結果エンドポイントは429 Too Many Requestsを返すことがあり、すぐに処理を開始しない場合があります。これはリクエストが失われたことを意味するものではありません。基礎となる作業はキューに残り、再試行しても同じセッションに対する重複処理は行われません。

429レスポンスには、Retry-Afterヘッダーが含まれ、秒単位で示されます。再試行する前に、その時間だけ待つ必要があります—以下の例は通常の204ポーリングケースと並行してこれを処理します。

レスポンスボディ

{
  "error": "Too many requests. Retry after the Retry-After interval."
}

例:結果のポーリング

#!/bin/bash

SESSION_ID="a1b2c3d4-e5f6-7890-abcd-ef1234567890"
URL="https://axe.deque.com/api-pub/v1/results/sessions/$SESSION_ID/results"
MAX_ATTEMPTS=20
DELAY=5
TEMP_FILE=$(mktemp)

for ((i=1; i<=MAX_ATTEMPTS; i++)); do
    echo "Attempt $i..."

    HEADERS_FILE=$(mktemp)
    STATUS=$(curl -s -w '%{http_code}' -L \
      -H "Accept: application/json" \
      -H "X-API-Key: $API_KEY" \
      -D "$HEADERS_FILE" \
      -o "$TEMP_FILE" \
      "$URL?format=full")

    case $STATUS in
        200)
            echo "Results ready!"
            cat "$TEMP_FILE"
            rm "$TEMP_FILE" "$HEADERS_FILE"
            exit 0
            ;;
        204)
            echo "Still processing, waiting ${DELAY}s..."
            sleep $DELAY
            ;;
        429)
            RETRY_AFTER=$(grep -i '^retry-after:' "$HEADERS_FILE" | tr -d '\r' | awk '{print $2}')
            RETRY_AFTER=${RETRY_AFTER:-$DELAY}
            echo "Too many requests, waiting ${RETRY_AFTER}s per Retry-After..."
            sleep "$RETRY_AFTER"
            ;;
        *)
            echo "Error: HTTP $STATUS"
            cat "$TEMP_FILE"
            rm "$TEMP_FILE" "$HEADERS_FILE"
            exit 1
            ;;
    esac
    rm -f "$HEADERS_FILE"
done

echo "Timeout after $MAX_ATTEMPTS attempts"
rm "$TEMP_FILE"
exit 1

レスポンス形式

format=summary(デフォルト)

レガシーのダウンロード可能なレポートエンドポイントと同じJSON形式を返します。ダウンロード可能なレポートエンドポイントに基づいて既存のツールを持ち、その代替品を必要とする場合はこの形式を使用してください。

format=full

ユニバーサルJSON(共通エクスポート形式)で完全な問題レベルの結果を返します。この形式には、セッション中に見つかったすべてのアクセシビリティ問題が含まれ、ページレベルおよびルールレベルの詳細が含まれます。

レスポンスはクライアントのAccept-Encodingヘッダーから交渉されたContent-Encodingと共に提供されます。

結果エンドポイントエラーレスポンス

ステータス 原因
400 Bad Request formatパラメーター値がsummaryまたはfullではない、またはsession_idが有効なUUIDではない。
401 Unauthorized APIキーが無効であるか、欠落しているか、または関連するサブスクリプションが非アクティブです。
403 Forbidden APIキーはこのセッションを所有するプロジェクトにアクセスする権限がありません。
404 Not Found 指定されたセッションIDは存在しません。
429 Too Many Requests システムが過負荷状態です。429 Too Many Requests の処理を参照してください。

一般的なワークフロー

プロジェクトのすべてのセッションを取得し、完全な結果をダウンロードする

この例では、curljqを使用してプロジェクト内のすべてのセッションをページングし、それぞれの完全なユニバーサルJSON結果をダウンロードします。

#!/bin/bash

# Set these environment variables before running:
# API_KEY: your Axe Developer Hub API key
# PROJECT_ID: your project ID

BASE_URL="https://axe.deque.com/api-pub/v1/results"
CURSOR=""

while true; do
    QUERY="page_size=100"
    if [ -n "$CURSOR" ]; then
        QUERY="$QUERY&after=$CURSOR"
    fi

    RESPONSE=$(curl -s -D - -H "Accept: application/json" -H "X-API-Key: $API_KEY" \
      "$BASE_URL/projects/$PROJECT_ID/sessions?$QUERY")

    NEXT_CURSOR=$(echo "$RESPONSE" | grep -i "x-pagination-cursor:" | tr -d '\r' | awk '{print $2}')
    BODY=$(echo "$RESPONSE" | sed -n '/^\r\{0,1\}$/,$p' | tail -n +2)

    SESSION_IDS=$(echo "$BODY" | jq -r '.sessions[].session_id')

    for SESSION_ID in $SESSION_IDS; do
        echo "Fetching results for session $SESSION_ID..."

        while true; do
            STATUS=$(curl -s -w '%{http_code}' -L \
              -H "Accept: application/json" \
              -H "X-API-Key: $API_KEY" \
              -o "${SESSION_ID}.json" \
              "$BASE_URL/sessions/$SESSION_ID/results?format=full")

            if [ "$STATUS" = "200" ]; then
                echo "Saved ${SESSION_ID}.json"
                break
            elif [ "$STATUS" = "204" ]; then
                echo "  Still processing, waiting..."
                sleep 5
            else
                echo "  Error: HTTP $STATUS"
                break
            fi
        done
    done

    if [ -z "$NEXT_CURSOR" ]; then
        break
    fi
    CURSOR="$NEXT_CURSOR"
done