Skip to main content

Secure x402 client SDK with agentic payments for buyers and sellers

Project description

x402-secure

Open-source x402 client SDKs for buyers and sellers that integrate with a unified gateway for risk session/trace and a seller proxy for verify/settle.

  • Buyer SDK: create risk session/trace via AGENT_GATEWAY_URL, build X-PAYMENT-SECURE from OpenTelemetry context.
  • Seller SDK: call proxy /x402/verify and /x402/settle with a simple verify_then_settle(...) wrapper.

Fail-fast principles:

  • Non-200 responses raise immediately (HTTPStatusError).
  • Invalid or missing traceparent context raises.
  • Header size limit enforced (X-PAYMENT-SECURE ≤ 4096 bytes).

Install

pip install x402-secure

Quickstart

import os, asyncio
from x402_client import BuyerConfig, BuyerClient, RiskClient
from x402_client import build_payment_secure_header, start_client_span

async def main():
    buyer = BuyerClient(BuyerConfig(
        seller_base_url=os.getenv("SELLER_BASE_URL", "http://localhost:8010"),
        agent_gateway_url=os.getenv("AGENT_GATEWAY_URL", "http://localhost:8000"),
        network=os.getenv("NETWORK", "base-sepolia"),
        buyer_private_key=os.getenv("BUYER_PRIVATE_KEY"),
    ))

    # Create risk session + trace
    rc = RiskClient(os.getenv("AGENT_GATEWAY_URL", "http://localhost:8000"))
    # agent_did: currently wallet address, future: EIP-8004 DID (did:eip8004:chain:contract:tokenId)
    sid = (await rc.create_session(agent_did=buyer.address, app_id=None, device={"ua": "oss-example"}))['sid']
    tid = (await rc.create_trace(sid=sid, agent_trace={"task": "buy", "parameters": {"symbol": "BTC/USD"}}))['tid']

    # Build secure header from OTEL context
    with start_client_span("buyer.payment"):
        xps = build_payment_secure_header(agent_trace_context={"tid": tid})
        res = await buyer.execute_paid_request(
            endpoint="/api/market-data",
            task="Buy BTC price",
            params={"symbol": "BTC/USD"},
            risk_sid=sid,
            extra_headers=xps,
        )
    print(res)

asyncio.run(main())

See examples/ for runnable scripts.

License

Apache-2.0

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

x402_secure-0.1.0.tar.gz (161.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

x402_secure-0.1.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file x402_secure-0.1.0.tar.gz.

File metadata

  • Download URL: x402_secure-0.1.0.tar.gz
  • Upload date:
  • Size: 161.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.9

File hashes

Hashes for x402_secure-0.1.0.tar.gz
Algorithm Hash digest
SHA256 9cf62ac56b0039f222f29cd5c61d80b262f1faccc4f59a65c55dcc53841e30b2
MD5 9952334dcb9ab01bc3630af008a94cf6
BLAKE2b-256 fe3b9c40d024aa6440f34cd5c089c2f0fe6c0f723a74ea45bf5105083b57d6a9

See more details on using hashes here.

File details

Details for the file x402_secure-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: x402_secure-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.9

File hashes

Hashes for x402_secure-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9b48f803d819be49d015f6b76a2b39a7b1e9d7f146e714dcda3c987a4f154f69
MD5 05013fdbe8b16ee39d77893c1f4f0d9a
BLAKE2b-256 72dc2aa793da41e71acb7a054fd2f5870a7d6c11dae5bd80d5f21915e64f21f1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page