プロジェクト 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を使用して、Axe Developer Hubプロジェクトの作成、取得、更新、削除、メンバーシップの管理をプログラムで行う

Not for use with personal data

Projects APIを使用すると、Axe Developer Hubプロジェクトとそのメンバーシップをプログラムで管理できます。Axe Developer Hubの他のREST APIで使用するのと同じAxeアカウントAPIキーを利用します。プロジェクト管理には別の認証情報は必要ありません。ステップバイステップの説明はプロジェクト管理の自動化を始めようを参照してください。

プロジェクトの ID をその名前から見つけて セッションと結果 API を呼び出したい場合は、以下の プロジェクト一覧 を参照してください。すでにプロジェクト ID を知っている場合は、Axe Developer Hub で見つけて、Sessions と Results API を直接呼び出すことができます。

認証

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

X-API-Key: <DEQUE_API_KEY>

APIキーはAxe アカウントポータルで確認できます。WebまたはCI/CDプロジェクトにはAxe Developer Hub APIキーを選びます。モバイルプロジェクトにはAxe DevTools Mobile APIキーを選びます。

APIキーは秘密として扱ってください: リクエストにハードコーディングするのではなく、環境変数やCI/CDプラットフォームのシークレットストアに保存してください。

アクセス制御と権限

  • プロジェクトの作成には、そのプロジェクトタイプのアクティブなサブスクリプション(ライセンス)が必要です。プロジェクトを作成した人は自動的にそのプロジェクトの管理者になります。
  • プロジェクトの役割には、管理者とメンバーがあります。プロジェクト管理者はプロジェクトを更新または削除したり、そのメンバーシップを管理したりできます。プロジェクトメンバーはプロジェクトへのアクセスはできますが、管理やメンバーシップの管理はできません。
  • 組織管理者は、組織のライセンスがあるすべてのプロジェクトを、自己のプロジェクトメンバーシップに関係なく表示および管理できます。既存プロジェクトの閲覧、更新、削除、またはメンバーの管理には個人ライセンスは必要ありません。プロジェクト作成は唯一の例外です: 呼び出し者が組織管理者であるかどうかに関係なく、常にアクティブなライセンスが必要です。
  • プロジェクトにメンバーを追加するには、そのメンバーがライセンスを持っている必要はありません。APIはそのメンバーを即座にプロジェクトメンバーとして記録しますが、ライセンスを保有するまでプロジェクトにアクセスすることはできません。対象ユーザーは既に組織に所属している必要があります。組織メンバーでない人を追加することはできません。
  • プロジェクトを削除すると最終的なものです。 削除されたプロジェクトのセルフサービスによる復元はありません。
  • すべての場合において、応答はAPIキーのプロダクトにスコープされます。Axe Developer Hub APIキーはAxe Developer Hub(Web)プロジェクトのみを返し、管理します。Axe DevTools Mobile APIキーはAxe DevTools Mobileプロジェクトのみを返し、管理します。

非アクティブなサブスクリプション が401 Unauthorizedを返します。

プロジェクトタイプ設定値

すべてのプロジェクトにはselected_project_typeがあり、各タイプは固有の固定されたtest_language / test_platform値のみを受け入れます:

selected_project_type プロダクトファミリー 有効なtest_language 有効なtest_platform
axe-devtools-watcher Web javascript, typescript Cypress, Cypress Component, WebDriverJS, Playwright, Playwright Test, Puppeteer, WebdriverIO, WebdriverIO Testrunner
axe-devtools-watcher Web java Selenium WebDriver, Playwright
axe-devtools-html Web null(必須) null(必須)
axe-devtools-mobile モバイル null(必須) Appium, Espresso, UI Automator, XCUITest

プロジェクトのselected_project_typeは、プロジェクトの作成時に固定されます。別のタイプを使用するには、新しいプロジェクトを作成してください。

プロジェクト一覧

認証された API キーでアクセス可能なプロジェクトのリストを返します。

リクエスト

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

クエリパラメータ

すべてのクエリパラメータは任意です。

パラメータ 説明
project_types 例えばaxe-devtools-watcher,axe-devtools-htmlのように、返すプロジェクトタイプのカンマ区切りリストを指定します。また、webとmobileというエイリアスも受け入れます。それらは製品の具体的なタイプに展開されます: webはaxe-devtools-watcherとaxe-devtools-htmlプロジェクトを返し、mobileはaxe-devtools-mobileプロジェクト(Axe DevTools Mobile SDK と Appiumプロジェクト)を返します。このパラメータを省略すると、APIキーでアクセス可能なすべてのプロジェクトタイプが返されます。
page_size ページごとに返すプロジェクト数。デフォルト: 30。最大: 100。最大値を超える値は100に調整されます。カーソルページネーション を参照してください。
after 次のページを取得するために使用される、前のレスポンスからのカーソル値。カーソルページネーション を参照してください。

レスポンスボディ

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

フィールド タイプ 説明
project_id 文字列 プロジェクトの一意の識別子。このAPIまたはセッションエンドポイントを呼び出す場合、この値を{project_id}として使用します。
name 文字列 プロジェクトの表示名。
selected_project_type 文字列 プロジェクトのタイプ、例えばaxe-devtools-watcherまたはaxe-devtools-html。プロジェクトタイプ設定値を参照してください。
test_language 文字列 プロジェクトのテスト言語。プロジェクトタイプがテスト言語を使用しない場合、これはnullです。プロジェクトタイプ設定値を参照してください。
test_platform 文字列 プロジェクトのテストプラットフォーム。プロジェクトタイプがテストプラットフォームを使用しない場合、これはnullです。プロジェクトタイプ設定値を参照してください。test_languageとtest_platformを読んでからプロジェクトを更新してください: 更新は、変更をこれらの保存された値とマージした後にペアを検証します。
role 文字列 プロジェクトでのあなたの役割: admin、またはプロジェクトメンバーにはcontributor。プロジェクトのメンバーでない組織管理者の場合、これはnullです。
user_id 文字列 roleが設定されている場合のあなたのユーザーID。roleがnullの場合、これはnullです。
enterprise_id 文字列 プロジェクトを所有している組織のID。プロジェクトが組織に属していない場合、これはnullです。
is_enterprise_project ブール値 プロジェクトが組織に属しているかどうか、つまりenterprise_idが設定されているかどうか。
created_at 文字列 プロジェクトの作成時間のISO 8601 UTCタイムスタンプ。
updated_at 文字列 プロジェクトの最終更新のISO 8601 UTCタイムスタンプ。プロジェクトが更新されたことがない場合、これはnullです。
run_by 文字列 プロジェクトの最新セッションを実行したAPIキーのユーザーの名前。プロジェクトにセッションがない場合、またはユーザーが解決できない場合(たとえばAPIキーが削除された)、これはnullです。
last_session_created_at 文字列 プロジェクトの最新セッションのISO 8601 UTCタイムスタンプ。プロジェクトにセッションがない場合、これはnullです。
has_git_information ブール値 プロジェクトにGitメタデータが付属しているかどうか。
git_url 文字列 プロジェクトに関連するGitリポジトリのURL。プロジェクトにGit情報がない場合、これはnullです。
latest_session オブジェクト プロジェクトの最新セッションの詳細には、そのID(id)、作成時間(created_at)、Gitブランチ(git_branch)が含まれています。プロジェクトにセッションがない場合、これはnullです。このフィールドには1つのセッションのみが含まれています。すべてのセッションをリストするには、代わりにセッションエンドポイントを使用してください。

応答にはここに記載されていない追加フィールドが含まれることがあり、新しいフィールドが時間と共に追加される場合があります。認識できないフィールドは無視し、非公開フィールドに依存しないでください。

例の応答ボディ

[
  {
    "project_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "webapp-ci",
    "selected_project_type": "axe-devtools-watcher",
    "test_language": "typescript",
    "test_platform": "Playwright",
    "role": "admin",
    "user_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "enterprise_id": "3f2b8e1a-6c4d-4f7e-9a0b-1d2c3e4f5a6b",
    "is_enterprise_project": true,
    "created_at": "2026-06-01T14:23:00.000Z",
    "updated_at": "2026-06-10T16:45:00.000Z",
    "run_by": "Jane Developer",
    "last_session_created_at": "2026-06-14T09:12:00.000Z",
    "has_git_information": true,
    "git_url": "https://github.com/example/webapp",
    "latest_session": {
      "id": "0d4a85a2-9e6f-44ef-b814-fee8412abeb0",
      "created_at": "2026-06-14T09:12:00.000Z",
      "git_branch": "main"
    }
  },
  {
    "project_id": "f0e1d2c3-b4a5-6789-0123-456789abcdef",
    "name": "design-system",
    "selected_project_type": "axe-devtools-html",
    "test_language": null,
    "test_platform": null,
    "role": "admin",
    "user_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "enterprise_id": "3f2b8e1a-6c4d-4f7e-9a0b-1d2c3e4f5a6b",
    "is_enterprise_project": true,
    "created_at": "2026-05-20T08:00:00.000Z",
    "updated_at": null,
    "run_by": null,
    "last_session_created_at": null,
    "has_git_information": false,
    "git_url": null,
    "latest_session": null
  },
  {
    "project_id": "c4d5e6f7-a8b9-4c0d-9e1f-2a3b4c5d6e7f",
    "name": "ios-app-ci",
    "selected_project_type": "axe-devtools-mobile",
    "test_language": null,
    "test_platform": "XCUITest",
    "role": "admin",
    "user_id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
    "enterprise_id": "3f2b8e1a-6c4d-4f7e-9a0b-1d2c3e4f5a6b",
    "is_enterprise_project": true,
    "created_at": "2026-06-03T10:15:00.000Z",
    "updated_at": null,
    "run_by": "Jane Developer",
    "last_session_created_at": "2026-06-15T11:05:00.000Z",
    "has_git_information": false,
    "git_url": null,
    "latest_session": {
      "id": "5b6c7d8e-9f0a-4b1c-8d2e-3f4a5b6c7d8e",
      "created_at": "2026-06-15T11:05:00.000Z",
      "git_branch": null
    }
  }
]

例を短くするために、各latest_sessionオブジェクトはそのフィールドのうちの3つだけを表示しています。APIはそれ以上を返します。

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

ページネーションはオプトインです。page_sizeやafterを送らずに、応答はカーソルヘッダーなしで完全なプロジェクトリストを単一のレスポンスで返します。

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

応答にx-pagination-cursor ヘッダーがない場合、最終ページにいます。

プロジェクトIDを名前で検索する

この例では、curlとjqを使用してプロジェクトのIDを名前から見つけます。

curl -s \
  -H "Accept: application/json" \
  -H "X-API-Key: $API_KEY" \
  "https://axe.deque.com/api-pub/v1/results/projects" \
  | jq -r '.[] | select(.name == "webapp-ci") | .project_id'

そのプロジェクトのセッションを一覧表示するために、返されたIDをセッションエンドポイントに渡します。

プロジェクト一覧エラーレスポンス

ステータス 原因
400 Bad Request project_typesの値が無効なプロジェクトタイプを含む場合、afterカーソルが不正である場合、またはpage_size/afterがクエリ文字列で繰り返された場合。
401 Unauthorized APIキーが無効、または欠落しているか、関連するサブスクリプションが無効になっています。

プロジェクトの取得

単一のプロジェクトをIDによって返します。同じ形式でプロジェクト一覧 が含まれます。

リクエスト

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

プロジェクト取得エラーレスポンス

ステータス 原因
400 Bad Request project_id は有効なUUIDではありません。
401 Unauthorized APIキーが無効、または欠落しているか、関連するサブスクリプションが無効になっています。
403 Forbidden プロジェクトは存在しますが、APIキーの組織または製品タイプの外にあるか、あなたがメンバーではありません。
404 Not Found そのIDのプロジェクトは存在しないか、プロジェクトが削除されました。

プロジェクトの作成

important

プロジェクトの作成には完全な設定可能なセットが必要です。 name、selected_project_type、test_language、test_platform はすべて必須です。省略されたフィールドは400 エラーで拒否されます。

リクエスト

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

リクエストボディ

フィールド タイプ 必須 説明
name 文字列 はい プロジェクトの表示名。1から512文字。
selected_project_type 文字列 はい プロジェクトのタイプ。プロジェクトタイプ設定値 を参照してください。
test_language 文字列またはnull はい selected_project_type の有効な値でなければなりません。プロジェクトタイプ設定値 を参照してください。
test_platform 文字列またはnull はい selected_project_type とtest_language の有効な値でなければなりません。プロジェクトタイプ設定値 を参照してください。

リクエストボディの例

{
  "name": "webapp-ci",
  "selected_project_type": "axe-devtools-watcher",
  "test_language": "typescript",
  "test_platform": "Playwright"
}

レスポンスボディ

作成されたプロジェクトを返し、プロジェクト一覧 と同じ形式です。プロジェクトを作成した人は自動的にプロジェクト管理者になるため、別途メンバーシップの呼び出しは不要です。作成が成功すると201 Created が返されます。

プロジェクト作成エラーレスポンス

ステータス 原因
400 Bad Request リクエストボディに必須フィールドが欠けているか、selected_project_type が有効なプロジェクトタイプではありません。また、test_language/test_platform がselected_project_type に対して有効な組み合わせでない、またはname が空であるか512文字を超えている場合にも発生します。
401 Unauthorized APIキーが無効、または欠落しているか、関連するサブスクリプションが無効になっています。
403 Forbidden APIキーの製品がselected_project_type に一致しないか、サブスクリプションがこのプロジェクトタイプをカバーしていません。

プロジェクトの更新

note

PATCH では送信したフィールドのみが変更されます。name、selected_project_type、test_language、test_platform はそれぞれオプションですが、リクエストには少なくとも1つが必要です。省略されたフィールドは保存された値を保持します。更新後も、test_language とtest_platform はプロジェクトのselected_project_type に対して有効なペアでなければならないため、どちらか一方のみを送信する場合、もう一方の現在の値を最初に確認してください。

リクエスト

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

リクエストボディ

フィールド タイプ 必須 説明
name 文字列 いいえ プロジェクトの表示名。1から512文字。
selected_project_type 文字列 いいえ プロジェクトのタイプは作成後に変更できません。現在の値を送信することは許可されますが、他の値を送信すると400 エラーが返されます。
test_language 文字列またはnull いいえ プロジェクトのselected_project_type の有効な値でなければなりません。プロジェクトタイプ設定値 を参照してください。
test_platform 文字列またはnull いいえ プロジェクトのselected_project_type とtest_language の有効な値でなければなりません。プロジェクトタイプ設定値 を参照してください。

リクエストボディの例

{
  "name": "webapp-ci-renamed"
}

レスポンスボディ

更新されたプロジェクトを返し、プロジェクト一覧 と同じ形式です。更新が成功すると200 OK が返されます。

プロジェクト更新エラーレスポンス

ステータス 原因
400 Bad Request リクエストボディに更新可能なフィールドが一つも含まれていない、またはselected_project_type がプロジェクトの現在のタイプと異なります。また、test_language/test_platform がプロジェクトのタイプに対して有効でない、またはname が空であるか512文字を超えていることも意味します。
401 Unauthorized APIキーが無効、または欠落しているか、関連するサブスクリプションが無効になっています。
403 Forbidden APIキーの製品がプロジェクトのselected_project_type に一致しない、またはサブスクリプションがこのプロジェクトタイプをカバーしていないことを意味します。プロジェクト管理者でない場合も含まれます。
404 Not Found そのIDのプロジェクトは存在しないか、プロジェクトが削除されました。

プロジェクトの削除

important

プロジェクトを削除すると最終的なものです。 自分で復元することはできません。

リクエスト

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

レスポンスボディ

{ "deleted": true }

プロジェクト削除エラーレスポンス

ステータス 原因
400 Bad Request project_id は有効なUUIDではありません。
401 Unauthorized APIキーが無効、または欠落しているか、関連するサブスクリプションが無効になっています。
403 Forbidden プロジェクトの所有組織のプロジェクト管理者または組織管理者でない、またはプロジェクトのタイプが自分のアクセス範囲外です。
404 Not Found そのIDのプロジェクトは存在しないか、すでに削除されています。

プロジェクトメンバーシップ

プロジェクトのメンバーシップはプロジェクトのサブリソースです。プロジェクト管理者はプロジェクトとそのメンバーシップを管理できます。プロジェクトメンバー(以下のメンバーシップ操作でのmember ロール)は、プロジェクトにアクセスできますが、管理することはできません。メンバーシップ操作ではメールアドレスでユーザーを識別します。メンバーを追加する際、そのメンバーがライセンスを保有する必要はありません。APIはすぐにそれを記録しますが、ライセンスを保有するまでプロジェクトにアクセスできません。対象ユーザーはすでにあなたの組織に所属している必要があります。 組織メンバーでない人物を追加することはできません。

可能な限り以下のバッチ操作を使用してください。 すべての書き込み操作は1回の呼び出しで複数のユーザーを受け付けます。これにより必要なリクエスト数が減ります。大規模な組織のメンバーシップを管理する場合、429 レスポンスを受け取ったらバックオフとリトライを適用してください。一般的なパターンについては429 Too Many Requests を参照してください。

プロジェクトメンバーの一覧

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

レスポンスボディ

{
  "members": [
    {
      "user_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "role": "admin",
      "email": "jane@example.com",
      "first_name": "Jane",
      "last_name": "Doe",
      "active_license": true,
      "created_at": "2026-06-01T14:23:00.000Z"
    }
  ]
}
フィールド タイプ 説明
user_id 文字列 メンバーの一意のユーザーID。
role 文字列 admin またはmember。
email、first_name、last_name 文字列またはnull メンバーのメールアドレスは、追加、役割変更、削除の操作がそれを識別するために使用する値です。メンバーのAxeアカウントのレコードが存在しなくなった場合、これらはnullです。応答には依然としてメンバーがリストされており、行が削除されるのではなく、既存の管理者メンバーシップ行が常にプロジェクトの管理者を示します。
active_license ブール値 メンバーが現在このプロジェクトの製品タイプのアクティブなライセンスを保持しているかどうか。
created_at 文字列 メンバーシップの作成時間を示すISO 8601 UTCタイムスタンプ。

プロジェクトメンバーの追加

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

リクエストボディ

{
  "user_email_role_pairs": [
    { "user_email": "sam@example.com", "role": "member" },
    { "user_email": "alex@example.com", "role": "admin" }
  ]
}

user_emailはユーザーのAxeアカウントのメールアドレスです。一致は大文字小文字と周囲のスペースを無視します。roleはadminまたはmemberを受け入れます(contributorはmemberの同義語としても受け入れられます)。各ユーザーはリクエストで一度だけ表示されます。既にプロジェクトメンバーであるユーザーを追加しても、そのエントリに対しては何も行われません:既存の役割は変更されません。これは一括操作です。無効なエントリはリクエスト全体を拒絶し、APIは何も書き込みません。エラーメッセージは失敗したすべてのエントリをリストするので、一回の操作でバッチを修正できます。

成功したリクエストは、実際に新しいメンバーシップが追加されたかどうかにかかわらず、201 Createdと{ "created": true }を返します。

メンバーの役割変更

  • エンドポイント: PATCH https://axe.deque.com/api-pub/v1/results/projects/{project_id}/memberships
  • ヘッダー(必須): X-API-Key: <DEQUE_API_KEY>, Content-Type: application/json, Accept: application/json
  • リクエストボディ: user_email_role_pairsの形状はプロジェクトメンバーの追加と同じ

各user_emailは、プロジェクトの現在のメンバーでなければなりません。プロジェクトは常に少なくとも1人のadminを保持する必要があります。プロジェクトに管理者がいなくなるリクエストはAPIが拒絶します。唯一の残りのメンバーであるプロジェクトの唯一の管理者は、自分自身の役割を変えることはできません。これは一括操作です。無効なエントリはリクエスト全体を拒絶し、APIは何も書き込みません。

成功したリクエストは、200 OKと{ "ok": true }を返します。

プロジェクトメンバーの削除

  • エンドポイント: DELETE https://axe.deque.com/api-pub/v1/results/projects/{project_id}/memberships?user_emails={comma-separated,url-encoded,emails}
  • ヘッダー(必須): X-API-Key: <DEQUE_API_KEY>、Accept: application/json

削除するユーザーのメールアドレスをカンマで区切ったリストとして単一のuser_emailsクエリパラメータで渡し、値をURLエンコードします。例えば、エンコードされていないアドレス内のリテラル+はスペースとして到着し、不正な形式として拒絶されます。リクエストボディはありません。メンバーでないユーザーを削除しても成功し、何も削除されないため、再試行されたリクエストはエラーではありません。プロジェクトは常に少なくとも1人のadminを保持する必要があります。プロジェクトの最後の管理者を削除するリクエストをAPIは拒絶します。唯一の残りのメンバーであるプロジェクトの唯一の管理者は、自分自身を削除することはできません。

成功したリクエストは、削除されたアドレスとメンバーと一致しなかったアドレスを200 OKと共に返し、入力ミスと完了した削除を区別できます:

{
  "deleted": true,
  "removed": ["sam@example.com"],
  "unmatched": ["alx@example.com"]
}

プロジェクトメンバーシップエラー応答

ステータス 原因
400 Bad Request project_idは有効なUUIDではなく、user_email_role_pairsは欠如しているか不正です。user_emailが有効なメールアドレスでない、または同じユーザーが複数回表示されている場合です。また、roleがadminまたはmemberでない場合、またはuser_emailsの値が欠如している、別のパラメータとして繰り返されている、または削除リクエストで不正である場合です。追加リクエストでは、自組織に属さないメールアドレスをカバーします。役割変更リクエストでは、プロジェクトメンバーでないメールアドレスをカバーします。書き込みリクエストでは、複数のユーザーに一致するメールアドレスをカバーし、APIは誤って他の人に変更を加えることのないようにそれを拒絶します。
401 Unauthorized APIキーが無効、または欠落しているか、関連するサブスクリプションが無効になっています。
403 Forbidden あなたはプロジェクト管理者または組織管理者ではありません。また、プロジェクトに管理者がいなくなる変更、または自身のメンバーシップを変更または削除しようとする唯一の残りのメンバーをカバーします。
404 Not Found そのIDのプロジェクトは存在しないか、プロジェクトが削除されました。