Stripe Apps는 권한 시스템을 사용해 Stripe API 리소스에 대한 접근을 제어합니다. 각 권한은 앱 매니페스트에 명확한 목적 설명과 함께 명시적으로 선언해야 합니다. 사용자는 앱을 설치할 때 이 권한을 승인합니다.
stripe-app.json 매니페스트에 권한을 추가합니다:
"permission": "customer_read",
"purpose": "Read customer profiles to sync with Brevo contacts"
"permission": "customer_write",
"purpose": "Update customer metadata with Brevo sync status"
개발 단계에서는 Stripe CLI로 권한을 부여할 수 있습니다:
# Grant a specific permission
stripe apps grant permission "customer_read" \
--purpose "Read customer profiles to sync with Brevo contacts"
# Grant multiple permissions
stripe apps grant permission "charge_read" \
--purpose "Access payment data for event tracking"
stripe apps grant permission "event_read" \
--purpose "Subscribe to real-time Stripe events"
- 최소한의 권한: 앱이 실제로 사용하는 권한만 요청합니다
- 명확한 목적: 기술 지식이 없는 사용자도 이해할 수 있게 목적 설명을 작성합니다
- 읽기와 쓰기의 근거 제시: 읽기와 쓰기가 모두 필요하다면 각 목적 설명에 그 이유를 밝힙니다
- 정기적인 검토: 앱을 업데이트할 때 더 이상 필요하지 않은 권한은 삭제합니다
과도한 권한 요청은 앱이 반려되는 가장 흔한 이유 중 하나입니다. 필요한 권한만 요청하세요.
| 리소스 | 권한 | 설명 |
|---|
| Account | account_read | 계정 상세 정보와 설정을 조회합니다 |
| Account | account_write | 계정 설정을 업데이트합니다 |
| Balance | balance_read | 계정 잔액과 거래 내역을 확인합니다 |
| Customer | customer_read | 고객 프로필, 메타데이터, 결제 수단을 조회합니다 |
| Customer | customer_write | 고객 레코드를 생성, 업데이트, 삭제합니다 |
| Event | event_read | 계정 이벤트를 조회하고 구독합니다 |
| File | file_read | 업로드된 파일과 파일 링크를 조회합니다 |
| File | file_write | 파일을 업로드하고 파일 링크를 생성합니다 |
| Mandate | mandate_read | 결제 맨데이트를 조회합니다 |
| Product | product_read | 상품 카탈로그와 가격을 조회합니다 |
| Product | product_write | 상품과 가격을 생성, 업데이트, 삭제합니다 |
| Token | token_read | 토큰화된 결제 데이터를 조회합니다 |
| Webhook Endpoint | webhook_endpoint_read | 웹훅 엔드포인트 설정을 조회합니다 |
| Webhook Endpoint | webhook_endpoint_write | 웹훅 엔드포인트를 생성, 업데이트, 삭제합니다 |
| 리소스 | 권한 | 설명 |
|---|
| Charge | charge_read | 결제 청구와 환불 내역을 조회합니다 |
| Charge | charge_write | 청구를 생성하고 결제를 캡처하며 환불을 처리합니다 |
| Dispute | dispute_read | 결제 분쟁과 증빙 자료를 조회합니다 |
| Dispute | dispute_write | 분쟁 증빙 자료를 제출하고 분쟁에 대응합니다 |
| Payment Intent | payment_intent_read | 결제 인텐트의 상세 정보와 상태를 조회합니다 |
| Payment Intent | payment_intent_write | 결제 인텐트를 생성, 확정, 취소합니다 |
| Payment Method | payment_method_read | 저장된 결제 수단을 조회합니다 |
| Payment Method | payment_method_write | 고객에게 결제 수단을 연결하거나 해제합니다 |
| Payout | payout_read | 지급 상세 정보와 일정을 조회합니다 |
| Payout | payout_write | 지급을 생성하거나 취소합니다 |
| Refund | refund_read | 환불 상세 정보를 조회합니다 |
| Refund | refund_write | 환불을 생성하거나 업데이트합니다 |
| Setup Intent | setup_intent_read | 셋업 인텐트 상세 정보를 조회합니다 |
| Setup Intent | setup_intent_write | 셋업 인텐트를 생성하거나 확정합니다 |
| 리소스 | 권한 | 설명 |
|---|
| Coupon | coupon_read | 할인 쿠폰과 프로모션 코드를 조회합니다 |
| Coupon | coupon_write | 쿠폰을 생성, 업데이트, 삭제합니다 |
| Credit Note | credit_note_read | 크레딧 노트를 조회합니다 |
| Credit Note | credit_note_write | 크레딧 노트를 생성하거나 무효화합니다 |
| Invoice | invoice_read | 인보이스 상세 정보, 항목, 상태를 조회합니다 |
| Invoice | invoice_write | 인보이스를 생성, 업데이트, 확정, 무효화합니다 |
| Invoice Item | invoice_item_read | 대기 중인 인보이스 항목을 조회합니다 |
| Invoice Item | invoice_item_write | 인보이스 항목을 생성하거나 삭제합니다 |
| Plan | plan_read | 구독 플랜과 가격을 조회합니다 |
| Plan | plan_write | 플랜을 생성, 업데이트, 삭제합니다 |
| Price | price_read | 가격 설정을 조회합니다 |
| Price | price_write | 가격을 생성하거나 업데이트합니다 |
| Quote | quote_read | 가격 견적서를 조회합니다 |
| Quote | quote_write | 견적서를 생성, 확정, 수락합니다 |
| Subscription | subscription_read | 구독 상세 정보, 일정, 상태를 조회합니다 |
| Subscription | subscription_write | 구독을 생성, 업데이트, 취소합니다 |
| Subscription Schedule | subscription_schedule_read | 구독 일정을 조회합니다 |
| Subscription Schedule | subscription_schedule_write | 구독 일정을 생성, 업데이트, 해제합니다 |
| Usage Record | usage_record_read | 사용량 기반 청구의 사용 기록을 조회합니다 |
| Usage Record | usage_record_write | 사용량 기반 청구를 위한 사용 기록을 생성합니다 |
| 리소스 | 권한 | 설명 |
|---|
| Checkout Session | checkout_session_read | Checkout Session의 상세 정보와 항목을 조회합니다 |
| Checkout Session | checkout_session_write | Checkout Session을 생성하거나 만료시킵니다 |
| Payment Link | payment_link_read | Payment Link 설정을 조회합니다 |
| Payment Link | payment_link_write | Payment Link를 생성하거나 업데이트합니다 |
| 리소스 | 권한 | 설명 |
|---|
| Application Fee | application_fee_read | 애플리케이션 수수료 상세 정보를 조회합니다 |
| Connected Account | connected_account_read | 연결 계정의 상세 정보를 조회합니다 |
| Connected Account | connected_account_write | 연결 계정을 생성하거나 업데이트합니다 |
| Transfer | transfer_read | 계정 간 이체 상세 정보를 조회합니다 |
| Transfer | transfer_write | 연결 계정으로 이체를 생성합니다 |
| Top-up | topup_read | 충전 상세 정보를 조회합니다 |
| Top-up | topup_write | Stripe 잔액으로 충전을 생성합니다 |
| 리소스 | 권한 | 설명 |
|---|
| Issuing Card | issuing_card_read | 발급된 카드의 상세 정보를 조회합니다 |
| Issuing Card | issuing_card_write | 발급 카드를 생성, 업데이트, 비활성화합니다 |
| Issuing Cardholder | issuing_cardholder_read | 카드 소지자 정보를 조회합니다 |
| Issuing Cardholder | issuing_cardholder_write | 카드 소지자를 생성하거나 업데이트합니다 |
| Issuing Transaction | issuing_transaction_read | 카드 거래 상세 정보를 조회합니다 |
| Issuing Authorization | issuing_authorization_read | 승인 요청을 조회합니다 |
| Issuing Authorization | issuing_authorization_write | 승인 요청을 승인하거나 거절합니다 |
| Issuing Dispute | issuing_dispute_read | Issuing 분쟁을 조회합니다 |
| Issuing Dispute | issuing_dispute_write | Issuing 분쟁을 생성하거나 제출합니다 |
| 리소스 | 권한 | 설명 |
|---|
| Report Run | report_run_read | 리포트 실행 결과를 조회합니다 |
| Report Run | report_run_write | 새 리포트 실행을 생성합니다 |
| Report Type | report_type_read | 사용 가능한 리포트 유형을 조회합니다 |
| 리소스 | 권한 | 설명 |
|---|
| Tax Calculation | tax_calculation_read | 세금 계산 결과를 조회합니다 |
| Tax Calculation | tax_calculation_write | 세금 계산을 생성합니다 |
| Tax Rate | tax_rate_read | 세율 설정을 조회합니다 |
| Tax Rate | tax_rate_write | 세율을 생성하거나 업데이트합니다 |
| Tax Registration | tax_registration_read | 세무 등록 상세 정보를 조회합니다 |
| 리소스 | 권한 | 설명 |
|---|
| Terminal Reader | terminal_reader_read | 터미널 리더의 상세 정보를 조회합니다 |
| Terminal Reader | terminal_reader_write | 터미널 리더를 등록하거나 업데이트합니다 |
| Terminal Location | terminal_location_read | 터미널 위치의 상세 정보를 조회합니다 |
| Terminal Location | terminal_location_write | 터미널 위치를 생성하거나 업데이트합니다 |
| 리소스 | 권한 | 설명 |
|---|
| Secret | secret_read | Secret Store에 저장된 시크릿을 조회합니다 |
| Secret | secret_write | 시크릿을 생성, 업데이트, 삭제합니다 |
Tajo Brevo 연동 앱에는 다음 권한을 권장합니다:
"permission": "customer_read",
"purpose": "Sync customer profiles and contact information to Brevo"
"permission": "customer_write",
"purpose": "Store Brevo contact ID and sync status on customer metadata"
"permission": "charge_read",
"purpose": "Track purchase events and revenue data for Brevo analytics"
"permission": "product_read",
"purpose": "Sync product catalog to Brevo for personalized email campaigns"
"permission": "event_read",
"purpose": "Listen to real-time events to trigger Brevo automation workflows"
"permission": "invoice_read",
"purpose": "Track invoice events for transactional emails via Brevo"
"permission": "subscription_read",
"purpose": "Monitor subscription lifecycle for Brevo retention campaigns"
"permission": "secret_write",
"purpose": "Securely store Brevo API credentials in Stripe Secret Store"
"permission": "secret_read",
"purpose": "Retrieve stored Brevo API credentials for data sync operations"
"permission": "webhook_endpoint_write",
"purpose": "Register webhook endpoints for real-time event delivery to Tajo"
앱이 플랫폼 계정에 설치되었는지 연결 계정에 설치되었는지에 따라 권한이 적용되는 범위가 달라집니다:
| 범위 | 설명 |
|---|
| Account | 권한이 설치를 진행한 계정 자체의 데이터에 적용됩니다 |
| Connected Account | Connect 플랫폼의 경우 권한이 연결 계정까지 확장될 수 있습니다 |
쓰기 권한을 요청할 때는 앱이 언제 어떤 방식으로 데이터를 변경하는지 앱 심사 과정에서 정확히 설명할 수 있어야 합니다. 불필요한 쓰기 권한은 반려의 흔한 사유입니다.