Skip to main content

Zero-dependency Python client for the agents.u.cash 402 Online Protocol API — non-custodial agent payments (buy + sell).

Project description

agents-u-cash (Python)

Zero-dependency Python client for the agents.u.cash API — the 402 Online Protocol for non-custodial agent payments. Works for both sides of the network: an agent selling (manage resources, watch settlements) and a buyer (fetch a 402 door, pay, and settle — automatically via on-chain detection, or instantly by submitting the tx hash).

Uses only the standard library (urllib). No dependencies. Python 3.7+.

Install

pip install agents-u-cash

Or copy agents_u_cash.py — it has no dependencies.

Sell (as an agent)

from agents_u_cash import AgentsUCash

# Get an API key once (wallet-first; then top up >= $1 to activate):
# key = AgentsUCash().signup(email="me@agent.dev", password="longpass")["api_key"]

agent = AgentsUCash(api_key="...")
agent.set_wallet("btc", "bc1q…")
agent.set_webhook("https://my.bot/webhook")

res = agent.create_resource(amount=0.05)               # priced resource
acc = agent.create_challenge(res["res_id"])             # what a buyer pays
# Share the payable link: https://agents.u.cash/r/{res_id}

settled = agent.get_settlements()                       # your earnings log

Buy (as a buyer)

from agents_u_cash import AgentsUCash

buyer = AgentsUCash()                                   # no key needed to buy
door = buyer.view_door(res_id)                          # the 402 door (JSON)
# 1. pick an entry, pay entry["payTo"] exactly entry["amount"] from your wallet (out of band)
# 2. the platform auto-detects the on-chain payment and settles it.
#    Optionally POST the tx hash to settle instantly instead:
result = buyer.verify(door["accepts"][0]["challengeId"], tx_hash)
# -> {"settled": True} | {"status": "pending", "confirmations": n, "required": m}

A human-friendly payable page is also available: buyer.view_door(res_id, html=True) returns the HTML.

UCP checkout sessions (buyer)

Multi-item, mixed-currency carts over the Universal Commerce Protocol. The merchant is resolved from the custom-domain base_url, or from a cloud merchant token on the shared host. No API key.

buyer = AgentsUCash()   # base_url = the merchant's domain (or the platform host + cloud)
cart = buyer.create_checkout(
    line_items=[{"item": {"id": res_id_a}, "quantity": 1}, {"item": {"id": res_id_b}, "quantity": 2}],
    currency="USD",            # optional: cart currency for mixed-currency carts
    cloud="<merchant-token>",  # only on the shared platform host
)
# -> {"id": ..., "status": "incomplete", "currency", "line_items", "totals", "ap2": {"merchant_authorization", "nonce"}}
ready = buyer.complete_checkout(cart["id"], cloud="<merchant-token>")
# -> ready_for_complete + payment_handlers[] (pay each challenge on-chain)
order = buyer.get_order(cart["id"], cloud="<merchant-token>")   # per-item fulfillment status

Optional AP2 (dev.ucp.shopping.ap2_mandate): pass complete_checkout(id, ap2={"checkout_mandate": ...}, cloud=...) with a buyer-signed SD-JWT-VC for holder-proof authorization. Responses are RFC 9421-signed (ES256) with the merchant key.

API

Method Auth Description
signup(email, password, primary_wallet=None) Register; returns api_key
top_up(amount) key Create a ≥$1 top-up checkout (activates the account)
get_agent() key Account snapshot (balance, wallets, webhook, earnings summary)
set_webhook(url) key Set the settlement webhook
set_wallet(asset, address) key Set your receive address for an asset
set_stripe(secret_key, product_id, webhook_secret, publishable_key=None) key Connect your Stripe account (card rail); verifies the key + product
get_stripe() key Masked Stripe config + the webhook endpoint to register
clear_stripe() key Disconnect your Stripe account
set_custom_token(type, code, contract_address, decimals, name, rate=None, rate_url=None) key Add a custom token (ERC-20/TRC-20/SPL); then set_wallet(asset=code, address=...) to set its receive address
get_custom_tokens() key List your custom tokens
delete_custom_token(code) key Remove a custom token
get_settings() key Read safe settings (confirmations, webhook url+secret, currency, payment prefs, notifications, branding)
set_settings(partial) key Partially update safe settings
create_resource(amount, currency=None, accepted_assets=None, webhook_url=None) key Create a priced resource
get_resources(res_id=None) key List resources, or fetch one
create_challenge(res_id) key Build the multi-coin accepts[]
verify(challenge_id, hash) key optional Verify + settle (buyer-push: no key needed)
get_settlements() key Earnings log
view_door(res_id, html=False) The public 402 door (JSON, or HTML)
create_checkout(line_items, currency=None, buyer=None, context=None, cloud=None) UCP checkout session (multi-item, mixed-currency cart)
get_checkout(id, cloud=None) Fetch a checkout session
complete_checkout(id, ap2=None, cloud=None) Mint challenges -> ready_for_complete (optional AP2 mandate)
cancel_checkout(id, cloud=None) Cancel a checkout session
get_order(id, cloud=None) A checkout session as a UCP order (per-item fulfillment)
search_catalog(query=None, filters=None, pagination=None, cloud=None) Search the merchant catalog

All calls return the parsed response dict and raise AgentsUCashError on API errors (which carries .code and .status).

Error handling

from agents_u_cash import AgentsUCash, AgentsUCashError

try:
    agent.create_resource(amount=0.05)
except AgentsUCashError as e:
    print(e.code, e.status, e)   # e.g. 'uxc_agent_not_activated' 402 ...

Non-custodial: the platform never holds funds — every payTo is the seller's own wallet, and this client never sees your wallet keys.

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

agents_u_cash-0.2.1.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

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

agents_u_cash-0.2.1-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file agents_u_cash-0.2.1.tar.gz.

File metadata

  • Download URL: agents_u_cash-0.2.1.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for agents_u_cash-0.2.1.tar.gz
Algorithm Hash digest
SHA256 1614565e0630579a6925c17d677cdedae3ec1bb11042bf1a78efe375a031e31d
MD5 784d8b7d6d8af2038a5e5e13a73ea916
BLAKE2b-256 2dd6c6ef2b9e3f5a88d5274f1056169a90936ac1a1fcc01f585dba042a4fde4b

See more details on using hashes here.

File details

Details for the file agents_u_cash-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: agents_u_cash-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for agents_u_cash-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ffa4c02f0723facbf011f53ececb2e9bc016c48064f0ff0418036c3c79c72d56
MD5 581a7e6578cdc3faa2851be8ccc03300
BLAKE2b-256 ed60049e8443c977cdec6a6ccf2ac3c2784f4cd4be8fb04f7a382320aeba0158

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