Quick answer
Choose the architecture by deciding which responsibilities your application will retain: custody, recurring authorization, renewal initiation, billing-state authority, event processing, reconciliation, and failure recovery. Hosted billing fits teams prioritizing lower implementation ownership; smart-contract billing fits businesses requiring direct wallet settlement and on-chain recurring permission; hybrid orchestration fits teams that want managed workflows without surrendering every control; direct wallet logic fits teams prepared to own the entire payment state machine. Reject any option that cannot document a mandatory responsibility, supported asset and network, or recovery path. First, mark requirements and disqualifiers in the decision matrix, then validate one candidate using a 25 USDC renewal.
Which recurring crypto billing architecture fits your operating model—and what disqualifies it?
Choose by deciding which responsibilities the application will keep, then eliminate any pattern that leaves a mandatory responsibility undocumented. For this decision, group those responsibilities under four paths: funds, permission, state, and operations. The fund path establishes control from customer payment to merchant receipt. The permission path establishes who may request a future payment and how that authority ends. State determines which record governs billing and access. Operations covers observation, record matching, exceptions, and recovery. The architecture labels are only starting definitions; they do not prove that a particular implementation meets any of these conditions. A candidate fails the test when the team cannot point to a documented mechanism and accountable component for every mandatory cell in the matrix.
For a hypothetical SaaS plan charging 25 USDC each month, create one row per candidate without estimating fees, timing, or annual cost. Capture five answers: who controls the funds, who can initiate the later charge, what observation proves access should continue, which identifiers join the payment and application records, and who resolves an ambiguous renewal. Zyrox can enter this comparison only on its operator-described terms: a non-custodial option with recurring billing, smart-contract subscriptions, USDT, USDC and Bitcoin support, webhooks, API access, and payments directed to the merchant wallet. Those descriptions do not settle its permission model, custody boundaries, recovery controls, network-specific behavior, or exact mechanics; each remains a validation item. As a useful separation test, Clerk describes an arrangement in which plan entitlements appear in a session token while Stripe processes payment. That example shows two distinct responsibilities, but it does not establish a crypto implementation or validate any of the four patterns.
| Decision area | Hosted billing | Smart-contract billing | Hybrid orchestration | Direct wallet logic |
|---|---|---|---|---|
| Custody and fund path | Verify who receives funds first, who controls balances, and how settlement reaches the merchant. | Require direct evidence of the contract-to-merchant fund path and identify every party able to redirect funds. | Assign custody separately for collection, conversion, and settlement; reject unclear handoffs. | Merchant defines the destination and owns monitoring, but must prove no intermediary controls funds. |
| Recurring authorization | Verify where the customer mandate lives, its scope, expiry, and revocation evidence. | Define the on-chain permission, spending limit, duration, revocation path, and compatible wallets. | Document which permissions are on-chain, off-chain, or provider-controlled. | Design, expose, and record the authorization model; disqualify if the required wallet cannot express it safely. |
| Renewal initiation | Identify which provider service starts later charges and under what schedule. | Identify the authorized caller or automation that invokes collection and its limits. | Assign scheduling, transaction submission, and retry initiation to named components. | Application owns scheduling and submission; isolate collection retries from processing retries. |
| State authority | Establish whether provider state, synchronized local state, or verified claims control billing decisions. | Separate chain observations from normalized subscription state and product entitlements. | Name the authority for authorization, collection, settlement, subscription status, and access. | Build and maintain each authority boundary explicitly; never infer access from a plan label alone. |
| Events and identifiers | Require authenticated events plus stable customer, subscription, collection, and event identifiers. | Require contract, transaction, authorization, and collection references that can be correlated locally. | Normalize provider and chain events behind stable business identifiers. | Create the event model, authentication rules, correlation keys, and replay guards. |
| Reconciliation | Confirm an external source can be queried when notifications are missing. | Define how chain observations are compared with local collection and subscription records. | Reconcile both orchestration records and applicable network observations. | Own indexer or node access, comparison logic, exception queues, and repair controls. |
| Assets and networks | Verify the exact token contract, network, wallet, decimals, fee asset, and fee payer. | Verify that each required asset supports the intended recurring mechanism on each network. | Document differences among provider-supported and contract-supported combinations. | Implement every required token and network case; reject unsupported representations or wallets. |
| Failure ownership | Clarify who resolves rejected collections, revoked permission, missing events, ambiguous settlement, and drift. | Assign ownership for contract errors, transaction state, permission failure, finality uncertainty, and local mutation failure. | Split responsibility among orchestrator, chain infrastructure, and application with explicit escalation boundaries. | Application owns detection, safe retries, reconciliation, customer state, and escalation end to end. |
| Best conditional fit | Team accepts more provider dependency in exchange for less billing infrastructure ownership. | Direct settlement and programmable recurring authorization are mandatory, with contract behavior documented. | Team wants managed orchestration while retaining selected custody, state, or entitlement controls. | Team has specialized engineering capacity and needs behavior unavailable through managed options. |
| Disqualifier | A required responsibility, export path, custody boundary, or recovery mechanism cannot be documented. | Authorization, caller rights, asset behavior, contract controls, or failure recovery remain unknown. | No component owns a handoff, identifier mapping, or ambiguous outcome. | Team cannot continuously operate transaction submission, event ingestion, reconciliation, and incident recovery. |

The choice follows from the completed responsibility map. Select hosted billing if the organization deliberately delegates most billing execution and can validate the resulting dependencies. Select smart-contract billing if programmable recurring permission and direct settlement are mandatory and every relevant control is specified. Choose a hybrid only when each boundary between managed and retained functions has an explicit authority and repair owner. Use direct-wallet logic when the application is prepared to own the full operating surface and that ownership buys required behavior. If two options survive, prefer the one with fewer retained responsibilities unless a mandatory condition requires the additional control; complexity without a requirement is merely an expensive hobby. Complete the architecture decision matrix, mark mandatory conditions and disqualifiers, and select one conditional path for validation.
What facts must you verify before specifying the selected architecture?
Before specifying the selected path, assemble a field-level authority map plus separate fund and permission diagrams. Read the fund path for the exact network and asset representation, decimals where relevant, destination format, fee asset and payer, limits, compatible wallet, settlement observation, and finality rule. Read the permission path for the origin of authorization, its scope, collection initiation, renewal or revocation evidence, and any wallet interaction it depends on. A gateway may support several assets and recurring or smart-contract billing while paying a merchant wallet directly, but that description does not establish which networks, wallets, fee rules, confirmation policy, or approval semantics apply here. Any absent implementation fact therefore remains “documentation required,” not a reasonable default.
State and operations complete the diagnosis. The authority map should identify the authoritative source for authorization, attempted collection, settlement, subscription lifecycle, and entitlement status. For the selected endpoint, create five provisional records: authorization reference, collection reference, settlement observation, normalized subscription status, and entitlement decision. Each gets an authoritative source, an application-readable local copy, an update trigger, and a correlation reference. Normalize notification identity as “external event ID,” noting any provider-specific equivalent once; use it with the collection and authorization references to connect updates without pretending the identifiers are interchangeable. Operations also need the event source, reconciliation key, replay or correction trigger, and the evidence that access was withdrawn when permission or paid status ended.

For this decision, treat billing state and entitlement state as separate authorities: the former describes the subscription’s current paid position, while the latter expresses the access and limits the application should enforce. One dependable design is a one-way, idempotent event sync into a local subscription record that the application reads; another illustrated design places plan and feature claims in a session token the application already verifies. Neither is a universal storage prescription. Whichever design is selected, product access should remain in dependable, application-readable state, with external references retained for reconciliation and explanation. If a required field has no authoritative source, update trigger, or correlation reference, then the path is not yet specifiable. Request the current fund-flow and authorization documentation, then close or explicitly log every unknown in the authority and deployment requirements sheets.
How should one renewal move through observable business states?
Assume one renewal for 25 USDC succeeds, yet the access update is absent. Follow that single renewal as a chain of recorded facts. The retained permission points to a customer, offer, and expected renewal; the collection request receives one stable collection reference; and an authenticated incoming notification triggers settlement processing. Store its external event ID—the normalized term here for a provider-specific notification or event identifier—before acknowledging it, then process it asynchronously. The browser’s success redirect can improve the customer journey, but it is not payment proof: the page may never load, may be called directly, or may appear while processing remains incomplete. Only the retained settlement observation advances this renewal. Keep billing state separate from entitlements, so “paid through” can change without embedding plan names directly in feature checks.
The worker correlates the external event ID, collection reference, permission record, customer, and renewal period, then writes the normalized subscription result once. A separate access decision reads that result and determines the permitted capabilities. In this scenario, collection is present but the normalized subscription update is not, so that is the first incomplete observable state; do not invent a reason for the gap. Test it by comparing retained records with the applicable external source. If the collection reference is confirmed there, route the existing renewal back through processing with unique constraints that prevent a repeated job from provisioning or crediting twice; if the comparison cannot resolve the result, route it to review. Do not request another payment merely because a notification was suppressed.

Now exercise repetition against the same record. Replaying the authenticated notification with the same external event ID should hit deduplication, while retrying the internal mutation should leave the already-written subscription and access result unchanged. The arithmetic remains deliberately dull: one successful collection × 25 USDC = 25 USDC collected, regardless of how many times the access update is retried. A periodic reconciliation pass should also find the confirmed collection whose normalized update is missing and send that existing result to processing or review. This is a recommended operating test, not a claim about Zyrox: its payloads, authentication method, identifiers, delivery and ordering guarantees, and chain-specific finality or reorganization handling are not supplied. Record the expected and observed identifiers and state transitions for the normal renewal, duplicate replay, missing notification, revocation, and ambiguous-settlement cases.
What concrete deliverable should start the build after the lifecycle proof passes?
Start the build with an executable failure-response runbook backed by one durable control record. The first implementation ticket should define a row for each collection attempt and carry, at minimum, the provider’s notification identifier, the permission and charge identifiers, current handling state, idempotency token, most recent fault, settlement finding, comparison outcome, access-change linkage, review disposition, and accountable operator. For the 25 USDC renewal already traced, the row should let an operator distinguish “request recorded,” “settlement not yet established,” and “local access update incomplete” without inventing a reason for any gap. Use this guide’s test: every automated action must be traceable to a stored identifier and must be safe to repeat under an explicit guard.
Turn that record into an operator-facing matrix, not a page of generic incident advice. For a rejected request, test whether the original request has a terminal result before permitting another attempt. For lost balance or authority, revoked permission, duplicated or misordered messages, and absent messages, specify which stored state is authoritative, what comparison must run, and where automation must pause. For ambiguous settlement, do not change subscription-derived access until the defined observation test passes; contradictory or incomplete observations should open a case. For a local write that fails after an external result, replay only the unfinished local step. For disagreement between external and internal records, run a periodic comparison and route any unsafe correction to review. Outbound collection calls, inbound message handling, and local provisioning should each have their own replay protection: a token on the request, a unique external identifier at ingestion, and a database-level guard on the local mutation. That separation is the seat belt, not decorative stitching.
- Create a persisted control record containing the external event ID, authorization reference, collection reference, processing status, retry key, last error, settlement observation, reconciliation status, entitlement mutation reference, case
- For each failure class, assign a detection signal, affected record, safe retry key, automated response, access or grace policy, reconciliation check, manual-review condition, communication owner, and escalation owner.
- Cover collection rejection, insufficient balance or permission, revoked permission, repeated or out-of-order notification, missing notification, uncertain settlement, failed local mutation, and external-to-local drift.
- Separate payment-request retries from event-processing and entitlement retries so repairing access cannot initiate another collection.
- Add uniqueness constraints or equivalent replay guards at every retryable boundary supported by the selected system.
- Define when automation stops, when access changes, when a case enters manual review, and which evidence allows an operator to resolve it.
- Require the completed runbook, unresolved-risk log, ownership assignments, and recovery demonstration before production approval.

Treat timing, message delivery and ordering, access-grace rules, chain error meanings, settlement thresholds, recovery targets, payload structure, injected-failure outcomes, and security assurance as unresolved until verified for the chosen system. The runbook should therefore record each unknown beside the decision it blocks, the test that could close it, and the person who must accept any residual exposure. Require a recovery demonstration that exercises replay, omission, revocation, ambiguous settlement, and an interrupted local update; acceptance should depend on the resulting records showing that no collection action was triggered by an access repair. Assign accountable owners, build the control record and replay guards, and withhold production approval until the runbook and unresolved-risk log are complete.
Frequently asked questions
How should a price change affect an existing recurring authorization?
Do not assume the original permission covers the new amount. Compare the proposed renewal against the recorded authorization terms; if coverage is unclear or insufficient, pause collection and obtain a new authorization before billing.
What should happen when cancellation and renewal processing overlap?
Define a single cutoff rule and apply it from durable timestamps and states. If cancellation became effective before the cutoff, suppress the collection; if it became effective afterward, complete the current decision consistently and record when access ends.
How should refunds or reversed settlements affect access?
Represent the refund or reversal as a new billing-state transition rather than rewriting the original collection. Recalculate entitlement from the resulting normalized state, and route ambiguous or partial adjustments to review under an explicit access policy.