{"license":"CC-BY-4.0","licenseUrl":"https://creativecommons.org/licenses/by/4.0/","attribution":"ChainChoice (https://chainchoice.io)","category":"subscriptions","evidenceReadAt":"2026-09-28","generatedAt":"2026-11-12","criteria":[{"id":"revocation_visibility","label":"My customer kills the allowance at midnight. Am I told, or do I find out at the next billing run?","weight":28},{"id":"renewal_failure_path","label":"The second charge fails. What does the provider actually do next, and when do I hear about it?","weight":26},{"id":"mandate_survives_the_provider","label":"If this provider is gone next quarter, do I still get paid — and whose licence is the money moving under today?","weight":24},{"id":"what_the_mandate_permits","label":"What exactly did my customer sign away, and what stops it from quietly becoming more than that?","weight":22}],"providers":{"solana_subscriptions_program":{"revocation_visibility":{"s":9,"q":"Closing does not clear the SPL Token delegate approval. Once the PDA is gone the approval is inert, but it stays on the token account until revoked | It calls the token program's Revoke, signed by the user, so it works whether or not the Subscription Authority still exists.","u":"https://solana.com/docs/payments/subscriptions/close-subscription-authority","d":"2026-09-28"},"renewal_failure_path":{"s":2,"q":"The program rejects transfers that exceed the current period's remaining allowance. | expiryTs is a hard stop: once it passes, transfers fail and the sponsor can recover rent. There is no spend-time grace period.","u":"https://solana.com/docs/payments/subscriptions/recurring-delegation","d":"2026-09-28"},"mandate_survives_the_provider":{"s":10,"q":"The Subscription Authority cannot move funds by itself. A transfer only succeeds when it matches one of the user's active authorizations. | Program ID De1egAFMkMWZSN5rYXRj9CAdheBamobVNubTsi9avR44","u":"https://solana.com/docs/payments/subscriptions/overview","d":"2026-09-28"},"what_the_mandate_permits":{"s":8,"q":"After a user subscribes, the merchant or an approved puller can collect up to the plan amount each billing period. | Existing subscribers keep the terms they accepted, while new subscribers accept the current plan terms.","u":"https://solana.com/docs/payments/subscriptions/subscription-plan","d":"2026-09-28"}},"superfluid_streams":{"revocation_visibility":{"s":8,"q":"CFAv1 beforeAgreementTerminated, afterAgreementTerminated A stream to a Super App is deleted. | The Superfluid protocol itself triggers these callbacks on-chain in response to various actions performed within the Constant Flow Agreement contract.","u":"https://docs.superfluid.org/docs/protocol/advanced-topics/super-apps/callbacks","d":"2026-09-28"},"renewal_failure_path":{"s":3,"q":"The sender's balance is now zero, and the permissions on the stream now allow anyone to close it. | 4 hour deposit 4 hour maximum owedDeposit 30 minutes patrician period","u":"https://docs.superfluid.org/docs/protocol/advanced-topics/solvency/liquidations-and-toga","d":"2026-09-28"},"mandate_survives_the_provider":{"s":8,"q":"comprises non-custodial blockchain. For the avoidance of doubt, the Superfluid Protocol, is not owned or operated by the Foundation.","u":"https://superfluid.org/terms-of-use","d":"2026-09-28"},"what_the_mandate_permits":{"s":6,"q":"function setFlowPermissions ( ISuperToken token , address flowOperator , bool allowCreate , bool allowUpdate , bool allowDelete , int96 flowRateAllowance ) internal returns ( bool ) | function flowFrom ( ISuperToken token , address sender , address receiver , int96 flowRate ) internal returns (…","u":"https://docs.superfluid.org/docs/protocol/money-streaming/guides/acl-user-data","d":"2026-09-28"}},"request_recurring":{"revocation_visibility":{"s":4,"q":"payment.failed Yes No Payment execution fails. | Allowlist rejection, KYT rejection, and wallet cancellation do not automatically emit it.","u":"https://docs.request.network/api-reference/webhooks","d":"2026-09-28"},"renewal_failure_path":{"s":7,"q":"If a payment fails (for example due to insufficient funds), the schedule is paused, and you can unpause it once the issue is resolved. Unpausing a recurring payment after issues are resolved allows the subscription to catch up on missed payments.","u":"https://docs.request.network/api-features/recurring-payments","d":"2026-09-28"},"mandate_survives_the_provider":{"s":5,"q":"REQUEST NETWORK DOES NOT CUSTODY FUNDS OR PROCESS FINANCIAL TRANSACTIONS. | Request Network does not offer or provide custody, exchange, or transfer of crypto-assets. Instead, it acts as a middleware layer that facilitates interaction with other regulated service providers via its API.","u":"https://request.network/api-terms-and-conditions/","d":"2026-09-28"},"what_the_mandate_permits":{"s":9,"q":"Immutable Recipient: The recipient address is part of the signed data. Funds can only be sent to this specified address and cannot be altered after the schedule is authorized. | Fixed Payment Amount: The amount for each payment is fixed in the signed permit.","u":"https://docs.request.network/api-features/recurring-payments","d":"2026-09-28"}},"sablier_flow":{"revocation_visibility":{"s":7,"q":"Emits a PauseFlowStream and {MetadataUpdate} event. | Emitted when a stream is paused by the sender. | Emitted when a stream is voided by the sender, recipient or an approved operator.","u":"https://docs.sablier.com/reference/flow/contracts/interfaces/interface.ISablierFlow","d":"2026-09-28"},"renewal_failure_path":{"s":3,"q":"Stream must be topped up periodically to maintain solvency, debt is otherwise accumulated | Void: Voiding a stream implies it cannot be restarted anymore. Voiding an insolvent stream forfeits the uncovered debt. Either party can void a stream at any time.","u":"https://docs.sablier.com/concepts/flow/overview","d":"2026-09-28"},"mandate_survives_the_provider":{"s":6,"q":"Sablier Labs has stopped active product development and entered maintenance mode. Existing users will continue to be served through June 2028. | The Sablier smart contracts are onchain and permissionless.","u":"https://blog.sablier.com/sablier-labs-is-entering-maintenance-mode","d":"2026-09-28"},"what_the_mandate_permits":{"s":7,"q":"recipient address The address receiving the tokens. | ratePerSecond UD21x18 The amount by which the debt is increasing every second, denoted as a fixed-point number where 1e18 is 1 token per second. | recipient must not be the zero address.","u":"https://docs.sablier.com/reference/flow/contracts/interfaces/interface.ISablierFlow","d":"2026-09-28"}},"base_pay_subscriptions":{"revocation_visibility":{"s":7,"q":"Real-time status checking to verify active subscriptions | Cancellation detection for immediate updates | Customers can view and cancel their subscriptions anytime through their wallet, ensuring transparency and trust. | Subscription cancelled by user","u":"https://docs.cdp.coinbase.com/coinbase-wallet/guides/accept-recurring-payments","d":"2026-09-28"},"renewal_failure_path":{"s":2,"q":"CDP smart wallet for executing charges and revocations | Scheduled jobs for periodic billing | Database for subscription tracking | Handlers for status updates | Retry logic for failed charges","u":"https://docs.cdp.coinbase.com/coinbase-wallet/guides/accept-recurring-payments","d":"2026-09-28"},"mandate_survives_the_provider":{"s":8,"q":"`SpendPermissionManager`: `0xf85210B21cC50302F477BA56686d2019dC9b67Ad` | The `SpendPermissionManager` singleton is added as an owner of the user's smart wallet, giving it the ability to move user funds on behalf of a sender within the tight constraints of the spend permission logic.","u":"https://raw.githubusercontent.com/coinbase/spend-permissions/main/README.md","d":"2026-09-28"},"what_the_mandate_permits":{"s":7,"q":"The spending limit automatically resets at the start of each new period. If you don't charge the full amount in one period, it doesn't roll over. | Variable usage-based charges within a cap","u":"https://docs.cdp.coinbase.com/coinbase-wallet/guides/accept-recurring-payments","d":"2026-09-28"}},"radom_subscriptions":{"revocation_visibility":{"s":5,"q":"This event is emitted when a subscription is cancelled by the merchant or the customer.","u":"https://docs.radom.com/webhooks/subscription-cancelled/","d":"2026-09-28"},"renewal_failure_path":{"s":9,"q":"This event is emitted when a subscription has an overdue payment. Subscription payments are retried for a 3 day grace period after the payment due date.","u":"https://docs.radom.com/webhooks/subscription-payment-overdue/","d":"2026-09-28"},"mandate_survives_the_provider":{"s":4,"q":"Radom Pay currently operates as an unregulated business entity under the Limited Liability Companies Act 2008 and is not licensed or regulated by the Cook Islands Financial Supervisory Commission (FSC). | registered with the Cook Islands Financial Intelligence Unit (CIFIU) as a reporting institution","u":"https://www.radom.com/terms","d":"2026-09-28"},"what_the_mandate_permits":{"s":4,"q":"This event is emitted when a new subscription is created. | recommendedAllowanceDuration integer<int64> nullable >= 0","u":"https://docs.radom.com/webhooks/new-subscription/","d":"2026-09-28"}},"coinflow_subscriptions":{"revocation_visibility":{"s":5,"q":"A subscription was canceled by the customer or merchant.","u":"https://docs.coinflow.cash/guides/subscriptions/implementation-methods/subscription-webhooks","d":"2026-09-28"},"renewal_failure_path":{"s":6,"q":"Real-Time Webhooks Instant notifications for payments, renewals, cancellations, and failures | Handle payment failures and retry logic","u":"https://docs.coinflow.cash/guides/subscriptions/subscriptions-overview","d":"2026-09-28"},"mandate_survives_the_provider":{"s":3,"q":"Coinflow is responsible only for providing data transmission to effect or direct certain payment authorizations for Customer and Purchasers.","u":"https://coinflow.cash/legal/terms-of-service","d":"2026-09-28"},"what_the_mandate_permits":{"s":5,"q":"When a customer subscribes, we securely store their payment method and automatically charge them at your defined intervals.","u":"https://docs.coinflow.cash/guides/subscriptions/subscriptions-overview","d":"2026-09-28"}},"unlock_protocol":{"revocation_visibility":{"s":2,"q":"Currently, locksmith support sending updates on new locks and keys. | New Locks https://locksmith.unlock-protocol.com/api/hooks/:network/locks New Keys https://locksmith.unlock-protocol.com/api/hooks/:network/keys New Keys for a Lock…","u":"https://docs.unlock-protocol.com/tools/locksmith/webhooks","d":"2026-09-28"},"renewal_failure_path":{"s":3,"q":"If their balance or approval amount are less than the price of the subscription, the renewal will not be triggered and the subscription will be paused at that time due to lack of funds. The subscription will re-activate when the user has funds again.","u":"https://unlock-protocol.com/guides/onchain-subscriptions/","d":"2026-09-28"},"mandate_survives_the_provider":{"s":9,"q":"The renewMembershipFor function enables automated renewals! In practice, anyone can call this function on an expired membership NFT, provided that the current owner of said NFT has approved a large enough amount of ERC20 to be spent for the renewal to succeed.","u":"https://docs.unlock-protocol.com/core-protocol/public-lock/renewals/","d":"2026-09-28"},"what_the_mandate_permits":{"s":5,"q":"recurringPayments : optional number. The number of time a membership should be renewed automatically. This only applies to ERC20 locks.","u":"https://docs.unlock-protocol.com/tools/checkout/configuration","d":"2026-09-28"}},"moonpay_commerce_subs":{"revocation_visibility":{"s":1,"q":"Cancel and Individual Subscription The subscription automatically expires when the user decides not to renew. | Cancel All Subscriptions Disable the Pay Link, which will prevent all users from renewing their subscriptions.","u":"https://docs.hel.io/docs/subscriptions","d":"2026-09-28"},"renewal_failure_path":{"s":6,"q":"Grace Period: Define the number of extra days (if any) during which the customer can still make a payment. The customer's renewal date remains unchanged. If no payment is made by the renewal date or within the grace period, the subscription will expire automatically.","u":"https://docs.hel.io/docs/subscriptions","d":"2026-09-28"},"mandate_survives_the_provider":{"s":3,"q":"Helio Fintech Limited (\"We\" or the \"Company\"), a wholly owned subsidiary of MoonPay, Inc. We are registered in England and Wales under company number 13836904 | Any transfer of digital assets is transacted via a Smart Contract and/or Embedded Wallets deployed by the Company","u":"https://docs.hel.io/docs/terms-of-service","d":"2026-09-28"},"what_the_mandate_permits":{"s":1,"q":"Each month, customers receive email reminders directing them to a Charge page to renew with a single tap of their wallet.","u":"https://docs.hel.io/docs/subscriptions","d":"2026-09-28"}}}}