route402


Nameroute402 JSON
Version 0.1.0 PyPI version JSON
download
home_pageNone
SummaryPython SDK for Route402 - USDC payments for AI agents
upload_time2025-10-06 09:53:34
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseMIT
keywords agents ai blockchain crypto payments stablecoin usdc
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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"
}
        
Elapsed time: 1.36731s