Zero setup. No account, no dashboard, no API key. Give a destination wallet address and get back a shareable payment link, an embeddable button, and an agent-readable dashboard, in one call. Non-custodial: funds settle straight to the address you provide. Base URL: https://shieldz.cash
email so the owner can later claim a full dashboard via magic link, settlement keeps working either way.POST /api/v1/links, a one-time invoice for a fixed amount.
curl https://shieldz.cash/api/v1/links \
-H "Content-Type: application/json" \
-d '{
"settlement": { "chain": "BASE", "asset": "USDC", "address": "0xYourWallet…" },
"amount_usd_cents": 2500,
"memo": "Invoice #1234",
"email": "[email protected]"
}'
Required: settlement.address (a 0x EVM address) and amount_usd_cents ($1 to $100k). Optional: settlement.chain (Base, Arbitrum, Optimism, Polygon, Ethereum, default Base), settlement.asset (USDC or USDT, default USDC), memo, email.
Response:
{
"id": "I8DrmEZ_pFsmZqknbmZc",
"status": "pending",
"amount_usd_cents": 2500,
"settlement": { "chain": "BASE", "asset": "USDC", "address": "0xYourWallet…" },
"pay_url": "https://shieldz.cash/pay/I8DrmEZ_pFsmZqknbmZc",
"manage_url": "https://shieldz.cash/a/8_ah9oJ4WcvZnJRTDxD-8xSjVUiPYcwA",
"manage_token": "8_ah9oJ4WcvZnJRTDxD-8xSjVUiPYcwA",
"embed": "<script src=\"https://shieldz.cash/embed/button.js\" data-href=\"https://shieldz.cash/pay/I8DrmEZ_pFsmZqknbmZc\" data-label=\"Pay\"></script>"
}
Send the payer to pay_url, or drop the embed snippet on any page. Keep manage_token, it is how you read status later.
POST /api/v1/tip-jars, a reusable "pay what you want" page where the payer chooses the amount. Idempotent per wallet address: calling again updates the same jar.
curl https://shieldz.cash/api/v1/tip-jars \
-H "Content-Type: application/json" \
-d '{
"settlement": { "chain": "BASE", "asset": "USDC", "address": "0xYourWallet…" },
"title": "Buy me a coffee",
"suggested_amounts_usd_cents": [300, 500, 1000],
"email": "[email protected]"
}'
Optional: title, description, suggested_amounts_usd_cents (up to 8 preset buttons), and a custom slug.
{
"object": "tip_jar",
"slug": "tip-10851092bec481a4",
"url": "https://shieldz.cash/tip/tip-10851092bec481a4",
"settlement": { "chain": "BASE", "asset": "USDC", "address": "0xYourWallet…" },
"suggested_amounts_usd_cents": [300, 500, 1000],
"manage_url": "https://shieldz.cash/a/8_ah9oJ4WcvZnJRTDxD-8xSjVUiPYcwA",
"manage_token": "8_ah9oJ4WcvZnJRTDxD-8xSjVUiPYcwA"
}
The manage_token resolves to a dashboard with no login. Two shapes from the same URL:
| URL | For |
|---|---|
https://shieldz.cash/a/<token> | Clean semantic HTML, every value carries a data-* attribute an agent can parse. |
https://shieldz.cash/a/<token>.json | Structured JSON: settlement, tip jars, totals, and the full invoice list. |
curl https://shieldz.cash/a/8_ah9oJ4WcvZnJRTDxD-8xSjVUiPYcwA.json
{
"object": "link_account",
"claimed": false,
"email_on_file": true,
"settlement": { "chain": "BASE", "asset": "USDC", "address": "0xYourWallet…" },
"tip_jars": [
{ "slug": "tip-10851092bec481a4", "url": "https://shieldz.cash/tip/tip-10851092bec481a4", "title": "Buy me a coffee" }
],
"totals": {
"currency": "usd",
"paid_count": 1, "paid_amount_usd_cents": 2500,
"pending_count": 1, "pending_amount_usd_cents": 1000,
"invoice_count": 2
},
"invoices": [
{ "id": "I8DrmEZ_pFsmZqknbmZc", "status": "paid", "amount_usd_cents": 2500,
"paid_at": 1750000000000, "pay_url": "https://shieldz.cash/pay/I8DrmEZ_pFsmZqknbmZc" }
]
}
The optional email and the manage_token let an agent hand an account to its human owner. The owner signs in (wallet or email) and claims a full dashboard:
POST /api/v1/links/claim with Authorization: Bearer <session> and body { "manage_token": "…" }.
manage_token is the capability secret. A keyless account's id is derived from the public wallet address, so it is guessable, the token is 192 bits of entropy and is not. Claiming therefore requires the token: no one can take over an account by knowing only the wallet address, and once claimed it cannot be re-claimed by a different login.
Shieldz exposes three tools, create_payment_link, create_tip_jar, and get_account_status, with no API key required. Two ways to connect any MCP client.
Remote (no install), point your client at the hosted Streamable HTTP server at https://shieldz.cash/mcp:
{
"mcpServers": {
"shieldz": { "url": "https://shieldz.cash/mcp" }
}
}
Local (stdio), run the @shieldz/mcp package via npx:
{
"mcpServers": {
"shieldz": {
"command": "npx",
"args": ["-y", "@shieldz/mcp"]
}
}
}
Set SHIELDZ_API_KEY (stdio) to additionally enable full invoice management tools for merchants with an account.
Goose is MCP-native. Click to install the remote server (opens Goose Desktop):
Or from the CLI: run goose configure → Add Extension → Remote Extension (Streamable HTTP) → URL https://shieldz.cash/mcp. No key, no args.
Funds are never held by Shieldz, they settle directly to the address you pass. There is no fee on the payment (network gas only). The same payment link and tip jar surfaces work for human checkout, so anything an agent creates is immediately usable by a person. Prefer a full account with API keys, webhooks, and a hosted dashboard? See the developer quickstart.