autogen-ucashpay
Microsoft AutoGen tools to charge per agent task via U.CASH (HTTP-402). Non-custodial.
autogen-ucashpay lets an AutoGen agent quote a price for a task and mint a
U.CASH checkout link before the task runs. Funds settle directly to the
merchant's own receive addresses: U.CASH is non-custodial, and the store
Cloud Token used here is publishable (safe to ship in a browser, a tool,
or an agent runtime). It can mint incoming checkouts; it cannot spend funds,
read balances, or rotate keys.
Two checkout surfaces are supported:
- Client-side hosted pay link (publishable, no server secret): builds a
https://pay.u.cash/embed.phpURL from the store Cloud Token. - Server-side tracked checkout (idempotent per
external_reference):POST https://pay.u.cash/payment/ajax.phpreturns a recorded transaction plus its payment URL.
Install
pip install autogen-ucashpay # core client + tool
pip install "autogen-ucashpay[autogen]" # also pulls autogen-agentchat
Requires Python 3.9+. The only hard runtime dependency is httpx. AutoGen
itself is optional (install via the autogen extra).
Quick start: a standalone billing wrapper
from autogen_ucashpay import TaskBilling, TaskQuote
with TaskBilling(cloud_token="st_YOUR_STORE_CLOUD_TOKEN") as billing:
result = billing.charge(TaskQuote(
amount=0.50,
currency="USD",
title="Summarize support thread #4821",
task_id="thread-4821", # idempotency key
))
print("Pay here:", result.payment_url)
print("Transaction:", result.transaction_id)
task_id becomes the external_reference, so retrying the same task returns
the same checkout instead of minting a duplicate. Settlement (the actual
on-chain or card payment) is confirmed out of band by U.CASH via webhook /
on-chain; charge() returns the checkout URL and does not block on payment.
AutoGen usage
Option A: AutoGen 0.2 (ConversableAgent)
from autogen import ConversableAgent, UserProxyAgent
from autogen_ucashpay import UcashPayTool, register_ucashpay
tool = UcashPayTool(
cloud_token="st_YOUR_STORE_CLOUD_TOKEN",
tracked=True, # server-side, idempotent checkout
default_currency="USD",
)
assistant = ConversableAgent(
name="billing_assistant",
system_message=(
"You bill the operator 0.50 USD per task by calling "
"create_checkout BEFORE you start the work, then wait for them "
"to confirm payment."
),
llm_config={"config_list": [{"model": "gpt-4o-mini"}]},
)
user = UserProxyAgent(name="operator", human_input_mode="ALWAYS")
# Wire the tool: the executor runs it, the assistant knows it exists.
register_ucashpay(assistant, tool, executor=user, name="create_checkout")
user.initiate_chat(
assistant,
message="Summarize support thread #4821.",
)
Option B: any function-tool framework
UcashPayTool.create_checkout is a plain callable, so you can wrap it in any
function-tool layer (AutoGen 0.4 tools, LangChain tools, OpenAI function
calling, etc.):
from autogen_ucashpay import UcashPayTool
tool = UcashPayTool(cloud_token="st_YOUR_STORE_CLOUD_TOKEN", tracked=True)
checkout = tool.create_checkout(
amount=0.50,
currency="USD",
title="Summarize support thread #4821",
task_id="thread-4821",
)
# checkout -> {"payment_url": "...", "transaction_id": "...",
# "external_reference": "thread-4821", "amount": 0.5, "currency": "USD"}
Function-tool schema for the create_checkout tool:
| parameter | type | required | description |
|---|---|---|---|
amount |
number | yes | Amount to charge, in the given currency (> 0). |
currency |
string | no | ISO 4217 code (default USD). |
title |
string | no | Description shown on the checkout. |
task_id |
string | no | Stable per-task id used as the idempotency key. |
Low-level client
If you only need the pay.u.cash endpoints (no AutoGen), use UcashPayClient
directly:
from autogen_ucashpay import UcashPayClient
client = UcashPayClient("st_YOUR_STORE_CLOUD_TOKEN")
# 1) Publishable, no network call (safe in the browser/app):
url = client.create_embed_link(
amount=1.0,
currency="USD",
title="Agent task",
external_reference="task-123",
redirect="https://your.app/done",
)
# 2) Server-side, idempotent tracked checkout (call from a server route):
result = client.create_transaction(
amount=1.0,
currency="USD",
title="Agent task",
external_reference="task-123", # required; idempotency key
redirect="https://your.app/done",
)
# result.payment_url, result.transaction_id
Set up your pay.u.cash account
- Sign up at pay.u.cash, then click the verification link in the email.
- Set receive addresses under Settings -> Addresses (raw address, ENS, Unstoppable Domains, or FIO).
- Create a store under Account -> Stores and copy its Store Cloud Token (use the store-level token, not the account-wide one).
- For fiat cards, connect your own Stripe under Settings -> Payment processors.
How settlement works (and what this package does not do)
This package is non-custodial and opt-in optimistic: it mints the checkout and returns the URL. It does not:
- hold funds (U.CASH settles directly to your receive addresses),
- block the agent until the chain or card confirms, or
- automatically reconcile payment status.
Confirm payment out of band (a U.CASH webhook on your server, on-chain
polling, or an explicit operator "I paid" confirmation in chat) before
treating a task as paid. The server-side create_transaction mode makes that
reconciliation trivial: the same external_reference always maps to one
transaction.
Limitations
- No automatic crypto recurring billing. U.CASH does not support subscription debits on-chain; each task is a one-time checkout. For metered/subscription billing, mint a fresh checkout per period or per task.
- Card acceptance requires your own Stripe. Connect it under pay.u.cash Settings -> Payment processors; the store Cloud Token only mints the checkout.
- Idempotency is per
external_reference. Reuse the same value to avoid double-minting; change it to force a new checkout.
Publish (for maintainers)
python -m pip install --upgrade build
python -m build
python -m twine upload dist/*
This package is distributed without publishing in this repo; the command above is the documented release path.
License
MIT. See LICENSE.
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 autogen_ucashpay-0.1.0.tar.gz.
File metadata
- Download URL: autogen_ucashpay-0.1.0.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
039051c4cc8598baf1df17ae699a15e5ffc460a20c74c13d8a2728f7a6fa7e66
|
|
| MD5 |
1e3a9cc6ba19c5fc46befdbc6201dbb3
|
|
| BLAKE2b-256 |
cb773ebbafba31378144681983af68407f46d37c65ae1666ce138f696f49cd88
|
File details
Details for the file autogen_ucashpay-0.1.0-py3-none-any.whl.
File metadata
- Download URL: autogen_ucashpay-0.1.0-py3-none-any.whl
- Upload date:
- Size: 13.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c6c08d9f285a8ca8577a5ad268cf8ed6725124b0bf80eb5d0c361297b33a062
|
|
| MD5 |
a47a672d7bac2c306b97fdc72c94bdf6
|
|
| BLAKE2b-256 |
1a7f6a79d4049a6f8c10720d04a89e5b102770e0e822851160caddc932a19ce0
|