Skip to content

Payment Providers

Payment providers allow users to settle debts directly through external payment apps like Revolut, Cash App, etc.

Overview

The system has two parts:

  • Payment Providers (/paymentProviders/<providerId>/) — a server-managed registry of supported payment services. Each provider defines how to construct a payment link, which platforms and regions it's available in, and how amounts should be formatted.
  • Payment Handles — user-specific handles stored on both Member (paymentHandles) and User (defaultPaymentHandles). These are key-value pairs where the key is the provider ID and the value is the user's handle for that provider (e.g. { "revolut": "bezy" }).

Each provider has a link template with placeholders:

  • {handle} — the member's handle for this provider
  • {amount} — the debt amount, formatted according to amountFormat (minor = smallest currency unit like cents, decimal = standard decimal notation)
  • {currency} — the currency code
  • {purpose} — the transaction purpose/note

Example: https://revolut.me/{handle}?amount={amount}&currency={currency}&note={purpose}

Provider configuration

Field Description
name Display name
icon URL to the provider's icon
link Payment link template with placeholders
handlePrefix Optional prefix shown before the handle (e.g. @)
amountFormat minor (cents) or decimal
platforms List of supported platforms (ios, android, web), or null for all
currencies List of supported currency codes, or null for no limit
regions List of supported region codes, or null for no limit
androidPackageName Android package name for deep linking

Default payment handles

Users can set defaultPaymentHandles on their User profile. When a new member is created for that user in a group, these defaults are copied to the member's paymentHandles.