Resources & Tools
Everything you need to build, test, and deploy ACP integrations.
Official Resources
Specifications
| Resource | Description |
|---|---|
| Product Feed Spec | How to structure product data |
| Checkout API Spec | Session and checkout endpoints |
| Payment Token Spec | SPT handling and security |
Documentation
| Resource | Description |
|---|---|
| Quick Start Guide | Get started in minutes |
| Tutorials | Step-by-step implementation guides |
| API Reference | Complete API documentation |
| Glossary | Term definitions |
External Guides
| Resource | Description |
|---|---|
| Stripe: Guide to Agentic Commerce | Comprehensive guide covering agents, MCP, and the future of AI commerce |
| Checkout.com: Merchant Opportunity | How to prepare your business for AI-driven shopping |
| OpenAI: Instant Checkout | Official OpenAI announcement and documentation |
| ACP GitHub Repository | Open source protocol specification |
SDKs and Libraries
Official SDKs
# Install Stripe Agent Toolkit
npm install @stripe/agent-toolkitPlatform Integrations
| Platform | Status | Notes |
|---|---|---|
| Shopify | Coming soon | Native app in development |
| WooCommerce | Coming soon | WordPress plugin |
| BigCommerce | Planned | Enterprise connector |
| Magento | Planned | Adobe Commerce module |
Community Libraries
🛠️
Community-built libraries. Not officially supported but may help with integration.
| Library | Language | Description |
|---|---|---|
| Coming soon | Various | Community contributions welcome |
Development Tools
Testing Tools
Stripe CLI
Test webhooks locally:
# Install Stripe CLI
brew install stripe/stripe-cli/stripe
# Listen for webhooks
stripe listen --forward-to localhost:3000/webhooks/stripe
# Trigger test events
stripe trigger payment_intent.succeededPostman Collection
Download our Postman collection for API testing:
{
"info": {
"name": "ACP API Collection",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Products",
"item": [
{
"name": "Get All Products",
"request": {
"method": "GET",
"url": "{{base_url}}/acp/v1/products"
}
},
{
"name": "Search Products",
"request": {
"method": "GET",
"url": "{{base_url}}/acp/v1/products?search=headphones"
}
}
]
},
{
"name": "Checkout",
"item": [
{
"name": "Create Session",
"request": {
"method": "POST",
"url": "{{base_url}}/acp/v1/checkout_sessions",
"body": {
"mode": "raw",
"raw": "{\"cart\":{\"items\":[{\"product_id\":\"prod_001\",\"quantity\":1}]}}"
}
}
}
]
}
]
}Validation Tools
JSON Schema Validators
Validate your product feed structure:
// Product validation schema
const productSchema = {
type: 'object',
required: ['id', 'title', 'description', 'price', 'currency', 'availability'],
properties: {
id: { type: 'string', minLength: 1 },
title: { type: 'string', minLength: 1, maxLength: 200 },
description: { type: 'string', minLength: 1 },
price: { type: 'integer', minimum: 0 },
currency: { type: 'string', pattern: '^[A-Z]{3}$' },
availability: {
type: 'string',
enum: ['in_stock', 'out_of_stock', 'preorder', 'discontinued']
}
}
};AJV Validator Example
const Ajv = require('ajv');
const ajv = new Ajv();
const validate = ajv.compile(productSchema);
function validateProduct(product) {
const valid = validate(product);
if (!valid) {
console.error('Validation errors:', validate.errors);
return false;
}
return true;
}Code Examples
Starter Templates
| Template | Language | Description |
|---|---|---|
| Node.js Starter | JavaScript | Express + MongoDB |
| Python Starter | Python | FastAPI + PostgreSQL |
| Go Starter | Go | Gin + PostgreSQL |
Node.js Starter
# Clone the starter template
git clone https://github.com/example/acp-nodejs-starter.git
cd acp-nodejs-starter
npm install
npm run devKey files:
├── src/
│ ├── routes/
│ │ ├── products.js
│ │ └── checkout.js
│ ├── services/
│ │ ├── productService.js
│ │ ├── sessionService.js
│ │ └── paymentService.js
│ ├── models/
│ │ ├── product.js
│ │ └── session.js
│ └── app.js
├── test/
├── .env.example
└── package.jsonPython Starter
# requirements.txt
fastapi==0.104.1
uvicorn==0.24.0
stripe==7.0.0
pydantic==2.5.0
sqlalchemy==2.0.23# main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import stripe
app = FastAPI(title="ACP Store")
class CartItem(BaseModel):
product_id: str
quantity: int
class CreateSessionRequest(BaseModel):
cart: dict
buyer_context: dict = None
@app.post("/acp/v1/checkout_sessions")
async def create_session(request: CreateSessionRequest):
# Implementation
passExternal Resources
Learning
| Resource | Description |
|---|---|
| OpenAI Blog: Instant Checkout | Official announcement |
| Stripe Agent Toolkit Guide | Stripe’s implementation guide |
Related Technologies
| Technology | Relevance |
|---|---|
| Stripe Connect | Multi-merchant payments |
| Stripe Elements | Payment UI components |
| Stripe Webhooks | Event notifications |
Industry Standards
| Standard | Description |
|---|---|
| PCI DSS | Payment security standards |
| Schema.org | Product markup vocabulary |
| ISO 4217 | Currency codes |
| ISO 3166 | Country codes |
Troubleshooting Resources
Common Issues
| Issue | Solution |
|---|---|
| ”Session not found” | Check session expiration (30 min) |
| “Payment failed” | Verify test vs live keys |
| ”Invalid product” | Check product ID format |
| ”Not ready for payment” | Ensure shipping address provided |
Debug Mode
Enable detailed logging:
// Enable Stripe debug logging
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, {
apiVersion: '2023-10-16',
telemetry: false,
maxNetworkRetries: 3
});
// Enable request logging
app.use((req, res, next) => {
console.log(`${req.method} ${req.path}`, req.body);
next();
});Health Check Endpoint
app.get('/health', async (req, res) => {
const checks = {
api: 'ok',
database: 'unknown',
stripe: 'unknown'
};
try {
await mongoose.connection.db.admin().ping();
checks.database = 'ok';
} catch (e) {
checks.database = 'error';
}
try {
await stripe.balance.retrieve();
checks.stripe = 'ok';
} catch (e) {
checks.stripe = 'error';
}
const status = Object.values(checks).every(v => v === 'ok') ? 200 : 503;
res.status(status).json(checks);
});API Rate Limits
Recommended Limits
| Endpoint | Limit |
|---|---|
| Product Feed | 1000 req/min |
| Checkout Sessions | 100 req/min per IP |
| Complete Checkout | 20 req/min per session |
Rate Limiting Implementation
const rateLimit = require('express-rate-limit');
const checkoutLimiter = rateLimit({
windowMs: 60 * 1000, // 1 minute
max: 100,
message: {
error: 'Too many requests',
retry_after: 60
}
});
app.use('/acp/v1/checkout_sessions', checkoutLimiter);