Today I learned :
AP2 조사
AP2(Agent Payments Protocol) from Google
: AI 에이전트가 안전하게 상거래 및 결제를 수행하도록 지원하는 오픈소스 표준 프로토콜이다.
x402와 다른 점
AP2는 AI와 user 간 신뢰, 승인 layer이다. 사용자가 “하루 10달러까지 뉴스 구독에만 써라” 같은 명령을 하면 이것을 자격 증명 형태로 AI 에이전트에게 부여한다. 이때 사용하는 프로토콜이 AP2이다. 반면 x402는 돈을 옮기는 정산 및 실행 계층이다.
두 가지 플로우를 정리해보자면..
[user] -> [AP2] -> [x402]
MCP: 에이전트와 데이터/API 통신 A2A: 에이전트와 에이전트 통신 AP2: 에이전트와 결제 통신(신뢰 검증 등..)
-> A2A 위에 올라가는 결제 신뢰 레이어가 AP2이다.
AP2 개요
누가 구매를 승인했는지와 감사 추적 담당 타입 지정 mandate로 모든 거래에 설정 가능한 가드레일 적용
# AP2 내의 플로우
[IntentMandate] -> [PaymentMandate] -> [PaymentReceipt]
IntentMandate : 허용 가맹점, 지출 한도, 자동 승인 여부, 환불 가능성 요구, 만료 시간 등 가드레일 설정
PaymentMandate : 특정 카트와 금액에 바인딩된 결제 위임장으로, 한도 초과 시 관리자의 명시적 승인까지 미서명 상태 유지
PaymentReceipt : 감사 추적을 완결하는 영수증
UCP의 확장(extension)으로 동작하여, 체크아웃 플로우에 암호화된 인가 증명 추가
역할 기반 아키텍처
AP2는 다음 6개의 액터를 정의하고 있다.
- User
- Shopping Agent : 사용자와 상호작용하는 인터페이스. 추후 핸즈온에서 나오는 챗봇 화면
- Credentials Provider : 사용자의 결제 자격증명을 안전하게 관리하는 디지털 지갑
- Merchant Endpoint : 판매자 대신 상품을 확인하는 에이전트 혹은 웹 인터페이스
- MPP : 결제 네트워크로 보낼 최종 거래 승인 메시지 구성
VDC
VDC는 AP2에서 작동하는 디지털 객체인데, 이 객체는 다음 세 가지 Mandate 타입이 있다.
-
- Cart Mandate : 사용자가 직접 담는 자격증명.
- Payer&Payee 정보, 결제 수단, Risk Payload, 거래 상세, 환불 조건
-
- Intent Mandate : “콘서트 티켓 가격이 $100 이하로 떨어지면 구매해줘” 같은 사용자가 예약 맞추고 간(=거래 시점에 부재한 상태) 시나리오를 위한 VDC.
- Payer&Payee 정보, 승인된 결제 수단 목록, Risk Payload, Shopping Intent, Prompt Playback, TTL(mandate 유효시간)
- Payment Mandate : 결제 네트워크, 발급사에 공유되는 VDC.
AP2 핸즈온
mac에서 실습 진행 https://aistudio.google.com/ 에서 API 키를 발급 받아야 한다.
#
Background
AP2 프로젝트에서 짚은 AI agent 자율 결제에 대한 문제 정의는 다음과 같다. (신뢰 관점에서)
| Authorization | 사용자가 에이전트에게 특정 구매에 대한 권한을 부여했다는 것을 어떻게 검증하는가? |
|---|---|
| Authenticity | 에이전트의 요청이 사용자의 진짜 의도를 반영한 것인지, AI 환각(hallucination)으로 인한 오류가 아닌지를 판매자가 어떻게 확신할 수 있는가? |
| Accountability | 사기성 거래나 오류 거래가 발생했을 때, 사용자·에이전트 개발자·판매자·발급사 중 누가 책임을 지는가? |
AP2 프로젝트는 위 세가지에 대해 해결하고 AI 에이전트가 안전하게 상거래 및 결제를 수행하도록 지원하는 오픈소스 표준 프로토콜이다.
Analysis
누가 구매를 승인했는지와 감사 추적 담당이다. 한 가지 짚고 가야할 부분이 x402는 돈 거래, 전송 protocol이고, AP2는 AI와 user 간 신뢰, 승인 layer protocol이다.
[user] -> [AP2] -> [x402]
MCP: 에이전트와 데이터/API 통신 A2A: 에이전트와 에이전트 통신 AP2: 에이전트와 결제 통신(신뢰 검증 등..)
-> A2A 위에 올라가는 결제 신뢰 레이어가 AP2이다.
AP2 내의 플로우
[IntentMandate] -> [PaymentMandate] -> [PaymentReceipt]
IntentMandate : 허용 가맹점, 지출 한도, 자동 승인 여부, 환불 가능성 요구, 만료 시간 등 가드레일 설정
PaymentMandate : 특정 카트와 금액에 바인딩된 결제 위임장으로, 한도 초과 시 관리자의 명시적 승인까지 미서명 상태 유지
PaymentReceipt : 감사 추적을 완결하는 영수증
UCP의 확장(extension)으로 동작하여, 체크아웃 플로우에 암호화된 인가 증명 추가
역할 기반 아키텍처
AP2는 다음 6개의 액터를 정의하고 있다.
- User
- Shopping Agent : 사용자와 상호작용하는 인터페이스. 추후 핸즈온에서 나오는 챗봇 화면
- Credentials Provider : 사용자의 결제 자격증명을 안전하게 관리하는 디지털 지갑
- Merchant Endpoint : 판매자 대신 상품을 확인하는 에이전트 혹은 웹 인터페이스
- MPP : 결제 네트워크로 보낼 최종 거래 승인 메시지 구성
VDC
VDC는 AP2에서 작동하는 디지털 객체인데, 이 객체는 다음 세 가지 Mandate 타입이 있다.
-
- Cart Mandate : 사용자가 직접 담는 자격증명.
- Payer&Payee 정보, 결제 수단, Risk Payload, 거래 상세, 환불 조건
-
- Intent Mandate : “콘서트 티켓 가격이 $100 이하로 떨어지면 구매해줘” 같은 사용자가 예약 맞추고 간(=거래 시점에 부재한 상태) 시나리오를 위한 VDC.
- Payer&Payee 정보, 승인된 결제 수단 목록, Risk Payload, Shopping Intent, Prompt Playback, TTL(mandate 유효시간)
- Payment Mandate : 결제 네트워크, 발급사에 공유되는 VDC.
- IntentMandate 구조체
"intent_mandate": { "natural_language_description": "YouTube Premium subscription", "user_cart_confirmation_required": true, "requires_refundability": false, "merchants": [], "skus": [], "intent_expiry": "2026-04-12T06:31:15Z" }
-
CartMandate (x402 ver.)
"method_data": [{ "supported_methods": "https://www.x402.org/", "data": { "x402Version": 1, "accepts": [{ "scheme": "exact", "network": "base", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bda02913", "payTo": "0xMerchantWalletAddress", "maxAmountRequired": "13990000" }] } }] -
PaymentMandate
"payment_mandate": { "payment_mandate_contents": { "payment_mandate_id": "402d16a9868344749ec609fb5dd025f4", "payment_details_total": { "amount": { "currency": "USD", "value": 17.49 }, "refund_period": 30 }, "payment_response": { "method_name": "https://www.x402.org/", "details": { "value": { "scheme": "exact", "network": "base", "payload": { "signature": "0xmocksignature", "authorization": { "from_": "0xPayerWalletAddress", "to": "0xMerchantAddress", "value": "100", "valid_after": "0", "valid_before": "9999999999", "nonce": "0xrandomnonce" } } } } }, "merchant_agent": "Generic Merchant", "timestamp": "2026-04-11T06:34:04Z" } }
Practice
사전 환경 설정
mac에서 실습 진행 https://aistudio.google.com/ 에서 API 키를 발급 받아야 한다.
% git clone <ap2 깃주소>
Cloning into 'AP2'...
remote: Enumerating objects: 689, done.
remote: Counting objects: 100% (374/374), done.
remote: Compressing objects: 100% (276/276), done.
remote: Total 689 (delta 243), reused 113 (delta 98), pack-reused 315 (from 2)
Receiving objects: 100% (689/689), 1.68 MiB | 9.06 MiB/s, done.
Resolving deltas: 100% (266/266), done.
% cd AP2
% export GOOGLE_API_KEY='발급받은 api 키 넣기'
% cd samples/python
% uv sync
% bash samples/python/scenarios/a2a/human-present/cards/run.sh --payment-method x402
위와 같이 실행하면 x402 테스트 샘플로 각 agent가 실행된다.
- shopping agent(8000)
- merchant agent(8001)
- credentials provider(8002)
- merchant apyment processor(8003)
*괄호 안 숫자는 실행되고 있는 port num
실행 화면
8000 port 접속하면 이렇게 보인다. shopping_agent에서 이렇게 챗봇 형식으로 구매 가능하다.
https://github.com/6kitty/PBM-prac/blob/main/session-ddd49213-85d2-467f-840a-2a98e908efd4.json
세션에 대한 전체 구조체는 위 링크 참고
실습 history
1. "유튜브 프리미엄 구독제를 결제하고 싶어" 입력 → shopper로 전달
2. `create_intent_mandate` 호출 (YouTube Premium subscription)
3. `find_products` 호출 → 3개 옵션 제시
- 월간 $13.99
- 연간 $139.99
- 패밀리 $22.99
4. 1번(월간) 선택 → `update_chosen_cart_mandate(cart_1)`
5. 배송 주소: Google Wallet (bugsbunny@gmail.com) 통해 수집
6. 결제 수단: "Bugs's x402 Base USDC Wallet" (블록체인, Base network) 선택
7. `create_payment_mandate` → `sign_mandates_on_user_device` → `send_signed_payment_mandate_to_credentials_provider`
8. OTP: 123 입력 → `initiate_payment` 호출
9. Payment Receipt 발급 완료 (payment_id: `c0532b2832de48dfb64bd23173bd9b40`, 총 $17.49)
위 깃허브 json 파일에서 대화 흐름을 가져왔다.
트러블슈팅
shapely==2.1.1 빌드 시 GEOS 라이브러리가 없음 (geos-config not found)
numpy 헤더 파일이 없음
Python 3.14를 사용 중인데 shapely에 해당 버전 pre-built wheel이 없어서 소스 빌드를 시도하다 실패하는 것입니다. GEOS를 설치하면 해결됩니다.
- shopping agent(8000)
- merchant agent(8001)
- credentials provider(8002)
- merchant apyment processor(8003)