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)
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
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.