데이터 주체 액세스 요청 API
지역
기본 URL은 프로젝트의 데이터 상주 위치에 따라 달라집니다. 이 페이지의 모든 예제에서 프로젝트가 Amplitude의 EU 데이터 센터를 사용하지 않는 한 기본 URL을 사용하십시오. 이 경우 이 표의 EU 기본 URL을 사용하십시오.
요청은 https://amplitude.com(기본값) 또는 https://analytics.eu.amplitude.com (EU)로 이동합니다. https://analytics.amplitude.com 호스트 이름은 분석 웹 앱(브라우저 UI)이며 이러한 요청에 대한 API 기본 URL이 아닙니다.
| 데이터 상주 | 기본 URL |
|---|---|
| 기본값 | https://amplitude.com |
| EU | https://analytics.eu.amplitude.com |
고려 사항
- 사용자가 데이터를 보유하고 있는 앱 당 매월 약 하나의 파일을 예상합니다.
- 각 다운로드 URL에 액세스하려면 동일한 인증 자격 증명이 필요합니다.
- API는 비동기적이므로 요청 상태를 확인하려면 폴링을 해야 합니다. 적절한 폴링 속도를 선택하려면 속도 제한 섹션을 참조하십시오.
- 이 DSAR API는 Amplitude 플랫폼의 데이터만 반환합니다. 여기에는 Statsig 플랫폼의 데이터가 포함되지 않습니다.
이 API는 사용자와 관련된 행동 데이터만 반환합니다. AI 피드백 소스 아래에서 지원 및 서비스 소스(예: Zendesk 또는 Intercom)를 연결하고 이메일 매핑을 활성화한 경우, AI 피드백 탭의 사용자 프로필에서 사용자와 관련된 데이터를 찾으십시오. 사용자 프로필을 열려면 사용자 -> 사용자 프로필 페이지에서 사용자를 검색하십시오.
비동기식 작업
데이터 볼륨을 지원하기 위해 이 API는 비동기식으로 작동합니다. 사용자 데이터를 가져오는 과정은 다음 세 단계로 이루어집니다.
- POST 요청을 하면
requestId이 반환됩니다. requestId을(를) 사용하여 GET 요청을 보내 작업 상태를 확인하십시오.- 작업이 완료되면 GET 요청을 실행하여 데이터 파일을 가져올 URL 목록을 가져옵니다.
출력
각 파일은 gzip으로 압축되며 내용은 다음 규칙을 준수합니다.
- 이벤트당 한 줄
- 각 줄은 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 엔드포인트는 시간당 14.4K "비용"의 예산을 공유합니다. POST 요청의 비용은 8이고 GET 요청의 비용은 1입니다. 이 횟수를 초과하는 요청은 429 응답 코드를 받습니다.
각 POST에 대해 사용자가 이벤트를 처리할 프로젝트당 매월 하나의 출력 파일이 제공될 것으로 예상됩니다.
예를 들어 두 개의 프로젝트에 데이터를 포함한 사용자에 대해 13개월 분량의 데이터를 가져오는 경우 약 26개의 파일이 생성될 것으로 예상됩니다.
시간당 40명의 사용자에 대한 데이터를 가져오려면 요청당 14400 / 40 = 360 비용을 지출해야 합니다. 출력 파일에 대해 52개의 GET(계산된 양의 두 배)과 초기 POST에 대해 8개의 POST를 보수적으로 할당하면 요청 상태를 360 - 8 - 52 = 300회 폴링할 수 있습니다.
결과에 대한 3일 SLA(4,320분)를 고려할 때 이를 통해 3일 동안 4320 / 300 ~= 15분마다 상태를 확인할 수 있습니다. 실용적인 사용법은 20분마다 실행되며 20개의 새로운 요청을 게시하고 모든 미해결 요청의 상태를 확인하는 서비스일 수 있습니다.
서비스 수준 계약
- 요청 작업은 3일 첫 사용 후 완료됩니다.
- 요청 결과는 2일 후에 만료됩니다.
- 매달 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 끝의 정수입니다. |
이 내용이 도움이 되었나요?