テスト用アプリ申請API
テスト用アプリ申請APIは、Appstore DevTestへのアプリの登録とテスターの追加をプログラムから実行できるREST APIです。
APIを使用する前に、アクセス権を設定し、OAuthセッショントークンを取得する必要があります。このトークンを各APIリクエストのHTTPヘッダーに含めます。
ベースURL
テスト用アプリ申請APIのベースURLは、developer.amazon.com/api/appstoreです。
認証
テスト用アプリ申請APIへのアクセスを構成するには、まず開発者コンソールでセキュリティプロファイルを作成し、APIに関連付ける必要があります。次に、Login with Amazon APIを使用してアクセストークンをリクエストし、そのトークンを各APIリクエストのHTTPヘッダーに追加します。
セキュリティプロファイルの作成
APIを使用する前に、セキュリティプロファイルを作成する必要があります。セキュリティプロファイルは、APIへのアクセスに使用するアクセストークンを生成します。
セキュリティプロファイルを作成するには
- Amazon開発者コンソールのアカウントにログインします。
- 上部のナビゲーションから、[アプリ&サービス] > [APIアクセス] をクリックします。
-
[アプリ申請API] をクリックします。
![[APIアクセス] ページ](https://m.media-amazon.com/images/G/01/mobile-apps/dex/app-sub-api/API-access1_ja_JP.png)
- [セキュリティプロファイルを新規作成] をクリックします。
- 新しいプロファイルの [セキュリティプロファイル名] と [セキュリティプロファイルの説明] を入力し、[保存] をクリックします。
- [ウェブ設定] タブから、クライアントIDとクライアントシークレットを保存します。APIにアクセスするには、この情報が必要です。

セキュリティプロファイルとAPIの関連付け
セキュリティプロファイルを作成したら、開発者コンソールでAPIに関連付ける必要があります。
セキュリティプロファイルをAPIに関連付けるには
- [アプリ&サービス] > [APIアクセス] をクリックして、[APIアクセス] ページに移動します。
- API名をクリックしてパネルを展開します。
- ドロップダウンリストから、前のセクションで作成したセキュリティプロファイルを選択します。
- [関連付ける] をクリックして、セキュリティプロファイルをこのAPIに関連付けます。[使用中のセキュリティプロファイル] パネルに、API名と、関連付けられたセキュリティプロファイルが追加されます。

これで、クライアントIDとクライアントシークレットを使用して、Login with Amazon(LWA)アクセストークンをリクエストできるようになりました。
LWAアクセストークンのリクエスト
クライアントIDとクライアントシークレットを取得したら、以下の手順に従って、Login with Amazon APIを使用してLogin with Amazonアクセストークンをリクエストします。
トークンリクエストを送信する
次のヘッダーとコンテンツを使用して、https://api.amazon.com/auth/o2/tokenにPOSTリクエストを送信します。
- ヘッダー:
Content-Type: application/x-www-form-urlencoded - コンテンツ:
client_id: セキュリティプロファイルの作成の最後の手順で保存したクライアントID。client_secret: セキュリティプロファイルの作成の最後の手順で保存したクライアントシークレット。grant_type: 値をclient_credentialsに設定します。scope: 値をappstore::apps:readwriteに設定します。
JSONコンテンツの例:
{
"grant_type": "client_credentials",
"client_id": "amzn1.application-oa2-client.<クライアントID>",
"client_secret": "<クライアントシークレット>",
"scope": "appstore::apps:readwrite"
}
cURLリクエストの例:
curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' -d 'grant_type=client_credentials&client_id=amzn1.application-oa2-client.<your-client-id>&client_secret=<クライアントシークレット>&scope=appstore::apps:readwrite' https://api.amazon.com/auth/O2/token
レスポンスを保存する
レスポンスの例は次のとおりです。
{
"access_token": "Atc|MAEBI...",
"scope": "appstore::apps:readwrite",
"token_type": "bearer",
"expires_in": 3600
}
access_token: アクセストークンexpires_in: アクセストークンの有効期限が切れるまでの秒数scope: Alwaysappstore::apps:readwrite.token_type: 常にbearer
エラーレスポンスを処理する
トークンリクエストでエラーが発生した場合、レスポンスのメッセージ本文には次のエラーメッセージのいずれかが含まれます。
| エラーメッセージ本文 | 詳細 |
|---|---|
| {"error_description":"Client authentication failed","error":"invalid_client"} | 無効なシークレットキー |
| {"error_description":"The request has an invalid parameter : scope","error":"invalid_scope"} | 無効な範囲の値 |
| {"error_description":"The authorization grant type is not supported by the authorization server","error":"unsupported_grant_type"} | 無効な認可グラントタイプ |
| {"error_description":"The Content-Type is not supported by the authorization server","error":"invalid_request"} | サポート対象外のContent-Type |
アクセストークンの使用方法
まず、アクセストークンを保存します。アクセストークンは、LWAアクセストークンのリクエストのレスポンスに含まれているaccess_tokenフィールドの値です。
APIにリクエストを送信するときは、AuthorizationヘッダーにBearer <アクセストークン>という値を設定します。アクセストークンは、「Atc|」で始まる長い文字列です。
cURLリクエストの例:
curl -v -X GET "<endpoint URL>" -H "Authorization: Bearer Atc|MAEBIKfsULrH7jSzvJTV8UmiHWr9M86O3JRmv4t1hqoCBriSMEP5Gsey_FiBxteZ8oxGd6abGuOFga8fwnMhmSD_Sg4MI4odXLPgB2IVs8M1uswjuWjnsMcvehpWvf9tzQT8HTWiBigInJLB8BrMg5J3O02hlTvcF441XxXDXthyj993COJ2u5swOTKjC_dcijiN8amuzrj32rh9Fr3CNgCpoZ0WqXnBhoHUVMYSOBV-owA5rI4-OfysXC71Zbtv1hb8igk"
アクセストークンの有効期限が切れた場合は、LWAアクセストークンのリクエストの手順に従って新しいトークンを取得し、それを使用してリクエストを送信します。アクセストークンを最後にリクエストしてから1時間以上経過すると、403 Forbidden HTTPエラーとなり、「Request is not authorized(リクエストが認可されていません)」というメッセージが表示されるようになります。これは、アクセストークンの有効期限が切れたことを示します。
操作
テスト用アプリ申請APIには、次の操作が含まれています。
| 操作 | HTTPメソッドとURI |
|---|---|
| アプリの登録 | POST /{apiVersion}/applications/{appId}/devtest/register |
| テスターの追加 | POST /{apiVersion}/applications/{appId}/tracks/{trackId}/testers |
アプリの登録
アプリ内課金(IAP)用Appstore DevTestにアプリを登録します。
リクエスト
IAP用Appstore DevTestにアプリを登録するには、/{apiVersion}/applications/{appId}/devtest/registerエンドポイントにPOSTリクエストを送信します。リクエスト本文には、アプリのパッケージ名と、アプリの署名に使用する証明書を指定します。
リクエストの例
POST /{apiVersion}/applications/{appId}/devtest/register
Host: developer.amazon.com/api/appstore
Content-Type: application/json
Authorization: Bearer {access token}
リクエストパラメーター
| パラメーター | 指定場所 | 説明 | 型 | 必須 |
|---|---|---|---|---|
apiVersion |
パス | APIのバージョン。現在はv1です。 |
文字列 | ○ |
appId |
パス | アプリの識別子。たとえば、amzn1.devportal.mobileapp.dde7ec787b031584aa5f04606184041aのような文字列です。 |
文字列 | ○ |
access token |
ヘッダー | LWAトークン。 | 文字列 | ○ |
リクエスト本文の例
{
"packageName": String,
"certificate": String
}
リクエスト本文のプロパティ
| パラメーター | 説明 | 型 | 必須 |
|---|---|---|---|
packageName |
アプリのパッケージ名。 | 文字列 | ○ |
certificate |
アプリの署名に使用する証明書。 | 文字列 | ○ |
レスポンス
正常に完了すると、HTTP 200 OKと共に、trackIdがレスポンスで返されます。このIDをテスターの追加リクエストで使用します。エラーが発生した場合は、適切なHTTPステータスコードがレスポンスとして返され、エラーコードと人が判読できるメッセージがレスポンス本文に追加されます。
レスポンス本文の例
{
"trackId": "devtest"
}
レスポンス本文のプロパティ
| パラメーター | 説明 | 型 |
|---|---|---|
trackId |
アプリのトラックを識別します。DevTestの場合、この値はdevtestになります。 |
文字列 |
HTTPステータスコード
| ステータス | 説明 |
|---|---|
200 OK |
アプリがDevTestに正常に登録されました。 |
404 Not Found |
指定されたリソースが見つかりません。 |
400 Bad Request |
リクエスト本文の1つ以上のプロパティが無効であるか存在しないことを示します。 |
IAP用DevTestへのテスターの追加
IAPのテストのために、DevTest環境にテスターを追加します。
リクエスト
IAP用DevTestにテスターを追加するには、/{apiVersion}/applications/{appId}/tracks/{trackId}/testersエンドポイントにPOSTリクエストを送信します。リクエストには、登録時のレスポンスで返されたtrackIdを使用する必要があります。さらに、テスターの追加先となるテスターグループ名と、テスターの詳細も指定する必要があります。
リクエストの例
POST /{apiVersion}/applications/{appId}/tracks/{trackId}/testers
Host: developer.amazon.com/api/appstore
Content-Type: application/json
Authorization: Bearer {access token}
リクエストパラメーター
| パラメーター | 指定場所 | 説明 | 型 | 必須 |
|---|---|---|---|---|
apiVersion |
パス | APIのバージョン。現在はv1です。 |
文字列 | ○ |
appId |
パス | アプリの識別子。たとえば、amzn1.devportal.mobileapp.dde7ec787b031584aa5f04606184041aのような文字列です。 |
文字列 | ○ |
access token |
ヘッダー | LWAトークン。 | 文字列 | ○ |
リクエスト本文の例
{
"groups": [{
"name": String,
"testers": [{
"firstName": String,
"lastName": String,
"email": String
}]
}]
}
リクエスト本文のプロパティ
| パラメーター | 説明 | 型 | 必須 |
|---|---|---|---|
groups |
テスターグループのリスト。 | List<TesterGroup> | ○ |
name |
テスターグループの名前。 | 文字列 | ○ |
testers |
テスターのリスト。 | List<Tester> | ○ |
firstName |
テスターの名。 | 文字列 | × |
lastName |
テスターの姓。 | 文字列 | × |
email |
テスターのEメールアドレス。 | 文字列 | ○ |
レスポンス
正常に完了すると、HTTP 200 OKが返され、追加されたテスターグループのリストと、すべてのグループ間でのユニークテスターの数がレスポンスに含まれます。エラーが発生した場合は、適切なHTTPステータスコードがレスポンスとして返され、エラーコードと人が判読できるメッセージがレスポンス本文に追加されます。
レスポンス本文の例
{
"groups": List<String>,
"uniqueTesterCount" : Integer
}
レスポンス本文のプロパティ
| パラメーター | 説明 | 型 |
|---|---|---|
groups |
このアプリのDevTest登録に追加されたテスターグループ名のリスト。 | List<String> |
uniqueTesterCount |
テスターグループ全体で追加されたユニークテスターの数。 | 整数 |
HTTPステータスコード
| ステータス | 説明 |
|---|---|
200 OK |
テスターがアプリのDevTestに正常に追加されました。 |
404 Not Found |
指定されたリソースが見つかりません。 |
400 Bad Request |
リクエスト本文の1つ以上のプロパティが無効であるか存在しないことを示します。 |
オブジェクト定義
テスト用アプリ申請APIでは、次のオブジェクトが使用されます。
TesterGroupオブジェクト
TesterGroupオブジェクトは、テスターグループの名前とテスターのリストを格納します。
{
"name": String,
"testers": [{
"firstName": String,
"lastName": String,
"email": String
}]
}
| パラメーター | 説明 | 型 |
|---|---|---|
name |
テスターグループの名前。 | 文字列 |
testers |
テスターのリスト。 | List<Tester> |
Testerオブジェクト
Testerオブジェクトは、テスターの詳細を格納します。
{
"firstName": String,
"lastName": String,
"email": String
}
| パラメーター | 説明 | 型 |
|---|---|---|
firstName |
テスターの名。 | 文字列 |
lastName |
テスターの姓。 | 文字列 |
email |
テスターのEメールアドレス。 | 文字列 |
Last updated: 2025年9月30日

