Card Payments, Integration Health & Improved Authentication

Nick Frostbutter
NF
Nick Frostbutter
·

Card payment fixes, automatic OAuth token refresh, integration health monitoring, improved authentication, and unified balance top-ups.

Card Payments

Several card payment improvements shipped this week:

  • Fixed initialization hang. Card payment sessions no longer stall when opening the payment dialog.
  • 4-digit expiration year. Eliminates ambiguous 2-digit year handling that allowed invalid dates to pass validation.
  • Better error messages. User-actionable errors like invalid zip or declined card are now shown directly instead of a generic failure message.
  • Auto-resolved email. Authenticated customers no longer need to re-enter their email in the card form.
  • Hidden zero fees. The "$0.00 processing fee" text no longer appears when there is no fee.
  • Test mode fix. Stablecoin confirm and cancel operations no longer fail in test mode.

Integration Health Monitoring

Integration pages now surface connection health directly in the dashboard. Health badges show auth refresh failures, upcoming expirations, and expired auth tokens at a glance. Detail pages include alert banners with an actionable "Resync Now" button.

Behind the scenes, a daily cron job automatically refreshes expiring OAuth tokens with a 7-day lookahead window. Failed refreshes trigger admin alert emails. The system supports any OAuth integration type automatically.

Improved Customer Authentication

Sign-in now streamlines customer authentication into a single OTP prompt. Customers authenticate once and get both a customer session in a single flow. This fixes the previous scenarios that would require a customer to authenticate twice, reducing friction at login.

Balance Top-Ups

The balance top-up flow has been unified so the guest token experience reuses the same components as the authenticated flow. Card payments are now supported for balance top-ups in addition to stablecoins. Payment method selection is displayed inline and selecting a method immediately opens the payment sheet.

Minor Improvements

  • Session mode is now the single source of truth for all checkout and top-up actions, matching industry standard approaches. Mode is no longer derived from location integrations or passed from the client.
  • Checkout URLs simplified from loc_live_{id} to raw CUIDs, with backwards-compatible redirects for old URL formats, resulting in shorter URLs.
  • Dashboard revenue chart fixed for merchants in non-UTC timezones.
  • Square integration switched to production APIs for both test and live modes, with data isolation handled within the Decal dashboard.
  • Square resync now correctly updates OAuth tokens when the integration has an expired auth token.
  • Test mode banner is now a shared component across apps with improved scroll-hide behavior.
  • Failed top-up transactions can now be retried without creating duplicate records. The existing transaction resets from FAILED to INITIATED.

How it works

How can it cost so little? We skipped the card networks.

All the typical payment terminals and booking tools you've used sit on top of the credit card networks and pass their fees to you. Decal is built on stablecoins, digital dollars that move effortlessly, settle instantly, cost almost nothing, and earn interest natively.
Welcome to the future of commerce.

24×7 settlement

Your payments land in an instant.

Lower fees by design

No interchange to pass along.

Fewer disputes

Payments are final at confirmation.

Built-in yield

Dollars that earn while they chill.

Grow your business. Get paid. Earn on what you keep.

Built for people running lean businesses. And priced for them, too.

Start for free