본문으로 건너뛰기

endpoints

관련 문서​

AccessCode API 명세서

관련 문서​

목차​

1. 개요​

AccessCode 도메인의 API는 불면증 진단을 받은 환자의 앱 회원가입을 위한 인증 코드의 생성, 검증, 관리를 위한 엔드포인트를 제공합니다. 모든 API는 RESTful 원칙을 따르며, 도메인 이벤트를 통해 다른 바운디드 컨텍스트와 상호작용합니다.

기본 URL: https://api.example.com/v1/access-codes

2. 공통 사항​

2.1 인증 및 권한​

  • Bearer 토큰 인증 사용: Authorization: Bearer {token}
  • 관리자 API는 추가로 X-Admin-Token 헤더 필요
  • 권한 검증은 모든 요청에서 수행됨
  • IAM 정책 기반 접근 제어 적용

2.2 엔드포인트 접근 권한 매트릭스​

엔드포인트System AdminIAM AdminService AccountRegular User
POST /v1/access-codes/permissions/validate✓✓✓-
POST /v1/access-codes/permissions/assign✓✓ (범위 내)--
DELETE /v1/access-codes/permissions/{permissionId}✓✓ (범위 내)--
GET /v1/access-codes/permissions✓✓ (범위 내)✓-
POST /v1/access-codes✓✓ (범위 내)--
POST /v1/access-codes/validate✓✓✓✓
POST /v1/access-codes/{codeId}/use✓-✓-
POST /v1/access-codes/batch✓✓ (범위 내)--
GET /v1/access-codes/personal-data/{userId}✓✓ (범위 내)-✓ (자신만)
PATCH /v1/access-codes/personal-data/{userId}✓✓ (범위 내)-✓ (자신만)
DELETE /v1/access-codes/personal-data/{userId}✓--✓ (자신만)
POST /v1/access-codes/personal-data/{userId}/restrict✓--✓ (자신만)
GET /v1/access-codes/personal-data/{userId}/export✓--✓ (자신만)
GET /v1/access-codes/consent/{userId}✓✓ (범위 내)✓✓ (자신만)
PUT /v1/access-codes/consent/{userId}✓--✓ (자신만)
GET /v1/access-codes/time-machine/status✓✓✓-
GET /v1/access-codes/time-machine/{codeId}✓✓✓-

참고:

  • ✓: 접근 가능
  • -: 접근 불가
  • (범위 내): 할당된 조직/팀 범위 내에서만 접근 가능
  • (자신만): 자신의 데이터에만 접근 가능

2.3 응답 형식​

2.3.1 성공 응답 (단일 객체)​

{
"id": "user123",
"name": "John Doe",
"email": "john@example.com"
}

2.3.2 성공 응답 (컬렉션)​

{
"items": [
{
"id": "user123",
"name": "John Doe",
"email": "john@example.com"
},
{
"id": "user456",
"name": "Jane Smith",
"email": "jane@example.com"
}
],
"metadata": {
"totalCount": 42,
"currentPage": 1,
"pageSize": 10,
"totalPages": 5
}
}

2.3.3 에러 응답​

{
"code": 1001,
"message": "INVALID_INPUT",
"detail": "Invalid input parameters",
"errors": [
{
"field": "email",
"message": "올바른 이메일 형식이 아닙니다"
}
]
}

2.4 개인정보 보호 헤더​

모든 API 요청에 다음 헤더 포함 필요:

Privacy-Policy-Version: 2025-04-16
Consent-Token: {consent_token}
Data-Processing-Purpose: USER_AUTHENTICATION

3. API 엔드포인트​

3.1 권한 관리 API​

📌 기술 문서: 권한 관리 구현 가이드 | 권한 관리 명세

권한 관리 API는 Access Code 생성 및 관리를 위한 사용자 권한을 관리하는 기능을 제공합니다. IAM과 연동하여 세밀한 접근 제어를 지원합니다.

3.1.1 권한 검증​

  • HTTP 메서드: POST
  • 경로: /v1/access-codes/permissions/validate
  • Headers:
    • Content-Type: application/json
    • Authorization: Bearer {token}
요청 본문​
{
"accessCodeId": "code_789",
"action": "CREATE_CODE",
"scope": "org_123",
"resource": "access_code"
}
응답 (200 OK)​
{
"allowed": true,
"scope": "org_123",
"permissions": ["CREATE_CODE", "READ_CODE"]
}

3.1.2 권한 할당​

  • HTTP 메서드: POST
  • 경로: /v1/access-codes/permissions/assign
  • Headers:
    • Content-Type: application/json
    • Authorization: Bearer {token}
    • X-Admin-Token: {admin_token}
요청 본문​
{
"userId": "user_123",
"scope": "org_123",
"permissions": ["CREATE_CODE", "READ_CODE"],
"expiresAt": 1735689599000
}
응답 (201 Created)​
{
"id": "perm_456",
"userId": "user_123",
"scope": "org_123",
"permissions": ["CREATE_CODE", "READ_CODE"],
"grantedAt": 1711706400000,
"expiresAt": 1735689599000
}

3.1.3 권한 회수​

  • HTTP 메서드: DELETE
  • 경로: /v1/access-codes/permissions/{permissionId}
  • Headers:
    • Authorization: Bearer {token}
    • X-Admin-Token: {admin_token}
응답 (200 OK)​
{
"id": "perm_456",
"revokedAt": 1711706400000
}

3.1.4 권한 조회​

  • HTTP 메서드: GET
  • 경로: /v1/access-codes/permissions
  • Headers:
    • Authorization: Bearer {token}
  • Query Parameters:
    • userId: 사용자 ID (선택)
    • scope: 권한 범위 (선택)
    • page: 페이지 번호 (기본값: 1)
    • size: 페이지 크기 (기본값: 10)
응답 (200 OK)​
{
"items": [
{
"id": "perm_456",
"userId": "user_123",
"scope": "org_123",
"permissions": ["CREATE_CODE", "READ_CODE"],
"grantedAt": 1711706400000,
"expiresAt": 1735689599000
}
],
"metadata": {
"totalCount": 42,
"currentPage": 1,
"pageSize": 10,
"totalPages": 5
}
}

3.2 Access Code 관리 API​

📌 기술 문서: Access Code 관리 구현 가이드 | Access Code 관리 명세

Access Code 관리 API는 앱 사용자 등록을 위한 코드의 생성, 검증, 사용 등 전체 생명주기를 관리하는 기능을 제공합니다.

3.2.1 코드 생성​

  • HTTP 메서드: POST
  • 경로: /v1/access-codes
  • Headers:
    • Authorization: Bearer {token}
    • X-Admin-Token: {admin_token}
    • Privacy-Policy-Version: 2025-04-16
    • Data-Processing-Purpose: USER_AUTHENTICATION
    • Content-Type: application/json
요청 본문​
{
"type": "TREATMENT",
"creatorId": "user_123",
"accountId": "account_456",
"treatmentPeriod": 90,
"groupId": "group_therapy_A",
"planId": "plan.therapeutic",
"usagePeriod": 90,
"email": "m***@example.com",
"registrationChannel": "WEB",
"randomizationCode": "RND123",
"deliveryMethod": "EMAIL",
"timeMachineOptions": {
"useTimeMachine": true,
"virtualTimeStartDate": 1710924000000,
"expirationBasedOnVirtualTime": true,
"synchronizeWithUserRegistration": true,
"timeMachineReason": "테스트 목적"
}
}
응답 (201 Created)​
{
"id": "code_789",
"code": "AB12CD34EF56GH78",
"expiresAt": 1713602400000,
"status": "UNUSED",
"createdAt": 1710924000000,
"timeMachineEnabled": true,
"virtualTimeStartDate": 1710924000000
}

3.2.2 코드 검증​

  • HTTP 메서드: POST
  • 경로: /v1/access-codes/validate
  • Headers:
    • Content-Type: application/json
요청 본문​
{
"code": "AB12CD34EF56GH78",
"deviceId": "DEVICE_001"
}
응답 (200 OK)​
{
"isValid": true,
"codeInfo": {
"id": "code_789",
"treatmentPeriod": 90,
"expiresAt": 1713602400000
}
}

3.2.3 코드 사용​

  • HTTP 메서드: POST
  • 경로: /v1/access-codes/{codeId}/use
  • Headers:
    • Content-Type: application/json
    • Authorization: Bearer {service_token}
요청 본문​
{
"userId": "user_123",
"deviceId": "DEVICE_001",
"consent": {
"termsOfServiceDiGAV": true,
"dataProcessingForImprovement": false
},
"timeMachineOptions": {
"useTimeMachine": true,
"virtualTimeStartDate": 1711374600000,
"overrideCodeSettings": false,
"reason": "사용자 등록 처리"
}
}
응답 (200 OK)​
{
"id": "code_789",
"status": "USED",
"usedAt": 1711374600000,
"userId": "user_123",
"timeMachineEnabled": true,
"virtualTimeStartDate": 1711374600000
}

3.2.4 일괄 코드 생성​

  • HTTP 메서드: POST
  • 경로: /v1/access-codes/batch
  • Headers:
    • Content-Type: application/json
    • Authorization: Bearer {token}
    • X-Admin-Token: {admin_token}
요청 본문​
{
"count": 10,
"type": "TREATMENT",
"creatorId": "user_123",
"accountId": "account_456",
"treatmentPeriod": 90,
"usagePeriod": 90,
"groupId": "group_therapy_A",
"planId": "plan.therapeutic",
"registrationChannel": "WEB",
"timeMachineOptions": {
"useTimeMachineForAll": true,
"commonVirtualTimeStartDate": 1710924000000,
"expirationBasedOnVirtualTime": true,
"reason": "일괄 테스트 코드 생성"
}
}
응답 (201 Created)​
{
"items": [
{
"id": "code_789",
"code": "AB12CD34EF56GH78",
"expiresAt": 1713602400000,
"timeMachineEnabled": true,
"virtualTimeStartDate": 1710924000000
}
// ... other items
],
"metadata": {
"totalCount": 10,
"currentPage": 1,
"pageSize": 10,
"totalPages": 1
},
"batchId": "batch_001",
"timeMachineEnabled": true
}

3.3 개인정보 관리 API​

📌 기술 문서: TBD

개인정보 관리 API는 GDPR 등 개인정보 보호 법규를 준수하기 위한 개인정보 열람, 수정, 삭제, 처리 제한, 이동 기능을 제공합니다.

3.3.1 개인정보 열람​

  • HTTP 메서드: GET
  • 경로: /v1/access-codes/personal-data/{userId}
  • Headers:
    • Authorization: Bearer {token}
    • Privacy-Policy-Version: 2025-04-16

3.3.2 개인정보 수정​

  • HTTP 메서드: PATCH
  • 경로: /v1/access-codes/personal-data/{userId}
  • Headers:
    • Authorization: Bearer {token}
    • Privacy-Policy-Version: 2025-04-16

3.3.3 개인정보 삭제​

  • HTTP 메서드: DELETE
  • 경로: /v1/access-codes/personal-data/{userId}
  • Headers:
    • Authorization: Bearer {token}
    • Privacy-Policy-Version: 2025-04-16

3.3.4 개인정보 처리 제한​

  • HTTP 메서드: POST
  • 경로: /v1/access-codes/personal-data/{userId}/restrict
  • Headers:
    • Authorization: Bearer {token}
    • Privacy-Policy-Version: 2025-04-16

3.3.5 개인정보 이동​

  • HTTP 메서드: GET
  • 경로: /v1/access-codes/personal-data/{userId}/export
  • Headers:
    • Authorization: Bearer {token}
    • Privacy-Policy-Version: 2025-04-16

3.4 동의 관리 API​

📌 기술 문서: TBD

동의 관리 API는 사용자의 개인정보 처리 동의 상태를 조회하고 변경하는 기능을 제공합니다.

3.4.1 동의 상태 조회​

  • HTTP 메서드: GET
  • 경로: /v1/access-codes/consent/{userId}
  • Headers:
    • Authorization: Bearer {token}

3.4.2 동의 설정 변경​

  • HTTP 메서드: PUT
  • 경로: /v1/access-codes/consent/{userId}
  • Headers:
    • Authorization: Bearer {token}
    • Content-Type: application/json
요청 본문​
{
"consents": {
"dataProcessing": true,
"emailMarketing": false,
"thirdPartySharing": false
},
"validUntil": 1742460000000
}

3.5 TimeMachine 통합 API​

📌 기술 문서: TimeMachine 통합 구현 가이드 | TimeMachine 통합 명세

TimeMachine 통합 API는 Access Code의 가상 시간 관리와 TimeMachine 도메인과의 연동을 위한 기능을 제공합니다.

3.5.1 TimeMachine 상태 조회​

  • HTTP 메서드: GET
  • 경로: /v1/access-codes/time-machine/status
  • Headers:
    • Authorization: Bearer {token}
응답 (200 OK)​
{
"integratedWithTimeMachine": true,
"totalVirtualTimeAccessCodes": 45,
"activeVirtualTimeAccessCodes": 32,
"totalUserRegistrationsWithVirtualTime": 28,
"averageVirtualTimeOffset": {
"days": 15,
"hours": 6,
"minutes": 30
}
}

3.5.2 특정 코드의 TimeMachine 정보 조회​

  • HTTP 메서드: GET
  • 경로: /v1/access-codes/time-machine/{codeId}
  • Headers:
    • Authorization: Bearer {token}
응답 (200 OK)​
{
"codeId": "code_789",
"timeMachineEnabled": true,
"virtualTimeStartDate": 1710924000000,
"expirationBasedOnVirtualTime": true,
"createdAt": 1710924000000,
"expiresAt": 1713602400000,
"realCreatedAt": 1713171600000,
"realExpiresAt": 1715850000000,
"virtualTimeOffset": {
"days": -26,
"hours": 0,
"minutes": 0
},
"associatedUserRegistration": {
"userId": "user_123",
"timeMachineEnabled": true,
"virtualTimeStartDate": 1710924000000
}
}

4. 에러 코드​

4.1 공통 에러 코드​

HTTP 상태 코드오류 코드메시지설명대응 방법
4001000INVALID_INPUT입력 데이터가 유효하지 않음입력 데이터를 확인하고 다시 시도
4011001UNAUTHORIZED인증 정보가 제공되지 않음Bearer 토큰을 제공하거나 관리자에게 문의
4031002FORBIDDEN요청한 작업에 대한 권한이 없음권한을 확인하거나 관리자에게 문의

4.2 권한 관련 에러 코드​

HTTP 상태 코드오류 코드메시지설명대응 방법
4032001INVALID_PERMISSION요청한 작업에 대한 권한이 없음권한을 확인하거나 관리자에게 문의
4032002PERMISSION_EXPIRED권한이 만료됨권한을 갱신하거나 관리자에게 문의
4002003INVALID_SCOPE권한 범위가 유효하지 않음권한 범위를 확인하고 다시 시도
4042004SCOPE_NOT_FOUND요청한 권한 범위가 존재하지 않음권한 범위를 확인하고 다시 시도

4.3 Access Code 관련 에러 코드​

HTTP 상태 코드오류 코드메시지설명대응 방법
4003001INVALID_CODE입력한 코드가 유효하지 않음코드를 확인하고 다시 시도
4003002CODE_ALREADY_USED입력한 코드가 이미 사용됨다른 코드를 사용하거나 관리자에게 문의
4003003CODE_EXPIRED입력한 코드가 만료됨새로운 코드를 발급받거나 관리자에게 문의
4093004DUPLICATE_CODE입력한 코드가 이미 존재함고유한 코드를 생성하거나 관리자에게 문의

4.4 TimeMachine 관련 에러 코드​

HTTP 상태 코드오류 코드메시지설명대응 방법
4004001INVALID_VIRTUAL_TIME가상 시간 설정이 유효하지 않음유효한 시간을 설정하고 다시 시도
4094002TIME_MACHINE_DISABLEDTimeMachine 기능이 비활성화됨TimeMachine 기능을 활성화하거나 관리자에게 문의
4004003FUTURE_VIRTUAL_TIME현재보다 미래의 가상 시간으로 설정 불가현재 시간보다 이전 시간으로 설정
4004004VIRTUAL_TIME_TOO_OLD설정 가능한 범위보다 오래된 가상 시간허용된 범위 내의 시간으로 설정
4004005TIME_MACHINE_SYNC_ERRORTimeMachine과의 동기화 중 오류 발생잠시 후 다시 시도하거나 관리자에게 문의

4.5 시스템 에러 코드​

HTTP 상태 코드오류 코드메시지설명대응 방법
5005001DATABASE_ERROR데이터베이스와의 통신 중 오류 발생잠시 후 다시 시도하거나 관리자에게 문의
5035002SERVICE_UNAVAILABLE서비스가 일시적으로 불가능함잠시 후 다시 시도

5. 변경 이력​

버전날짜작성자변경 내용
0.1.02025-03-16bok@weltcorp.com최초 작성
0.2.02025-04-31bok@weltcorp.comauth 도메인 문서 형식에 맞추어 구조 및 스타일 변경
0.3.02025-04-31bok@weltcorp.comAPI 엔드포인트 순서 변경 (Access Code 관리 -> 권한 관리)
0.4.02025-04-31bok@weltcorp.comAPI 엔드포인트 순서 변경 (권한 관리 -> Access Code 관리)
0.5.02025-04-31bok@weltcorp.comPrivacy-Policy-Version 헤더 값 형식을 날짜 기반(2025-04-16)으로 변경
0.6.02025-04-31bok@weltcorp.com개인정보 동의 수집 시점을 코드 생성에서 코드 사용(회원가입) 시점으로 변경
0.7.02025-04-31bok@weltcorp.com회원가입 시 수집하는 동의 항목을 구체적인 독일어 문구 2가지(필수/선택)로 변경