uc-pay examples

Invoice / pay link

A pay code minted server-side (POST /v1/pay, service token) becomes a plain link. Nothing is posted from the page at all.

Pay an invoice (a real QA code)

Pay invoice INV-0042
Markup
<uc-pay-link data-env="qa" data-code="3EB8V-M2F3V" data-label="Pay invoice INV-0042">
    <a class="ucp-btn" href="https://pay-qa.undercurrent.ai/v1/pay/3EB8V-M2F3V">Pay invoice INV-0042</a>
</uc-pay-link>

Dark, made-up code

Pay now
Markup
<uc-pay-link data-env="qa" data-code="K7MXQ-3PAHD" data-label="Pay now" data-theme="dark">
    <a class="ucp-btn" href="https://pay-qa.undercurrent.ai/v1/pay/K7MXQ-3PAHD">Pay now</a>
</uc-pay-link>

3EB8V-M2F3V is a real QA pay code minted with POST /v1/pay; it expires 2026-10-01 17:28 UTC, after which it answers 410 "expired". K7MXQ-3PAHD is made up, so it answers 404 "not found". Mint your own with POST /v1/pay — see docs/PAY_V1.md.

QA today: Stripe is not connected yet, so pressing the button lands on the pay service's own "Payments aren't switched on yet — no charge was made" page (HTTP 503). That is the designed degraded state, not a bug. Once Stripe test mode is connected the same button lands on Stripe Checkout; pay with 4242 4242 4242 4242.

Works with JavaScript off: the element wraps a plain <form method="post">. Turn JS off and reload — you get an unstyled form that still reaches checkout.