このページでは

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ではありません。

考慮事項

  • ユーザーがデータを保有しているアプリごとに、1か月あたり約1つのファイルが作成されると予想されます。
  • 各ダウンロードURLにアクセスするには、同じ認証資格情報が必要です。
  • APIは非同期であるため、リクエストのステータスを確認するにはポーリングが必要です。 適切なポーリングレートを選択するには、「レート制限」セクションを参照してください。
  • このDSAR APIは、Amplitudeプラットフォームからのデータのみを返します。 これにはStatsigプラットフォーム内のデータは含まれていません。

このAPIは、ユーザーに関連付けられた行動データのみを返します。AI Feedbackソースの下でサポートとサービスソース(ZendeskやIntercomなど)を接続し、メールマッピングを有効にしている場合、AI Feedbackタブのユーザープロフィールでユーザーに関連付けられているデータを検索してください。ユーザープロフィールを開くには、[ユーザー]->[ユーザープロフィール]ページでユーザーを検索します。

非同期動作

データ量をサポートするために、このAPIは非同期に動作します。ユーザーデータの取得は3つのステップで行われます:

  1. POSTリクエストを作成すると、requestIdが返されます。
  2. requestIdを使用してGETリクエストを作成し、ジョブのステータスを確認します。
  3. ジョブが完了したら、GETリクエストを実行して、データファイルを取得するURLのリストを取得します。

出力

各ファイルはgzip形式で圧縮されており、内容は次の規則に従います:

  • イベントごとに1行
  • 各行はJSONオブジェクトであること
  • 順序は保証なし

出力例

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万件を超えるイベントが発生するユーザーはサポートされません。

クライアント実装例

python
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"
}'

リクエスト本文

レスポンス

成功すると、呼び出しに対して202 Accepted応答とrequestIdが返されます。requestIdを使用してジョブのステータスをポーリングします。

json
{
  "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}'

パス変数

レスポンス

出力ファイルを取得する

返された出力ファイルをダウンロードします。

ダウンロードリンクは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}'

パス変数

これは役に立ちましたか?