Skip to Content
🚀Agentic Commerce Protocol is now live! Instant Checkout is available in ChatGPT. Learn more →
DocumentationTools & Resources

Resources & Tools

Everything you need to build, test, and deploy ACP integrations.

Official Resources

Specifications

ResourceDescription
Product Feed SpecHow to structure product data
Checkout API SpecSession and checkout endpoints
Payment Token SpecSPT handling and security

Documentation

ResourceDescription
Quick Start GuideGet started in minutes
TutorialsStep-by-step implementation guides
API ReferenceComplete API documentation
GlossaryTerm definitions

External Guides

ResourceDescription
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-toolkit

Platform Integrations

PlatformStatusNotes
ShopifyComing soonNative app in development
WooCommerceComing soonWordPress plugin
BigCommercePlannedEnterprise connector
MagentoPlannedAdobe Commerce module

Community Libraries

🛠️

Community-built libraries. Not officially supported but may help with integration.

LibraryLanguageDescription
Coming soonVariousCommunity 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.succeeded

Postman 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

TemplateLanguageDescription
Node.js StarterJavaScriptExpress + MongoDB
Python StarterPythonFastAPI + PostgreSQL
Go StarterGoGin + 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 dev

Key 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.json

Python 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 pass

External Resources

Learning

ResourceDescription
OpenAI Blog: Instant Checkout Official announcement
Stripe Agent Toolkit Guide Stripe’s implementation guide
TechnologyRelevance
Stripe ConnectMulti-merchant payments
Stripe ElementsPayment UI components
Stripe WebhooksEvent notifications

Industry Standards

StandardDescription
PCI DSSPayment security standards
Schema.orgProduct markup vocabulary
ISO 4217Currency codes
ISO 3166Country codes

Troubleshooting Resources

Common Issues

IssueSolution
”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

EndpointLimit
Product Feed1000 req/min
Checkout Sessions100 req/min per IP
Complete Checkout20 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);

Getting Help

đź’¬

Can’t find what you need? Check our FAQ or join the community for help.

Specification maintained by OpenAI and Stripe

AboutPrivacyTermsRSS

Apache 2.0 · Open Source