Public betaU.CASH Pay + AI is in public beta. Suggestions? Bugs? Open a Support ticket for bounties.

U.CASH Pay

Learn

Guides for getting paid: crypto, cards, and bank transfers, online or in person, settled non-custodial to your own wallets. The same material powers the Learn section inside the merchant console.

The guides

Overview

U.CASH Pay is a non-custodial payment platform: accept crypto, cards, and bank transfers, online or in person, with every payment settling directly to wallets you control.

What you get

  • Crypto: 51 assets across 32 networks - Bitcoin (and Lightning), Ethereum L2s, stablecoins on seven chains each, Monero, Solana, and more
  • Cards and bank: Stripe, PayPal, or 2Checkout with your own account, plus seven bank rails
  • Every surface: Hosted checkouts, embeds, invoices, a POS terminal, a teller counter, storefronts, and AI-agent payments
  • Non-custodial: Funds go straight to your addresses. The platform detects payments and notifies you - it never holds money
  • Developer-ready: REST API, signed webhooks, and official SDKs

How a payment works

  1. The customer opens your checkout and picks a method
  2. For crypto, the checkout shows your receiving address and the exact amount
  3. The payment is detected on-chain and waits for the coin's confirmation count (base 3; more for a few chains, instant on Lightning)
  4. On completion the customer gets a receipt, your webhook fires, and the order is ready to fulfill

Getting started

Your fastest path to a first payment:

  1. Add a receiving address under Settings (Addresses)
  2. Create a payment request or checkout
  3. Share the link - or embed a button on your site

Full reference: Documentation home →

Your First Payment

Step 1: Add a receiving address

  1. Open Settings and find the Addresses area
  2. Enter a wallet address you control for at least one coin (BTC, ETH, USDT...)
  3. Add several addresses per coin - three or more turns on address cycling automatically
  4. Save

Important

Use the right address format for each network, and test with a small amount first. ENS, Unstoppable Domains, and FIO names work too - they resolve to the on-chain address when you save.

Step 2: Create the payment

  1. Use Create Payment Request for a one-off link (optionally emailed to the customer, with an expiry)
  2. Or save a checkout for a reusable payment link or embedded button
  3. Set title, amount, and currency - or leave the amount open for pay-what-you-want

Step 3: Take the payment

  1. Open the link in a new tab and pick a coin
  2. Send the exact amount shown and wait for confirmations
  3. Watch the transaction complete in Payments, and your webhook fire if configured

Pro tip

Enable testnet for BTC or ETH in Settings to rehearse the entire flow without real money.

Full reference: Address Generation →

Dashboard

The dashboard is your home base: today's volume, recent payments, and quick access to every area.

Navigation

Transaction statuses

Quick actions

Full reference: Console Tour →

Addresses

Addresses are where the money lands. Paste your own and you are done - that is the whole non-custodial setup.

Address pools

Generated addresses (optional)

If you want a fresh address per checkout without managing a pool, the platform resolves in this order: your own node (BTC xpub or ETH node), your custom explorer's generator, your manual pool, then a connected exchange (Gemini or Coinbase deposit addresses).

Per-coin confirmation presets

Critical

Full reference: Address Generation →

Currency & Fees

Two fees exist and they are different: the platform fee (paid by you, from your credit balance) and your optional checkout fee (paid by the customer).

Platform fee (yours)

Checkout fee (optional, customer-paid)

Base currency

Tip

Confirmation rules live on each coin's address card (see the Addresses guide), not in a global fee screen.

Full reference: Credits & Top-up →

Webhooks

When a payment completes, U.CASH Pay POSTs the full transaction as JSON to your server - one delivery per completed payment.

Setup

  1. Build an HTTPS endpoint that accepts POST and returns HTTP 200 quickly
  2. Go to Settings, Webhooks section - or set it per store under Account, Stores
  3. Enter the URL (public HTTPS only - internal addresses are rejected)
  4. Set a secret (masked; you can rotate it any time)

Verifying the signature

Each delivery carries X-Webhook-Event-Id (unique per delivery) and X-Webhook-Signature: t=<unix>,v1=<hmac>. Verify HMAC-SHA256 over "timestamp.rawbody":

$parts = explode(',', $_SERVER['HTTP_X_WEBHOOK_SIGNATURE']);
$ts = substr($parts[0], 2); $sig = substr($parts[1], 3);
$expected = hash_hmac('sha256', $ts . '.' . $rawBody, $secret);
if (!hash_equals($expected, $sig)) { http_response_code(403); exit; }

Delivery behavior

Full reference: Webhooks →

Branding

Make the checkout yours: logo, colors, business profile, and - with a custom domain - your own URL.

What customers see

Setup

  1. Open Settings and find the Branding / Design section
  2. Upload your logo (SVG or PNG renders crispest)
  3. Set colors and business profile fields
  4. Open any checkout link to preview

Going further

A custom domain serves checkouts on your own URL with automatic SSL, and white-label instances brand the entire platform. See the documentation for both.

Full reference: Branding →

Checkouts

A checkout is a reusable payment page: a link you share, a button you embed, or the target of an API call.

Creating one

  1. Open Checkouts and create one
  2. Set title, description, amount, and currency - or leave the amount open (pay what you want)
  3. Choose fiat-denominated or a fixed coin amount
  4. Save and copy the link - clean URLs like /checkout/your-slug

Embedding a button

One script tag, no plugin, works on any site:

<script src="https://pay.u.cash/embed.js"
  data-cloud="YOUR_STORE_CLOUD_TOKEN"
  data-amount="5.00"
  data-currency="USD"
  data-title="My Product"></script>

The Cloud Token is publishable (it identifies the store); your API key is a server secret - never embed it.

Power features

Full reference: Embed, API & SDKs →

Invoicing

Two tools: payment requests you send to a customer, and tax invoices generated from completed payments.

Payment requests

  1. Create one from Payments (Create Payment Request)
  2. Set amount, title, note - and an expiry from 15 minutes to 30 days
  3. Email it directly (Pay Now button in the email) or copy the link
  4. Track Unopened, Opened, then Paid in your payment list

PDF tax invoices

Tip

Leave the amount open on a request for deposits or pay-what-you-want - open amounts never trigger underpayment rules or tax lines.

Full reference: Invoicing →

In Person & Storefronts

Beyond the web checkout: a counter terminal, a human teller, hosted storefronts, and single-product landers.

POS (pos.u.cash)

Teller counter (teller.u.cash)

Shop and Landers

Full reference: Point of Sale →

Credits & Team

Platform costs run on a prepaid credit balance, and your team runs on roles.

The credit balance

Funding ladder

Funding your account unlocks console features step by step - more branding control, more advanced settings - as lifetime funding crosses each tier.

Staff and roles

Full reference: Credits & Top-up →

Security

The platform is non-custodial and hardened; here is your part of the bargain.

Your account

Your integration

Never

Full reference: Security →

API

Everything in the console is available as a REST call: HTTPS POST, form-encoded, dispatched by a function parameter.

Authentication

Creating a payment

curl https://pay.u.cash/api.php \
  -H "X-Api-Key: your_api_key" \
  -d function=create-transaction \
  -d amount=25.00

Responses are always {"success":true,"response":...} or {"success":false,"error_code":...} - branch on error codes, not messages.

Common functions

SDKs

Official plugins and SDKs for WooCommerce, Shopify, React, Python, and 120+ more: pay.u.cash/plugins. Full reference: pay.u.cash/docs.

Full reference: Embed, API & SDKs →

Troubleshooting

The issues that come up most, and the fix.

No payment methods on a checkout

Payment sent but still pending

Webhook not arriving

Getting help

Full reference: Troubleshooting →