← Back to report Page 2 of 3
Full Transcript
Stripe - Sonnet Transcript
Report: Stripe - Universal Baseline Model: Sonnet 4.6 Tested: 2026-03-24 Agent CLI: Claude Code v2.1.81
Task 3
Core task
Related findings: F-001
OperatorStep 1
Using the Stripe test mode API key, complete this workflow: 1. Create a customer with the name "Test User" and email "test@example.com" 2. Create a product called "Usability Audit" priced at $99 (one-time, not recurring) 3. Create a Payment Intent for that amount, attached to the customer 4. Confirm the Payment Intent using a test card number 5. Verify the payment shows as succeeded Use only the Stripe API. Show me the API calls you make and the responses you get. After each step, verify it succeeded before moving to the next — show me the evidence (e.g. the API response confirming creation/status).
AgentStep 2
I'll work through each step sequentially, verifying before moving on. --- ### Step 1 — Create Customer
BashTool Use
Input
Show input
{
"command": "curl -s https://api.stripe.com/v1/customers \\\n -u sk_test_[REDACTED]: \\\n -d name=\"Test User\" \\\n -d email=\"test@example.com\" \\\n | python3 -m json.tool",
"description": "Create Stripe customer: Test User / test@example.com",
"dangerouslyDisableSandbox": true
}BashTool Result
Result
Show output
{
"id": "cus_UCsIF9bS5c49z6",
"object": "customer",
"address": null,
"balance": 0,
"created": 1774349448,
"currency": null,
"customer_account": null,
"default_currency": null,
"default_source": null,
"delinquent": false,
"description": null,
"discount": null,
"email": "test@example.com",
"invoice_prefix": "ZV1IQD65",
"invoice_settings": {
"custom_fields": null,
"default_payment_method": null,
"footer": null,
"rendering_options": null
},
"livemode": false,
"metadata": {},
"name": "Test User",
"next_invoice_sequence": 1,
"phone": null,
"preferred_locales": [],
"shipping": null,
"sources": {
"object": "list",
"data": [],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_UCsIF9bS5c49z6/sources"
},
"subscriptions": {
"object": "list",
"data": [],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_UCsIF9bS5c49z6/subscriptions"
},
"tax_exempt": "none",
"tax_ids": {
"object": "list",
"data": [],
"has_more": false,
"total_count": 0,
"url": "/v1/customers/cus_UCsIF9bS5c49z6/tax_ids"
},
"test_clock": null
}AgentStep 3
**Step 1 ✓** Customer created. - `id`: `cus_UCsIF9bS5c49z6` - `name`: Test User, `email`: test@example.com, `livemode: false` --- ### Step 2 — Create Product, then Price First the product:
BashTool Use
Input
Show input
{
"command": "curl -s https://api.stripe.com/v1/products \\\n -u sk_test_[REDACTED]: \\\n -d name=\"Usability Audit\" \\\n | python3 -m json.tool",
"description": "Create Stripe product: Usability Audit",
"dangerouslyDisableSandbox": true
}BashTool Result
Result
Show output
{
"id": "prod_UCsIU0SZWdiEba",
"object": "product",
"active": true,
"attributes": [],
"created": 1774349455,
"default_price": null,
"description": null,
"features": [],
"images": [],
"livemode": false,
"marketing_features": [],
"metadata": {},
"name": "Usability Audit",
"package_dimensions": null,
"shippable": null,
"statement_descriptor": null,
"tax_code": null,
"type": "service",
"unit_label": null,
"updated": 1774349455,
"url": null
}AgentStep 4
Product created (`prod_UCsIU0SZWdiEba`). Now attach a one-time price of $99 USD:
BashTool Use
Input
Show input
{
"command": "curl -s https://api.stripe.com/v1/prices \\\n -u sk_test_[REDACTED]: \\\n -d product=prod_UCsIU0SZWdiEba \\\n -d unit_amount=9900 \\\n -d currency=usd \\\n | python3 -m json.tool",
"description": "Create one-time price of $99 USD for the Usability Audit product",
"dangerouslyDisableSandbox": true
}BashTool Result
Result
Show output
{
"id": "price_1TESYBLSFkr2JHffmFMsC0Fk",
"object": "price",
"active": true,
"billing_scheme": "per_unit",
"created": 1774349467,
"currency": "usd",
"custom_unit_amount": null,
"livemode": false,
"lookup_key": null,
"metadata": {},
"nickname": null,
"product": "prod_UCsIU0SZWdiEba",
"recurring": null,
"tax_behavior": "unspecified",
"tiers_mode": null,
"transform_quantity": null,
"type": "one_time",
"unit_amount": 9900,
"unit_amount_decimal": "9900"
}AgentStep 5
**Step 2 ✓** Product and price created. - Product `prod_UCsIU0SZWdiEba` — "Usability Audit" - Price `price_1TESYBLSFkr2JHffmFMsC0Fk` — $99.00 USD, `type: one_time`, `recurring: null` (confirmed not a subscription) --- ### Step 3 — Create PaymentIntent for $99 attached to the customer
BashTool Use
Input
Show input
{
"command": "curl -s https://api.stripe.com/v1/payment_intents \\\n -u sk_test_[REDACTED]: \\\n -d amount=9900 \\\n -d currency=usd \\\n -d customer=cus_UCsIF9bS5c49z6 \\\n -d description=\"Usability Audit\" \\\n -d \"metadata[price_id]=price_1TESYBLSFkr2JHffmFMsC0Fk\" \\\n -d \"metadata[product_id]=prod_UCsIU0SZWdiEba\" \\\n | python3 -m json.tool",
"description": "Create PaymentIntent for $99 USD linked to customer cus_UCsIF9bS5c49z6",
"dangerouslyDisableSandbox": true
}BashTool Result
Result
Show output
{
"id": "pi_3TESYKLSFkr2JHff180KdHja",
"object": "payment_intent",
"amount": 9900,
"amount_capturable": 0,
"amount_details": {
"tip": {}
},
"amount_received": 0,
"application": null,
"application_fee_amount": null,
"automatic_payment_methods": null,
"canceled_at": null,
"cancellation_reason": null,
"capture_method": "automatic",
"charges": {
"object": "list",
"data": [],
"has_more": false,
"total_count": 0,
"url": "/v1/charges?payment_intent=pi_3TESYKLSFkr2JHff180KdHja"
},
"client_secret": "pi_3TESYKLSFkr2JHff180KdHja_secret_eyEwhLq3yFNMTWHu1SuEL3vqh",
"confirmation_method": "automatic",
"created": 1774349476,
"currency": "usd",
"customer": "cus_UCsIF9bS5c49z6",
"customer_account": null,
"description": "Usability Audit",
"excluded_payment_method_types": null,
"invoice": null,
"last_payment_error": null,
"latest_charge": null,
"livemode": false,
"metadata": {
"price_id": "price_1TESYBLSFkr2JHffmFMsC0Fk",
"product_id": "prod_UCsIU0SZWdiEba"
},
"next_action": null,
"on_behalf_of": null,
"payment_method": null,
"payment_method_configuration_details": null,
"payment_method_options": {
"card": {
"installments": null,
"mandate_options": null,
"network": null,
"request_three_d_secure": "automatic"
}
},
"payment_method_types": [
"card"
],
"processing": null,
"receipt_email": null,
"review": null,
"setup_future_usage": null,
"shipping": null,
"source": null,
"statement_descriptor": null,
"statement_descriptor_suffix": null,
"status": "requires_payment_method",
"transfer_data": null,
"transfer_group": null
}AgentStep 6
**Step 3 ✓** PaymentIntent created. - `id`: `pi_3TESYKLSFkr2JHff180KdHja` - `amount`: 9900 ($99.00 USD) - `customer`: `cus_UCsIF9bS5c49z6` ✓ - `status`: `requires_payment_method` — ready to confirm - `livemode: false` ✓ --- ### Step 4 — Confirm with test card `pm_card_visa` Stripe provides `pm_card_visa` as a built-in server-side test payment method (equivalent to card `4242 4242 4242 4242`), usable directly without a frontend:
BashTool Use
Input
Show input
{
"command": "curl -s https://api.stripe.com/v1/payment_intents/pi_3TESYKLSFkr2JHff180KdHja/confirm \\\n -u sk_test_[REDACTED]: \\\n -d payment_method=pm_card_visa \\\n | python3 -m json.tool",
"description": "Confirm PaymentIntent using Stripe's built-in test Visa payment method",
"dangerouslyDisableSandbox": true
}BashTool Result
Result
Show output
{
"id": "pi_3TESYKLSFkr2JHff180KdHja",
"object": "payment_intent",
"amount": 9900,
"amount_capturable": 0,
"amount_details": {
"tip": {}
},
"amount_received": 9900,
"application": null,
"application_fee_amount": null,
"automatic_payment_methods": null,
"canceled_at": null,
"cancellation_reason": null,
"capture_method": "automatic",
"charges": {
"object": "list",
"data": [
{
"id": "ch_3TESYKLSFkr2JHff1ZzjFlh8",
"object": "charge",
"amount": 9900,
"amount_captured": 9900,
"amount_refunded": 0,
"application": null,
"application_fee": null,
"application_fee_amount": null,
"balance_transaction": "txn_3TESYKLSFkr2JHff1ilZ5Q5b",
"billing_details": {
"address": {
"city": null,
"country": null,
"line1": null,
"line2": null,
"postal_code": null,
"state": null
},
"email": null,
"name": null,
"phone": null,
"tax_id": null
},
"calculated_statement_descriptor": "PMJOBLIST.COM",
"captured": true,
"created": 1774349485,
"currency": "usd",
"customer": "cus_UCsIF9bS5c49z6",
"description": "Usability Audit",
"destination": null,
"dispute": null,
"disputed": false,
"failure_balance_transaction": null,
"failure_code": null,
"failure_message": null,
"fraud_details": {},
"invoice": null,
"livemode": false,
"metadata": {
"price_id": "price_1TESYBLSFkr2JHffmFMsC0Fk",
"product_id": "prod_UCsIU0SZWdiEba"
},
"on_behalf_of": null,
"order": null,
"outcome": {
"advice_code": null,
"network_advice_code": null,
"network_decline_code": null,
"network_status": "approved_by_network",
"reason": null,
"risk_level": "normal",
"risk_score": 36,
"seller_message": "Payment complete.",
"type": "authorized"
},
"paid": true,
"payment_intent": "pi_3TESYKLSFkr2JHff180KdHja",
"payment_method": "pm_1TESYTLSFkr2JHffHa0Wt8so",
"payment_method_details": {
"card": {
"amount_authorized": 9900,
"authorization_code": "403620",
"brand": "visa",
"checks": {
"address_line1_check": null,
"address_postal_code_check": null,
"cvc_check": "pass"
},
"country": "US",
"exp_month": 3,
"exp_year": 2027,
"extended_authorization": {
"status": "disabled"
},
"fingerprint": "LYfZCkLjnCpwibDF",
"funding": "credit",
"incremental_authorization": {
"status": "unavailable"
},
"installments": null,
"last4": "4242",
"mandate": null,
"multicapture": {
"status": "unavailable"
},
"network": "visa",
"network_token": {
"used": false
},
"network_transaction_id": "768910290671077",
"overcapture": {
"maximum_amount_capturable": 9900,
"status": "unavailable"
},
"regulated_status": "unregulated",
"three_d_secure": null,
"wallet": null
},
"type": "card"
},
"radar_options": {},
"receipt_email": null,
"receipt_number": null,
"receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xSERab2tMU0ZrcjJKSGZmKK7Zic4GMgZ0wO5S2Os6LBb3kC8FK1pAJya0ggfdJSNAXapvM-qQTUl1OH_sI9IsDGniPJ5EuXsDSQ1J",
"refunded": false,
"refunds": {
"object": "list",
"data": [],
"has_more": false,
"total_count": 0,
"url": "/v1/charges/ch_3TESYKLSFkr2JHff1ZzjFlh8/refunds"
},
"review": null,
"shipping": null,
"source": null,
"source_transfer": null,
"statement_descriptor": null,
"statement_descriptor_suffix": null,
"status": "succeeded",
"transfer_data": null,
"transfer_group": null
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/charges?payment_intent=pi_3TESYKLSFkr2JHff180KdHja"
},
"client_secret": "pi_3TESYKLSFkr2JHff180KdHja_secret_eyEwhLq3yFNMTWHu1SuEL3vqh",
"confirmation_method": "automatic",
"created": 1774349476,
"currency": "usd",
"customer": "cus_UCsIF9bS5c49z6",
"customer_account": null,
"description": "Usability Audit",
"excluded_payment_method_types": null,
"invoice": null,
"last_payment_error": null,
"latest_charge": "ch_3TESYKLSFkr2JHff1ZzjFlh8",
"livemode": false,
"metadata": {
"price_id": "price_1TESYBLSFkr2JHffmFMsC0Fk",
"product_id": "prod_UCsIU0SZWdiEba"
},
"next_action": null,
"on_behalf_of": null,
"payment_method": "pm_1TESYTLSFkr2JHffHa0Wt8so",
"payment_method_configuration_details": null,
"payment_method_options": {
"card": {
"installments": null,
"mandate_options": null,
"network": null,
"request_three_d_secure": "automatic"
}
},
"payment_method_types": [
"card"
],
"processing": null,
"receipt_email": null,
"review": null,
"setup_future_usage": null,
"shipping": null,
"source": null,
"statement_descriptor": null,
"statement_descriptor_suffix": null,
"status": "succeeded",
"transfer_data": null,
"transfer_group": null
}AgentStep 7
**Step 4 ✓** PaymentIntent confirmed and payment processed immediately. --- ### Step 5 — Independent verification: re-fetch the PaymentIntent
BashTool Use
Input
Show input
{
"command": "curl -s https://api.stripe.com/v1/payment_intents/pi_3TESYKLSFkr2JHff180KdHja \\\n -u sk_test_[REDACTED]: \\\n | python3 -c \"\nimport json, sys\npi = json.load(sys.stdin)\ncharge = pi['charges']['data'][0]\nprint('=== PaymentIntent ===')\nprint(f' ID: {pi[\\\"id\\\"]}')\nprint(f' Status: {pi[\\\"status\\\"]}')\nprint(f' Amount received: \\${pi[\\\"amount_received\\\"]/100:.2f} {pi[\\\"currency\\\"].upper()}')\nprint(f' Customer: {pi[\\\"customer\\\"]}')\nprint(f' Description: {pi[\\\"description\\\"]}')\nprint(f' Live mode: {pi[\\\"livemode\\\"]}')\nprint()\nprint('=== Charge ===')\nprint(f' Charge ID: {charge[\\\"id\\\"]}')\nprint(f' Status: {charge[\\\"status\\\"]}')\nprint(f' Captured: {charge[\\\"captured\\\"]}')\nprint(f' Paid: {charge[\\\"paid\\\"]}')\nprint(f' Card brand: {charge[\\\"payment_method_details\\\"][\\\"card\\\"][\\\"brand\\\"]}')\nprint(f' Last 4: {charge[\\\"payment_method_details\\\"][\\\"card\\\"][\\\"last4\\\"]}')\nprint(f' Network outcome: {charge[\\\"outcome\\\"][\\\"network_status\\\"]}')\nprint(f' Seller message: {charge[\\\"outcome\\\"][\\\"seller_message\\\"]}')\nprint(f' Balance txn: {charge[\\\"balance_transaction\\\"]}')\n\"\n",
"description": "Fetch and summarize final PaymentIntent state as independent verification",
"dangerouslyDisableSandbox": true
}BashTool Result
Result
Show output
=== PaymentIntent === ID: pi_3TESYKLSFkr2JHff180KdHja Status: succeeded Amount received: $99.00 USD Customer: cus_UCsIF9bS5c49z6 Description: Usability Audit Live mode: False === Charge === Charge ID: ch_3TESYKLSFkr2JHff1ZzjFlh8 Status: succeeded Captured: True Paid: True Card brand: visa Last 4: 4242 Network outcome: approved_by_network Seller message: Payment complete. Balance txn: txn_3TESYKLSFkr2JHff1ilZ5Q5b
AgentStep 8
**Step 5 ✓** Independent fetch confirms success. --- ## Summary All 5 steps completed successfully: | Step | Object | ID | Result | |------|--------|----|--------| | 1 | Customer | `cus_UCsIF9bS5c49z6` | Created — Test User / test@example.com | | 2 | Product + Price | `prod_UCsIU0SZWdiEba` / `price_1TESYBLSFkr2JHffmFMsC0Fk` | "Usability Audit", $99.00 USD, one-time | | 3 | PaymentIntent | `pi_3TESYKLSFkr2JHff180KdHja` | Created, linked to customer | | 4 | Confirmation | `ch_3TESYKLSFkr2JHff1ZzjFlh8` | Visa `4242`, `approved_by_network` | | 5 | Verification | Balance txn `txn_3TESYKLSFkr2JHff1ilZ5Q5b` | `status: succeeded`, `amount_received: $99.00` | The full charge lifecycle works. In a real integration, step 4 happens client-side (Stripe.js collects the real card in the browser and calls confirm) — the server never touches raw card numbers.