ATP Protocol - Agentic Trade Protocol. The easiest way to enable agent-to-agent payments powered by Solana.
Project description
ATP Protocol
ATP (Agent Transaction Protocol) enables automatic payment processing for AI agent APIs on Solana. Add billing to any FastAPI endpoint with a few lines of code.
Part of the Swarms.ai ecosystem - ATP Protocol is built for the Swarms multi-agent orchestration framework, providing seamless payment infrastructure for agent-to-agent transactions.
What It Does
ATP Protocol makes it easy to charge for API usage:
- Automatic billing - Payment is processed automatically after each request
- Solana payments - Uses SOL or USDC for fast, cheap transactions
- Token-based pricing - Charges based on input/output token usage
- Response encryption - Agent responses are encrypted until payment is confirmed
- Payment verification - Responses are only decrypted after successful payment
- Zero infrastructure - No payment processors, no databases, just Solana
Quick Start
First, install the package:
pip install atp-protocol
Usage
Then add automatic billing to your FastAPI app:
from fastapi import FastAPI
from atp.middleware import ATPSettlementMiddleware
from atp.schemas import PaymentToken
app = FastAPI()
# Add the middleware
app.add_middleware(
ATPSettlementMiddleware,
allowed_endpoints=["/v1/chat", "/v1/completions"],
input_cost_per_million_usd=10.0, # $10 per million input tokens
output_cost_per_million_usd=30.0, # $30 per million output tokens
recipient_pubkey="YourSolanaWalletHere", # Your wallet receives 95%
payment_token=PaymentToken.SOL,
)
# Your endpoint just needs to return usage data
@app.post("/v1/chat")
async def chat(request: dict):
return {
"output": "Response here",
"usage": {
"input_tokens": 150,
"output_tokens": 50,
}
}
Client makes request:
curl -X POST http://localhost:8000/v1/chat \
-H "x-wallet-private-key: [1,2,3,...]" \
-d '{"message": "Hello!"}'
Response includes payment details (decrypted after payment):
{
"output": "Response here",
"usage": {"input_tokens": 150, "output_tokens": 50},
"atp_settlement": {
"status": "paid",
"transaction_signature": "5j7s8K9...",
"payment": {
"total_amount_sol": 0.0003,
"recipient": {"amount_sol": 0.000285},
"treasury": {"amount_sol": 0.000015}
}
}
}
If payment fails, response remains encrypted:
{
"output": "encrypted_data_here...",
"usage": {"input_tokens": 150, "output_tokens": 50},
"atp_settlement": {
"error": "Settlement failed",
"message": "Insufficient funds"
},
"atp_settlement_status": "failed",
"atp_message": "Agent response is encrypted. Payment required to decrypt. Please provide a valid wallet private key and ensure payment succeeds."
}
That's it! Payment is automatically processed on Solana, and responses are protected until payment is confirmed.
How It Works
The ATP Protocol uses a Settlement Service to handle all payment logic. Here's the flow:
sequenceDiagram
autonumber
participant C as Client
participant M as Middleware
participant E as Your Endpoint
participant SS as Settlement Service
participant S as Solana
C->>M: POST /v1/chat<br/>(x-wallet-private-key header)
M->>E: Forward request
E-->>M: Response + usage data
M->>M: Extract token counts<br/>(auto-detects format)
M->>M: Encrypt agent response<br/>(protect output)
M->>SS: Calculate payment<br/>(usage → USD → SOL/USDC)
SS->>SS: Split payment<br/>(95% recipient, 5% treasury)
SS->>S: Send payment transaction
S-->>SS: Transaction signature
SS-->>M: Settlement details
M->>M: Verify payment status
alt Payment succeeded
M->>M: Decrypt response
else Payment failed
M->>M: Keep response encrypted
end
M->>M: Add settlement info<br/>to response
M-->>C: Response + atp_settlement
Step-by-Step
- Client sends request with wallet private key in header
- Middleware intercepts and forwards to your endpoint
- Your endpoint executes and returns response with usage data
- Middleware extracts token counts (supports OpenAI, Anthropic, Google formats)
- Middleware encrypts agent response to protect output until payment is confirmed
- Settlement Service calculates cost from token usage
- Settlement Service splits payment: 95% to you, 5% to Swarms Treasury
- Settlement Service sends Solana transaction
- Middleware verifies payment status from settlement service
- If payment succeeded: Middleware decrypts response and returns it
- If payment failed: Response remains encrypted with error message
- Middleware adds settlement info to response
Architecture
flowchart TB
C[Client] -->|Request + Wallet Key| M[ATP Middleware]
M -->|Forward| E[Your Endpoint]
E -->|Response + Usage| M
M -->|Calculate Payment| SS[Settlement Service]
SS -->|Send Transaction| S[Solana]
S -->|Transaction Signature| SS
SS -->|Settlement Details| M
M -->|Response + Payment Info| C
SS -->|95%| R[Your Wallet]
SS -->|5%| T[Swarms Treasury]
The Settlement Service is a centralized service that handles:
- Parsing usage data from various API formats
- Calculating payment amounts
- Executing Solana transactions
- Verifying payments
The official facilitator at https://facilitator.swarms.world is ultra-fast and powered by Rust, ensuring low-latency payment processing. This keeps your middleware simple and ensures all settlement logic is immutable and centralized.
Configuration
Required Parameters
| Parameter | Description |
|---|---|
allowed_endpoints |
List of endpoint paths to apply settlement (e.g., ["/v1/chat"]) |
input_cost_per_million_usd |
Cost per million input tokens in USD |
output_cost_per_million_usd |
Cost per million output tokens in USD |
recipient_pubkey |
Your Solana wallet address (receives 95% of payment) |
Optional Parameters
| Parameter | Default | Description |
|---|---|---|
wallet_private_key_header |
x-wallet-private-key |
HTTP header name for wallet key |
payment_token |
PaymentToken.SOL |
PaymentToken.SOL or PaymentToken.USDC |
require_wallet |
True |
Require wallet key or skip settlement when missing |
settlement_service_url |
From ATP_SETTLEMENT_URL env |
Settlement service URL |
settlement_timeout |
From ATP_SETTLEMENT_TIMEOUT env or 300.0 |
Timeout in seconds for settlement requests (default: 5 minutes) |
fail_on_settlement_error |
False |
If True, raises HTTPException on settlement failure; if False, returns encrypted response with error |
skip_preflight |
False |
Skip Solana transaction preflight simulation |
commitment |
"confirmed" |
Solana commitment level (processed|confirmed|finalized) |
Environment Variables
# Settlement Service URL (default: https://facilitator.swarms.world)
# The official facilitator is ultra-fast and powered by Rust
ATP_SETTLEMENT_URL="https://facilitator.swarms.world"
# Settlement Service Timeout (default: 300.0 seconds / 5 minutes)
# Settlement operations may take longer due to blockchain confirmation times
# Increase this value if you experience timeout errors even when payments succeed
ATP_SETTLEMENT_TIMEOUT="300.0"
# Solana RPC URL (default: https://api.mainnet-beta.solana.com)
SOLANA_RPC_URL="https://api.mainnet-beta.solana.com"
Payment Calculation
The middleware calculates cost from token usage:
usd_cost = (input_tokens / 1,000,000 × input_rate) + (output_tokens / 1,000,000 × output_rate)
token_amount = usd_cost / token_price_usd
Payment Split:
- 95% → Your wallet (
recipient_pubkey) - 5% → Swarms Treasury (processing fee)
The fee is deducted from the total (not added on top).
Example
If a request uses 1,000 input tokens and 500 output tokens:
- Input cost:
1,000 / 1,000,000 × $10 = $0.01 - Output cost:
500 / 1,000,000 × $30 = $0.015 - Total: $0.025 USD
At SOL price of $100:
- Payment:
$0.025 / $100 = 0.00025 SOL - You receive:
0.00025 × 0.95 = 0.0002375 SOL - Treasury receives:
0.00025 × 0.05 = 0.0000125 SOL
Supported Usage Formats
The middleware automatically detects usage from common API formats:
- OpenAI:
prompt_tokens,completion_tokens,total_tokens - Anthropic:
input_tokens,output_tokens,total_tokens - Google/Gemini:
promptTokenCount,candidatesTokenCount,totalTokenCount - Generic:
input_tokens,output_tokens,total_tokens - Nested:
usage.*,meta.usage,statistics.*
Your endpoint can return usage in any of these formats - the middleware will find it.
Complete Example
from fastapi import FastAPI, JSONResponse
from atp.middleware import ATPSettlementMiddleware
from atp.schemas import PaymentToken
app = FastAPI()
# Configure middleware
app.add_middleware(
ATPSettlementMiddleware,
allowed_endpoints=["/v1/chat"],
input_cost_per_million_usd=10.0,
output_cost_per_million_usd=30.0,
recipient_pubkey="YourSolanaWalletHere",
payment_token=PaymentToken.SOL,
require_wallet=True,
fail_on_settlement_error=False, # Return encrypted response on error
settlement_timeout=300.0, # 5 minutes timeout
)
@app.post("/v1/chat")
async def chat(request: dict):
# Your business logic here
message = request.get("message", "")
# Simulate API call that returns usage
response_data = {
"output": f"You said: {message}",
"usage": {
"input_tokens": len(message.split()) * 2, # Rough estimate
"output_tokens": 50,
"total_tokens": len(message.split()) * 2 + 50,
}
}
return JSONResponse(content=response_data)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
Run it:
python app.py
Test it:
curl -X POST http://localhost:8000/v1/chat \
-H "Content-Type: application/json" \
-H "x-wallet-private-key: [1,2,3,...]" \
-d '{"message": "Hello, world!"}'
Swarms Framework Integration
For a complete example showing how to integrate ATP Protocol with Swarms agents, see:
examples/example.py or example.py (root directory)
This example demonstrates:
- Setting up a Swarms agent
- Creating FastAPI endpoints that use the agent
- Automatic payment processing with ATP middleware
- Usage tracking and billing for agent services
Quick start with Swarms:
# Install dependencies
pip install swarms atp-protocol
# Set your OpenAI API key
export OPENAI_API_KEY="your-key-here"
# Run the example
python examples/example.py
# or
python example.py
Examples
ATP Protocol includes comprehensive examples showing how to integrate with various AI agent frameworks and APIs. All examples demonstrate automatic payment processing, token usage tracking, and Solana settlement.
Framework Integration Examples
| Framework | Directory | Description | Documentation |
|---|---|---|---|
| Swarms | examples/swarms/ |
Swarms framework integration - native ATP Protocol support | README |
| LangChain | examples/langchain/ |
LangChain agent integration with tools and conversational interface | README |
| AutoGen | examples/autogen/ |
AutoGen multi-agent conversation framework integration | README |
| CrewAI | examples/crewai/ |
CrewAI multi-agent crew workflows and task pipelines | README |
| Anthropic API | examples/anthropic/ |
Direct integration with Anthropic's Claude API | README |
Standalone Examples
| Example | File | Description |
|---|---|---|
| Swarms Integration | examples/example.py |
Complete Swarms framework integration example |
| Full Flow | examples/full_flow_example.py |
End-to-end payment flow demonstration |
| Settlement Service | examples/settlement_service_example.py |
Direct settlement service usage |
| Client Smoke Test | examples/client_smoke_test.py |
Client testing and validation |
Quick Start with Examples
Each example includes:
- Server (
server.py) - FastAPI server with ATP middleware configured - Client (
client.py) - Example client with wallet authentication - README - Framework-specific setup and usage instructions
Getting started:
-
Navigate to an example directory:
cd examples/swarms # or langchain, autogen, crewai, anthropic
-
Install dependencies (see example's README for specific requirements)
-
Configure environment variables:
# Create .env file OPENAI_API_KEY="your-key" # For Swarms, LangChain, AutoGen, CrewAI ANTHROPIC_API_KEY="your-key" # For Anthropic ATP_PRIVATE_KEY="[1,2,3,...]"
-
Update
recipient_pubkeyinserver.pywith your Solana wallet address -
Run the server:
python server.py -
Test with the client:
python client.py
For detailed instructions, see the Examples README or the framework-specific README in each example directory.
Response Encryption & Payment Verification
ATP Protocol includes built-in response encryption to ensure users cannot access agent output until payment is confirmed. This provides strong protection against payment fraud.
How It Works
- After endpoint execution: The middleware encrypts sensitive response fields (e.g.,
output,response,result,message) before processing payment - Payment processing: Settlement is attempted via the Settlement Service
- Payment verification: The middleware checks if payment status is
"paid"and a transaction signature exists - Conditional decryption:
- ✅ Payment succeeded: Response is decrypted and returned to client
- ❌ Payment failed: Response remains encrypted with error message
Encrypted Response Format
When payment fails, the response includes encrypted data and a clear message:
{
"output": "encrypted_data_here...",
"usage": {"input_tokens": 150, "output_tokens": 50},
"atp_settlement": {
"error": "Settlement service unavailable",
"message": "Request timed out after 300.0s. The payment may have been sent successfully, but the settlement service did not respond in time.",
"type": "ReadTimeout"
},
"atp_settlement_status": "failed",
"atp_message": "Agent response is encrypted. Payment required to decrypt. Please provide a valid wallet private key and ensure payment succeeds."
}
Settlement Error Handling
The middleware provides flexible error handling via the fail_on_settlement_error parameter:
-
fail_on_settlement_error=False(default):- Returns encrypted response with error details
- Client receives usage data and error information
- Useful for debugging and graceful degradation
-
fail_on_settlement_error=True:- Raises
HTTPException(500) when settlement fails - Request fails immediately
- Useful for strict payment requirements
- Raises
Timeout Handling
Settlement operations may take time due to blockchain confirmation. The middleware provides informative timeout messages:
- ReadTimeout: Payment may have succeeded, but settlement service didn't respond in time
- ConnectTimeout: Settlement service is unreachable
- HTTP errors: Network or service errors with status codes
Increase settlement_timeout if you experience timeouts even when payments succeed.
Error Handling
- Missing wallet key: Returns
401 Unauthorizedifrequire_wallet=True - Missing usage data: Logs warning and returns original response (no settlement)
- Payment failure:
- If
fail_on_settlement_error=False: Returns encrypted response with error details - If
fail_on_settlement_error=True: Returns500 Internal Server Errorand raises exception
- If
- Invalid private key: Returns
500 Internal Server Errorwith parsing error - Encryption failure: Returns
500 Internal Server Errorwithout exposing agent output - Settlement timeout: Returns encrypted response with timeout message (payment may have succeeded)
How the Settlement Service Works
The Settlement Service is a centralized API that handles all payment logic. The official facilitator service at https://facilitator.swarms.world is ultra-fast and powered by Rust, ensuring low-latency payment processing.
The service provides:
POST /v1/settlement/parse-usage- Parse usage from various formatsPOST /v1/settlement/calculate-payment- Calculate payment amountsPOST /v1/settlement/settle- Execute payment transaction
The middleware calls these endpoints automatically. You can also call them directly if needed.
Settlement Service Flow
- Parse usage - Normalize token counts from any format
- Calculate cost - Convert tokens to USD using your rates
- Fetch token price - Get current SOL/USDC price
- Calculate payment - Convert USD to token amount
- Split payment - Calculate 95%/5% split
- Send transaction - Execute Solana payment
- Verify - Confirm transaction succeeded
- Return details - Transaction signature and payment breakdown
All settlement logic is immutable and centralized in the service, ensuring consistency and reliability.
Payment Tokens
ATP Protocol supports two payment tokens:
- SOL - Native Solana token (default)
- USDC - Stablecoin (treated as $1 USD)
Set payment_token=PaymentToken.USDC to use USDC instead of SOL.
Security Considerations
| Security Aspect | Details |
|---|---|
| Private keys | Only used in-memory during each request |
| No key storage | Keys are never persisted |
| Settlement Service | Handles all sensitive operations |
| Response encryption | Agent outputs are encrypted until payment is confirmed |
| Payment verification | Responses are only decrypted after successful payment verification |
| Transaction verification | Ensures payments are confirmed before a response is returned |
| Encrypted failure mode | Failed payments keep responses encrypted, preventing output access |
About Swarms
ATP Protocol is part of the Swarms ecosystem, the enterprise-grade production-ready multi-agent orchestration framework. Swarms provides the infrastructure for building and deploying autonomous agents at scale.
- Framework: Swarms on GitHub
- Documentation: docs.swarms.world
- Website: swarms.ai
ATP Protocol integrates seamlessly with Swarms agents, enabling agent-to-agent payments and automatic billing for agent services built on the Swarms framework.
License
See LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file atp_protocol-1.3.0.tar.gz.
File metadata
- Download URL: atp_protocol-1.3.0.tar.gz
- Upload date:
- Size: 38.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.3 Darwin/24.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
800f988e8ad9bddb8d14e6ea6e3e1bf1437bbd656c440a811b774b8b540331cc
|
|
| MD5 |
1706be2583978cd3adc26d67a623e617
|
|
| BLAKE2b-256 |
9256703defd74819dfa196bce641ce616daacc24d612c1adc5162734efc2face
|
File details
Details for the file atp_protocol-1.3.0-py3-none-any.whl.
File metadata
- Download URL: atp_protocol-1.3.0-py3-none-any.whl
- Upload date:
- Size: 38.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.3 CPython/3.12.3 Darwin/24.5.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0de24659309b431081df8a2a84906fb7d38fc5c955d5526563188e433f987ad
|
|
| MD5 |
b5f5653fca1f1555ea23fac84150dc61
|
|
| BLAKE2b-256 |
3ea09d021fe44a46802067683286abc71035c3ab1cfa0d1a6581d98565816ec2
|