# Route402 Python SDK
Python SDK for Route402 - USDC payment infrastructure for AI agents on Base blockchain.
## Installation
```bash
pip install route402
```
## Quick Start
```python
from route402 import Route402Client
# Initialize client
client = Route402Client(api_key="apk_your_key_here")
# Create payment
payment = client.create_payment(
seller="0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
amount="0.05", # 0.05 USDC
reference="order-123"
)
print(f"Payment ID: {payment.id}")
print(f"Status: {payment.status}")
print(f"Amount: {payment.amount} USDC")
print(f"Fee: {payment.fee_amount} USDC")
print(f"Net: {payment.net_amount} USDC")
```
## Features
- ✅ Create and manage USDC payments
- ✅ Check payment status
- ✅ Export transactions as CSV (for accounting)
- ✅ Type-safe with dataclasses
- ✅ Built-in error handling
- ✅ Supports Base mainnet
## Usage
### Initialize Client
```python
from route402 import Route402Client
client = Route402Client(
api_key="apk_your_key_here",
api_url="https://api.route402.com" # Optional, uses default
)
```
### Create Payment
```python
payment = client.create_payment(
seller="0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
amount="0.10",
chain_id=8453, # Base mainnet (default)
reference="invoice-456" # Optional
)
# Check status
if payment.is_confirmed:
print("Payment confirmed!")
```
### Get Payment Status
```python
payment = client.get_payment("pay_abc123")
print(f"Status: {payment.status}")
print(f"Confirmed: {payment.is_confirmed}")
print(f"TX Hash: {payment.tx_hash}")
```
### List Payments
```python
# Get all payments
payments = client.list_payments(limit=10)
# Filter by status
from route402 import PaymentStatus
confirmed = client.list_payments(
status=PaymentStatus.CONFIRMED,
limit=100
)
for payment in confirmed:
print(f"{payment.id}: {payment.amount} USDC")
```
### Export CSV for Accounting
```python
# Export all payments
csv_data = client.export_payments_csv()
# Export with filters
csv_data = client.export_payments_csv(
start_date="2025-01-01",
end_date="2025-12-31",
status=PaymentStatus.CONFIRMED
)
# Save to file
with open("transactions.csv", "w") as f:
f.write(csv_data)
```
### Check Supported Chains
```python
chains = client.get_chains()
for chain in chains:
print(f"{chain['name']} (ID: {chain['chainId']})")
print(f"Router: {chain['router']}")
print(f"USDC: {chain['usdc']}")
```
## Error Handling
```python
from route402 import Route402Client, APIError, PaymentError, ValidationError
client = Route402Client(api_key="apk_xxx")
try:
payment = client.create_payment(
seller="0x123...",
amount="0.05"
)
except ValidationError as e:
print(f"Invalid input: {e}")
except APIError as e:
print(f"API error ({e.status_code}): {e.message}")
except PaymentError as e:
print(f"Payment failed: {e}")
```
## Types
### Payment
```python
@dataclass
class Payment:
id: str
chain_id: int
buyer: str
seller: str
amount: str
fee_bps: int
tx_hash: Optional[str]
status: PaymentStatus
reference: Optional[str]
created_at: datetime
confirmed_at: Optional[datetime]
# Computed properties
@property
def fee_amount(self) -> float:
"""Fee amount in USDC"""
@property
def net_amount(self) -> float:
"""Net amount after fee"""
@property
def is_confirmed(self) -> bool:
"""Is payment confirmed"""
@property
def is_pending(self) -> bool:
"""Is payment pending"""
```
### PaymentStatus
```python
class PaymentStatus(str, Enum):
PENDING = "PENDING"
BROADCASTED = "BROADCASTED"
MINED = "MINED"
CONFIRMED = "CONFIRMED"
FAILED = "FAILED"
```
### Chain
```python
class Chain(int, Enum):
BASE = 8453
POLYGON_AMOY = 80002 # Testnet
```
## Requirements
- Python 3.8+
- `requests>=2.31.0`
- `eth-account>=0.10.0`
- `web3>=6.0.0`
## Links
- **Website:** https://route402.com
- **Documentation:** https://docs.route402.com
- **API Reference:** https://docs.route402.com/api
- **GitHub:** https://github.com/route402/route402
- **Support:** hello@route402.com
## License
MIT
Raw data
{
"_id": null,
"home_page": null,
"name": "route402",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "agents, ai, blockchain, crypto, payments, stablecoin, usdc",
"author": null,
"author_email": "Route402 <hello@route402.com>",
"download_url": "https://files.pythonhosted.org/packages/4a/1f/74a5921b6aaea517d872401073664c3143eb0e1220445e8cb67e8cf04830/route402-0.1.0.tar.gz",
"platform": null,
"description": "# Route402 Python SDK\n\nPython SDK for Route402 - USDC payment infrastructure for AI agents on Base blockchain.\n\n## Installation\n\n```bash\npip install route402\n```\n\n## Quick Start\n\n```python\nfrom route402 import Route402Client\n\n# Initialize client\nclient = Route402Client(api_key=\"apk_your_key_here\")\n\n# Create payment\npayment = client.create_payment(\n seller=\"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\",\n amount=\"0.05\", # 0.05 USDC\n reference=\"order-123\"\n)\n\nprint(f\"Payment ID: {payment.id}\")\nprint(f\"Status: {payment.status}\")\nprint(f\"Amount: {payment.amount} USDC\")\nprint(f\"Fee: {payment.fee_amount} USDC\")\nprint(f\"Net: {payment.net_amount} USDC\")\n```\n\n## Features\n\n- \u2705 Create and manage USDC payments\n- \u2705 Check payment status\n- \u2705 Export transactions as CSV (for accounting)\n- \u2705 Type-safe with dataclasses\n- \u2705 Built-in error handling\n- \u2705 Supports Base mainnet\n\n## Usage\n\n### Initialize Client\n\n```python\nfrom route402 import Route402Client\n\nclient = Route402Client(\n api_key=\"apk_your_key_here\",\n api_url=\"https://api.route402.com\" # Optional, uses default\n)\n```\n\n### Create Payment\n\n```python\npayment = client.create_payment(\n seller=\"0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb\",\n amount=\"0.10\",\n chain_id=8453, # Base mainnet (default)\n reference=\"invoice-456\" # Optional\n)\n\n# Check status\nif payment.is_confirmed:\n print(\"Payment confirmed!\")\n```\n\n### Get Payment Status\n\n```python\npayment = client.get_payment(\"pay_abc123\")\n\nprint(f\"Status: {payment.status}\")\nprint(f\"Confirmed: {payment.is_confirmed}\")\nprint(f\"TX Hash: {payment.tx_hash}\")\n```\n\n### List Payments\n\n```python\n# Get all payments\npayments = client.list_payments(limit=10)\n\n# Filter by status\nfrom route402 import PaymentStatus\n\nconfirmed = client.list_payments(\n status=PaymentStatus.CONFIRMED,\n limit=100\n)\n\nfor payment in confirmed:\n print(f\"{payment.id}: {payment.amount} USDC\")\n```\n\n### Export CSV for Accounting\n\n```python\n# Export all payments\ncsv_data = client.export_payments_csv()\n\n# Export with filters\ncsv_data = client.export_payments_csv(\n start_date=\"2025-01-01\",\n end_date=\"2025-12-31\",\n status=PaymentStatus.CONFIRMED\n)\n\n# Save to file\nwith open(\"transactions.csv\", \"w\") as f:\n f.write(csv_data)\n```\n\n### Check Supported Chains\n\n```python\nchains = client.get_chains()\n\nfor chain in chains:\n print(f\"{chain['name']} (ID: {chain['chainId']})\")\n print(f\"Router: {chain['router']}\")\n print(f\"USDC: {chain['usdc']}\")\n```\n\n## Error Handling\n\n```python\nfrom route402 import Route402Client, APIError, PaymentError, ValidationError\n\nclient = Route402Client(api_key=\"apk_xxx\")\n\ntry:\n payment = client.create_payment(\n seller=\"0x123...\",\n amount=\"0.05\"\n )\nexcept ValidationError as e:\n print(f\"Invalid input: {e}\")\nexcept APIError as e:\n print(f\"API error ({e.status_code}): {e.message}\")\nexcept PaymentError as e:\n print(f\"Payment failed: {e}\")\n```\n\n## Types\n\n### Payment\n\n```python\n@dataclass\nclass Payment:\n id: str\n chain_id: int\n buyer: str\n seller: str\n amount: str\n fee_bps: int\n tx_hash: Optional[str]\n status: PaymentStatus\n reference: Optional[str]\n created_at: datetime\n confirmed_at: Optional[datetime]\n\n # Computed properties\n @property\n def fee_amount(self) -> float:\n \"\"\"Fee amount in USDC\"\"\"\n\n @property\n def net_amount(self) -> float:\n \"\"\"Net amount after fee\"\"\"\n\n @property\n def is_confirmed(self) -> bool:\n \"\"\"Is payment confirmed\"\"\"\n\n @property\n def is_pending(self) -> bool:\n \"\"\"Is payment pending\"\"\"\n```\n\n### PaymentStatus\n\n```python\nclass PaymentStatus(str, Enum):\n PENDING = \"PENDING\"\n BROADCASTED = \"BROADCASTED\"\n MINED = \"MINED\"\n CONFIRMED = \"CONFIRMED\"\n FAILED = \"FAILED\"\n```\n\n### Chain\n\n```python\nclass Chain(int, Enum):\n BASE = 8453\n POLYGON_AMOY = 80002 # Testnet\n```\n\n## Requirements\n\n- Python 3.8+\n- `requests>=2.31.0`\n- `eth-account>=0.10.0`\n- `web3>=6.0.0`\n\n## Links\n\n- **Website:** https://route402.com\n- **Documentation:** https://docs.route402.com\n- **API Reference:** https://docs.route402.com/api\n- **GitHub:** https://github.com/route402/route402\n- **Support:** hello@route402.com\n\n## License\n\nMIT\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Python SDK for Route402 - USDC payments for AI agents",
"version": "0.1.0",
"project_urls": {
"Bug Tracker": "https://github.com/route402/route402/issues",
"Documentation": "https://docs.route402.com",
"Homepage": "https://route402.com",
"Repository": "https://github.com/route402/route402"
},
"split_keywords": [
"agents",
" ai",
" blockchain",
" crypto",
" payments",
" stablecoin",
" usdc"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "f346b7d409b1eaec03b7834c14c70241f2ab491dcb4edd4d8f54656b157387f9",
"md5": "21f0a486f37c2fa83655db3d685f51d2",
"sha256": "c5dac54f17e8e9c3318751db6d0f718dee9c5211dca3fde41e060df192bd1849"
},
"downloads": -1,
"filename": "route402-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "21f0a486f37c2fa83655db3d685f51d2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 6415,
"upload_time": "2025-10-06T09:53:33",
"upload_time_iso_8601": "2025-10-06T09:53:33.633207Z",
"url": "https://files.pythonhosted.org/packages/f3/46/b7d409b1eaec03b7834c14c70241f2ab491dcb4edd4d8f54656b157387f9/route402-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4a1f74a5921b6aaea517d872401073664c3143eb0e1220445e8cb67e8cf04830",
"md5": "1f88dfa5ea4d225c68867e853549968f",
"sha256": "d370f09fa7931ce5817c5f22892019745a1194a37c2c1c3ed0661d0bf6867b6c"
},
"downloads": -1,
"filename": "route402-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "1f88dfa5ea4d225c68867e853549968f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 11446,
"upload_time": "2025-10-06T09:53:34",
"upload_time_iso_8601": "2025-10-06T09:53:34.847921Z",
"url": "https://files.pythonhosted.org/packages/4a/1f/74a5921b6aaea517d872401073664c3143eb0e1220445e8cb67e8cf04830/route402-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-06 09:53:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "route402",
"github_project": "route402",
"github_not_found": true,
"lcname": "route402"
}