Data Subject Access Request API
地域
ベースURLは、プロジェクトのデータのレジデンシーによって異なります。このページ内のすべての例では、プロジェクトがAmplitudeのEUデータセンターを利用している場合を除き、デフォルトのベースURLを使用してください。EUデータセンターを利用している場合は、この表に記載されているEU用のベースURLを使用してください。
リクエストはhttps://amplitude.com(デフォルト)またはhttps://analytics.eu.amplitude.com(EU)に送信されます。https://analytics.amplitude.comホスト名はアナリティクスウェブアプリ(ブラウザーUI)であり、これらのリクエストのAPIベースURLではありません。
| データのレジデンシー | ベースURL |
|---|---|
| デフォルト | https://amplitude.com |
| 欧州連合 | https://analytics.eu.amplitude.com |
考慮事項
- ユーザーがデータを保有しているアプリごとに、1か月あたり約1つのファイルが作成されると予想されます。
- 各ダウンロードURLにアクセスするには、同じ認証資格情報が必要です。
- APIは非同期であるため、リクエストのステータスを確認するにはポーリングが必要です。 適切なポーリングレートを選択するには、「レート制限」セクションを参照してください。
- このDSAR APIは、Amplitudeプラットフォームからのデータのみを返します。 これにはStatsigプラットフォーム内のデータは含まれていません。
このAPIは、ユーザーに関連付けられた行動データのみを返します。AI Feedbackソースの下でサポートとサービスソース(ZendeskやIntercomなど)を接続し、メールマッピングを有効にしている場合、AI Feedbackタブのユーザープロフィールでユーザーに関連付けられているデータを検索してください。ユーザープロフィールを開くには、[ユーザー]->[ユーザープロフィール]ページでユーザーを検索します。
非同期動作
データ量をサポートするために、このAPIは非同期に動作します。ユーザーデータの取得は3つのステップで行われます:
- POSTリクエストを作成すると、
requestIdが返されます。 requestIdを使用してGETリクエストを作成し、ジョブのステータスを確認します。- ジョブが完了したら、GETリクエストを実行して、データファイルを取得するURLのリストを取得します。
出力
各ファイルはgzip形式で圧縮されており、内容は次の規則に従います:
- イベントごとに1行
- 各行はJSONオブジェクトであること
- 順序は保証なし
出力例
{"amplitude_id":123456789,"app":12345,"event_time":"2020-02-15 01:00:00.123456","event_type":"first_event","server_upload_time":"2020-02-18 01:00:00.234567"}
{"amplitude_id":123456789,"app":12345,"event_time":"2020-02-15 01:00:11.345678","event_type":"second_event","server_upload_time":"2020-02-18 01:00:11.456789"}
{"amplitude_id":123456789,"app":12345,"event_time":"2020-02-15 01:02:00.123456","event_type":"third_event","server_upload_time":"2020-02-18 01:02:00.234567"}
レート制限
すべてのDSARエンドポイントは、1時間あたり14.4Kの「コスト」という予算を共有しています。POSTリクエストのコストは8で、GETリクエストのコストは1です。この数を超えるリクエストには429のレスポンスコードが返されます。
各POSTについて、ユーザーがイベントを持つプロジェクトごとに、毎月1つの出力ファイルが生成されることを想定してください。
たとえば、あるユーザーについて13か月分のデータを取得する場合、2つのプロジェクトにデータが含まれていると想定すると、約26ファイルになります。
1時間あたり40人のユーザー分のデータを取得するには、リクエストごとに14400 / 40 = 360コストを費やすことができます。出力ファイルに52回のGET(計算上必要な回数の2倍)、初回のPOSTに8回を余裕を持って割り当てた場合、リクエストのステータスを360 - 8 - 52 = 300回ポーリングできます。
結果に対するSLAは3日間(4,320分)であることを前提とすると、これにより3日間にわたって4320 / 300 ~= 15分ごとにステータスを確認できます。 実用的な用途としては、20分ごとに実行され、20件の新しいリクエストを送信し、すべての未処理リクエストのステータスをチェックするサービスなどが考えられます。
SLA(サービスレベル合意)
- リクエストされたジョブは3日以内に完了します。
- リクエスト結果は2日後に期限切れになります。
- 1か月あたり10万件を超えるイベントが発生するユーザーはサポートされません。
クライアント実装例
base_url = 'https://amplitude.com/api/2/dsar/requests'
payload = {
"amplitudeId": AMPLITUDE_ID,
"startDate": "2019-03-01",
"endDate": "2020-04-01"
}
headers = {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
auth = HTTPBasicAuth(API_KEY, SECRET_KEY)
r = requests.post(base_url, headers=headers, auth=auth, data=payload)
request_id = r.json().get('requestId')
time.sleep(POLL_DELAY)
while (True):
r = requests.get(f'{base_url}/{request_id}', auth=auth, headers=headers)
response = r.json()
if response.get('status') == 'failed':
sys.exit(1)
if response.get('status') == 'done':
break
time.sleep(POLL_INTERVAL)
for url in response.get('urls'):
r = requests.get(url, headers=headers, auth=auth, allow_redirects=True)
index = url.split('/')[-1]
filename = f'{AMPLITUDE_ID}-{index}.gz'
with open(f'{OUTPUT_DIR}/{filename}','wb') as f:
f.write(r.content)
データに対するリクエストを作成する
curl --location --request POST 'https://amplitude.com/api/2/dsar/requests' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
-u '{org-api-key}:{org-secret-key}' \
--data-raw '{
"userId": "12345",
"startDate": "2020-04-24",
"endDate": "2022-02-20"
}'
リクエスト本文
| 名前 | 概要 |
|---|---|
userId | amplitudeIDが設定されていない場合は必須です。 データをリクエストする対象となるユーザーのユーザーID。 |
amplitudeId | userIDが設定されていない場合は必須です。 整数です。 データをリクエストするユーザーのAmplitude ID。 |
startDate | 必須です。 日付データリクエストの開始日。 |
endDate | 必須です。 日付データリクエストの終了日。 |
レスポンス
成功すると、呼び出しに対して202 Accepted応答とrequestIdが返されます。requestIdを使用してジョブのステータスをポーリングします。
{
"requestId": 53367
}
リクエストのステータスを取得する
データリクエストジョブをポーリングして、そのステータスを取得します。
curl --location --request GET 'https://amplitude.com/api/2/dsar/requests/{request-id}' \
--header 'Accept: application/json' \
-u '{org-api-key}:{org-secret-key}'
パス変数
| 名前 | 概要 |
|---|---|
requestId | 必須です。 データリクエスト作成の呼び出しで取得されたリクエストID。 |
レスポンス
| 名前 | タイプ | 概要 |
|---|---|---|
requestId | 整数です。 | リクエストのID。 |
userId | 文字列 | データをリクエストする対象となるユーザーのユーザーID。 |
amplitudeId | 整数です。 | データをリクエストするユーザーのAmplitude ID。 |
startDate | 日付 | データリクエストの開始日。 |
endDate | 日付 | データリクエストの終了日。 |
status | 文字列 | staging(未開始)、submitted(処理中)、done(ジョブが完了し、ダウンロードURLが入力済み)、またはfailed(ジョブが失敗。再試行が必要な場合があり)のいずれかです。 |
failReason | 文字列 | ジョブが失敗した場合、失敗に関する情報が含まれています。 |
urls | 文字列の配列 | データのダウンロードURLのリストです。 |
expires | 日付 | 出力ダウンロードリンクの有効期限が切れる日付です。 |
出力ファイルを取得する
返された出力ファイルをダウンロードします。
ダウンロードリンクは2日間有効です。 APIリクエストの送信に使われる多くのクライアントは、S3リンクからデータを自動的にダウンロードします。APIクライアントがリンクからファイルを自動的にダウンロードしない場合は、ユーザー名として組織のAPIキー、パスワードとして組織のシークレットキーを使用し、手動でアクセスしてください。
curl --location --request GET 'https://amplitude.com/api/2/dsar/requests/:request_id/outputs/:output_id' \
-u '{org-api-key}:{org-secret-key}'
パス変数
| 名前 | 概要 |
|---|---|
request_id | 必須です。 整数です。 リクエストのID。 元のGETリクエストとともに返されます。 |
output_id | 必須です。 整数です。 ダウンロードする出力のID。 ジョブが完了した後にステータス応答で返されるURLの末尾にある整数です。 |
これは役に立ちましたか?